Repository: TheJacksonLaboratory/pyBedGraph (language: python)

Issue:
Failed installation: ignore_missing_bp.o: file not recognized
Hi,
I would be interested to use your package, unfortunately, I did not managed to install it.
I tried to create a conda environment with it:
```
conda create -n pybedgraph cython pybigwig pip
conda activate pybedgraph
pip install pyBedGraph
Collecting pyBedGraph
  Using cached https://files.pythonhosted.org/packages/00/ef/9005f4916c3ffeb21be99d4e173c1e84aa1aaaa9248f2ed6552057848e2c/pyBedGraph-0.5.32.tar.gz
Requirement already satisfied: numpy>=1.16.4 in ./.conda/envs/pybedgraph/lib/python3.7/site-packages (from pyBedGraph) (1.17.2)
Requirement already satisfied: pyBigWig>=0.3.16 in ./.conda/envs/pybedgraph/lib/python3.7/site-packages (from pyBedGraph) (0.3.17)
Requirement already satisfied: cython>=0.29.12 in ./.conda/envs/pybedgraph/lib/python3.7/site-packages (from pyBedGraph) (0.29.13)
Building wheels for collected packages: pyBedGraph
  Building wheel for pyBedGraph (setup.py) ... error
  ERROR: Command errored out with exit status 1:
   command: /home/ldelisle/.conda/envs/pybedgraph/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-p109m_zy/pyBedGraph/setup.py'"'"'; __file__='"'"'/tmp/pip-install-p109m_zy/pyBedGraph/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-ynxa743a --python-tag cp37                                                                             
       cwd: /tmp/pip-install-p109m_zy/pyBedGraph/                                                                                    
  Complete output (24 lines):                                                                                                        
  running bdist_wheel                                                                                                                
  running build                                                                                                                      
  running build_py                                                                                                                   
  creating build                                                                                                                     
  creating build/lib.linux-x86_64-3.7                                                                                                
  creating build/lib.linux-x86_64-3.7/pyBedGraph                                                                                     
  copying pyBedGraph/__init__.py -> build/lib.linux-x86_64-3.7/pyBedGraph                                                            
  copying pyBedGraph/Chrom_Data_Complete.py -> build/lib.linux-x86_64-3.7/pyBedGraph                                                 
  copying pyBedGraph/Chrom_Data.py -> build/lib.linux-x86_64-3.7/pyBedGraph                                                          
  copying pyBedGraph/Benchmark.py -> build/lib.linux-x86_64-3.7/pyBedGraph                                                           
  copying pyBedGraph/BedGraph.py -> build/lib.linux-x86_64-3.7/pyBedGraph                                                            
  running build_ext                                                                                                                  
  building 'pyBedGraph.ignore_missing_bp' extension                                                                                  
  creating build/temp.linux-x86_64-3.7                                                                                               
  creating build/temp.linux-x86_64-3.7/pyBedGraph                                                                                    
  gcc -pthread -B /home/ldelisle/.conda/envs/pybedgraph/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/ldelisle/.conda/envs/pybedgraph/include/python3.7m -c pyBedGraph/ignore_missing_bp.c -o build/temp.linux-x86_64-3.7/pyBedGraph/ignore_missing_bp.o
  gcc -pthread -shared -B /home/ldelisle/.conda/envs/pybedgraph/compiler_compat -L/home/ldelisle/.conda/envs/pybedgraph/lib -Wl,-rpath=/home/ldelisle/.conda/envs/pybedgraph/lib -Wl,--no-as-needed -Wl,--sysroot=/ build/temp.linux-x86_64-3.7/pyBedGraph/ignore_missing_bp.o -o build/lib.linux-x86_64-3.7/pyBedGraph/ignore_missing_bp.cpython-37m-x86_64-linux-gnu.so
  /home/ldelisle/.conda/envs/pybedgraph/compiler_compat/ld: build/temp.linux-x86_64-3.7/pyBedGraph/ignore_missing_bp.o: unable to initialize decompress status for section .debug_info
  /home/ldelisle/.conda/envs/pybedgraph/compiler_compat/ld: build/temp.linux-x86_64-3.7/pyBedGraph/ignore_missing_bp.o: unable to initialize decompress status for section .debug_info
  /home/ldelisle/.conda/envs/pybedgraph/compiler_compat/ld: build/temp.linux-x86_64-3.7/pyBedGraph/ignore_missing_bp.o: unable to initialize decompress status for section .debug_info
  /home/ldelisle/.conda/envs/pybedgraph/compiler_compat/ld: build/temp.linux-x86_64-3.7/pyBedGraph/ignore_missing_bp.o: unable to initialize decompress status for section .debug_info
  build/temp.linux-x86_64-3.7/pyBedGraph/ignore_missing_bp.o: file not recognized: file format not recognized
  collect2: error: ld returned 1 exit status
  error: command 'gcc' failed with exit status 1
  ----------------------------------------
  ERROR: Failed building wheel for pyBedGraph
  Running setup.py clean for pyBedGraph
Failed to build pyBedGraph
Installing collected packages: pyBedGraph
  Running setup.py install for pyBedGraph ... error
    ERROR: Command errored out with exit status 1:
     command: /home/ldelisle/.conda/envs/pybedgraph/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-p109m_zy/pyBedGraph/setup.py'"'"'; __file__='"'"'/tmp/pip-install-p109m_zy/pyBedGraph/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-rf0hjb_5/install-record.txt --single-version-externally-managed --compile
         cwd: /tmp/pip-install-p109m_zy/pyBedGraph/
    Complete output (24 lines):
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-x86_64-3.7
    creating build/lib.linux-x86_64-3.7/pyBedGraph
    copying pyBedGraph/__init__.py -> build/lib.linux-x86_64-3.7/pyBedGraph
    copying pyBedGraph/Chrom_Data_Complete.py -> build/lib.linux-x86_64-3.7/pyBedGraph
    copying pyBedGraph/Chrom_Data.py -> build/lib.linux-x86_64-3.7/pyBedGraph
    copying pyBedGraph/Benchmark.py -> build/lib.linux-x86_64-3.7/pyBedGraph
    copying pyBedGraph/BedGraph.py -> build/lib.linux-x86_64-3.7/pyBedGraph
    running build_ext
    building 'pyBedGraph.ignore_missing_bp' extension
    creating build/temp.linux-x86_64-3.7
    creating build/temp.linux-x86_64-3.7/pyBedGraph
    gcc -pthread -B /home/ldelisle/.conda/envs/pybedgraph/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/ldelisle/.conda/envs/pybedgraph/include/python3.7m -c pyBedGraph/ignore_missing_bp.c -o build/temp.linux-x86_64-3.7/pyBedGraph/ignore_missing_bp.o
    gcc -pthread -shared -B /home/ldelisle/.conda/envs/pybedgraph/compiler_compat -L/home/ldelisle/.conda/envs/pybedgraph/lib -Wl,-rpath=/home/ldelisle/.conda/envs/pybedgraph/lib -Wl,--no-as-needed -Wl,--sysroot=/ build/temp.linux-x86_64-3.7/pyBedGraph/ignore_missing_bp.o -o build/lib.linux-x86_64-3.7/pyBedGraph/ignore_missing_bp.cpython-37m-x86_64-linux-gnu.so
    /home/ldelisle/.conda/envs/pybedgraph/compiler_compat/ld: build/temp.linux-x86_64-3.7/pyBedGraph/ignore_missing_bp.o: unable to initialize decompress status for section .debug_info
    /home/ldelisle/.conda/envs/pybedgraph/compiler_compat/ld: build/temp.linux-x86_64-3.7/pyBedGraph/ignore_missing_bp.o: unable to initialize decompress status for section .debug_info
    /home/ldelisle/.conda/envs/pybedgraph/compiler_compat/ld: build/temp.linux-x86_64-3.7/pyBedGraph/ignore_missing_bp.o: unable to initialize decompress status for section .debug_info
    /home/ldelisle/.conda/envs/pybedgraph/compiler_compat/ld: build/temp.linux-x86_64-3.7/pyBedGraph/ignore_missing_bp.o: unable to initialize decompress status for section .debug_info
    build/temp.linux-x86_64-3.7/pyBedGraph/ignore_missing_bp.o: file not recognized: file format not recognized
    collect2: error: ld returned 1 exit status
    error: command 'gcc' failed with exit status 1
    ----------------------------------------
ERROR: Command errored out with exit status 1: /home/ldelisle/.conda/envs/pybedgraph/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-p109m_zy/pyBedGraph/setup.py'"'"'; __file__='"'"'/tmp/pip-install-p109m_zy/pyBedGraph/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-rf0hjb_5/install-record.txt --single-version-externally-managed --compile Check the logs for full command output.

python
Python 3.7.3 | packaged by conda-forge | (default, Jul  1 2019, 21:52:21) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyBigWig
>>> pyBigWig.__version__
'0.3.17'
>>> import Cython
>>> Cython.__version__
'0.29.13'
>>> import numpy
>>> numpy.__version__
'1.17.2'
```
Many thanks,


Discussion / hints:
Could you also give run `conda -V`? I am able to run your commands successfully.
```
hirow@hirow-Aspire-VX5-591G:~$ conda create -n pybedgraph cython pybigwig pip
Collecting package metadata (current_repodata.json): done
Solving environment: failed with current_repodata.json, will retry with next repodata source.
Collecting package metadata (repodata.json): done
Solving environment: failed

PackagesNotFoundError: The following packages are not available from current channels:

  - pybigwig

Current channels:

  - https://repo.anaconda.com/pkgs/main/linux-64
  - https://repo.anaconda.com/pkgs/main/noarch
  - https://repo.anaconda.com/pkgs/r/linux-64
  - https://repo.anaconda.com/pkgs/r/noarch

To search for alternate channels that may provide the conda package you're
looking for, navigate to

    https://anaconda.org

and use the search bar at the top of the page.

hirow@hirow-Aspire-VX5-591G:~$ conda create -n pybedgraph cython pip
Collecting package metadata (current_repodata.json): done
Solving environment: done


==> WARNING: A newer version of conda exists. <==
  current version: 4.7.10
  latest version: 4.7.12

Please update conda by running

    $ conda update -n base -c defaults conda



## Package Plan ##

  environment location: /home/hirow/anaconda3/envs/pybedgraph

  added / updated specs:
    - cython
    - pip


The following NEW packages will be INSTALLED:

  _libgcc_mutex      pkgs/main/linux-64::_libgcc_mutex-0.1-main
  ca-certificates    pkgs/main/linux-64::ca-certificates-2019.8.28-0
  certifi            pkgs/main/linux-64::certifi-2019.9.11-py37_0
  cython             pkgs/main/linux-64::cython-0.29.13-py37he6710b0_0
  libedit            pkgs/main/linux-64::libedit-3.1.20181209-hc058e9b_0
  libffi             pkgs/main/linux-64::libffi-3.2.1-hd88cf55_4
  libgcc-ng          pkgs/main/linux-64::libgcc-ng-9.1.0-hdf63c60_0
  libstdcxx-ng       pkgs/main/linux-64::libstdcxx-ng-9.1.0-hdf63c60_0
  ncurses            pkgs/main/linux-64::ncurses-6.1-he6710b0_1
  openssl            pkgs/main/linux-64::openssl-1.1.1d-h7b6447c_2
  pip                pkgs/main/linux-64::pip-19.2.3-py37_0
  python             pkgs/main/linux-64::python-3.7.4-h265db76_1
  readline           pkgs/main/linux-64::readline-7.0-h7b6447c_5
  setuptools         pkgs/main/linux-64::setuptools-41.4.0-py37_0
  sqlite             pkgs/main/linux-64::sqlite-3.30.0-h7b6447c_0
  tk                 pkgs/main/linux-64::tk-8.6.8-hbc83047_0
  wheel              pkgs/main/linux-64::wheel-0.33.6-py37_0
  xz                 pkgs/main/linux-64::xz-5.2.4-h14c3975_4
  zlib               pkgs/main/linux-64::zlib-1.2.11-h7b6447c_3


Proceed ([y]/n)? y

Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate pybedgraph
#
# To deactivate an active environment, use
#
#     $ conda deactivate

hirow@hirow-Aspire-VX5-591G:~$ conda activate pybedgraph
(pybedgraph) hirow@hirow-Aspire-VX5-591G:~$ pip -V
pip 19.2.3 from /home/hirow/anaconda3/envs/pybedgraph/lib/python3.7/site-packages/pip (python 3.7)
(pybedgraph) hirow@hirow-Aspire-VX5-591G:~$ which pip
/home/hirow/anaconda3/envs/pybedgraph/bin/pip
(pybedgraph) hirow@hirow-Aspire-VX5-591G:~$ pip install pybedgraph
Collecting pybedgraph
  Downloading https://files.pythonhosted.org/packages/00/ef/9005f4916c3ffeb21be99d4e173c1e84aa1aaaa9248f2ed6552057848e2c/pyBedGraph-0.5.32.tar.gz (358kB)
     |████████████████████████████████| 368kB 5.5MB/s 
Collecting numpy>=1.16.4 (from pybedgraph)
  Downloading https://files.pythonhosted.org/packages/ba/e0/46e2f0540370f2661b044647fa447fef2ecbcc8f7cdb4329ca2feb03fb23/numpy-1.17.2-cp37-cp37m-manylinux1_x86_64.whl (20.3MB)
     |████████████████████████████████| 20.3MB 24.9MB/s 
Collecting pyBigWig>=0.3.16 (from pybedgraph)
  Downloading https://files.pythonhosted.org/packages/b0/e2/cf945d541a10bb9c675f986d5bf0b0268544721054d17cc6260cfcfb3685/pyBigWig-0.3.17.tar.gz (64kB)
     |████████████████████████████████| 71kB 6.0MB/s 
Requirement already satisfied: cython>=0.29.12 in ./anaconda3/envs/pybedgraph/lib/python3.7/site-packages (from pybedgraph) (0.29.13)
Building wheels for collected packages: pybedgraph, pyBigWig
  Building wheel for pybedgraph (setup.py) ... done
  Created wheel for pybedgraph: filename=pyBedGraph-0.5.32-cp37-cp37m-linux_x86_64.whl size=1239217 sha256=16791111c8bd18cf6a09cbcd17572dbc41f9884c109a239f7f674ad3a05fde99
  Stored in directory: /home/hirow/.cache/pip/wheels/ee/ea/23/7fce95bd55bef6fa44d3412e36645c447b2508d2de7973c779
  Building wheel for pyBigWig (setup.py) ... done
  Created wheel for pyBigWig: filename=pyBigWig-0.3.17-cp37-cp37m-linux_x86_64.whl size=162339 sha256=6282353e6e6bf60add1502abfd65faa10d85cc0b77769e39503f53dad740b40c
  Stored in directory: /home/hirow/.cache/pip/wheels/fb/27/2d/ac3e2e2d17894877fd3c4595ebd6fbd25ad805bfeab333f19b
Successfully built pybedgraph pyBigWig
Installing collected packages: numpy, pyBigWig, pybedgraph
Successfully installed numpy-1.17.2 pyBigWig-0.3.17 pybedgraph-0.5.32
(pybedgraph) hirow@hirow-Aspire-VX5-591G:~$ conda -V
conda 4.7.10
(pybedgraph) hirow@hirow-Aspire-VX5-591G:~$ python
Python 3.7.4 (default, Aug 13 2019, 20:35:49) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyBigWig
>>> pyBigWig.__version__
'0.3.17'
>>> import cython
>>> cython.__version__
'0.29.13'
>>> import numpy
>>> numpy.__version__
'1.17.2'
```

Another user also had a similar error, so I would greatly appreciate any extra information you can provide.
Hi,
pybigwig is part of bioconda channel that's why you could not load it.
I did as you did:
```
conda create -n pybedgraph cython pip
```
I got exactly the same packages:
```
  _libgcc_mutex      pkgs/main/linux-64::_libgcc_mutex-0.1-main
  bzip2              conda-forge/linux-64::bzip2-1.0.8-h516909a_1
  ca-certificates    conda-forge/linux-64::ca-certificates-2019.9.11-hecc5488_0
  certifi            conda-forge/linux-64::certifi-2019.9.11-py37_0
  cython             conda-forge/linux-64::cython-0.29.13-py37he1b5a44_0
  libffi             conda-forge/linux-64::libffi-3.2.1-he1b5a44_1006
  libgcc-ng          pkgs/main/linux-64::libgcc-ng-9.1.0-hdf63c60_0
  libstdcxx-ng       pkgs/main/linux-64::libstdcxx-ng-9.1.0-hdf63c60_0
  ncurses            conda-forge/linux-64::ncurses-6.1-hf484d3e_1002
  openssl            conda-forge/linux-64::openssl-1.1.1c-h516909a_0
  pip                conda-forge/linux-64::pip-19.2.3-py37_0
  python             conda-forge/linux-64::python-3.7.3-h33d41f4_1
  readline           conda-forge/linux-64::readline-8.0-hf8c457e_0
  setuptools         conda-forge/linux-64::setuptools-41.4.0-py37_0
  sqlite             conda-forge/linux-64::sqlite-3.30.0-hcee41ef_0
  tk                 conda-forge/linux-64::tk-8.6.9-hed695b0_1003
  wheel              conda-forge/linux-64::wheel-0.33.6-py37_0
  xz                 conda-forge/linux-64::xz-5.2.4-h14c3975_1001
  zlib               conda-forge/linux-64::zlib-1.2.11-h516909a_1006
```
I also have the same conda version:
```
==> WARNING: A newer version of conda exists. <==
  current version: 4.7.10
  latest version: 4.7.12
```
But still the same error when building pybedgraph.
I am on linux and I guess you are on mac...
I use miniconda and you use anaconda but this should not change anything as it is just the number of packages which are included by default...

I am also using Linux, specifically Ubuntu 19.04. 

I looked around and saw https://github.com/Anaconda-Platform/anaconda-project/issues/183#issuecomment-462796564.
A potential workaround from that is `conda install gxx_linux-64`. Could you try that and see if it helps?

I have a new error and I cannot compile pybigwig... I hope it helps:
```
pip install pybedgraph
Collecting pybedgraph
Requirement already satisfied: numpy>=1.16.4 in ./.conda/envs/pybedgraph/lib/python3.7/site-packages (from pybedgraph) (1.17.2)
Requirement already satisfied: cython>=0.29.12 in ./.conda/envs/pybedgraph/lib/python3.7/site-packages (from pybedgraph) (0.29.13)
Collecting pyBigWig>=0.3.16 (from pybedgraph)
  Using cached https://files.pythonhosted.org/packages/b0/e2/cf945d541a10bb9c675f986d5bf0b0268544721054d17cc6260cfcfb3685/pyBigWig-0.3.17.tar.gz
Building wheels for collected packages: pyBigWig
  Building wheel for pyBigWig (setup.py) ... error
  ERROR: Command errored out with exit status 1:
   command: /home/ldelisle/.conda/envs/pybedgraph/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-cj_ulcb1/pyBigWig/setup.py'"'"'; __file__='"'"'/tmp/pip-install-cj_ulcb1/pyBigWig/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-ib20jim3 --python-tag cp37
       cwd: /tmp/pip-install-cj_ulcb1/pyBigWig/
  Complete output (71 lines):
  /home/ldelisle/.conda/envs/pybedgraph/lib/python3.7/distutils/dist.py:274: UserWarning: Unknown distribution option: 'classifier'
    warnings.warn(msg)
  running bdist_wheel
  running build
  running build_py
  creating build
  creating build/lib.linux-x86_64-3.7
  creating build/lib.linux-x86_64-3.7/pyBigWigTest
  copying pyBigWigTest/test.py -> build/lib.linux-x86_64-3.7/pyBigWigTest
  copying pyBigWigTest/__init__.py -> build/lib.linux-x86_64-3.7/pyBigWigTest
  running egg_info
  writing pyBigWig.egg-info/PKG-INFO
  writing dependency_links to pyBigWig.egg-info/dependency_links.txt
  writing requirements to pyBigWig.egg-info/requires.txt
  writing top-level names to pyBigWig.egg-info/top_level.txt
  reading manifest file 'pyBigWig.egg-info/SOURCES.txt'
  reading manifest template 'MANIFEST.in'
  writing manifest file 'pyBigWig.egg-info/SOURCES.txt'
  copying pyBigWigTest/test.bigBed -> build/lib.linux-x86_64-3.7/pyBigWigTest
  copying pyBigWigTest/test.bw -> build/lib.linux-x86_64-3.7/pyBigWigTest
  running build_ext
  building 'pyBigWig' extension
  Warning: Can't read registry to find the necessary compiler setting
  Make sure that Python modules winreg, win32api or win32con are installed.
  C compiler: /home/ldelisle/.conda/envs/pybedgraph/bin/x86_64-conda_cos6-linux-gnu-cc -DNDEBUG -fwrapv -O2 -Wall -Wstrict-prototypes -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -fPIC
  
  creating build/temp.linux-x86_64-3.7
  creating build/temp.linux-x86_64-3.7/libBigWig
  compile options: '-DWITHNUMPY -DNPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION -IlibBigWig -I/home/ldelisle/.conda/envs/pybedgraph/include/python3.7m -I/home/ldelisle/.conda/envs/pybedgraph/lib/python3.7/site-packages/numpy/core/include -I/home/ldelisle/.conda/envs/pybedgraph/include/python3.7m -c'
  x86_64-conda_cos6-linux-gnu-cc: libBigWig/io.c
  x86_64-conda_cos6-linux-gnu-cc: libBigWig/bwWrite.c
  x86_64-conda_cos6-linux-gnu-cc: libBigWig/bwValues.cx86_64-conda_cos6-linux-gnu-cc: libBigWig/bwStats.c
  
  libBigWig/io.c:2:10: fatal error: curl/curl.h: No such file or directory
   #include <curl/curl.h>
            ^~~~~~~~~~~~~
  compilation terminated.
  x86_64-conda_cos6-linux-gnu-cc: libBigWig/bwRead.c
  In file included from libBigWig/bigWig.h:1:0,
                   from libBigWig/bwValues.c:1:
  libBigWig/bigWigIO.h:2:10: fatal error: curl/curl.h: No such file or directory
   #include <curl/curl.h>
            ^~~~~~~~~~~~~
  compilation terminated.
  In file included from libBigWig/bigWig.h:1:0,
                   from libBigWig/bwStats.c:1:
  libBigWig/bigWigIO.h:2:10: fatal error: curl/curl.h: No such file or directory
   #include <curl/curl.h>
            ^~~~~~~~~~~~~
  compilation terminated.
  x86_64-conda_cos6-linux-gnu-cc: pyBigWig.c
  In file included from libBigWig/bigWig.h:1:0,
                   from libBigWig/bwRead.c:1:
  libBigWig/bigWigIO.h:2:10: fatal error: curl/curl.h: No such file or directory
   #include <curl/curl.h>
            ^~~~~~~~~~~~~
  compilation terminated.
  In file included from libBigWig/bigWig.h:1:0,
                   from libBigWig/bwWrite.c:6:
  libBigWig/bigWigIO.h:2:10: fatal error: curl/curl.h: No such file or directory
   #include <curl/curl.h>
            ^~~~~~~~~~~~~
  compilation terminated.
  In file included from libBigWig/bigWig.h:1:0,
                   from pyBigWig.h:3,
                   from pyBigWig.c:3:
  libBigWig/bigWigIO.h:2:10: fatal error: curl/curl.h: No such file or directory                                                                                                   
   #include <curl/curl.h>                                                                                                                                                          
            ^~~~~~~~~~~~~
  compilation terminated.
  error: Command "/home/ldelisle/.conda/envs/pybedgraph/bin/x86_64-conda_cos6-linux-gnu-cc -DNDEBUG -fwrapv -O2 -Wall -Wstrict-prototypes -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -fPIC -DWITHNUMPY -DNPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION -IlibBigWig -I/home/ldelisle/.conda/envs/pybedgraph/include/python3.7m -I/home/ldelisle/.conda/envs/pybedgraph/lib/python3.7/site-packages/numpy/core/include -I/home/ldelisle/.conda/envs/pybedgraph/include/python3.7m -c libBigWig/io.c -o build/temp.linux-x86_64-3.7/libBigWig/io.o" failed with exit status 1
  ----------------------------------------
  ERROR: Failed building wheel for pyBigWig
  Running setup.py clean for pyBigWig
Failed to build pyBigWig
Installing collected packages: pyBigWig, pybedgraph
  Running setup.py install for pyBigWig ... error
    ERROR: Command errored out with exit status 1:
     command: /home/ldelisle/.conda/envs/pybedgraph/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-cj_ulcb1/pyBigWig/setup.py'"'"'; __file__='"'"'/tmp/pip-install-cj_ulcb1/pyBigWig/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-8nvptvam/install-record.txt --single-version-externally-managed --compile
         cwd: /tmp/pip-install-cj_ulcb1/pyBigWig/
    Complete output (71 lines):
    /home/ldelisle/.conda/envs/pybedgraph/lib/python3.7/distutils/dist.py:274: UserWarning: Unknown distribution option: 'classifier'
      warnings.warn(msg)
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-x86_64-3.7
    creating build/lib.linux-x86_64-3.7/pyBigWigTest
    copying pyBigWigTest/test.py -> build/lib.linux-x86_64-3.7/pyBigWigTest
    copying pyBigWigTest/__init__.py -> build/lib.linux-x86_64-3.7/pyBigWigTest
    running egg_info
    writing pyBigWig.egg-info/PKG-INFO
    writing dependency_links to pyBigWig.egg-info/dependency_links.txt
    writing requirements to pyBigWig.egg-info/requires.txt
    writing top-level names to pyBigWig.egg-info/top_level.txt
    reading manifest file 'pyBigWig.egg-info/SOURCES.txt'
    reading manifest template 'MANIFEST.in'
    writing manifest file 'pyBigWig.egg-info/SOURCES.txt'
    copying pyBigWigTest/test.bigBed -> build/lib.linux-x86_64-3.7/pyBigWigTest
    copying pyBigWigTest/test.bw -> build/lib.linux-x86_64-3.7/pyBigWigTest
    running build_ext
    building 'pyBigWig' extension
    Warning: Can't read registry to find the necessary compiler setting
    Make sure that Python modules winreg, win32api or win32con are installed.
    C compiler: /home/ldelisle/.conda/envs/pybedgraph/bin/x86_64-conda_cos6-linux-gnu-cc -DNDEBUG -fwrapv -O2 -Wall -Wstrict-prototypes -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -fPIC
    
    creating build/temp.linux-x86_64-3.7
    creating build/temp.linux-x86_64-3.7/libBigWig
    compile options: '-DWITHNUMPY -DNPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION -IlibBigWig -I/home/ldelisle/.conda/envs/pybedgraph/include/python3.7m -I/home/ldelisle/.conda/envs/pybedgraph/lib/python3.7/site-packages/numpy/core/include -I/home/ldelisle/.conda/envs/pybedgraph/include/python3.7m -c'
    x86_64-conda_cos6-linux-gnu-cc: libBigWig/io.cx86_64-conda_cos6-linux-gnu-cc: libBigWig/bwWrite.c
    x86_64-conda_cos6-linux-gnu-cc: libBigWig/bwValues.c
    x86_64-conda_cos6-linux-gnu-cc: libBigWig/bwStats.c
    
    In file included from libBigWig/bigWig.h:1:0,
                     from libBigWig/bwStats.c:1:
    libBigWig/bigWigIO.h:2:10: fatal error: curl/curl.h: No such file or directory
     #include <curl/curl.h>
              ^~~~~~~~~~~~~
    compilation terminated.
    In file included from libBigWig/bigWig.h:1:0,
                     from libBigWig/bwValues.c:1:
    libBigWig/bigWigIO.h:2:10: fatal error: curl/curl.h: No such file or directory
     #include <curl/curl.h>
              ^~~~~~~~~~~~~
    libBigWig/io.c:2:10: fatal error: curl/curl.h: No such file or directory
     #include <curl/curl.h>
              ^~~~~~~~~~~~~
    compilation terminated.
    compilation terminated.
    x86_64-conda_cos6-linux-gnu-cc: libBigWig/bwRead.c
    x86_64-conda_cos6-linux-gnu-cc: pyBigWig.c
    In file included from libBigWig/bigWig.h:1:0,
                     from libBigWig/bwRead.c:1:
    libBigWig/bigWigIO.h:2:10: fatal error: curl/curl.h: No such file or directory
     #include <curl/curl.h>
              ^~~~~~~~~~~~~
    compilation terminated.
    In file included from libBigWig/bigWig.h:1:0,
                     from libBigWig/bwWrite.c:6:
    libBigWig/bigWigIO.h:2:10: fatal error: curl/curl.h: No such file or directory
     #include <curl/curl.h>
              ^~~~~~~~~~~~~
    compilation terminated.
    In file included from libBigWig/bigWig.h:1:0,
                     from pyBigWig.h:3,
                     from pyBigWig.c:3:
    libBigWig/bigWigIO.h:2:10: fatal error: curl/curl.h: No such file or directory
     #include <curl/curl.h>
              ^~~~~~~~~~~~~
    compilation terminated.
    error: Command "/home/ldelisle/.conda/envs/pybedgraph/bin/x86_64-conda_cos6-linux-gnu-cc -DNDEBUG -fwrapv -O2 -Wall -Wstrict-prototypes -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -fPIC -DWITHNUMPY -DNPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION -IlibBigWig -I/home/ldelisle/.conda/envs/pybedgraph/include/python3.7m -I/home/ldelisle/.conda/envs/pybedgraph/lib/python3.7/site-packages/numpy/core/include -I/home/ldelisle/.conda/envs/pybedgraph/include/python3.7m -c libBigWig/bwValues.c -o build/temp.linux-x86_64-3.7/libBigWig/bwValues.o" failed with exit status 1
    ----------------------------------------
ERROR: Command errored out with exit status 1: /home/ldelisle/.conda/envs/pybedgraph/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-cj_ulcb1/pyBigWig/setup.py'"'"'; __file__='"'"'/tmp/pip-install-cj_ulcb1/pyBigWig/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-8nvptvam/install-record.txt --single-version-externally-managed --compile Check the logs for full command output.
```
I am not quite sure how to fix that error. Perhaps `conda install curl`? However, `pyBedGraph` does not need `pyBigWig` to function so I will remove the dependency in `setup.py`.

I also plan on adding `pyBedGraph` to the Bioconda channel so this hopefully won't continue to create new problems.
@lldelisle I added the package on Bioconda. Hopefully it works on your end!

Fix patch:
diff --git a/pyBedGraph/Chrom_Data.py b/pyBedGraph/Chrom_Data.py
index 8391363..987756a 100644
--- a/pyBedGraph/Chrom_Data.py
+++ b/pyBedGraph/Chrom_Data.py
@@ -356,6 +356,8 @@ def get_method(self, stat):
             return self.get_min
         elif stat == "coverage":
             return self.get_coverage
+        elif stat == "sum":
+            return self.get_sum
         elif stat == "std":
             return self.get_std
         else:
@@ -399,6 +401,10 @@ def get_max_indexes(self, start_list, end_list):
                                self.intervals[0], self.intervals[1],
                                start_list, end_list)
 
+    def get_sum(self, start_list, end_list):
+        return get_sum(self.value_map, self.index_list, self.intervals[0],
+                          self.intervals[1], start_list, end_list)
+
     def get_min(self, start_list, end_list):
         return get_minimums(self.value_map, self.index_list, self.intervals[0],
                             self.intervals[1], start_list, end_list)
diff --git a/pyBedGraph/ignore_missing_bp.c b/pyBedGraph/ignore_missing_bp.c
index 5c9551c..7c7f539 100644
--- a/pyBedGraph/ignore_missing_bp.c
+++ b/pyBedGraph/ignore_missing_bp.c
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.29.13 */
+/* Generated by Cython 0.29.16 */
 
 /* BEGIN: Cython Metadata
 {
@@ -20,8 +20,8 @@ END: Cython Metadata */
 #elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)
     #error Cython requires Python 2.6+ or Python 3.3+.
 #else
-#define CYTHON_ABI "0_29_13"
-#define CYTHON_HEX_VERSION 0x001D0DF0
+#define CYTHON_ABI "0_29_16"
+#define CYTHON_HEX_VERSION 0x001D10F0
 #define CYTHON_FUTURE_DIVISION 1
 #include <stddef.h>
 #ifndef offsetof
@@ -497,8 +497,10 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
   #define PyString_Type                PyUnicode_Type
   #define PyString_Check               PyUnicode_Check
   #define PyString_CheckExact          PyUnicode_CheckExact
+#ifndef PyObject_Unicode
   #define PyObject_Unicode             PyObject_Str
 #endif
+#endif
 #if PY_MAJOR_VERSION >= 3
   #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj)
   #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj)
@@ -1204,6 +1206,36 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg
 #define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)
 #endif
 
+/* PyFunctionFastCall.proto */
+#if CYTHON_FAST_PYCALL
+#define __Pyx_PyFunction_FastCall(func, args, nargs)\
+    __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL)
+#if 1 || PY_VERSION_HEX < 0x030600B1
+static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs);
+#else
+#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs)
+#endif
+#define __Pyx_BUILD_ASSERT_EXPR(cond)\
+    (sizeof(char [1 - 2*!(cond)]) - 1)
+#ifndef Py_MEMBER_SIZE
+#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member)
+#endif
+  static size_t __pyx_pyframe_localsplus_offset = 0;
+  #include "frameobject.h"
+  #define __Pxy_PyFrame_Initialize_Offsets()\
+    ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\
+     (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus)))
+  #define __Pyx_PyFrame_GetLocalsplus(frame)\
+    (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset))
+#endif
+
+/* PyCFunctionFastCall.proto */
+#if CYTHON_FAST_PYCCALL
+static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs);
+#else
+#define __Pyx_PyCFunction_FastCall(func, args, nargs)  (assert(0), NULL)
+#endif
+
 /* RaiseTooManyValuesToUnpack.proto */
 static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
 
@@ -1296,36 +1328,6 @@ static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject
 /* RaiseException.proto */
 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause);
 
-/* PyCFunctionFastCall.proto */
-#if CYTHON_FAST_PYCCALL
-static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs);
-#else
-#define __Pyx_PyCFunction_FastCall(func, args, nargs)  (assert(0), NULL)
-#endif
-
-/* PyFunctionFastCall.proto */
-#if CYTHON_FAST_PYCALL
-#define __Pyx_PyFunction_FastCall(func, args, nargs)\
-    __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL)
-#if 1 || PY_VERSION_HEX < 0x030600B1
-static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs);
-#else
-#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs)
-#endif
-#define __Pyx_BUILD_ASSERT_EXPR(cond)\
-    (sizeof(char [1 - 2*!(cond)]) - 1)
-#ifndef Py_MEMBER_SIZE
-#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member)
-#endif
-  static size_t __pyx_pyframe_localsplus_offset = 0;
-  #include "frameobject.h"
-  #define __Pxy_PyFrame_Initialize_Offsets()\
-    ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\
-     (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus)))
-  #define __Pyx_PyFrame_GetLocalsplus(frame)\
-    (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset))
-#endif
-
 /* PyObjectCall2Args.proto */
 static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2);
 
@@ -1538,11 +1540,6 @@ static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
 /* None.proto */
 static CYTHON_INLINE long __Pyx_div_long(long, long);
 
-/* WriteUnraisableException.proto */
-static void __Pyx_WriteUnraisable(const char *name, int clineno,
-                                  int lineno, const char *filename,
-                                  int full_traceback, int nogil);
-
 /* ImportFrom.proto */
 static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
 
@@ -1668,10 +1665,6 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_int(unsigned int value)
 static CYTHON_INLINE PyObject *__pyx_memview_get_double(const char *itemp);
 static CYTHON_INLINE int __pyx_memview_set_double(const char *itemp, PyObject *obj);
 
-/* MemviewDtypeToObject.proto */
-static CYTHON_INLINE PyObject *__pyx_memview_get_unsigned_int(const char *itemp);
-static CYTHON_INLINE int __pyx_memview_set_unsigned_int(const char *itemp, PyObject *obj);
-
 /* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
 
@@ -1679,6 +1672,10 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
 static CYTHON_INLINE PyObject *__pyx_memview_get_int(const char *itemp);
 static CYTHON_INLINE int __pyx_memview_set_int(const char *itemp, PyObject *obj);
 
+/* MemviewDtypeToObject.proto */
+static CYTHON_INLINE PyObject *__pyx_memview_get_unsigned_int(const char *itemp);
+static CYTHON_INLINE int __pyx_memview_set_unsigned_int(const char *itemp, PyObject *obj);
+
 /* MemviewSliceCopyTemplate.proto */
 static __Pyx_memviewslice
 __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs,
@@ -1741,7 +1738,6 @@ static PyObject *contiguous = 0;
 static PyObject *indirect_contiguous = 0;
 static int __pyx_memoryview_thread_locks_used;
 static PyThread_type_lock __pyx_memoryview_thread_locks[8];
-static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_values(__Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, unsigned int, unsigned int); /*proto*/
 static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, int __pyx_skip_dispatch); /*proto*/
 static CYTHON_INLINE PyObject *__Pyx_carray_to_py_Py_ssize_t(Py_ssize_t *, Py_ssize_t); /*proto*/
 static CYTHON_INLINE PyObject *__Pyx_carray_to_tuple_Py_ssize_t(Py_ssize_t *, Py_ssize_t); /*proto*/
@@ -1804,6 +1800,7 @@ static const char __pyx_k_end[] = "end";
 static const char __pyx_k_new[] = "__new__";
 static const char __pyx_k_obj[] = "obj";
 static const char __pyx_k_std[] = "std";
+static const char __pyx_k_sum[] = "sum";
 static const char __pyx_k_base[] = "base";
 static const char __pyx_k_bins[] = "bins";
 static const char __pyx_k_dict[] = "__dict__";
@@ -1846,6 +1843,7 @@ static const char __pyx_k_weight[] = "weight";
 static const char __pyx_k_bin_end[] = "bin_end";
 static const char __pyx_k_float64[] = "float64";
 static const char __pyx_k_fortran[] = "fortran";
+static const char __pyx_k_get_sum[] = "get_sum";
 static const char __pyx_k_maximum[] = "maximum";
 static const char __pyx_k_memview[] = "memview";
 static const char __pyx_k_minimum[] = "minimum";
@@ -1874,6 +1872,7 @@ static const char __pyx_k_value_map[] = "value_map";
 static const char __pyx_k_IndexError[] = "IndexError";
 static const char __pyx_k_ValueError[] = "ValueError";
 static const char __pyx_k_difference[] = "difference";
+static const char __pyx_k_get_values[] = "get_values";
 static const char __pyx_k_index_list[] = "index_list";
 static const char __pyx_k_numb_value[] = "numb_value";
 static const char __pyx_k_pyx_result[] = "__pyx_result";
@@ -2002,6 +2001,8 @@ static PyObject *__pyx_n_s_get_coverages;
 static PyObject *__pyx_n_s_get_maximums;
 static PyObject *__pyx_n_s_get_minimums;
 static PyObject *__pyx_n_s_get_stds;
+static PyObject *__pyx_n_s_get_sum;
+static PyObject *__pyx_n_s_get_values;
 static PyObject *__pyx_n_s_getstate;
 static PyObject *__pyx_kp_s_got_differing_extents_in_dimensi;
 static PyObject *__pyx_n_s_i;
@@ -2073,6 +2074,7 @@ static PyObject *__pyx_kp_s_strided_and_direct_or_indirect;
 static PyObject *__pyx_kp_s_strided_and_indirect;
 static PyObject *__pyx_kp_s_stringsource;
 static PyObject *__pyx_n_s_struct;
+static PyObject *__pyx_n_s_sum;
 static PyObject *__pyx_n_s_temp_end;
 static PyObject *__pyx_n_s_test;
 static PyObject *__pyx_n_s_total;
@@ -2088,12 +2090,14 @@ static PyObject *__pyx_n_s_weight;
 static PyObject *__pyx_n_s_zeros;
 static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_load_smallest_bins(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_value_map, __Pyx_memviewslice __pyx_v_index_list, unsigned int __pyx_v_size, __Pyx_memviewslice __pyx_v_interval_start, __Pyx_memviewslice __pyx_v_interval_end, unsigned int __pyx_v_bin_size); /* proto */
 static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_2load_bins(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_prev_bin_level_mean, __Pyx_memviewslice __pyx_v_prev_bin_level_coverage); /* proto */
-static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_bin_list, __Pyx_memviewslice __pyx_v_bin_coverage_list, int __pyx_v_max_bin_size, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list); /* proto */
-static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_6get_exact_means(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_value_map, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, __Pyx_memviewslice __pyx_v_interval_end, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list); /* proto */
-static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_value_map, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_interval_end, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list); /* proto */
-static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_value_map, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_interval_end, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list); /* proto */
-static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, __Pyx_memviewslice __pyx_v_interval_end, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list); /* proto */
-static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_value_map, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, __Pyx_memviewslice __pyx_v_interval_end, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list); /* proto */
+static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_values(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_value_map, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, __Pyx_memviewslice __pyx_v_interval_end, unsigned int __pyx_v_start, unsigned int __pyx_v_end); /* proto */
+static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_6get_sum(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_value_map, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, __Pyx_memviewslice __pyx_v_interval_end, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list); /* proto */
+static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_approx_means(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_bin_list, __Pyx_memviewslice __pyx_v_bin_coverage_list, int __pyx_v_max_bin_size, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list); /* proto */
+static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_exact_means(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_value_map, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, __Pyx_memviewslice __pyx_v_interval_end, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list); /* proto */
+static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_minimums(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_value_map, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_interval_end, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list); /* proto */
+static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_maximums(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_value_map, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_interval_end, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list); /* proto */
+static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_16get_coverages(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, __Pyx_memviewslice __pyx_v_interval_end, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list); /* proto */
+static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_18get_stds(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_value_map, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, __Pyx_memviewslice __pyx_v_interval_end, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list); /* proto */
 static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, PyObject *__pyx_v_format, PyObject *__pyx_v_mode, int __pyx_v_allocate_buffer); /* proto */
 static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(struct __pyx_array_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
 static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self); /* proto */
@@ -2170,11 +2174,13 @@ static PyObject *__pyx_tuple__27;
 static PyObject *__pyx_tuple__29;
 static PyObject *__pyx_tuple__31;
 static PyObject *__pyx_tuple__33;
-static PyObject *__pyx_tuple__34;
 static PyObject *__pyx_tuple__35;
-static PyObject *__pyx_tuple__36;
 static PyObject *__pyx_tuple__37;
 static PyObject *__pyx_tuple__38;
+static PyObject *__pyx_tuple__39;
+static PyObject *__pyx_tuple__40;
+static PyObject *__pyx_tuple__41;
+static PyObject *__pyx_tuple__42;
 static PyObject *__pyx_codeobj__20;
 static PyObject *__pyx_codeobj__22;
 static PyObject *__pyx_codeobj__24;
@@ -2182,7 +2188,9 @@ static PyObject *__pyx_codeobj__26;
 static PyObject *__pyx_codeobj__28;
 static PyObject *__pyx_codeobj__30;
 static PyObject *__pyx_codeobj__32;
-static PyObject *__pyx_codeobj__39;
+static PyObject *__pyx_codeobj__34;
+static PyObject *__pyx_codeobj__36;
+static PyObject *__pyx_codeobj__43;
 /* Late includes */
 
 /* "pyBedGraph/ignore_missing_bp.pyx":6
@@ -2323,12 +2331,17 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_load_smallest_bins(CY
   unsigned int __pyx_t_9;
   size_t __pyx_t_10;
   int __pyx_t_11;
-  PyObject *(*__pyx_t_12)(PyObject *);
-  double __pyx_t_13;
-  unsigned int __pyx_t_14;
-  size_t __pyx_t_15;
+  PyObject *__pyx_t_12 = NULL;
+  PyObject *__pyx_t_13 = NULL;
+  PyObject *__pyx_t_14 = NULL;
+  PyObject *__pyx_t_15 = NULL;
   int __pyx_t_16;
-  size_t __pyx_t_17;
+  PyObject *__pyx_t_17 = NULL;
+  PyObject *(*__pyx_t_18)(PyObject *);
+  double __pyx_t_19;
+  unsigned int __pyx_t_20;
+  size_t __pyx_t_21;
+  size_t __pyx_t_22;
   __Pyx_RefNannySetupContext("load_smallest_bins", 0);
 
   /* "pyBedGraph/ignore_missing_bp.pyx":11
@@ -2508,8 +2521,97 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_load_smallest_bins(CY
  *                                      interval_end, start, end)
  *         if coverage > 0:
  */
-    __pyx_t_4 = __pyx_f_10pyBedGraph_17ignore_missing_bp_get_values(__pyx_v_value_map, __pyx_v_index_list, __pyx_v_interval_start, __pyx_v_interval_end, __pyx_v_start, __pyx_v_end); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 28, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_get_values); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 28, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_value_map, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 28, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_index_list, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 28, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_interval_start, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_int, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_int, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 28, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+
+    /* "pyBedGraph/ignore_missing_bp.pyx":29
+ * 
+ *         value, coverage = get_values(value_map, index_list, interval_start,
+ *                                      interval_end, start, end)             # <<<<<<<<<<<<<<
+ *         if coverage > 0:
+ *             bins_view[bin_index] = value
+ */
+    __pyx_t_12 = __pyx_memoryview_fromslice(__pyx_v_interval_end, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_int, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_int, 0);; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 29, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_12);
+    __pyx_t_13 = __Pyx_PyInt_From_unsigned_int(__pyx_v_start); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 29, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_13);
+    __pyx_t_14 = __Pyx_PyInt_From_unsigned_int(__pyx_v_end); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 29, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_14);
+    __pyx_t_15 = NULL;
+    __pyx_t_16 = 0;
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
+      __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_5);
+      if (likely(__pyx_t_15)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
+        __Pyx_INCREF(__pyx_t_15);
+        __Pyx_INCREF(function);
+        __Pyx_DECREF_SET(__pyx_t_5, function);
+        __pyx_t_16 = 1;
+      }
+    }
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_5)) {
+      PyObject *__pyx_temp[7] = {__pyx_t_15, __pyx_t_3, __pyx_t_1, __pyx_t_2, __pyx_t_12, __pyx_t_13, __pyx_t_14};
+      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_16, 6+__pyx_t_16); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 28, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+      PyObject *__pyx_temp[7] = {__pyx_t_15, __pyx_t_3, __pyx_t_1, __pyx_t_2, __pyx_t_12, __pyx_t_13, __pyx_t_14};
+      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_16, 6+__pyx_t_16); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 28, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_17 = PyTuple_New(6+__pyx_t_16); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 28, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_17);
+      if (__pyx_t_15) {
+        __Pyx_GIVEREF(__pyx_t_15); PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_15); __pyx_t_15 = NULL;
+      }
+      __Pyx_GIVEREF(__pyx_t_3);
+      PyTuple_SET_ITEM(__pyx_t_17, 0+__pyx_t_16, __pyx_t_3);
+      __Pyx_GIVEREF(__pyx_t_1);
+      PyTuple_SET_ITEM(__pyx_t_17, 1+__pyx_t_16, __pyx_t_1);
+      __Pyx_GIVEREF(__pyx_t_2);
+      PyTuple_SET_ITEM(__pyx_t_17, 2+__pyx_t_16, __pyx_t_2);
+      __Pyx_GIVEREF(__pyx_t_12);
+      PyTuple_SET_ITEM(__pyx_t_17, 3+__pyx_t_16, __pyx_t_12);
+      __Pyx_GIVEREF(__pyx_t_13);
+      PyTuple_SET_ITEM(__pyx_t_17, 4+__pyx_t_16, __pyx_t_13);
+      __Pyx_GIVEREF(__pyx_t_14);
+      PyTuple_SET_ITEM(__pyx_t_17, 5+__pyx_t_16, __pyx_t_14);
+      __pyx_t_3 = 0;
+      __pyx_t_1 = 0;
+      __pyx_t_2 = 0;
+      __pyx_t_12 = 0;
+      __pyx_t_13 = 0;
+      __pyx_t_14 = 0;
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_17, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 28, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+    }
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
       PyObject* sequence = __pyx_t_4;
       Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
@@ -2521,47 +2623,55 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_load_smallest_bins(CY
       #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
-        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+        __pyx_t_17 = PyTuple_GET_ITEM(sequence, 1); 
       } else {
         __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
-        __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+        __pyx_t_17 = PyList_GET_ITEM(sequence, 1); 
       }
       __Pyx_INCREF(__pyx_t_5);
-      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(__pyx_t_17);
       #else
       __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 28, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 28, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_17 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 28, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_17);
       #endif
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_1 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 28, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_1);
+      __pyx_t_14 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 28, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_14);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      __pyx_t_12 = Py_TYPE(__pyx_t_1)->tp_iternext;
-      index = 0; __pyx_t_5 = __pyx_t_12(__pyx_t_1); if (unlikely(!__pyx_t_5)) goto __pyx_L6_unpacking_failed;
+      __pyx_t_18 = Py_TYPE(__pyx_t_14)->tp_iternext;
+      index = 0; __pyx_t_5 = __pyx_t_18(__pyx_t_14); if (unlikely(!__pyx_t_5)) goto __pyx_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_5);
-      index = 1; __pyx_t_3 = __pyx_t_12(__pyx_t_1); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed;
-      __Pyx_GOTREF(__pyx_t_3);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_1), 2) < 0) __PYX_ERR(0, 28, __pyx_L1_error)
-      __pyx_t_12 = NULL;
-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      index = 1; __pyx_t_17 = __pyx_t_18(__pyx_t_14); if (unlikely(!__pyx_t_17)) goto __pyx_L6_unpacking_failed;
+      __Pyx_GOTREF(__pyx_t_17);
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_18(__pyx_t_14), 2) < 0) __PYX_ERR(0, 28, __pyx_L1_error)
+      __pyx_t_18 = NULL;
+      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
       goto __pyx_L7_unpacking_done;
       __pyx_L6_unpacking_failed:;
-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      __pyx_t_12 = NULL;
+      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+      __pyx_t_18 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
       __PYX_ERR(0, 28, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
-    __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_13 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 28, __pyx_L1_error)
+
+    /* "pyBedGraph/ignore_missing_bp.pyx":28
+ *             end = size
+ * 
+ *         value, coverage = get_values(value_map, index_list, interval_start,             # <<<<<<<<<<<<<<
+ *                                      interval_end, start, end)
+ *         if coverage > 0:
+ */
+    __pyx_t_19 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_19 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 28, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_14 = __Pyx_PyInt_As_unsigned_int(__pyx_t_3); if (unlikely((__pyx_t_14 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 28, __pyx_L1_error)
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_v_value = __pyx_t_13;
-    __pyx_v_coverage = __pyx_t_14;
+    __pyx_t_20 = __Pyx_PyInt_As_unsigned_int(__pyx_t_17); if (unlikely((__pyx_t_20 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 28, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+    __pyx_v_value = __pyx_t_19;
+    __pyx_v_coverage = __pyx_t_20;
 
     /* "pyBedGraph/ignore_missing_bp.pyx":30
  *         value, coverage = get_values(value_map, index_list, interval_start,
@@ -2580,14 +2690,14 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_load_smallest_bins(CY
  *             bins_coverage_view[bin_index] = coverage
  * 
  */
-      __pyx_t_15 = __pyx_v_bin_index;
+      __pyx_t_21 = __pyx_v_bin_index;
       __pyx_t_16 = -1;
-      if (unlikely(__pyx_t_15 >= (size_t)__pyx_v_bins_view.shape[0])) __pyx_t_16 = 0;
+      if (unlikely(__pyx_t_21 >= (size_t)__pyx_v_bins_view.shape[0])) __pyx_t_16 = 0;
       if (unlikely(__pyx_t_16 != -1)) {
         __Pyx_RaiseBufferIndexError(__pyx_t_16);
         __PYX_ERR(0, 31, __pyx_L1_error)
       }
-      *((double *) ( /* dim=0 */ (__pyx_v_bins_view.data + __pyx_t_15 * __pyx_v_bins_view.strides[0]) )) = __pyx_v_value;
+      *((double *) ( /* dim=0 */ (__pyx_v_bins_view.data + __pyx_t_21 * __pyx_v_bins_view.strides[0]) )) = __pyx_v_value;
 
       /* "pyBedGraph/ignore_missing_bp.pyx":32
  *         if coverage > 0:
@@ -2596,14 +2706,14 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_load_smallest_bins(CY
  * 
  *     return bins, bins_coverage
  */
-      __pyx_t_17 = __pyx_v_bin_index;
+      __pyx_t_22 = __pyx_v_bin_index;
       __pyx_t_16 = -1;
-      if (unlikely(__pyx_t_17 >= (size_t)__pyx_v_bins_coverage_view.shape[0])) __pyx_t_16 = 0;
+      if (unlikely(__pyx_t_22 >= (size_t)__pyx_v_bins_coverage_view.shape[0])) __pyx_t_16 = 0;
       if (unlikely(__pyx_t_16 != -1)) {
         __Pyx_RaiseBufferIndexError(__pyx_t_16);
         __PYX_ERR(0, 32, __pyx_L1_error)
       }
-      *((unsigned int *) ( /* dim=0 */ (__pyx_v_bins_coverage_view.data + __pyx_t_17 * __pyx_v_bins_coverage_view.strides[0]) )) = __pyx_v_coverage;
+      *((unsigned int *) ( /* dim=0 */ (__pyx_v_bins_coverage_view.data + __pyx_t_22 * __pyx_v_bins_coverage_view.strides[0]) )) = __pyx_v_coverage;
 
       /* "pyBedGraph/ignore_missing_bp.pyx":30
  *         value, coverage = get_values(value_map, index_list, interval_start,
@@ -2652,6 +2762,11 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_load_smallest_bins(CY
   __Pyx_XDECREF(__pyx_t_5);
   __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
   __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1);
+  __Pyx_XDECREF(__pyx_t_12);
+  __Pyx_XDECREF(__pyx_t_13);
+  __Pyx_XDECREF(__pyx_t_14);
+  __Pyx_XDECREF(__pyx_t_15);
+  __Pyx_XDECREF(__pyx_t_17);
   __Pyx_AddTraceback("pyBedGraph.ignore_missing_bp.load_smallest_bins", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -3107,7 +3222,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_2load_bins(CYTHON_UNU
  * 
  *     return bins, bins_coverage             # <<<<<<<<<<<<<<
  * 
- * cdef get_values(double[:] value_map, int[:] index_list,
+ * def get_values(double[:] value_map, int[:] index_list,
  */
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 70, __pyx_L1_error)
@@ -3156,12 +3271,118 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_2load_bins(CYTHON_UNU
 /* "pyBedGraph/ignore_missing_bp.pyx":72
  *     return bins, bins_coverage
  * 
- * cdef get_values(double[:] value_map, int[:] index_list,             # <<<<<<<<<<<<<<
+ * def get_values(double[:] value_map, int[:] index_list,             # <<<<<<<<<<<<<<
  *                 unsigned int[:] interval_start, unsigned int[:] interval_end,
  *                 unsigned int start, unsigned int end):
  */
 
-static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_values(__Pyx_memviewslice __pyx_v_value_map, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, __Pyx_memviewslice __pyx_v_interval_end, unsigned int __pyx_v_start, unsigned int __pyx_v_end) {
+/* Python wrapper */
+static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_5get_values(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_10pyBedGraph_17ignore_missing_bp_5get_values = {"get_values", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10pyBedGraph_17ignore_missing_bp_5get_values, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_5get_values(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  __Pyx_memviewslice __pyx_v_value_map = { 0, 0, { 0 }, { 0 }, { 0 } };
+  __Pyx_memviewslice __pyx_v_index_list = { 0, 0, { 0 }, { 0 }, { 0 } };
+  __Pyx_memviewslice __pyx_v_interval_start = { 0, 0, { 0 }, { 0 }, { 0 } };
+  __Pyx_memviewslice __pyx_v_interval_end = { 0, 0, { 0 }, { 0 }, { 0 } };
+  unsigned int __pyx_v_start;
+  unsigned int __pyx_v_end;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("get_values (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_value_map,&__pyx_n_s_index_list,&__pyx_n_s_interval_start,&__pyx_n_s_interval_end,&__pyx_n_s_start,&__pyx_n_s_end,0};
+    PyObject* values[6] = {0,0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_value_map)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_index_list)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("get_values", 1, 6, 6, 1); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_interval_start)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("get_values", 1, 6, 6, 2); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_interval_end)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("get_values", 1, 6, 6, 3); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("get_values", 1, 6, 6, 4); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  5:
+        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_end)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("get_values", 1, 6, 6, 5); __PYX_ERR(0, 72, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_values") < 0)) __PYX_ERR(0, 72, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+    }
+    __pyx_v_value_map = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_value_map.memview)) __PYX_ERR(0, 72, __pyx_L3_error)
+    __pyx_v_index_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_index_list.memview)) __PYX_ERR(0, 72, __pyx_L3_error)
+    __pyx_v_interval_start = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interval_start.memview)) __PYX_ERR(0, 73, __pyx_L3_error)
+    __pyx_v_interval_end = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interval_end.memview)) __PYX_ERR(0, 73, __pyx_L3_error)
+    __pyx_v_start = __Pyx_PyInt_As_unsigned_int(values[4]); if (unlikely((__pyx_v_start == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 74, __pyx_L3_error)
+    __pyx_v_end = __Pyx_PyInt_As_unsigned_int(values[5]); if (unlikely((__pyx_v_end == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 74, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("get_values", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 72, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pyBedGraph.ignore_missing_bp.get_values", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_values(__pyx_self, __pyx_v_value_map, __pyx_v_index_list, __pyx_v_interval_start, __pyx_v_interval_end, __pyx_v_start, __pyx_v_end);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_values(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_value_map, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, __Pyx_memviewslice __pyx_v_interval_end, unsigned int __pyx_v_start, unsigned int __pyx_v_end) {
   double __pyx_v_total;
   unsigned int __pyx_v_coverage;
   unsigned int __pyx_v_value_index;
@@ -3477,7 +3698,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_values(__Pyx_memvi
  * 
  *     return total, coverage             # <<<<<<<<<<<<<<
  * 
- * @cython.cdivision(True)
+ * 
  */
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_7 = PyFloat_FromDouble(__pyx_v_total); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 102, __pyx_L1_error)
@@ -3499,7 +3720,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_values(__Pyx_memvi
   /* "pyBedGraph/ignore_missing_bp.pyx":72
  *     return bins, bins_coverage
  * 
- * cdef get_values(double[:] value_map, int[:] index_list,             # <<<<<<<<<<<<<<
+ * def get_values(double[:] value_map, int[:] index_list,             # <<<<<<<<<<<<<<
  *                 unsigned int[:] interval_start, unsigned int[:] interval_end,
  *                 unsigned int start, unsigned int end):
  */
@@ -3510,40 +3731,47 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_values(__Pyx_memvi
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_7);
   __Pyx_AddTraceback("pyBedGraph.ignore_missing_bp.get_values", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
+  __pyx_r = NULL;
   __pyx_L0:;
+  __PYX_XDEC_MEMVIEW(&__pyx_v_value_map, 1);
+  __PYX_XDEC_MEMVIEW(&__pyx_v_index_list, 1);
+  __PYX_XDEC_MEMVIEW(&__pyx_v_interval_start, 1);
+  __PYX_XDEC_MEMVIEW(&__pyx_v_interval_end, 1);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "pyBedGraph/ignore_missing_bp.pyx":106
- * @cython.cdivision(True)
- * @cython.boundscheck(False)
- * def get_approx_means(double[:] bin_list, unsigned int[:] bin_coverage_list,             # <<<<<<<<<<<<<<
- *                      int max_bin_size, int[:] start_list, int[:] end_list):
+/* "pyBedGraph/ignore_missing_bp.pyx":105
  * 
+ * 
+ * def get_sum(double[:] value_map, int[:] index_list,             # <<<<<<<<<<<<<<
+ *             unsigned int[:] interval_start, unsigned int[:] interval_end,
+ *             int[:] start_list, int[:] end_list):
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_5get_approx_means(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_10pyBedGraph_17ignore_missing_bp_5get_approx_means = {"get_approx_means", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10pyBedGraph_17ignore_missing_bp_5get_approx_means, METH_VARARGS|METH_KEYWORDS, 0};
-static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_5get_approx_means(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  __Pyx_memviewslice __pyx_v_bin_list = { 0, 0, { 0 }, { 0 }, { 0 } };
-  __Pyx_memviewslice __pyx_v_bin_coverage_list = { 0, 0, { 0 }, { 0 }, { 0 } };
-  int __pyx_v_max_bin_size;
+static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_7get_sum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_10pyBedGraph_17ignore_missing_bp_7get_sum = {"get_sum", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10pyBedGraph_17ignore_missing_bp_7get_sum, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_7get_sum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  __Pyx_memviewslice __pyx_v_value_map = { 0, 0, { 0 }, { 0 }, { 0 } };
+  __Pyx_memviewslice __pyx_v_index_list = { 0, 0, { 0 }, { 0 }, { 0 } };
+  __Pyx_memviewslice __pyx_v_interval_start = { 0, 0, { 0 }, { 0 }, { 0 } };
+  __Pyx_memviewslice __pyx_v_interval_end = { 0, 0, { 0 }, { 0 }, { 0 } };
   __Pyx_memviewslice __pyx_v_start_list = { 0, 0, { 0 }, { 0 }, { 0 } };
   __Pyx_memviewslice __pyx_v_end_list = { 0, 0, { 0 }, { 0 }, { 0 } };
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("get_approx_means (wrapper)", 0);
+  __Pyx_RefNannySetupContext("get_sum (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_bin_list,&__pyx_n_s_bin_coverage_list,&__pyx_n_s_max_bin_size,&__pyx_n_s_start_list,&__pyx_n_s_end_list,0};
-    PyObject* values[5] = {0,0,0,0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_value_map,&__pyx_n_s_index_list,&__pyx_n_s_interval_start,&__pyx_n_s_interval_end,&__pyx_n_s_start_list,&__pyx_n_s_end_list,0};
+    PyObject* values[6] = {0,0,0,0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
         CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
@@ -3560,35 +3788,642 @@ static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_5get_approx_means(PyO
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_bin_list)) != 0)) kw_args--;
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_value_map)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         CYTHON_FALLTHROUGH;
         case  1:
-        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_bin_coverage_list)) != 0)) kw_args--;
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_index_list)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_approx_means", 1, 5, 5, 1); __PYX_ERR(0, 106, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_sum", 1, 6, 6, 1); __PYX_ERR(0, 105, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
-        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_bin_size)) != 0)) kw_args--;
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_interval_start)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_approx_means", 1, 5, 5, 2); __PYX_ERR(0, 106, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_sum", 1, 6, 6, 2); __PYX_ERR(0, 105, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  3:
-        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start_list)) != 0)) kw_args--;
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_interval_end)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_approx_means", 1, 5, 5, 3); __PYX_ERR(0, 106, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_sum", 1, 6, 6, 3); __PYX_ERR(0, 105, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  4:
-        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_end_list)) != 0)) kw_args--;
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start_list)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("get_sum", 1, 6, 6, 4); __PYX_ERR(0, 105, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  5:
+        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_end_list)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_approx_means", 1, 5, 5, 4); __PYX_ERR(0, 106, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_sum", 1, 6, 6, 5); __PYX_ERR(0, 105, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_approx_means") < 0)) __PYX_ERR(0, 106, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_sum") < 0)) __PYX_ERR(0, 105, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+    }
+    __pyx_v_value_map = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_value_map.memview)) __PYX_ERR(0, 105, __pyx_L3_error)
+    __pyx_v_index_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_index_list.memview)) __PYX_ERR(0, 105, __pyx_L3_error)
+    __pyx_v_interval_start = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interval_start.memview)) __PYX_ERR(0, 106, __pyx_L3_error)
+    __pyx_v_interval_end = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interval_end.memview)) __PYX_ERR(0, 106, __pyx_L3_error)
+    __pyx_v_start_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_start_list.memview)) __PYX_ERR(0, 107, __pyx_L3_error)
+    __pyx_v_end_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_end_list.memview)) __PYX_ERR(0, 107, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("get_sum", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 105, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("pyBedGraph.ignore_missing_bp.get_sum", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_10pyBedGraph_17ignore_missing_bp_6get_sum(__pyx_self, __pyx_v_value_map, __pyx_v_index_list, __pyx_v_interval_start, __pyx_v_interval_end, __pyx_v_start_list, __pyx_v_end_list);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_6get_sum(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_value_map, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, __Pyx_memviewslice __pyx_v_interval_end, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list) {
+  size_t __pyx_v_i;
+  size_t __pyx_v_num_tests;
+  size_t __pyx_v_start;
+  size_t __pyx_v_end;
+  size_t __pyx_v_value_index;
+  size_t __pyx_v_numb_intervals;
+  double __pyx_v_sum;
+  unsigned int __pyx_v_temp_end;
+  unsigned int __pyx_v_interval_size;
+  PyObject *__pyx_v_result = NULL;
+  __Pyx_memviewslice __pyx_v_result_view = { 0, 0, { 0 }, { 0 }, { 0 } };
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  size_t __pyx_t_5;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  __Pyx_memviewslice __pyx_t_8 = { 0, 0, { 0 }, { 0 }, { 0 } };
+  size_t __pyx_t_9;
+  size_t __pyx_t_10;
+  size_t __pyx_t_11;
+  int __pyx_t_12;
+  size_t __pyx_t_13;
+  int __pyx_t_14;
+  size_t __pyx_t_15;
+  size_t __pyx_t_16;
+  size_t __pyx_t_17;
+  size_t __pyx_t_18;
+  size_t __pyx_t_19;
+  size_t __pyx_t_20;
+  size_t __pyx_t_21;
+  __Pyx_RefNannySetupContext("get_sum", 0);
+
+  /* "pyBedGraph/ignore_missing_bp.pyx":109
+ *             int[:] start_list, int[:] end_list):
+ * 
+ *     assert tuple(start_list.shape) == tuple(end_list.shape)             # <<<<<<<<<<<<<<
+ * 
+ *     cdef size_t i, num_tests = start_list.size, start, end, value_index
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!Py_OptimizeFlag)) {
+    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_start_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 109, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_2 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 109, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_end_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 109, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 109, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 109, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 109, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    if (unlikely(!__pyx_t_4)) {
+      PyErr_SetNone(PyExc_AssertionError);
+      __PYX_ERR(0, 109, __pyx_L1_error)
+    }
+  }
+  #endif
+
+  /* "pyBedGraph/ignore_missing_bp.pyx":111
+ *     assert tuple(start_list.shape) == tuple(end_list.shape)
+ * 
+ *     cdef size_t i, num_tests = start_list.size, start, end, value_index             # <<<<<<<<<<<<<<
+ *     cdef size_t numb_intervals = interval_start.size
+ *     cdef double sum
+ */
+  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_start_list, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 111, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 111, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 111, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_num_tests = __pyx_t_5;
+
+  /* "pyBedGraph/ignore_missing_bp.pyx":112
+ * 
+ *     cdef size_t i, num_tests = start_list.size, start, end, value_index
+ *     cdef size_t numb_intervals = interval_start.size             # <<<<<<<<<<<<<<
+ *     cdef double sum
+ *     cdef unsigned int temp_end, interval_size
+ */
+  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_interval_start, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_int, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_int, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 112, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 112, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 112, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_numb_intervals = __pyx_t_5;
+
+  /* "pyBedGraph/ignore_missing_bp.pyx":116
+ *     cdef unsigned int temp_end, interval_size
+ * 
+ *     result = np.full(num_tests, 0, dtype=np.float64)             # <<<<<<<<<<<<<<
+ *     cdef double[:] result_view = result
+ * 
+ */
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 116, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_full); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 116, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_v_num_tests); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 116, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 116, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_1);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
+  __Pyx_INCREF(__pyx_int_0);
+  __Pyx_GIVEREF(__pyx_int_0);
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_0);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 116, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 116, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_float64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 116, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 116, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 116, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_result = __pyx_t_7;
+  __pyx_t_7 = 0;
+
+  /* "pyBedGraph/ignore_missing_bp.pyx":117
+ * 
+ *     result = np.full(num_tests, 0, dtype=np.float64)
+ *     cdef double[:] result_view = result             # <<<<<<<<<<<<<<
+ * 
+ *     for i in range(num_tests):
+ */
+  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_result, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 117, __pyx_L1_error)
+  __pyx_v_result_view = __pyx_t_8;
+  __pyx_t_8.memview = NULL;
+  __pyx_t_8.data = NULL;
+
+  /* "pyBedGraph/ignore_missing_bp.pyx":119
+ *     cdef double[:] result_view = result
+ * 
+ *     for i in range(num_tests):             # <<<<<<<<<<<<<<
+ *         sum = 0
+ *         start = start_list[i]
+ */
+  __pyx_t_5 = __pyx_v_num_tests;
+  __pyx_t_9 = __pyx_t_5;
+  for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
+    __pyx_v_i = __pyx_t_10;
+
+    /* "pyBedGraph/ignore_missing_bp.pyx":120
+ * 
+ *     for i in range(num_tests):
+ *         sum = 0             # <<<<<<<<<<<<<<
+ *         start = start_list[i]
+ *         end = end_list[i]
+ */
+    __pyx_v_sum = 0.0;
+
+    /* "pyBedGraph/ignore_missing_bp.pyx":121
+ *     for i in range(num_tests):
+ *         sum = 0
+ *         start = start_list[i]             # <<<<<<<<<<<<<<
+ *         end = end_list[i]
+ * 
+ */
+    __pyx_t_11 = __pyx_v_i;
+    __pyx_t_12 = -1;
+    if (unlikely(__pyx_t_11 >= (size_t)__pyx_v_start_list.shape[0])) __pyx_t_12 = 0;
+    if (unlikely(__pyx_t_12 != -1)) {
+      __Pyx_RaiseBufferIndexError(__pyx_t_12);
+      __PYX_ERR(0, 121, __pyx_L1_error)
+    }
+    __pyx_v_start = (*((int *) ( /* dim=0 */ (__pyx_v_start_list.data + __pyx_t_11 * __pyx_v_start_list.strides[0]) )));
+
+    /* "pyBedGraph/ignore_missing_bp.pyx":122
+ *         sum = 0
+ *         start = start_list[i]
+ *         end = end_list[i]             # <<<<<<<<<<<<<<
+ * 
+ *         # get to an interval
+ */
+    __pyx_t_13 = __pyx_v_i;
+    __pyx_t_12 = -1;
+    if (unlikely(__pyx_t_13 >= (size_t)__pyx_v_end_list.shape[0])) __pyx_t_12 = 0;
+    if (unlikely(__pyx_t_12 != -1)) {
+      __Pyx_RaiseBufferIndexError(__pyx_t_12);
+      __PYX_ERR(0, 122, __pyx_L1_error)
+    }
+    __pyx_v_end = (*((int *) ( /* dim=0 */ (__pyx_v_end_list.data + __pyx_t_13 * __pyx_v_end_list.strides[0]) )));
+
+    /* "pyBedGraph/ignore_missing_bp.pyx":125
+ * 
+ *         # get to an interval
+ *         while start < end and index_list[start] == -1:             # <<<<<<<<<<<<<<
+ *             start += 1
+ * 
+ */
+    while (1) {
+      __pyx_t_14 = ((__pyx_v_start < __pyx_v_end) != 0);
+      if (__pyx_t_14) {
+      } else {
+        __pyx_t_4 = __pyx_t_14;
+        goto __pyx_L7_bool_binop_done;
+      }
+      __pyx_t_15 = __pyx_v_start;
+      __pyx_t_12 = -1;
+      if (unlikely(__pyx_t_15 >= (size_t)__pyx_v_index_list.shape[0])) __pyx_t_12 = 0;
+      if (unlikely(__pyx_t_12 != -1)) {
+        __Pyx_RaiseBufferIndexError(__pyx_t_12);
+        __PYX_ERR(0, 125, __pyx_L1_error)
+      }
+      __pyx_t_14 = (((*((int *) ( /* dim=0 */ (__pyx_v_index_list.data + __pyx_t_15 * __pyx_v_index_list.strides[0]) ))) == -1L) != 0);
+      __pyx_t_4 = __pyx_t_14;
+      __pyx_L7_bool_binop_done:;
+      if (!__pyx_t_4) break;
+
+      /* "pyBedGraph/ignore_missing_bp.pyx":126
+ *         # get to an interval
+ *         while start < end and index_list[start] == -1:
+ *             start += 1             # <<<<<<<<<<<<<<
+ * 
+ *         if start == end:
+ */
+      __pyx_v_start = (__pyx_v_start + 1);
+    }
+
+    /* "pyBedGraph/ignore_missing_bp.pyx":128
+ *             start += 1
+ * 
+ *         if start == end:             # <<<<<<<<<<<<<<
+ *             continue
+ * 
+ */
+    __pyx_t_4 = ((__pyx_v_start == __pyx_v_end) != 0);
+    if (__pyx_t_4) {
+
+      /* "pyBedGraph/ignore_missing_bp.pyx":129
+ * 
+ *         if start == end:
+ *             continue             # <<<<<<<<<<<<<<
+ * 
+ *         value_index = index_list[start]
+ */
+      goto __pyx_L3_continue;
+
+      /* "pyBedGraph/ignore_missing_bp.pyx":128
+ *             start += 1
+ * 
+ *         if start == end:             # <<<<<<<<<<<<<<
+ *             continue
+ * 
+ */
+    }
+
+    /* "pyBedGraph/ignore_missing_bp.pyx":131
+ *             continue
+ * 
+ *         value_index = index_list[start]             # <<<<<<<<<<<<<<
+ *         while start < end and start < interval_end[value_index]:
+ *             temp_end = interval_end[value_index]
+ */
+    __pyx_t_16 = __pyx_v_start;
+    __pyx_t_12 = -1;
+    if (unlikely(__pyx_t_16 >= (size_t)__pyx_v_index_list.shape[0])) __pyx_t_12 = 0;
+    if (unlikely(__pyx_t_12 != -1)) {
+      __Pyx_RaiseBufferIndexError(__pyx_t_12);
+      __PYX_ERR(0, 131, __pyx_L1_error)
+    }
+    __pyx_v_value_index = (*((int *) ( /* dim=0 */ (__pyx_v_index_list.data + __pyx_t_16 * __pyx_v_index_list.strides[0]) )));
+
+    /* "pyBedGraph/ignore_missing_bp.pyx":132
+ * 
+ *         value_index = index_list[start]
+ *         while start < end and start < interval_end[value_index]:             # <<<<<<<<<<<<<<
+ *             temp_end = interval_end[value_index]
+ *             if temp_end > end:
+ */
+    while (1) {
+      __pyx_t_14 = ((__pyx_v_start < __pyx_v_end) != 0);
+      if (__pyx_t_14) {
+      } else {
+        __pyx_t_4 = __pyx_t_14;
+        goto __pyx_L12_bool_binop_done;
+      }
+      __pyx_t_17 = __pyx_v_value_index;
+      __pyx_t_12 = -1;
+      if (unlikely(__pyx_t_17 >= (size_t)__pyx_v_interval_end.shape[0])) __pyx_t_12 = 0;
+      if (unlikely(__pyx_t_12 != -1)) {
+        __Pyx_RaiseBufferIndexError(__pyx_t_12);
+        __PYX_ERR(0, 132, __pyx_L1_error)
+      }
+      __pyx_t_14 = ((__pyx_v_start < (*((unsigned int *) ( /* dim=0 */ (__pyx_v_interval_end.data + __pyx_t_17 * __pyx_v_interval_end.strides[0]) )))) != 0);
+      __pyx_t_4 = __pyx_t_14;
+      __pyx_L12_bool_binop_done:;
+      if (!__pyx_t_4) break;
+
+      /* "pyBedGraph/ignore_missing_bp.pyx":133
+ *         value_index = index_list[start]
+ *         while start < end and start < interval_end[value_index]:
+ *             temp_end = interval_end[value_index]             # <<<<<<<<<<<<<<
+ *             if temp_end > end:
+ *                 temp_end = end
+ */
+      __pyx_t_18 = __pyx_v_value_index;
+      __pyx_t_12 = -1;
+      if (unlikely(__pyx_t_18 >= (size_t)__pyx_v_interval_end.shape[0])) __pyx_t_12 = 0;
+      if (unlikely(__pyx_t_12 != -1)) {
+        __Pyx_RaiseBufferIndexError(__pyx_t_12);
+        __PYX_ERR(0, 133, __pyx_L1_error)
+      }
+      __pyx_v_temp_end = (*((unsigned int *) ( /* dim=0 */ (__pyx_v_interval_end.data + __pyx_t_18 * __pyx_v_interval_end.strides[0]) )));
+
+      /* "pyBedGraph/ignore_missing_bp.pyx":134
+ *         while start < end and start < interval_end[value_index]:
+ *             temp_end = interval_end[value_index]
+ *             if temp_end > end:             # <<<<<<<<<<<<<<
+ *                 temp_end = end
+ *             interval_size = temp_end - start
+ */
+      __pyx_t_4 = ((__pyx_v_temp_end > __pyx_v_end) != 0);
+      if (__pyx_t_4) {
+
+        /* "pyBedGraph/ignore_missing_bp.pyx":135
+ *             temp_end = interval_end[value_index]
+ *             if temp_end > end:
+ *                 temp_end = end             # <<<<<<<<<<<<<<
+ *             interval_size = temp_end - start
+ *             sum += value_map[value_index] * interval_size
+ */
+        __pyx_v_temp_end = __pyx_v_end;
+
+        /* "pyBedGraph/ignore_missing_bp.pyx":134
+ *         while start < end and start < interval_end[value_index]:
+ *             temp_end = interval_end[value_index]
+ *             if temp_end > end:             # <<<<<<<<<<<<<<
+ *                 temp_end = end
+ *             interval_size = temp_end - start
+ */
+      }
+
+      /* "pyBedGraph/ignore_missing_bp.pyx":136
+ *             if temp_end > end:
+ *                 temp_end = end
+ *             interval_size = temp_end - start             # <<<<<<<<<<<<<<
+ *             sum += value_map[value_index] * interval_size
+ * 
+ */
+      __pyx_v_interval_size = (__pyx_v_temp_end - __pyx_v_start);
+
+      /* "pyBedGraph/ignore_missing_bp.pyx":137
+ *                 temp_end = end
+ *             interval_size = temp_end - start
+ *             sum += value_map[value_index] * interval_size             # <<<<<<<<<<<<<<
+ * 
+ *             value_index += 1
+ */
+      __pyx_t_19 = __pyx_v_value_index;
+      __pyx_t_12 = -1;
+      if (unlikely(__pyx_t_19 >= (size_t)__pyx_v_value_map.shape[0])) __pyx_t_12 = 0;
+      if (unlikely(__pyx_t_12 != -1)) {
+        __Pyx_RaiseBufferIndexError(__pyx_t_12);
+        __PYX_ERR(0, 137, __pyx_L1_error)
+      }
+      __pyx_v_sum = (__pyx_v_sum + ((*((double *) ( /* dim=0 */ (__pyx_v_value_map.data + __pyx_t_19 * __pyx_v_value_map.strides[0]) ))) * __pyx_v_interval_size));
+
+      /* "pyBedGraph/ignore_missing_bp.pyx":139
+ *             sum += value_map[value_index] * interval_size
+ * 
+ *             value_index += 1             # <<<<<<<<<<<<<<
+ *             if value_index == numb_intervals:
+ *                 break
+ */
+      __pyx_v_value_index = (__pyx_v_value_index + 1);
+
+      /* "pyBedGraph/ignore_missing_bp.pyx":140
+ * 
+ *             value_index += 1
+ *             if value_index == numb_intervals:             # <<<<<<<<<<<<<<
+ *                 break
+ *             start = interval_start[value_index]
+ */
+      __pyx_t_4 = ((__pyx_v_value_index == __pyx_v_numb_intervals) != 0);
+      if (__pyx_t_4) {
+
+        /* "pyBedGraph/ignore_missing_bp.pyx":141
+ *             value_index += 1
+ *             if value_index == numb_intervals:
+ *                 break             # <<<<<<<<<<<<<<
+ *             start = interval_start[value_index]
+ * 
+ */
+        goto __pyx_L11_break;
+
+        /* "pyBedGraph/ignore_missing_bp.pyx":140
+ * 
+ *             value_index += 1
+ *             if value_index == numb_intervals:             # <<<<<<<<<<<<<<
+ *                 break
+ *             start = interval_start[value_index]
+ */
+      }
+
+      /* "pyBedGraph/ignore_missing_bp.pyx":142
+ *             if value_index == numb_intervals:
+ *                 break
+ *             start = interval_start[value_index]             # <<<<<<<<<<<<<<
+ * 
+ *         result_view[i] = sum
+ */
+      __pyx_t_20 = __pyx_v_value_index;
+      __pyx_t_12 = -1;
+      if (unlikely(__pyx_t_20 >= (size_t)__pyx_v_interval_start.shape[0])) __pyx_t_12 = 0;
+      if (unlikely(__pyx_t_12 != -1)) {
+        __Pyx_RaiseBufferIndexError(__pyx_t_12);
+        __PYX_ERR(0, 142, __pyx_L1_error)
+      }
+      __pyx_v_start = (*((unsigned int *) ( /* dim=0 */ (__pyx_v_interval_start.data + __pyx_t_20 * __pyx_v_interval_start.strides[0]) )));
+    }
+    __pyx_L11_break:;
+
+    /* "pyBedGraph/ignore_missing_bp.pyx":144
+ *             start = interval_start[value_index]
+ * 
+ *         result_view[i] = sum             # <<<<<<<<<<<<<<
+ * 
+ *     return result
+ */
+    __pyx_t_21 = __pyx_v_i;
+    __pyx_t_12 = -1;
+    if (unlikely(__pyx_t_21 >= (size_t)__pyx_v_result_view.shape[0])) __pyx_t_12 = 0;
+    if (unlikely(__pyx_t_12 != -1)) {
+      __Pyx_RaiseBufferIndexError(__pyx_t_12);
+      __PYX_ERR(0, 144, __pyx_L1_error)
+    }
+    *((double *) ( /* dim=0 */ (__pyx_v_result_view.data + __pyx_t_21 * __pyx_v_result_view.strides[0]) )) = __pyx_v_sum;
+    __pyx_L3_continue:;
+  }
+
+  /* "pyBedGraph/ignore_missing_bp.pyx":146
+ *         result_view[i] = sum
+ * 
+ *     return result             # <<<<<<<<<<<<<<
+ * 
+ * @cython.cdivision(True)
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_result);
+  __pyx_r = __pyx_v_result;
+  goto __pyx_L0;
+
+  /* "pyBedGraph/ignore_missing_bp.pyx":105
+ * 
+ * 
+ * def get_sum(double[:] value_map, int[:] index_list,             # <<<<<<<<<<<<<<
+ *             unsigned int[:] interval_start, unsigned int[:] interval_end,
+ *             int[:] start_list, int[:] end_list):
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
+  __Pyx_AddTraceback("pyBedGraph.ignore_missing_bp.get_sum", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_result);
+  __PYX_XDEC_MEMVIEW(&__pyx_v_result_view, 1);
+  __PYX_XDEC_MEMVIEW(&__pyx_v_value_map, 1);
+  __PYX_XDEC_MEMVIEW(&__pyx_v_index_list, 1);
+  __PYX_XDEC_MEMVIEW(&__pyx_v_interval_start, 1);
+  __PYX_XDEC_MEMVIEW(&__pyx_v_interval_end, 1);
+  __PYX_XDEC_MEMVIEW(&__pyx_v_start_list, 1);
+  __PYX_XDEC_MEMVIEW(&__pyx_v_end_list, 1);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "pyBedGraph/ignore_missing_bp.pyx":150
+ * @cython.cdivision(True)
+ * @cython.boundscheck(False)
+ * def get_approx_means(double[:] bin_list, unsigned int[:] bin_coverage_list,             # <<<<<<<<<<<<<<
+ *                      int max_bin_size, int[:] start_list, int[:] end_list):
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_9get_approx_means(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_10pyBedGraph_17ignore_missing_bp_9get_approx_means = {"get_approx_means", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10pyBedGraph_17ignore_missing_bp_9get_approx_means, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_9get_approx_means(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  __Pyx_memviewslice __pyx_v_bin_list = { 0, 0, { 0 }, { 0 }, { 0 } };
+  __Pyx_memviewslice __pyx_v_bin_coverage_list = { 0, 0, { 0 }, { 0 }, { 0 } };
+  int __pyx_v_max_bin_size;
+  __Pyx_memviewslice __pyx_v_start_list = { 0, 0, { 0 }, { 0 }, { 0 } };
+  __Pyx_memviewslice __pyx_v_end_list = { 0, 0, { 0 }, { 0 }, { 0 } };
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("get_approx_means (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_bin_list,&__pyx_n_s_bin_coverage_list,&__pyx_n_s_max_bin_size,&__pyx_n_s_start_list,&__pyx_n_s_end_list,0};
+    PyObject* values[5] = {0,0,0,0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_bin_list)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_bin_coverage_list)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("get_approx_means", 1, 5, 5, 1); __PYX_ERR(0, 150, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_bin_size)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("get_approx_means", 1, 5, 5, 2); __PYX_ERR(0, 150, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start_list)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("get_approx_means", 1, 5, 5, 3); __PYX_ERR(0, 150, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_end_list)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("get_approx_means", 1, 5, 5, 4); __PYX_ERR(0, 150, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_approx_means") < 0)) __PYX_ERR(0, 150, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
       goto __pyx_L5_argtuple_error;
@@ -3599,28 +4434,28 @@ static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_5get_approx_means(PyO
       values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
       values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
     }
-    __pyx_v_bin_list = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_bin_list.memview)) __PYX_ERR(0, 106, __pyx_L3_error)
-    __pyx_v_bin_coverage_list = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_bin_coverage_list.memview)) __PYX_ERR(0, 106, __pyx_L3_error)
-    __pyx_v_max_bin_size = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_max_bin_size == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 107, __pyx_L3_error)
-    __pyx_v_start_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_start_list.memview)) __PYX_ERR(0, 107, __pyx_L3_error)
-    __pyx_v_end_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_end_list.memview)) __PYX_ERR(0, 107, __pyx_L3_error)
+    __pyx_v_bin_list = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_bin_list.memview)) __PYX_ERR(0, 150, __pyx_L3_error)
+    __pyx_v_bin_coverage_list = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_bin_coverage_list.memview)) __PYX_ERR(0, 150, __pyx_L3_error)
+    __pyx_v_max_bin_size = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_max_bin_size == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 151, __pyx_L3_error)
+    __pyx_v_start_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_start_list.memview)) __PYX_ERR(0, 151, __pyx_L3_error)
+    __pyx_v_end_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_end_list.memview)) __PYX_ERR(0, 151, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("get_approx_means", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 106, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("get_approx_means", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 150, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("pyBedGraph.ignore_missing_bp.get_approx_means", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(__pyx_self, __pyx_v_bin_list, __pyx_v_bin_coverage_list, __pyx_v_max_bin_size, __pyx_v_start_list, __pyx_v_end_list);
+  __pyx_r = __pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_approx_means(__pyx_self, __pyx_v_bin_list, __pyx_v_bin_coverage_list, __pyx_v_max_bin_size, __pyx_v_start_list, __pyx_v_end_list);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_bin_list, __Pyx_memviewslice __pyx_v_bin_coverage_list, int __pyx_v_max_bin_size, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list) {
+static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_approx_means(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_bin_list, __Pyx_memviewslice __pyx_v_bin_coverage_list, int __pyx_v_max_bin_size, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list) {
   size_t __pyx_v_i;
   size_t __pyx_v_start;
   size_t __pyx_v_end;
@@ -3660,7 +4495,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
   size_t __pyx_t_23;
   __Pyx_RefNannySetupContext("get_approx_means", 0);
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":109
+  /* "pyBedGraph/ignore_missing_bp.pyx":153
  *                      int max_bin_size, int[:] start_list, int[:] end_list):
  * 
  *     assert tuple(start_list.shape) == tuple(end_list.shape)             # <<<<<<<<<<<<<<
@@ -3669,59 +4504,59 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!Py_OptimizeFlag)) {
-    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_start_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 109, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_start_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 153, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 109, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 153, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_end_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 109, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_end_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 153, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 109, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 153, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 109, __pyx_L1_error)
+    __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 153, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 109, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 153, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     if (unlikely(!__pyx_t_4)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(0, 109, __pyx_L1_error)
+      __PYX_ERR(0, 153, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":112
+  /* "pyBedGraph/ignore_missing_bp.pyx":156
  * 
  *     cdef size_t i, start, end, bin_end, bin_index
  *     cdef size_t num_tests = start_list.size             # <<<<<<<<<<<<<<
  *     cdef double total, numb_value, fraction
  *     cdef unsigned int weight
  */
-  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_start_list, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 112, __pyx_L1_error)
+  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_start_list, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 156, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 112, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 156, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 112, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 156, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_num_tests = __pyx_t_5;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":116
+  /* "pyBedGraph/ignore_missing_bp.pyx":160
  *     cdef unsigned int weight
  * 
  *     result = np.full(num_tests, -1, dtype=np.float64)             # <<<<<<<<<<<<<<
  *     cdef double[:] result_view = result
  * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 116, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 160, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_full); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 116, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_full); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyInt_FromSize_t(__pyx_v_num_tests); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 116, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_FromSize_t(__pyx_v_num_tests); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 160, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 116, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 160, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
@@ -3729,16 +4564,16 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
   __Pyx_GIVEREF(__pyx_int_neg_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_neg_1);
   __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 116, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 160, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 116, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 160, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_float64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 116, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_float64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 160, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 116, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 160, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 116, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 160, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -3746,19 +4581,19 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
   __pyx_v_result = __pyx_t_7;
   __pyx_t_7 = 0;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":117
+  /* "pyBedGraph/ignore_missing_bp.pyx":161
  * 
  *     result = np.full(num_tests, -1, dtype=np.float64)
  *     cdef double[:] result_view = result             # <<<<<<<<<<<<<<
  * 
  *     for i in range(num_tests):
  */
-  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_result, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 117, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_result, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 161, __pyx_L1_error)
   __pyx_v_result_view = __pyx_t_8;
   __pyx_t_8.memview = NULL;
   __pyx_t_8.data = NULL;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":119
+  /* "pyBedGraph/ignore_missing_bp.pyx":163
  *     cdef double[:] result_view = result
  * 
  *     for i in range(num_tests):             # <<<<<<<<<<<<<<
@@ -3770,7 +4605,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
   for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
     __pyx_v_i = __pyx_t_10;
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":120
+    /* "pyBedGraph/ignore_missing_bp.pyx":164
  * 
  *     for i in range(num_tests):
  *         start = start_list[i]             # <<<<<<<<<<<<<<
@@ -3780,7 +4615,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
     __pyx_t_11 = __pyx_v_i;
     __pyx_v_start = (*((int *) ( /* dim=0 */ (__pyx_v_start_list.data + __pyx_t_11 * __pyx_v_start_list.strides[0]) )));
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":121
+    /* "pyBedGraph/ignore_missing_bp.pyx":165
  *     for i in range(num_tests):
  *         start = start_list[i]
  *         end = end_list[i]             # <<<<<<<<<<<<<<
@@ -3790,7 +4625,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
     __pyx_t_12 = __pyx_v_i;
     __pyx_v_end = (*((int *) ( /* dim=0 */ (__pyx_v_end_list.data + __pyx_t_12 * __pyx_v_end_list.strides[0]) )));
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":123
+    /* "pyBedGraph/ignore_missing_bp.pyx":167
  *         end = end_list[i]
  * 
  *         bin_index = <unsigned int>(start / max_bin_size)             # <<<<<<<<<<<<<<
@@ -3799,7 +4634,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
  */
     __pyx_v_bin_index = ((unsigned int)(__pyx_v_start / ((size_t)__pyx_v_max_bin_size)));
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":124
+    /* "pyBedGraph/ignore_missing_bp.pyx":168
  * 
  *         bin_index = <unsigned int>(start / max_bin_size)
  *         bin_end = <unsigned int>((end - 1) / max_bin_size)             # <<<<<<<<<<<<<<
@@ -3808,7 +4643,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
  */
     __pyx_v_bin_end = ((unsigned int)((__pyx_v_end - 1) / ((size_t)__pyx_v_max_bin_size)));
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":127
+    /* "pyBedGraph/ignore_missing_bp.pyx":171
  * 
  *         # special case where interval is within a single bin
  *         if bin_index == bin_end:             # <<<<<<<<<<<<<<
@@ -3818,7 +4653,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
     __pyx_t_4 = ((__pyx_v_bin_index == __pyx_v_bin_end) != 0);
     if (__pyx_t_4) {
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":128
+      /* "pyBedGraph/ignore_missing_bp.pyx":172
  *         # special case where interval is within a single bin
  *         if bin_index == bin_end:
  *             if bin_coverage_list[bin_index] == 0:             # <<<<<<<<<<<<<<
@@ -3829,7 +4664,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
       __pyx_t_4 = (((*((unsigned int *) ( /* dim=0 */ (__pyx_v_bin_coverage_list.data + __pyx_t_13 * __pyx_v_bin_coverage_list.strides[0]) ))) == 0) != 0);
       if (__pyx_t_4) {
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":129
+        /* "pyBedGraph/ignore_missing_bp.pyx":173
  *         if bin_index == bin_end:
  *             if bin_coverage_list[bin_index] == 0:
  *                 continue             # <<<<<<<<<<<<<<
@@ -3838,7 +4673,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
  */
         goto __pyx_L3_continue;
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":128
+        /* "pyBedGraph/ignore_missing_bp.pyx":172
  *         # special case where interval is within a single bin
  *         if bin_index == bin_end:
  *             if bin_coverage_list[bin_index] == 0:             # <<<<<<<<<<<<<<
@@ -3847,7 +4682,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
  */
       }
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":130
+      /* "pyBedGraph/ignore_missing_bp.pyx":174
  *             if bin_coverage_list[bin_index] == 0:
  *                 continue
  *             result_view[i] = bin_list[bin_index] / bin_coverage_list[bin_index]             # <<<<<<<<<<<<<<
@@ -3859,7 +4694,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
       __pyx_t_16 = __pyx_v_i;
       *((double *) ( /* dim=0 */ (__pyx_v_result_view.data + __pyx_t_16 * __pyx_v_result_view.strides[0]) )) = ((*((double *) ( /* dim=0 */ (__pyx_v_bin_list.data + __pyx_t_14 * __pyx_v_bin_list.strides[0]) ))) / ((double)(*((unsigned int *) ( /* dim=0 */ (__pyx_v_bin_coverage_list.data + __pyx_t_15 * __pyx_v_bin_coverage_list.strides[0]) )))));
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":131
+      /* "pyBedGraph/ignore_missing_bp.pyx":175
  *                 continue
  *             result_view[i] = bin_list[bin_index] / bin_coverage_list[bin_index]
  *             continue             # <<<<<<<<<<<<<<
@@ -3868,7 +4703,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
  */
       goto __pyx_L3_continue;
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":127
+      /* "pyBedGraph/ignore_missing_bp.pyx":171
  * 
  *         # special case where interval is within a single bin
  *         if bin_index == bin_end:             # <<<<<<<<<<<<<<
@@ -3877,7 +4712,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
  */
     }
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":133
+    /* "pyBedGraph/ignore_missing_bp.pyx":177
  *             continue
  * 
  *         total = 0             # <<<<<<<<<<<<<<
@@ -3886,7 +4721,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
  */
     __pyx_v_total = 0.0;
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":134
+    /* "pyBedGraph/ignore_missing_bp.pyx":178
  * 
  *         total = 0
  *         numb_value = 0             # <<<<<<<<<<<<<<
@@ -3895,7 +4730,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
  */
     __pyx_v_numb_value = 0.0;
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":137
+    /* "pyBedGraph/ignore_missing_bp.pyx":181
  * 
  *         # first bin
  *         weight = bin_coverage_list[bin_index]             # <<<<<<<<<<<<<<
@@ -3905,7 +4740,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
     __pyx_t_17 = __pyx_v_bin_index;
     __pyx_v_weight = (*((unsigned int *) ( /* dim=0 */ (__pyx_v_bin_coverage_list.data + __pyx_t_17 * __pyx_v_bin_coverage_list.strides[0]) )));
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":138
+    /* "pyBedGraph/ignore_missing_bp.pyx":182
  *         # first bin
  *         weight = bin_coverage_list[bin_index]
  *         if weight > 0:             # <<<<<<<<<<<<<<
@@ -3915,7 +4750,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
     __pyx_t_4 = ((__pyx_v_weight > 0) != 0);
     if (__pyx_t_4) {
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":139
+      /* "pyBedGraph/ignore_missing_bp.pyx":183
  *         weight = bin_coverage_list[bin_index]
  *         if weight > 0:
  *             fraction = <double>(max_bin_size - start % max_bin_size) / max_bin_size             # <<<<<<<<<<<<<<
@@ -3924,7 +4759,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
  */
       __pyx_v_fraction = (((double)(__pyx_v_max_bin_size - (__pyx_v_start % __pyx_v_max_bin_size))) / ((double)__pyx_v_max_bin_size));
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":140
+      /* "pyBedGraph/ignore_missing_bp.pyx":184
  *         if weight > 0:
  *             fraction = <double>(max_bin_size - start % max_bin_size) / max_bin_size
  *             total += bin_list[bin_index] * fraction             # <<<<<<<<<<<<<<
@@ -3934,7 +4769,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
       __pyx_t_18 = __pyx_v_bin_index;
       __pyx_v_total = (__pyx_v_total + ((*((double *) ( /* dim=0 */ (__pyx_v_bin_list.data + __pyx_t_18 * __pyx_v_bin_list.strides[0]) ))) * __pyx_v_fraction));
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":141
+      /* "pyBedGraph/ignore_missing_bp.pyx":185
  *             fraction = <double>(max_bin_size - start % max_bin_size) / max_bin_size
  *             total += bin_list[bin_index] * fraction
  *             numb_value += weight * fraction             # <<<<<<<<<<<<<<
@@ -3943,7 +4778,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
  */
       __pyx_v_numb_value = (__pyx_v_numb_value + (__pyx_v_weight * __pyx_v_fraction));
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":138
+      /* "pyBedGraph/ignore_missing_bp.pyx":182
  *         # first bin
  *         weight = bin_coverage_list[bin_index]
  *         if weight > 0:             # <<<<<<<<<<<<<<
@@ -3952,7 +4787,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
  */
     }
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":142
+    /* "pyBedGraph/ignore_missing_bp.pyx":186
  *             total += bin_list[bin_index] * fraction
  *             numb_value += weight * fraction
  *         bin_index += 1             # <<<<<<<<<<<<<<
@@ -3961,7 +4796,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
  */
     __pyx_v_bin_index = (__pyx_v_bin_index + 1);
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":145
+    /* "pyBedGraph/ignore_missing_bp.pyx":189
  * 
  *         # middle bins
  *         while bin_index < bin_end:             # <<<<<<<<<<<<<<
@@ -3972,7 +4807,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
       __pyx_t_4 = ((__pyx_v_bin_index < __pyx_v_bin_end) != 0);
       if (!__pyx_t_4) break;
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":146
+      /* "pyBedGraph/ignore_missing_bp.pyx":190
  *         # middle bins
  *         while bin_index < bin_end:
  *             weight = bin_coverage_list[bin_index]             # <<<<<<<<<<<<<<
@@ -3982,7 +4817,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
       __pyx_t_19 = __pyx_v_bin_index;
       __pyx_v_weight = (*((unsigned int *) ( /* dim=0 */ (__pyx_v_bin_coverage_list.data + __pyx_t_19 * __pyx_v_bin_coverage_list.strides[0]) )));
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":147
+      /* "pyBedGraph/ignore_missing_bp.pyx":191
  *         while bin_index < bin_end:
  *             weight = bin_coverage_list[bin_index]
  *             if weight > 0:             # <<<<<<<<<<<<<<
@@ -3992,7 +4827,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
       __pyx_t_4 = ((__pyx_v_weight > 0) != 0);
       if (__pyx_t_4) {
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":148
+        /* "pyBedGraph/ignore_missing_bp.pyx":192
  *             weight = bin_coverage_list[bin_index]
  *             if weight > 0:
  *                 total += bin_list[bin_index]             # <<<<<<<<<<<<<<
@@ -4002,7 +4837,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
         __pyx_t_20 = __pyx_v_bin_index;
         __pyx_v_total = (__pyx_v_total + (*((double *) ( /* dim=0 */ (__pyx_v_bin_list.data + __pyx_t_20 * __pyx_v_bin_list.strides[0]) ))));
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":149
+        /* "pyBedGraph/ignore_missing_bp.pyx":193
  *             if weight > 0:
  *                 total += bin_list[bin_index]
  *                 numb_value += weight             # <<<<<<<<<<<<<<
@@ -4011,7 +4846,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
  */
         __pyx_v_numb_value = (__pyx_v_numb_value + __pyx_v_weight);
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":147
+        /* "pyBedGraph/ignore_missing_bp.pyx":191
  *         while bin_index < bin_end:
  *             weight = bin_coverage_list[bin_index]
  *             if weight > 0:             # <<<<<<<<<<<<<<
@@ -4020,7 +4855,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
  */
       }
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":151
+      /* "pyBedGraph/ignore_missing_bp.pyx":195
  *                 numb_value += weight
  * 
  *             bin_index += 1             # <<<<<<<<<<<<<<
@@ -4030,7 +4865,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
       __pyx_v_bin_index = (__pyx_v_bin_index + 1);
     }
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":154
+    /* "pyBedGraph/ignore_missing_bp.pyx":198
  * 
  *         # last bin
  *         weight = bin_coverage_list[bin_index]             # <<<<<<<<<<<<<<
@@ -4040,7 +4875,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
     __pyx_t_21 = __pyx_v_bin_index;
     __pyx_v_weight = (*((unsigned int *) ( /* dim=0 */ (__pyx_v_bin_coverage_list.data + __pyx_t_21 * __pyx_v_bin_coverage_list.strides[0]) )));
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":155
+    /* "pyBedGraph/ignore_missing_bp.pyx":199
  *         # last bin
  *         weight = bin_coverage_list[bin_index]
  *         if weight > 0:             # <<<<<<<<<<<<<<
@@ -4050,7 +4885,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
     __pyx_t_4 = ((__pyx_v_weight > 0) != 0);
     if (__pyx_t_4) {
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":156
+      /* "pyBedGraph/ignore_missing_bp.pyx":200
  *         weight = bin_coverage_list[bin_index]
  *         if weight > 0:
  *             fraction = <double>(end % max_bin_size) / max_bin_size             # <<<<<<<<<<<<<<
@@ -4059,7 +4894,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
  */
       __pyx_v_fraction = (((double)(__pyx_v_end % __pyx_v_max_bin_size)) / ((double)__pyx_v_max_bin_size));
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":157
+      /* "pyBedGraph/ignore_missing_bp.pyx":201
  *         if weight > 0:
  *             fraction = <double>(end % max_bin_size) / max_bin_size
  *             if fraction == 0:             # <<<<<<<<<<<<<<
@@ -4069,7 +4904,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
       __pyx_t_4 = ((__pyx_v_fraction == 0.0) != 0);
       if (__pyx_t_4) {
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":158
+        /* "pyBedGraph/ignore_missing_bp.pyx":202
  *             fraction = <double>(end % max_bin_size) / max_bin_size
  *             if fraction == 0:
  *                 fraction = 1             # <<<<<<<<<<<<<<
@@ -4078,7 +4913,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
  */
         __pyx_v_fraction = 1.0;
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":157
+        /* "pyBedGraph/ignore_missing_bp.pyx":201
  *         if weight > 0:
  *             fraction = <double>(end % max_bin_size) / max_bin_size
  *             if fraction == 0:             # <<<<<<<<<<<<<<
@@ -4087,7 +4922,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
  */
       }
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":159
+      /* "pyBedGraph/ignore_missing_bp.pyx":203
  *             if fraction == 0:
  *                 fraction = 1
  *             total += bin_list[bin_index] * fraction             # <<<<<<<<<<<<<<
@@ -4097,7 +4932,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
       __pyx_t_22 = __pyx_v_bin_index;
       __pyx_v_total = (__pyx_v_total + ((*((double *) ( /* dim=0 */ (__pyx_v_bin_list.data + __pyx_t_22 * __pyx_v_bin_list.strides[0]) ))) * __pyx_v_fraction));
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":160
+      /* "pyBedGraph/ignore_missing_bp.pyx":204
  *                 fraction = 1
  *             total += bin_list[bin_index] * fraction
  *             numb_value += weight * fraction             # <<<<<<<<<<<<<<
@@ -4106,7 +4941,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
  */
       __pyx_v_numb_value = (__pyx_v_numb_value + (__pyx_v_weight * __pyx_v_fraction));
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":155
+      /* "pyBedGraph/ignore_missing_bp.pyx":199
  *         # last bin
  *         weight = bin_coverage_list[bin_index]
  *         if weight > 0:             # <<<<<<<<<<<<<<
@@ -4115,7 +4950,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
  */
     }
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":162
+    /* "pyBedGraph/ignore_missing_bp.pyx":206
  *             numb_value += weight * fraction
  * 
  *         if numb_value == 0:             # <<<<<<<<<<<<<<
@@ -4125,7 +4960,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
     __pyx_t_4 = ((__pyx_v_numb_value == 0.0) != 0);
     if (__pyx_t_4) {
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":163
+      /* "pyBedGraph/ignore_missing_bp.pyx":207
  * 
  *         if numb_value == 0:
  *             continue             # <<<<<<<<<<<<<<
@@ -4134,7 +4969,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
  */
       goto __pyx_L3_continue;
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":162
+      /* "pyBedGraph/ignore_missing_bp.pyx":206
  *             numb_value += weight * fraction
  * 
  *         if numb_value == 0:             # <<<<<<<<<<<<<<
@@ -4143,7 +4978,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
  */
     }
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":165
+    /* "pyBedGraph/ignore_missing_bp.pyx":209
  *             continue
  * 
  *         result_view[i] = total / numb_value             # <<<<<<<<<<<<<<
@@ -4155,7 +4990,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
     __pyx_L3_continue:;
   }
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":167
+  /* "pyBedGraph/ignore_missing_bp.pyx":211
  *         result_view[i] = total / numb_value
  * 
  *     return result             # <<<<<<<<<<<<<<
@@ -4167,7 +5002,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":106
+  /* "pyBedGraph/ignore_missing_bp.pyx":150
  * @cython.cdivision(True)
  * @cython.boundscheck(False)
  * def get_approx_means(double[:] bin_list, unsigned int[:] bin_coverage_list,             # <<<<<<<<<<<<<<
@@ -4197,7 +5032,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
   return __pyx_r;
 }
 
-/* "pyBedGraph/ignore_missing_bp.pyx":171
+/* "pyBedGraph/ignore_missing_bp.pyx":215
  * @cython.cdivision(True)
  * @cython.boundscheck(False)
  * cpdef get_exact_means(double[:] value_map, int[:] index_list,             # <<<<<<<<<<<<<<
@@ -4205,7 +5040,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_4get_approx_means(CYT
  *                  int[:] start_list, int[:] end_list):
  */
 
-static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_7get_exact_means(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_11get_exact_means(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
 static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_memviewslice __pyx_v_value_map, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, __Pyx_memviewslice __pyx_v_interval_end, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list, CYTHON_UNUSED int __pyx_skip_dispatch) {
   size_t __pyx_v_i;
   size_t __pyx_v_num_tests;
@@ -4243,7 +5078,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
   size_t __pyx_t_20;
   __Pyx_RefNannySetupContext("get_exact_means", 0);
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":174
+  /* "pyBedGraph/ignore_missing_bp.pyx":218
  *                  unsigned int[:] interval_start, unsigned int[:] interval_end,
  *                  int[:] start_list, int[:] end_list):
  *     assert tuple(start_list.shape) == tuple(end_list.shape)             # <<<<<<<<<<<<<<
@@ -4252,75 +5087,75 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!Py_OptimizeFlag)) {
-    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_start_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 174, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_start_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 218, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 174, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 218, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_end_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 174, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_end_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 218, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 174, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 218, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 174, __pyx_L1_error)
+    __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 218, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 174, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 218, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     if (unlikely(!__pyx_t_4)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(0, 174, __pyx_L1_error)
+      __PYX_ERR(0, 218, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":176
+  /* "pyBedGraph/ignore_missing_bp.pyx":220
  *     assert tuple(start_list.shape) == tuple(end_list.shape)
  * 
  *     cdef size_t i, num_tests = start_list.size, start, end, value_index             # <<<<<<<<<<<<<<
  *     cdef unsigned int numb_value, temp_end, interval_size, numb_intervals = interval_start.size
  *     cdef double total
  */
-  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_start_list, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 176, __pyx_L1_error)
+  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_start_list, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 220, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 176, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 220, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 176, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 220, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_num_tests = __pyx_t_5;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":177
+  /* "pyBedGraph/ignore_missing_bp.pyx":221
  * 
  *     cdef size_t i, num_tests = start_list.size, start, end, value_index
  *     cdef unsigned int numb_value, temp_end, interval_size, numb_intervals = interval_start.size             # <<<<<<<<<<<<<<
  *     cdef double total
  * 
  */
-  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_interval_start, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_int, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_int, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 177, __pyx_L1_error)
+  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_interval_start, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_int, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_int, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 221, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 221, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_6 = __Pyx_PyInt_As_unsigned_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 177, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyInt_As_unsigned_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 221, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_numb_intervals = __pyx_t_6;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":180
+  /* "pyBedGraph/ignore_missing_bp.pyx":224
  *     cdef double total
  * 
  *     result = np.full(num_tests, -1, dtype=np.float64)             # <<<<<<<<<<<<<<
  *     cdef double[:] result_view = result
  * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 224, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_full); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 180, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_full); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 224, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_v_num_tests); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_v_num_tests); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 224, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 180, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 224, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
@@ -4328,16 +5163,16 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
   __Pyx_GIVEREF(__pyx_int_neg_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_neg_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 180, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 224, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 180, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 224, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_float64); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 180, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_float64); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 224, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 180, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 224, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 180, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 224, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -4345,19 +5180,19 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
   __pyx_v_result = __pyx_t_8;
   __pyx_t_8 = 0;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":181
+  /* "pyBedGraph/ignore_missing_bp.pyx":225
  * 
  *     result = np.full(num_tests, -1, dtype=np.float64)
  *     cdef double[:] result_view = result             # <<<<<<<<<<<<<<
  * 
  *     for i in range(num_tests):
  */
-  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_result, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 181, __pyx_L1_error)
+  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_result, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 225, __pyx_L1_error)
   __pyx_v_result_view = __pyx_t_9;
   __pyx_t_9.memview = NULL;
   __pyx_t_9.data = NULL;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":183
+  /* "pyBedGraph/ignore_missing_bp.pyx":227
  *     cdef double[:] result_view = result
  * 
  *     for i in range(num_tests):             # <<<<<<<<<<<<<<
@@ -4369,7 +5204,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
   for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
     __pyx_v_i = __pyx_t_11;
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":184
+    /* "pyBedGraph/ignore_missing_bp.pyx":228
  * 
  *     for i in range(num_tests):
  *         total = 0             # <<<<<<<<<<<<<<
@@ -4378,7 +5213,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
  */
     __pyx_v_total = 0.0;
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":185
+    /* "pyBedGraph/ignore_missing_bp.pyx":229
  *     for i in range(num_tests):
  *         total = 0
  *         numb_value = 0             # <<<<<<<<<<<<<<
@@ -4387,7 +5222,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
  */
     __pyx_v_numb_value = 0;
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":186
+    /* "pyBedGraph/ignore_missing_bp.pyx":230
  *         total = 0
  *         numb_value = 0
  *         start = start_list[i]             # <<<<<<<<<<<<<<
@@ -4397,7 +5232,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
     __pyx_t_12 = __pyx_v_i;
     __pyx_v_start = (*((int *) ( /* dim=0 */ (__pyx_v_start_list.data + __pyx_t_12 * __pyx_v_start_list.strides[0]) )));
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":187
+    /* "pyBedGraph/ignore_missing_bp.pyx":231
  *         numb_value = 0
  *         start = start_list[i]
  *         end = end_list[i]             # <<<<<<<<<<<<<<
@@ -4407,7 +5242,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
     __pyx_t_13 = __pyx_v_i;
     __pyx_v_end = (*((int *) ( /* dim=0 */ (__pyx_v_end_list.data + __pyx_t_13 * __pyx_v_end_list.strides[0]) )));
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":190
+    /* "pyBedGraph/ignore_missing_bp.pyx":234
  * 
  *         # get to an interval
  *         while start < end and index_list[start] == -1:             # <<<<<<<<<<<<<<
@@ -4427,7 +5262,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
       __pyx_L7_bool_binop_done:;
       if (!__pyx_t_4) break;
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":191
+      /* "pyBedGraph/ignore_missing_bp.pyx":235
  *         # get to an interval
  *         while start < end and index_list[start] == -1:
  *             start += 1             # <<<<<<<<<<<<<<
@@ -4437,7 +5272,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
       __pyx_v_start = (__pyx_v_start + 1);
     }
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":193
+    /* "pyBedGraph/ignore_missing_bp.pyx":237
  *             start += 1
  * 
  *         if start == end:             # <<<<<<<<<<<<<<
@@ -4447,7 +5282,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
     __pyx_t_4 = ((__pyx_v_start == __pyx_v_end) != 0);
     if (__pyx_t_4) {
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":194
+      /* "pyBedGraph/ignore_missing_bp.pyx":238
  * 
  *         if start == end:
  *             continue             # <<<<<<<<<<<<<<
@@ -4456,7 +5291,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
  */
       goto __pyx_L3_continue;
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":193
+      /* "pyBedGraph/ignore_missing_bp.pyx":237
  *             start += 1
  * 
  *         if start == end:             # <<<<<<<<<<<<<<
@@ -4465,7 +5300,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
  */
     }
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":196
+    /* "pyBedGraph/ignore_missing_bp.pyx":240
  *             continue
  * 
  *         value_index = index_list[start]             # <<<<<<<<<<<<<<
@@ -4475,7 +5310,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
     __pyx_t_16 = __pyx_v_start;
     __pyx_v_value_index = (*((int *) ( /* dim=0 */ (__pyx_v_index_list.data + __pyx_t_16 * __pyx_v_index_list.strides[0]) )));
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":197
+    /* "pyBedGraph/ignore_missing_bp.pyx":241
  * 
  *         value_index = index_list[start]
  *         while start < end:             # <<<<<<<<<<<<<<
@@ -4486,7 +5321,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
       __pyx_t_4 = ((__pyx_v_start < __pyx_v_end) != 0);
       if (!__pyx_t_4) break;
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":198
+      /* "pyBedGraph/ignore_missing_bp.pyx":242
  *         value_index = index_list[start]
  *         while start < end:
  *             temp_end = interval_end[value_index]             # <<<<<<<<<<<<<<
@@ -4496,7 +5331,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
       __pyx_t_17 = __pyx_v_value_index;
       __pyx_v_temp_end = (*((unsigned int *) ( /* dim=0 */ (__pyx_v_interval_end.data + __pyx_t_17 * __pyx_v_interval_end.strides[0]) )));
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":199
+      /* "pyBedGraph/ignore_missing_bp.pyx":243
  *         while start < end:
  *             temp_end = interval_end[value_index]
  *             if temp_end > end:             # <<<<<<<<<<<<<<
@@ -4506,7 +5341,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
       __pyx_t_4 = ((__pyx_v_temp_end > __pyx_v_end) != 0);
       if (__pyx_t_4) {
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":200
+        /* "pyBedGraph/ignore_missing_bp.pyx":244
  *             temp_end = interval_end[value_index]
  *             if temp_end > end:
  *                 temp_end = end             # <<<<<<<<<<<<<<
@@ -4515,7 +5350,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
  */
         __pyx_v_temp_end = __pyx_v_end;
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":199
+        /* "pyBedGraph/ignore_missing_bp.pyx":243
  *         while start < end:
  *             temp_end = interval_end[value_index]
  *             if temp_end > end:             # <<<<<<<<<<<<<<
@@ -4524,7 +5359,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
  */
       }
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":201
+      /* "pyBedGraph/ignore_missing_bp.pyx":245
  *             if temp_end > end:
  *                 temp_end = end
  *             interval_size = temp_end - start             # <<<<<<<<<<<<<<
@@ -4533,7 +5368,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
  */
       __pyx_v_interval_size = (__pyx_v_temp_end - __pyx_v_start);
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":203
+      /* "pyBedGraph/ignore_missing_bp.pyx":247
  *             interval_size = temp_end - start
  * 
  *             total += value_map[value_index] * interval_size             # <<<<<<<<<<<<<<
@@ -4543,7 +5378,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
       __pyx_t_18 = __pyx_v_value_index;
       __pyx_v_total = (__pyx_v_total + ((*((double *) ( /* dim=0 */ (__pyx_v_value_map.data + __pyx_t_18 * __pyx_v_value_map.strides[0]) ))) * __pyx_v_interval_size));
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":204
+      /* "pyBedGraph/ignore_missing_bp.pyx":248
  * 
  *             total += value_map[value_index] * interval_size
  *             numb_value += interval_size             # <<<<<<<<<<<<<<
@@ -4552,7 +5387,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
  */
       __pyx_v_numb_value = (__pyx_v_numb_value + __pyx_v_interval_size);
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":206
+      /* "pyBedGraph/ignore_missing_bp.pyx":250
  *             numb_value += interval_size
  * 
  *             value_index += 1             # <<<<<<<<<<<<<<
@@ -4561,7 +5396,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
  */
       __pyx_v_value_index = (__pyx_v_value_index + 1);
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":207
+      /* "pyBedGraph/ignore_missing_bp.pyx":251
  * 
  *             value_index += 1
  *             if value_index == numb_intervals:             # <<<<<<<<<<<<<<
@@ -4571,7 +5406,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
       __pyx_t_4 = ((__pyx_v_value_index == __pyx_v_numb_intervals) != 0);
       if (__pyx_t_4) {
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":208
+        /* "pyBedGraph/ignore_missing_bp.pyx":252
  *             value_index += 1
  *             if value_index == numb_intervals:
  *                 break             # <<<<<<<<<<<<<<
@@ -4580,7 +5415,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
  */
         goto __pyx_L11_break;
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":207
+        /* "pyBedGraph/ignore_missing_bp.pyx":251
  * 
  *             value_index += 1
  *             if value_index == numb_intervals:             # <<<<<<<<<<<<<<
@@ -4589,7 +5424,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
  */
       }
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":209
+      /* "pyBedGraph/ignore_missing_bp.pyx":253
  *             if value_index == numb_intervals:
  *                 break
  *             start = interval_start[value_index]             # <<<<<<<<<<<<<<
@@ -4601,7 +5436,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
     }
     __pyx_L11_break:;
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":211
+    /* "pyBedGraph/ignore_missing_bp.pyx":255
  *             start = interval_start[value_index]
  * 
  *         if numb_value != 0:             # <<<<<<<<<<<<<<
@@ -4611,7 +5446,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
     __pyx_t_4 = ((__pyx_v_numb_value != 0) != 0);
     if (__pyx_t_4) {
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":212
+      /* "pyBedGraph/ignore_missing_bp.pyx":256
  * 
  *         if numb_value != 0:
  *             result_view[i] = total / numb_value             # <<<<<<<<<<<<<<
@@ -4621,7 +5456,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
       __pyx_t_20 = __pyx_v_i;
       *((double *) ( /* dim=0 */ (__pyx_v_result_view.data + __pyx_t_20 * __pyx_v_result_view.strides[0]) )) = (__pyx_v_total / ((double)__pyx_v_numb_value));
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":211
+      /* "pyBedGraph/ignore_missing_bp.pyx":255
  *             start = interval_start[value_index]
  * 
  *         if numb_value != 0:             # <<<<<<<<<<<<<<
@@ -4632,7 +5467,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
     __pyx_L3_continue:;
   }
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":214
+  /* "pyBedGraph/ignore_missing_bp.pyx":258
  *             result_view[i] = total / numb_value
  * 
  *     return result             # <<<<<<<<<<<<<<
@@ -4644,7 +5479,7 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":171
+  /* "pyBedGraph/ignore_missing_bp.pyx":215
  * @cython.cdivision(True)
  * @cython.boundscheck(False)
  * cpdef get_exact_means(double[:] value_map, int[:] index_list,             # <<<<<<<<<<<<<<
@@ -4671,8 +5506,8 @@ static PyObject *__pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__Pyx_
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_7get_exact_means(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_7get_exact_means(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_11get_exact_means(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_11get_exact_means(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   __Pyx_memviewslice __pyx_v_value_map = { 0, 0, { 0 }, { 0 }, { 0 } };
   __Pyx_memviewslice __pyx_v_index_list = { 0, 0, { 0 }, { 0 }, { 0 } };
   __Pyx_memviewslice __pyx_v_interval_start = { 0, 0, { 0 }, { 0 }, { 0 } };
@@ -4713,35 +5548,35 @@ static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_7get_exact_means(PyOb
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_index_list)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_exact_means", 1, 6, 6, 1); __PYX_ERR(0, 171, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_exact_means", 1, 6, 6, 1); __PYX_ERR(0, 215, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_interval_start)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_exact_means", 1, 6, 6, 2); __PYX_ERR(0, 171, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_exact_means", 1, 6, 6, 2); __PYX_ERR(0, 215, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  3:
         if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_interval_end)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_exact_means", 1, 6, 6, 3); __PYX_ERR(0, 171, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_exact_means", 1, 6, 6, 3); __PYX_ERR(0, 215, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  4:
         if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start_list)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_exact_means", 1, 6, 6, 4); __PYX_ERR(0, 171, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_exact_means", 1, 6, 6, 4); __PYX_ERR(0, 215, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  5:
         if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_end_list)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_exact_means", 1, 6, 6, 5); __PYX_ERR(0, 171, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_exact_means", 1, 6, 6, 5); __PYX_ERR(0, 215, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_exact_means") < 0)) __PYX_ERR(0, 171, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_exact_means") < 0)) __PYX_ERR(0, 215, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
       goto __pyx_L5_argtuple_error;
@@ -4753,41 +5588,41 @@ static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_7get_exact_means(PyOb
       values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
       values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
     }
-    __pyx_v_value_map = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_value_map.memview)) __PYX_ERR(0, 171, __pyx_L3_error)
-    __pyx_v_index_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_index_list.memview)) __PYX_ERR(0, 171, __pyx_L3_error)
-    __pyx_v_interval_start = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interval_start.memview)) __PYX_ERR(0, 172, __pyx_L3_error)
-    __pyx_v_interval_end = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interval_end.memview)) __PYX_ERR(0, 172, __pyx_L3_error)
-    __pyx_v_start_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_start_list.memview)) __PYX_ERR(0, 173, __pyx_L3_error)
-    __pyx_v_end_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_end_list.memview)) __PYX_ERR(0, 173, __pyx_L3_error)
+    __pyx_v_value_map = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_value_map.memview)) __PYX_ERR(0, 215, __pyx_L3_error)
+    __pyx_v_index_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_index_list.memview)) __PYX_ERR(0, 215, __pyx_L3_error)
+    __pyx_v_interval_start = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interval_start.memview)) __PYX_ERR(0, 216, __pyx_L3_error)
+    __pyx_v_interval_end = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interval_end.memview)) __PYX_ERR(0, 216, __pyx_L3_error)
+    __pyx_v_start_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_start_list.memview)) __PYX_ERR(0, 217, __pyx_L3_error)
+    __pyx_v_end_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_end_list.memview)) __PYX_ERR(0, 217, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("get_exact_means", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 171, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("get_exact_means", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 215, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("pyBedGraph.ignore_missing_bp.get_exact_means", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_10pyBedGraph_17ignore_missing_bp_6get_exact_means(__pyx_self, __pyx_v_value_map, __pyx_v_index_list, __pyx_v_interval_start, __pyx_v_interval_end, __pyx_v_start_list, __pyx_v_end_list);
+  __pyx_r = __pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_exact_means(__pyx_self, __pyx_v_value_map, __pyx_v_index_list, __pyx_v_interval_start, __pyx_v_interval_end, __pyx_v_start_list, __pyx_v_end_list);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_6get_exact_means(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_value_map, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, __Pyx_memviewslice __pyx_v_interval_end, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list) {
+static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_exact_means(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_value_map, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, __Pyx_memviewslice __pyx_v_interval_end, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("get_exact_means", 0);
   __Pyx_XDECREF(__pyx_r);
-  if (unlikely(!__pyx_v_value_map.memview)) { __Pyx_RaiseUnboundLocalError("value_map"); __PYX_ERR(0, 171, __pyx_L1_error) }
-  if (unlikely(!__pyx_v_index_list.memview)) { __Pyx_RaiseUnboundLocalError("index_list"); __PYX_ERR(0, 171, __pyx_L1_error) }
-  if (unlikely(!__pyx_v_interval_start.memview)) { __Pyx_RaiseUnboundLocalError("interval_start"); __PYX_ERR(0, 171, __pyx_L1_error) }
-  if (unlikely(!__pyx_v_interval_end.memview)) { __Pyx_RaiseUnboundLocalError("interval_end"); __PYX_ERR(0, 171, __pyx_L1_error) }
-  if (unlikely(!__pyx_v_start_list.memview)) { __Pyx_RaiseUnboundLocalError("start_list"); __PYX_ERR(0, 171, __pyx_L1_error) }
-  if (unlikely(!__pyx_v_end_list.memview)) { __Pyx_RaiseUnboundLocalError("end_list"); __PYX_ERR(0, 171, __pyx_L1_error) }
-  __pyx_t_1 = __pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__pyx_v_value_map, __pyx_v_index_list, __pyx_v_interval_start, __pyx_v_interval_end, __pyx_v_start_list, __pyx_v_end_list, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 171, __pyx_L1_error)
+  if (unlikely(!__pyx_v_value_map.memview)) { __Pyx_RaiseUnboundLocalError("value_map"); __PYX_ERR(0, 215, __pyx_L1_error) }
+  if (unlikely(!__pyx_v_index_list.memview)) { __Pyx_RaiseUnboundLocalError("index_list"); __PYX_ERR(0, 215, __pyx_L1_error) }
+  if (unlikely(!__pyx_v_interval_start.memview)) { __Pyx_RaiseUnboundLocalError("interval_start"); __PYX_ERR(0, 215, __pyx_L1_error) }
+  if (unlikely(!__pyx_v_interval_end.memview)) { __Pyx_RaiseUnboundLocalError("interval_end"); __PYX_ERR(0, 215, __pyx_L1_error) }
+  if (unlikely(!__pyx_v_start_list.memview)) { __Pyx_RaiseUnboundLocalError("start_list"); __PYX_ERR(0, 215, __pyx_L1_error) }
+  if (unlikely(!__pyx_v_end_list.memview)) { __Pyx_RaiseUnboundLocalError("end_list"); __PYX_ERR(0, 215, __pyx_L1_error) }
+  __pyx_t_1 = __pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__pyx_v_value_map, __pyx_v_index_list, __pyx_v_interval_start, __pyx_v_interval_end, __pyx_v_start_list, __pyx_v_end_list, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 215, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -4810,7 +5645,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_6get_exact_means(CYTH
   return __pyx_r;
 }
 
-/* "pyBedGraph/ignore_missing_bp.pyx":216
+/* "pyBedGraph/ignore_missing_bp.pyx":260
  *     return result
  * 
  * def get_minimums(double[:] value_map, int[:] index_list,             # <<<<<<<<<<<<<<
@@ -4819,9 +5654,9 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_6get_exact_means(CYTH
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_9get_minimums(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_10pyBedGraph_17ignore_missing_bp_9get_minimums = {"get_minimums", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10pyBedGraph_17ignore_missing_bp_9get_minimums, METH_VARARGS|METH_KEYWORDS, 0};
-static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_9get_minimums(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_13get_minimums(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_10pyBedGraph_17ignore_missing_bp_13get_minimums = {"get_minimums", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10pyBedGraph_17ignore_missing_bp_13get_minimums, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_13get_minimums(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   __Pyx_memviewslice __pyx_v_value_map = { 0, 0, { 0 }, { 0 }, { 0 } };
   __Pyx_memviewslice __pyx_v_index_list = { 0, 0, { 0 }, { 0 }, { 0 } };
   __Pyx_memviewslice __pyx_v_interval_start = { 0, 0, { 0 }, { 0 }, { 0 } };
@@ -4862,35 +5697,35 @@ static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_9get_minimums(PyObjec
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_index_list)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_minimums", 1, 6, 6, 1); __PYX_ERR(0, 216, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_minimums", 1, 6, 6, 1); __PYX_ERR(0, 260, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_interval_start)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_minimums", 1, 6, 6, 2); __PYX_ERR(0, 216, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_minimums", 1, 6, 6, 2); __PYX_ERR(0, 260, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  3:
         if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_interval_end)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_minimums", 1, 6, 6, 3); __PYX_ERR(0, 216, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_minimums", 1, 6, 6, 3); __PYX_ERR(0, 260, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  4:
         if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start_list)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_minimums", 1, 6, 6, 4); __PYX_ERR(0, 216, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_minimums", 1, 6, 6, 4); __PYX_ERR(0, 260, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  5:
         if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_end_list)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_minimums", 1, 6, 6, 5); __PYX_ERR(0, 216, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_minimums", 1, 6, 6, 5); __PYX_ERR(0, 260, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_minimums") < 0)) __PYX_ERR(0, 216, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_minimums") < 0)) __PYX_ERR(0, 260, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
       goto __pyx_L5_argtuple_error;
@@ -4902,29 +5737,29 @@ static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_9get_minimums(PyObjec
       values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
       values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
     }
-    __pyx_v_value_map = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_value_map.memview)) __PYX_ERR(0, 216, __pyx_L3_error)
-    __pyx_v_index_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_index_list.memview)) __PYX_ERR(0, 216, __pyx_L3_error)
-    __pyx_v_interval_start = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interval_start.memview)) __PYX_ERR(0, 217, __pyx_L3_error)
-    __pyx_v_interval_end = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interval_end.memview)) __PYX_ERR(0, 217, __pyx_L3_error)
-    __pyx_v_start_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_start_list.memview)) __PYX_ERR(0, 218, __pyx_L3_error)
-    __pyx_v_end_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_end_list.memview)) __PYX_ERR(0, 218, __pyx_L3_error)
+    __pyx_v_value_map = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_value_map.memview)) __PYX_ERR(0, 260, __pyx_L3_error)
+    __pyx_v_index_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_index_list.memview)) __PYX_ERR(0, 260, __pyx_L3_error)
+    __pyx_v_interval_start = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interval_start.memview)) __PYX_ERR(0, 261, __pyx_L3_error)
+    __pyx_v_interval_end = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interval_end.memview)) __PYX_ERR(0, 261, __pyx_L3_error)
+    __pyx_v_start_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_start_list.memview)) __PYX_ERR(0, 262, __pyx_L3_error)
+    __pyx_v_end_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_end_list.memview)) __PYX_ERR(0, 262, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("get_minimums", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 216, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("get_minimums", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 260, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("pyBedGraph.ignore_missing_bp.get_minimums", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(__pyx_self, __pyx_v_value_map, __pyx_v_index_list, __pyx_v_interval_start, __pyx_v_interval_end, __pyx_v_start_list, __pyx_v_end_list);
+  __pyx_r = __pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_minimums(__pyx_self, __pyx_v_value_map, __pyx_v_index_list, __pyx_v_interval_start, __pyx_v_interval_end, __pyx_v_start_list, __pyx_v_end_list);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_value_map, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_interval_end, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list) {
+static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_minimums(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_value_map, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_interval_end, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list) {
   size_t __pyx_v_i;
   size_t __pyx_v_num_tests;
   size_t __pyx_v_start;
@@ -4958,7 +5793,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
   size_t __pyx_t_20;
   __Pyx_RefNannySetupContext("get_minimums", 0);
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":220
+  /* "pyBedGraph/ignore_missing_bp.pyx":264
  *                  int[:] start_list, int[:] end_list):
  * 
  *     assert tuple(start_list.shape) == tuple(end_list.shape)             # <<<<<<<<<<<<<<
@@ -4967,75 +5802,75 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!Py_OptimizeFlag)) {
-    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_start_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 220, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_start_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 264, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 220, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 264, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_end_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 220, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_end_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 264, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 220, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 264, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 220, __pyx_L1_error)
+    __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 264, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 220, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 264, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     if (unlikely(!__pyx_t_4)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(0, 220, __pyx_L1_error)
+      __PYX_ERR(0, 264, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":222
+  /* "pyBedGraph/ignore_missing_bp.pyx":266
  *     assert tuple(start_list.shape) == tuple(end_list.shape)
  * 
  *     cdef size_t i, num_tests = start_list.size, start, end, value_index             # <<<<<<<<<<<<<<
  *     cdef size_t numb_intervals = interval_start.size
  *     cdef double minimum
  */
-  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_start_list, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 222, __pyx_L1_error)
+  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_start_list, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 266, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 222, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 266, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 222, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 266, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_num_tests = __pyx_t_5;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":223
+  /* "pyBedGraph/ignore_missing_bp.pyx":267
  * 
  *     cdef size_t i, num_tests = start_list.size, start, end, value_index
  *     cdef size_t numb_intervals = interval_start.size             # <<<<<<<<<<<<<<
  *     cdef double minimum
  * 
  */
-  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_interval_start, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_int, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_int, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 223, __pyx_L1_error)
+  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_interval_start, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_int, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_int, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 267, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 223, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 223, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 267, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_numb_intervals = __pyx_t_5;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":226
+  /* "pyBedGraph/ignore_missing_bp.pyx":270
  *     cdef double minimum
  * 
  *     result = np.full(num_tests, -1, dtype=np.float64)             # <<<<<<<<<<<<<<
  *     cdef double[:] result_view = result
  * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 226, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_full); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 226, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_full); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 270, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_v_num_tests); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 226, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_v_num_tests); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 226, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
@@ -5043,16 +5878,16 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
   __Pyx_GIVEREF(__pyx_int_neg_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_neg_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 226, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 226, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 270, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_float64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 226, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_float64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 270, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 226, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 270, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 226, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 270, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -5060,19 +5895,19 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
   __pyx_v_result = __pyx_t_7;
   __pyx_t_7 = 0;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":227
+  /* "pyBedGraph/ignore_missing_bp.pyx":271
  * 
  *     result = np.full(num_tests, -1, dtype=np.float64)
  *     cdef double[:] result_view = result             # <<<<<<<<<<<<<<
  * 
  *     for i in range(num_tests):
  */
-  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_result, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 227, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_result, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 271, __pyx_L1_error)
   __pyx_v_result_view = __pyx_t_8;
   __pyx_t_8.memview = NULL;
   __pyx_t_8.data = NULL;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":229
+  /* "pyBedGraph/ignore_missing_bp.pyx":273
  *     cdef double[:] result_view = result
  * 
  *     for i in range(num_tests):             # <<<<<<<<<<<<<<
@@ -5084,7 +5919,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
   for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
     __pyx_v_i = __pyx_t_10;
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":230
+    /* "pyBedGraph/ignore_missing_bp.pyx":274
  * 
  *     for i in range(num_tests):
  *         minimum = DBL_MAX             # <<<<<<<<<<<<<<
@@ -5093,7 +5928,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
  */
     __pyx_v_minimum = DBL_MAX;
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":231
+    /* "pyBedGraph/ignore_missing_bp.pyx":275
  *     for i in range(num_tests):
  *         minimum = DBL_MAX
  *         start = start_list[i]             # <<<<<<<<<<<<<<
@@ -5105,11 +5940,11 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
     if (unlikely(__pyx_t_11 >= (size_t)__pyx_v_start_list.shape[0])) __pyx_t_12 = 0;
     if (unlikely(__pyx_t_12 != -1)) {
       __Pyx_RaiseBufferIndexError(__pyx_t_12);
-      __PYX_ERR(0, 231, __pyx_L1_error)
+      __PYX_ERR(0, 275, __pyx_L1_error)
     }
     __pyx_v_start = (*((int *) ( /* dim=0 */ (__pyx_v_start_list.data + __pyx_t_11 * __pyx_v_start_list.strides[0]) )));
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":232
+    /* "pyBedGraph/ignore_missing_bp.pyx":276
  *         minimum = DBL_MAX
  *         start = start_list[i]
  *         end = end_list[i]             # <<<<<<<<<<<<<<
@@ -5121,11 +5956,11 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
     if (unlikely(__pyx_t_13 >= (size_t)__pyx_v_end_list.shape[0])) __pyx_t_12 = 0;
     if (unlikely(__pyx_t_12 != -1)) {
       __Pyx_RaiseBufferIndexError(__pyx_t_12);
-      __PYX_ERR(0, 232, __pyx_L1_error)
+      __PYX_ERR(0, 276, __pyx_L1_error)
     }
     __pyx_v_end = (*((int *) ( /* dim=0 */ (__pyx_v_end_list.data + __pyx_t_13 * __pyx_v_end_list.strides[0]) )));
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":235
+    /* "pyBedGraph/ignore_missing_bp.pyx":279
  * 
  *         # get to an interval
  *         while start < end and index_list[start] == -1:             # <<<<<<<<<<<<<<
@@ -5144,14 +5979,14 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
       if (unlikely(__pyx_t_15 >= (size_t)__pyx_v_index_list.shape[0])) __pyx_t_12 = 0;
       if (unlikely(__pyx_t_12 != -1)) {
         __Pyx_RaiseBufferIndexError(__pyx_t_12);
-        __PYX_ERR(0, 235, __pyx_L1_error)
+        __PYX_ERR(0, 279, __pyx_L1_error)
       }
       __pyx_t_14 = (((*((int *) ( /* dim=0 */ (__pyx_v_index_list.data + __pyx_t_15 * __pyx_v_index_list.strides[0]) ))) == -1L) != 0);
       __pyx_t_4 = __pyx_t_14;
       __pyx_L7_bool_binop_done:;
       if (!__pyx_t_4) break;
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":236
+      /* "pyBedGraph/ignore_missing_bp.pyx":280
  *         # get to an interval
  *         while start < end and index_list[start] == -1:
  *             start += 1             # <<<<<<<<<<<<<<
@@ -5161,7 +5996,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
       __pyx_v_start = (__pyx_v_start + 1);
     }
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":238
+    /* "pyBedGraph/ignore_missing_bp.pyx":282
  *             start += 1
  * 
  *         if start == end:             # <<<<<<<<<<<<<<
@@ -5171,7 +6006,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
     __pyx_t_4 = ((__pyx_v_start == __pyx_v_end) != 0);
     if (__pyx_t_4) {
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":239
+      /* "pyBedGraph/ignore_missing_bp.pyx":283
  * 
  *         if start == end:
  *             continue             # <<<<<<<<<<<<<<
@@ -5180,7 +6015,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
  */
       goto __pyx_L3_continue;
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":238
+      /* "pyBedGraph/ignore_missing_bp.pyx":282
  *             start += 1
  * 
  *         if start == end:             # <<<<<<<<<<<<<<
@@ -5189,7 +6024,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
  */
     }
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":241
+    /* "pyBedGraph/ignore_missing_bp.pyx":285
  *             continue
  * 
  *         value_index = index_list[start]             # <<<<<<<<<<<<<<
@@ -5201,11 +6036,11 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
     if (unlikely(__pyx_t_16 >= (size_t)__pyx_v_index_list.shape[0])) __pyx_t_12 = 0;
     if (unlikely(__pyx_t_12 != -1)) {
       __Pyx_RaiseBufferIndexError(__pyx_t_12);
-      __PYX_ERR(0, 241, __pyx_L1_error)
+      __PYX_ERR(0, 285, __pyx_L1_error)
     }
     __pyx_v_value_index = (*((int *) ( /* dim=0 */ (__pyx_v_index_list.data + __pyx_t_16 * __pyx_v_index_list.strides[0]) )));
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":242
+    /* "pyBedGraph/ignore_missing_bp.pyx":286
  * 
  *         value_index = index_list[start]
  *         while interval_start[value_index] < end:             # <<<<<<<<<<<<<<
@@ -5218,12 +6053,12 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
       if (unlikely(__pyx_t_17 >= (size_t)__pyx_v_interval_start.shape[0])) __pyx_t_12 = 0;
       if (unlikely(__pyx_t_12 != -1)) {
         __Pyx_RaiseBufferIndexError(__pyx_t_12);
-        __PYX_ERR(0, 242, __pyx_L1_error)
+        __PYX_ERR(0, 286, __pyx_L1_error)
       }
       __pyx_t_4 = (((*((unsigned int *) ( /* dim=0 */ (__pyx_v_interval_start.data + __pyx_t_17 * __pyx_v_interval_start.strides[0]) ))) < __pyx_v_end) != 0);
       if (!__pyx_t_4) break;
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":243
+      /* "pyBedGraph/ignore_missing_bp.pyx":287
  *         value_index = index_list[start]
  *         while interval_start[value_index] < end:
  *             if value_map[value_index] < minimum:             # <<<<<<<<<<<<<<
@@ -5235,12 +6070,12 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
       if (unlikely(__pyx_t_18 >= (size_t)__pyx_v_value_map.shape[0])) __pyx_t_12 = 0;
       if (unlikely(__pyx_t_12 != -1)) {
         __Pyx_RaiseBufferIndexError(__pyx_t_12);
-        __PYX_ERR(0, 243, __pyx_L1_error)
+        __PYX_ERR(0, 287, __pyx_L1_error)
       }
       __pyx_t_4 = (((*((double *) ( /* dim=0 */ (__pyx_v_value_map.data + __pyx_t_18 * __pyx_v_value_map.strides[0]) ))) < __pyx_v_minimum) != 0);
       if (__pyx_t_4) {
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":244
+        /* "pyBedGraph/ignore_missing_bp.pyx":288
  *         while interval_start[value_index] < end:
  *             if value_map[value_index] < minimum:
  *                 minimum = value_map[value_index]             # <<<<<<<<<<<<<<
@@ -5252,11 +6087,11 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
         if (unlikely(__pyx_t_19 >= (size_t)__pyx_v_value_map.shape[0])) __pyx_t_12 = 0;
         if (unlikely(__pyx_t_12 != -1)) {
           __Pyx_RaiseBufferIndexError(__pyx_t_12);
-          __PYX_ERR(0, 244, __pyx_L1_error)
+          __PYX_ERR(0, 288, __pyx_L1_error)
         }
         __pyx_v_minimum = (*((double *) ( /* dim=0 */ (__pyx_v_value_map.data + __pyx_t_19 * __pyx_v_value_map.strides[0]) )));
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":243
+        /* "pyBedGraph/ignore_missing_bp.pyx":287
  *         value_index = index_list[start]
  *         while interval_start[value_index] < end:
  *             if value_map[value_index] < minimum:             # <<<<<<<<<<<<<<
@@ -5265,7 +6100,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
  */
       }
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":246
+      /* "pyBedGraph/ignore_missing_bp.pyx":290
  *                 minimum = value_map[value_index]
  * 
  *             value_index += 1             # <<<<<<<<<<<<<<
@@ -5274,7 +6109,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
  */
       __pyx_v_value_index = (__pyx_v_value_index + 1);
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":247
+      /* "pyBedGraph/ignore_missing_bp.pyx":291
  * 
  *             value_index += 1
  *             if value_index == numb_intervals:             # <<<<<<<<<<<<<<
@@ -5284,7 +6119,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
       __pyx_t_4 = ((__pyx_v_value_index == __pyx_v_numb_intervals) != 0);
       if (__pyx_t_4) {
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":248
+        /* "pyBedGraph/ignore_missing_bp.pyx":292
  *             value_index += 1
  *             if value_index == numb_intervals:
  *                 break             # <<<<<<<<<<<<<<
@@ -5293,7 +6128,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
  */
         goto __pyx_L11_break;
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":247
+        /* "pyBedGraph/ignore_missing_bp.pyx":291
  * 
  *             value_index += 1
  *             if value_index == numb_intervals:             # <<<<<<<<<<<<<<
@@ -5304,7 +6139,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
     }
     __pyx_L11_break:;
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":250
+    /* "pyBedGraph/ignore_missing_bp.pyx":294
  *                 break
  * 
  *         if minimum != DBL_MAX:             # <<<<<<<<<<<<<<
@@ -5314,7 +6149,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
     __pyx_t_4 = ((__pyx_v_minimum != DBL_MAX) != 0);
     if (__pyx_t_4) {
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":251
+      /* "pyBedGraph/ignore_missing_bp.pyx":295
  * 
  *         if minimum != DBL_MAX:
  *             result_view[i] = minimum             # <<<<<<<<<<<<<<
@@ -5326,11 +6161,11 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
       if (unlikely(__pyx_t_20 >= (size_t)__pyx_v_result_view.shape[0])) __pyx_t_12 = 0;
       if (unlikely(__pyx_t_12 != -1)) {
         __Pyx_RaiseBufferIndexError(__pyx_t_12);
-        __PYX_ERR(0, 251, __pyx_L1_error)
+        __PYX_ERR(0, 295, __pyx_L1_error)
       }
       *((double *) ( /* dim=0 */ (__pyx_v_result_view.data + __pyx_t_20 * __pyx_v_result_view.strides[0]) )) = __pyx_v_minimum;
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":250
+      /* "pyBedGraph/ignore_missing_bp.pyx":294
  *                 break
  * 
  *         if minimum != DBL_MAX:             # <<<<<<<<<<<<<<
@@ -5341,7 +6176,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
     __pyx_L3_continue:;
   }
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":253
+  /* "pyBedGraph/ignore_missing_bp.pyx":297
  *             result_view[i] = minimum
  * 
  *     return result             # <<<<<<<<<<<<<<
@@ -5353,7 +6188,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":216
+  /* "pyBedGraph/ignore_missing_bp.pyx":260
  *     return result
  * 
  * def get_minimums(double[:] value_map, int[:] index_list,             # <<<<<<<<<<<<<<
@@ -5385,7 +6220,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
   return __pyx_r;
 }
 
-/* "pyBedGraph/ignore_missing_bp.pyx":255
+/* "pyBedGraph/ignore_missing_bp.pyx":299
  *     return result
  * 
  * def get_maximums(double[:] value_map, int[:] index_list,             # <<<<<<<<<<<<<<
@@ -5394,9 +6229,9 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_8get_minimums(CYTHON_
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_11get_maximums(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_10pyBedGraph_17ignore_missing_bp_11get_maximums = {"get_maximums", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10pyBedGraph_17ignore_missing_bp_11get_maximums, METH_VARARGS|METH_KEYWORDS, 0};
-static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_11get_maximums(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_15get_maximums(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_10pyBedGraph_17ignore_missing_bp_15get_maximums = {"get_maximums", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10pyBedGraph_17ignore_missing_bp_15get_maximums, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_15get_maximums(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   __Pyx_memviewslice __pyx_v_value_map = { 0, 0, { 0 }, { 0 }, { 0 } };
   __Pyx_memviewslice __pyx_v_index_list = { 0, 0, { 0 }, { 0 }, { 0 } };
   __Pyx_memviewslice __pyx_v_interval_start = { 0, 0, { 0 }, { 0 }, { 0 } };
@@ -5437,35 +6272,35 @@ static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_11get_maximums(PyObje
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_index_list)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_maximums", 1, 6, 6, 1); __PYX_ERR(0, 255, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_maximums", 1, 6, 6, 1); __PYX_ERR(0, 299, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_interval_start)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_maximums", 1, 6, 6, 2); __PYX_ERR(0, 255, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_maximums", 1, 6, 6, 2); __PYX_ERR(0, 299, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  3:
         if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_interval_end)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_maximums", 1, 6, 6, 3); __PYX_ERR(0, 255, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_maximums", 1, 6, 6, 3); __PYX_ERR(0, 299, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  4:
         if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start_list)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_maximums", 1, 6, 6, 4); __PYX_ERR(0, 255, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_maximums", 1, 6, 6, 4); __PYX_ERR(0, 299, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  5:
         if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_end_list)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_maximums", 1, 6, 6, 5); __PYX_ERR(0, 255, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_maximums", 1, 6, 6, 5); __PYX_ERR(0, 299, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_maximums") < 0)) __PYX_ERR(0, 255, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_maximums") < 0)) __PYX_ERR(0, 299, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
       goto __pyx_L5_argtuple_error;
@@ -5477,29 +6312,29 @@ static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_11get_maximums(PyObje
       values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
       values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
     }
-    __pyx_v_value_map = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_value_map.memview)) __PYX_ERR(0, 255, __pyx_L3_error)
-    __pyx_v_index_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_index_list.memview)) __PYX_ERR(0, 255, __pyx_L3_error)
-    __pyx_v_interval_start = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interval_start.memview)) __PYX_ERR(0, 256, __pyx_L3_error)
-    __pyx_v_interval_end = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interval_end.memview)) __PYX_ERR(0, 256, __pyx_L3_error)
-    __pyx_v_start_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_start_list.memview)) __PYX_ERR(0, 257, __pyx_L3_error)
-    __pyx_v_end_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_end_list.memview)) __PYX_ERR(0, 257, __pyx_L3_error)
+    __pyx_v_value_map = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_value_map.memview)) __PYX_ERR(0, 299, __pyx_L3_error)
+    __pyx_v_index_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_index_list.memview)) __PYX_ERR(0, 299, __pyx_L3_error)
+    __pyx_v_interval_start = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interval_start.memview)) __PYX_ERR(0, 300, __pyx_L3_error)
+    __pyx_v_interval_end = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interval_end.memview)) __PYX_ERR(0, 300, __pyx_L3_error)
+    __pyx_v_start_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_start_list.memview)) __PYX_ERR(0, 301, __pyx_L3_error)
+    __pyx_v_end_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_end_list.memview)) __PYX_ERR(0, 301, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("get_maximums", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 255, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("get_maximums", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 299, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("pyBedGraph.ignore_missing_bp.get_maximums", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(__pyx_self, __pyx_v_value_map, __pyx_v_index_list, __pyx_v_interval_start, __pyx_v_interval_end, __pyx_v_start_list, __pyx_v_end_list);
+  __pyx_r = __pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_maximums(__pyx_self, __pyx_v_value_map, __pyx_v_index_list, __pyx_v_interval_start, __pyx_v_interval_end, __pyx_v_start_list, __pyx_v_end_list);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_value_map, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_interval_end, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list) {
+static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_maximums(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_value_map, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_interval_end, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list) {
   size_t __pyx_v_i;
   size_t __pyx_v_num_tests;
   size_t __pyx_v_start;
@@ -5533,7 +6368,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
   size_t __pyx_t_19;
   __Pyx_RefNannySetupContext("get_maximums", 0);
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":259
+  /* "pyBedGraph/ignore_missing_bp.pyx":303
  *                  int[:] start_list, int[:] end_list):
  * 
  *     assert tuple(start_list.shape) == tuple(end_list.shape)             # <<<<<<<<<<<<<<
@@ -5542,75 +6377,75 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!Py_OptimizeFlag)) {
-    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_start_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_start_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 303, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 303, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_end_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_end_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 303, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 259, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 303, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error)
+    __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 303, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 259, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 303, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     if (unlikely(!__pyx_t_4)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(0, 259, __pyx_L1_error)
+      __PYX_ERR(0, 303, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":261
+  /* "pyBedGraph/ignore_missing_bp.pyx":305
  *     assert tuple(start_list.shape) == tuple(end_list.shape)
  * 
  *     cdef size_t i, num_tests = start_list.size, start, end, value_index             # <<<<<<<<<<<<<<
  *     cdef size_t numb_intervals = interval_start.size
  *     cdef double maximum, value
  */
-  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_start_list, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error)
+  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_start_list, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 305, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 261, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 305, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 261, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 305, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_num_tests = __pyx_t_5;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":262
+  /* "pyBedGraph/ignore_missing_bp.pyx":306
  * 
  *     cdef size_t i, num_tests = start_list.size, start, end, value_index
  *     cdef size_t numb_intervals = interval_start.size             # <<<<<<<<<<<<<<
  *     cdef double maximum, value
  * 
  */
-  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_interval_start, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_int, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_int, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 262, __pyx_L1_error)
+  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_interval_start, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_int, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_int, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 306, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 262, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 306, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 262, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 306, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_numb_intervals = __pyx_t_5;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":265
+  /* "pyBedGraph/ignore_missing_bp.pyx":309
  *     cdef double maximum, value
  * 
  *     result = np.full(num_tests, -1, dtype=np.float64)             # <<<<<<<<<<<<<<
  *     cdef double[:] result_view = result
  * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 265, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 309, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_full); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 265, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_full); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 309, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_v_num_tests); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 265, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_v_num_tests); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 309, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 265, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 309, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
@@ -5618,16 +6453,16 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
   __Pyx_GIVEREF(__pyx_int_neg_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_neg_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 265, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 309, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 265, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 309, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_float64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 265, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_float64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 309, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 265, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 309, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 265, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 309, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -5635,19 +6470,19 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
   __pyx_v_result = __pyx_t_7;
   __pyx_t_7 = 0;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":266
+  /* "pyBedGraph/ignore_missing_bp.pyx":310
  * 
  *     result = np.full(num_tests, -1, dtype=np.float64)
  *     cdef double[:] result_view = result             # <<<<<<<<<<<<<<
  * 
  *     for i in range(num_tests):
  */
-  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_result, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 266, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_result, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 310, __pyx_L1_error)
   __pyx_v_result_view = __pyx_t_8;
   __pyx_t_8.memview = NULL;
   __pyx_t_8.data = NULL;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":268
+  /* "pyBedGraph/ignore_missing_bp.pyx":312
  *     cdef double[:] result_view = result
  * 
  *     for i in range(num_tests):             # <<<<<<<<<<<<<<
@@ -5659,7 +6494,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
   for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
     __pyx_v_i = __pyx_t_10;
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":269
+    /* "pyBedGraph/ignore_missing_bp.pyx":313
  * 
  *     for i in range(num_tests):
  *         maximum = -1             # <<<<<<<<<<<<<<
@@ -5668,7 +6503,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
  */
     __pyx_v_maximum = -1.0;
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":270
+    /* "pyBedGraph/ignore_missing_bp.pyx":314
  *     for i in range(num_tests):
  *         maximum = -1
  *         start = start_list[i]             # <<<<<<<<<<<<<<
@@ -5680,11 +6515,11 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
     if (unlikely(__pyx_t_11 >= (size_t)__pyx_v_start_list.shape[0])) __pyx_t_12 = 0;
     if (unlikely(__pyx_t_12 != -1)) {
       __Pyx_RaiseBufferIndexError(__pyx_t_12);
-      __PYX_ERR(0, 270, __pyx_L1_error)
+      __PYX_ERR(0, 314, __pyx_L1_error)
     }
     __pyx_v_start = (*((int *) ( /* dim=0 */ (__pyx_v_start_list.data + __pyx_t_11 * __pyx_v_start_list.strides[0]) )));
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":271
+    /* "pyBedGraph/ignore_missing_bp.pyx":315
  *         maximum = -1
  *         start = start_list[i]
  *         end = end_list[i]             # <<<<<<<<<<<<<<
@@ -5696,11 +6531,11 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
     if (unlikely(__pyx_t_13 >= (size_t)__pyx_v_end_list.shape[0])) __pyx_t_12 = 0;
     if (unlikely(__pyx_t_12 != -1)) {
       __Pyx_RaiseBufferIndexError(__pyx_t_12);
-      __PYX_ERR(0, 271, __pyx_L1_error)
+      __PYX_ERR(0, 315, __pyx_L1_error)
     }
     __pyx_v_end = (*((int *) ( /* dim=0 */ (__pyx_v_end_list.data + __pyx_t_13 * __pyx_v_end_list.strides[0]) )));
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":274
+    /* "pyBedGraph/ignore_missing_bp.pyx":318
  * 
  *         # get to an interval
  *         while start < end and index_list[start] == -1:             # <<<<<<<<<<<<<<
@@ -5719,14 +6554,14 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
       if (unlikely(__pyx_t_15 >= (size_t)__pyx_v_index_list.shape[0])) __pyx_t_12 = 0;
       if (unlikely(__pyx_t_12 != -1)) {
         __Pyx_RaiseBufferIndexError(__pyx_t_12);
-        __PYX_ERR(0, 274, __pyx_L1_error)
+        __PYX_ERR(0, 318, __pyx_L1_error)
       }
       __pyx_t_14 = (((*((int *) ( /* dim=0 */ (__pyx_v_index_list.data + __pyx_t_15 * __pyx_v_index_list.strides[0]) ))) == -1L) != 0);
       __pyx_t_4 = __pyx_t_14;
       __pyx_L7_bool_binop_done:;
       if (!__pyx_t_4) break;
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":275
+      /* "pyBedGraph/ignore_missing_bp.pyx":319
  *         # get to an interval
  *         while start < end and index_list[start] == -1:
  *             start += 1             # <<<<<<<<<<<<<<
@@ -5736,7 +6571,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
       __pyx_v_start = (__pyx_v_start + 1);
     }
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":277
+    /* "pyBedGraph/ignore_missing_bp.pyx":321
  *             start += 1
  * 
  *         if start == end:             # <<<<<<<<<<<<<<
@@ -5746,7 +6581,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
     __pyx_t_4 = ((__pyx_v_start == __pyx_v_end) != 0);
     if (__pyx_t_4) {
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":278
+      /* "pyBedGraph/ignore_missing_bp.pyx":322
  * 
  *         if start == end:
  *             continue             # <<<<<<<<<<<<<<
@@ -5755,7 +6590,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
  */
       goto __pyx_L3_continue;
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":277
+      /* "pyBedGraph/ignore_missing_bp.pyx":321
  *             start += 1
  * 
  *         if start == end:             # <<<<<<<<<<<<<<
@@ -5764,7 +6599,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
  */
     }
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":280
+    /* "pyBedGraph/ignore_missing_bp.pyx":324
  *             continue
  * 
  *         value_index = index_list[start]             # <<<<<<<<<<<<<<
@@ -5776,11 +6611,11 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
     if (unlikely(__pyx_t_16 >= (size_t)__pyx_v_index_list.shape[0])) __pyx_t_12 = 0;
     if (unlikely(__pyx_t_12 != -1)) {
       __Pyx_RaiseBufferIndexError(__pyx_t_12);
-      __PYX_ERR(0, 280, __pyx_L1_error)
+      __PYX_ERR(0, 324, __pyx_L1_error)
     }
     __pyx_v_value_index = (*((int *) ( /* dim=0 */ (__pyx_v_index_list.data + __pyx_t_16 * __pyx_v_index_list.strides[0]) )));
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":281
+    /* "pyBedGraph/ignore_missing_bp.pyx":325
  * 
  *         value_index = index_list[start]
  *         while interval_start[value_index] < end:             # <<<<<<<<<<<<<<
@@ -5793,12 +6628,12 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
       if (unlikely(__pyx_t_17 >= (size_t)__pyx_v_interval_start.shape[0])) __pyx_t_12 = 0;
       if (unlikely(__pyx_t_12 != -1)) {
         __Pyx_RaiseBufferIndexError(__pyx_t_12);
-        __PYX_ERR(0, 281, __pyx_L1_error)
+        __PYX_ERR(0, 325, __pyx_L1_error)
       }
       __pyx_t_4 = (((*((unsigned int *) ( /* dim=0 */ (__pyx_v_interval_start.data + __pyx_t_17 * __pyx_v_interval_start.strides[0]) ))) < __pyx_v_end) != 0);
       if (!__pyx_t_4) break;
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":282
+      /* "pyBedGraph/ignore_missing_bp.pyx":326
  *         value_index = index_list[start]
  *         while interval_start[value_index] < end:
  *             value = value_map[value_index]             # <<<<<<<<<<<<<<
@@ -5810,11 +6645,11 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
       if (unlikely(__pyx_t_18 >= (size_t)__pyx_v_value_map.shape[0])) __pyx_t_12 = 0;
       if (unlikely(__pyx_t_12 != -1)) {
         __Pyx_RaiseBufferIndexError(__pyx_t_12);
-        __PYX_ERR(0, 282, __pyx_L1_error)
+        __PYX_ERR(0, 326, __pyx_L1_error)
       }
       __pyx_v_value = (*((double *) ( /* dim=0 */ (__pyx_v_value_map.data + __pyx_t_18 * __pyx_v_value_map.strides[0]) )));
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":283
+      /* "pyBedGraph/ignore_missing_bp.pyx":327
  *         while interval_start[value_index] < end:
  *             value = value_map[value_index]
  *             if value > maximum:             # <<<<<<<<<<<<<<
@@ -5824,7 +6659,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
       __pyx_t_4 = ((__pyx_v_value > __pyx_v_maximum) != 0);
       if (__pyx_t_4) {
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":284
+        /* "pyBedGraph/ignore_missing_bp.pyx":328
  *             value = value_map[value_index]
  *             if value > maximum:
  *                 maximum = value             # <<<<<<<<<<<<<<
@@ -5833,7 +6668,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
  */
         __pyx_v_maximum = __pyx_v_value;
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":283
+        /* "pyBedGraph/ignore_missing_bp.pyx":327
  *         while interval_start[value_index] < end:
  *             value = value_map[value_index]
  *             if value > maximum:             # <<<<<<<<<<<<<<
@@ -5842,7 +6677,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
  */
       }
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":286
+      /* "pyBedGraph/ignore_missing_bp.pyx":330
  *                 maximum = value
  * 
  *             value_index += 1             # <<<<<<<<<<<<<<
@@ -5851,7 +6686,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
  */
       __pyx_v_value_index = (__pyx_v_value_index + 1);
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":287
+      /* "pyBedGraph/ignore_missing_bp.pyx":331
  * 
  *             value_index += 1
  *             if value_index == numb_intervals:             # <<<<<<<<<<<<<<
@@ -5861,7 +6696,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
       __pyx_t_4 = ((__pyx_v_value_index == __pyx_v_numb_intervals) != 0);
       if (__pyx_t_4) {
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":288
+        /* "pyBedGraph/ignore_missing_bp.pyx":332
  *             value_index += 1
  *             if value_index == numb_intervals:
  *                 break             # <<<<<<<<<<<<<<
@@ -5870,7 +6705,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
  */
         goto __pyx_L11_break;
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":287
+        /* "pyBedGraph/ignore_missing_bp.pyx":331
  * 
  *             value_index += 1
  *             if value_index == numb_intervals:             # <<<<<<<<<<<<<<
@@ -5881,7 +6716,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
     }
     __pyx_L11_break:;
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":290
+    /* "pyBedGraph/ignore_missing_bp.pyx":334
  *                 break
  * 
  *         if maximum != -1:             # <<<<<<<<<<<<<<
@@ -5891,7 +6726,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
     __pyx_t_4 = ((__pyx_v_maximum != -1.0) != 0);
     if (__pyx_t_4) {
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":291
+      /* "pyBedGraph/ignore_missing_bp.pyx":335
  * 
  *         if maximum != -1:
  *             result_view[i] = maximum             # <<<<<<<<<<<<<<
@@ -5903,11 +6738,11 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
       if (unlikely(__pyx_t_19 >= (size_t)__pyx_v_result_view.shape[0])) __pyx_t_12 = 0;
       if (unlikely(__pyx_t_12 != -1)) {
         __Pyx_RaiseBufferIndexError(__pyx_t_12);
-        __PYX_ERR(0, 291, __pyx_L1_error)
+        __PYX_ERR(0, 335, __pyx_L1_error)
       }
       *((double *) ( /* dim=0 */ (__pyx_v_result_view.data + __pyx_t_19 * __pyx_v_result_view.strides[0]) )) = __pyx_v_maximum;
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":290
+      /* "pyBedGraph/ignore_missing_bp.pyx":334
  *                 break
  * 
  *         if maximum != -1:             # <<<<<<<<<<<<<<
@@ -5918,7 +6753,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
     __pyx_L3_continue:;
   }
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":293
+  /* "pyBedGraph/ignore_missing_bp.pyx":337
  *             result_view[i] = maximum
  * 
  *     return result             # <<<<<<<<<<<<<<
@@ -5930,7 +6765,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":255
+  /* "pyBedGraph/ignore_missing_bp.pyx":299
  *     return result
  * 
  * def get_maximums(double[:] value_map, int[:] index_list,             # <<<<<<<<<<<<<<
@@ -5962,7 +6797,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
   return __pyx_r;
 }
 
-/* "pyBedGraph/ignore_missing_bp.pyx":295
+/* "pyBedGraph/ignore_missing_bp.pyx":339
  *     return result
  * 
  * def get_coverages(int[:] index_list, unsigned int[:] interval_start,             # <<<<<<<<<<<<<<
@@ -5971,9 +6806,9 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_10get_maximums(CYTHON
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_13get_coverages(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_10pyBedGraph_17ignore_missing_bp_13get_coverages = {"get_coverages", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10pyBedGraph_17ignore_missing_bp_13get_coverages, METH_VARARGS|METH_KEYWORDS, 0};
-static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_13get_coverages(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_17get_coverages(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_10pyBedGraph_17ignore_missing_bp_17get_coverages = {"get_coverages", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10pyBedGraph_17ignore_missing_bp_17get_coverages, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_17get_coverages(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   __Pyx_memviewslice __pyx_v_index_list = { 0, 0, { 0 }, { 0 }, { 0 } };
   __Pyx_memviewslice __pyx_v_interval_start = { 0, 0, { 0 }, { 0 }, { 0 } };
   __Pyx_memviewslice __pyx_v_interval_end = { 0, 0, { 0 }, { 0 }, { 0 } };
@@ -6011,29 +6846,29 @@ static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_13get_coverages(PyObj
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_interval_start)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_coverages", 1, 5, 5, 1); __PYX_ERR(0, 295, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_coverages", 1, 5, 5, 1); __PYX_ERR(0, 339, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_interval_end)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_coverages", 1, 5, 5, 2); __PYX_ERR(0, 295, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_coverages", 1, 5, 5, 2); __PYX_ERR(0, 339, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  3:
         if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start_list)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_coverages", 1, 5, 5, 3); __PYX_ERR(0, 295, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_coverages", 1, 5, 5, 3); __PYX_ERR(0, 339, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  4:
         if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_end_list)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_coverages", 1, 5, 5, 4); __PYX_ERR(0, 295, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_coverages", 1, 5, 5, 4); __PYX_ERR(0, 339, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_coverages") < 0)) __PYX_ERR(0, 295, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_coverages") < 0)) __PYX_ERR(0, 339, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
       goto __pyx_L5_argtuple_error;
@@ -6044,28 +6879,28 @@ static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_13get_coverages(PyObj
       values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
       values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
     }
-    __pyx_v_index_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_index_list.memview)) __PYX_ERR(0, 295, __pyx_L3_error)
-    __pyx_v_interval_start = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interval_start.memview)) __PYX_ERR(0, 295, __pyx_L3_error)
-    __pyx_v_interval_end = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interval_end.memview)) __PYX_ERR(0, 296, __pyx_L3_error)
-    __pyx_v_start_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_start_list.memview)) __PYX_ERR(0, 296, __pyx_L3_error)
-    __pyx_v_end_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_end_list.memview)) __PYX_ERR(0, 296, __pyx_L3_error)
+    __pyx_v_index_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_index_list.memview)) __PYX_ERR(0, 339, __pyx_L3_error)
+    __pyx_v_interval_start = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interval_start.memview)) __PYX_ERR(0, 339, __pyx_L3_error)
+    __pyx_v_interval_end = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interval_end.memview)) __PYX_ERR(0, 340, __pyx_L3_error)
+    __pyx_v_start_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_start_list.memview)) __PYX_ERR(0, 340, __pyx_L3_error)
+    __pyx_v_end_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_end_list.memview)) __PYX_ERR(0, 340, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("get_coverages", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 295, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("get_coverages", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 339, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("pyBedGraph.ignore_missing_bp.get_coverages", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(__pyx_self, __pyx_v_index_list, __pyx_v_interval_start, __pyx_v_interval_end, __pyx_v_start_list, __pyx_v_end_list);
+  __pyx_r = __pyx_pf_10pyBedGraph_17ignore_missing_bp_16get_coverages(__pyx_self, __pyx_v_index_list, __pyx_v_interval_start, __pyx_v_interval_end, __pyx_v_start_list, __pyx_v_end_list);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, __Pyx_memviewslice __pyx_v_interval_end, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list) {
+static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_16get_coverages(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, __Pyx_memviewslice __pyx_v_interval_end, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list) {
   size_t __pyx_v_i;
   size_t __pyx_v_num_tests;
   size_t __pyx_v_start;
@@ -6101,7 +6936,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
   size_t __pyx_t_20;
   __Pyx_RefNannySetupContext("get_coverages", 0);
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":298
+  /* "pyBedGraph/ignore_missing_bp.pyx":342
  *                   unsigned int[:] interval_end, int[:] start_list, int[:] end_list):
  * 
  *     assert tuple(start_list.shape) == tuple(end_list.shape)             # <<<<<<<<<<<<<<
@@ -6110,89 +6945,89 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!Py_OptimizeFlag)) {
-    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_start_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 298, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_start_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 342, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 298, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 342, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_end_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 298, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_end_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 342, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 298, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 342, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 298, __pyx_L1_error)
+    __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 342, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 298, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 342, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     if (unlikely(!__pyx_t_4)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(0, 298, __pyx_L1_error)
+      __PYX_ERR(0, 342, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":300
+  /* "pyBedGraph/ignore_missing_bp.pyx":344
  *     assert tuple(start_list.shape) == tuple(end_list.shape)
  * 
  *     cdef size_t i, num_tests = start_list.size, start, end, current_start             # <<<<<<<<<<<<<<
  *     cdef size_t numb_intervals = interval_start.size
  *     cdef unsigned int numb_covered, temp_end, value_index
  */
-  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_start_list, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 300, __pyx_L1_error)
+  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_start_list, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 344, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 300, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 344, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 300, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 344, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_num_tests = __pyx_t_5;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":301
+  /* "pyBedGraph/ignore_missing_bp.pyx":345
  * 
  *     cdef size_t i, num_tests = start_list.size, start, end, current_start
  *     cdef size_t numb_intervals = interval_start.size             # <<<<<<<<<<<<<<
  *     cdef unsigned int numb_covered, temp_end, value_index
  * 
  */
-  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_interval_start, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_int, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_int, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 301, __pyx_L1_error)
+  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_interval_start, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_int, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_int, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 345, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 301, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 345, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 301, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 345, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_numb_intervals = __pyx_t_5;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":304
+  /* "pyBedGraph/ignore_missing_bp.pyx":348
  *     cdef unsigned int numb_covered, temp_end, value_index
  * 
  *     result = np.zeros(num_tests, dtype=np.float64)             # <<<<<<<<<<<<<<
  *     cdef double[:] result_view = result
  * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 304, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 348, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 304, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 348, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_v_num_tests); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 304, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_v_num_tests); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 348, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 304, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 348, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 304, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 348, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 304, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 348, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_float64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 304, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_float64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 348, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 304, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 348, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 304, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 348, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -6200,19 +7035,19 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
   __pyx_v_result = __pyx_t_7;
   __pyx_t_7 = 0;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":305
+  /* "pyBedGraph/ignore_missing_bp.pyx":349
  * 
  *     result = np.zeros(num_tests, dtype=np.float64)
  *     cdef double[:] result_view = result             # <<<<<<<<<<<<<<
  * 
  *     for i in range(num_tests):
  */
-  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_result, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 305, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_result, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 349, __pyx_L1_error)
   __pyx_v_result_view = __pyx_t_8;
   __pyx_t_8.memview = NULL;
   __pyx_t_8.data = NULL;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":307
+  /* "pyBedGraph/ignore_missing_bp.pyx":351
  *     cdef double[:] result_view = result
  * 
  *     for i in range(num_tests):             # <<<<<<<<<<<<<<
@@ -6224,7 +7059,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
   for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
     __pyx_v_i = __pyx_t_10;
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":308
+    /* "pyBedGraph/ignore_missing_bp.pyx":352
  * 
  *     for i in range(num_tests):
  *         numb_covered = 0             # <<<<<<<<<<<<<<
@@ -6233,7 +7068,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
  */
     __pyx_v_numb_covered = 0;
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":309
+    /* "pyBedGraph/ignore_missing_bp.pyx":353
  *     for i in range(num_tests):
  *         numb_covered = 0
  *         start = start_list[i]             # <<<<<<<<<<<<<<
@@ -6245,11 +7080,11 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
     if (unlikely(__pyx_t_11 >= (size_t)__pyx_v_start_list.shape[0])) __pyx_t_12 = 0;
     if (unlikely(__pyx_t_12 != -1)) {
       __Pyx_RaiseBufferIndexError(__pyx_t_12);
-      __PYX_ERR(0, 309, __pyx_L1_error)
+      __PYX_ERR(0, 353, __pyx_L1_error)
     }
     __pyx_v_start = (*((int *) ( /* dim=0 */ (__pyx_v_start_list.data + __pyx_t_11 * __pyx_v_start_list.strides[0]) )));
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":310
+    /* "pyBedGraph/ignore_missing_bp.pyx":354
  *         numb_covered = 0
  *         start = start_list[i]
  *         end = end_list[i]             # <<<<<<<<<<<<<<
@@ -6261,11 +7096,11 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
     if (unlikely(__pyx_t_13 >= (size_t)__pyx_v_end_list.shape[0])) __pyx_t_12 = 0;
     if (unlikely(__pyx_t_12 != -1)) {
       __Pyx_RaiseBufferIndexError(__pyx_t_12);
-      __PYX_ERR(0, 310, __pyx_L1_error)
+      __PYX_ERR(0, 354, __pyx_L1_error)
     }
     __pyx_v_end = (*((int *) ( /* dim=0 */ (__pyx_v_end_list.data + __pyx_t_13 * __pyx_v_end_list.strides[0]) )));
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":311
+    /* "pyBedGraph/ignore_missing_bp.pyx":355
  *         start = start_list[i]
  *         end = end_list[i]
  *         current_start = start             # <<<<<<<<<<<<<<
@@ -6274,7 +7109,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
  */
     __pyx_v_current_start = __pyx_v_start;
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":314
+    /* "pyBedGraph/ignore_missing_bp.pyx":358
  * 
  *         # get to an interval
  *         while current_start < end and index_list[current_start] == -1:             # <<<<<<<<<<<<<<
@@ -6293,14 +7128,14 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
       if (unlikely(__pyx_t_15 >= (size_t)__pyx_v_index_list.shape[0])) __pyx_t_12 = 0;
       if (unlikely(__pyx_t_12 != -1)) {
         __Pyx_RaiseBufferIndexError(__pyx_t_12);
-        __PYX_ERR(0, 314, __pyx_L1_error)
+        __PYX_ERR(0, 358, __pyx_L1_error)
       }
       __pyx_t_14 = (((*((int *) ( /* dim=0 */ (__pyx_v_index_list.data + __pyx_t_15 * __pyx_v_index_list.strides[0]) ))) == -1L) != 0);
       __pyx_t_4 = __pyx_t_14;
       __pyx_L7_bool_binop_done:;
       if (!__pyx_t_4) break;
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":315
+      /* "pyBedGraph/ignore_missing_bp.pyx":359
  *         # get to an interval
  *         while current_start < end and index_list[current_start] == -1:
  *             current_start += 1             # <<<<<<<<<<<<<<
@@ -6310,7 +7145,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
       __pyx_v_current_start = (__pyx_v_current_start + 1);
     }
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":317
+    /* "pyBedGraph/ignore_missing_bp.pyx":361
  *             current_start += 1
  * 
  *         if current_start == end:             # <<<<<<<<<<<<<<
@@ -6320,7 +7155,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
     __pyx_t_4 = ((__pyx_v_current_start == __pyx_v_end) != 0);
     if (__pyx_t_4) {
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":318
+      /* "pyBedGraph/ignore_missing_bp.pyx":362
  * 
  *         if current_start == end:
  *             continue             # <<<<<<<<<<<<<<
@@ -6329,7 +7164,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
  */
       goto __pyx_L3_continue;
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":317
+      /* "pyBedGraph/ignore_missing_bp.pyx":361
  *             current_start += 1
  * 
  *         if current_start == end:             # <<<<<<<<<<<<<<
@@ -6338,7 +7173,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
  */
     }
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":320
+    /* "pyBedGraph/ignore_missing_bp.pyx":364
  *             continue
  * 
  *         value_index = index_list[current_start]             # <<<<<<<<<<<<<<
@@ -6350,11 +7185,11 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
     if (unlikely(__pyx_t_16 >= (size_t)__pyx_v_index_list.shape[0])) __pyx_t_12 = 0;
     if (unlikely(__pyx_t_12 != -1)) {
       __Pyx_RaiseBufferIndexError(__pyx_t_12);
-      __PYX_ERR(0, 320, __pyx_L1_error)
+      __PYX_ERR(0, 364, __pyx_L1_error)
     }
     __pyx_v_value_index = (*((int *) ( /* dim=0 */ (__pyx_v_index_list.data + __pyx_t_16 * __pyx_v_index_list.strides[0]) )));
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":321
+    /* "pyBedGraph/ignore_missing_bp.pyx":365
  * 
  *         value_index = index_list[current_start]
  *         while current_start < end:             # <<<<<<<<<<<<<<
@@ -6365,7 +7200,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
       __pyx_t_4 = ((__pyx_v_current_start < __pyx_v_end) != 0);
       if (!__pyx_t_4) break;
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":322
+      /* "pyBedGraph/ignore_missing_bp.pyx":366
  *         value_index = index_list[current_start]
  *         while current_start < end:
  *             temp_end = interval_end[value_index]             # <<<<<<<<<<<<<<
@@ -6377,11 +7212,11 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
       if (unlikely(__pyx_t_17 >= (size_t)__pyx_v_interval_end.shape[0])) __pyx_t_12 = 0;
       if (unlikely(__pyx_t_12 != -1)) {
         __Pyx_RaiseBufferIndexError(__pyx_t_12);
-        __PYX_ERR(0, 322, __pyx_L1_error)
+        __PYX_ERR(0, 366, __pyx_L1_error)
       }
       __pyx_v_temp_end = (*((unsigned int *) ( /* dim=0 */ (__pyx_v_interval_end.data + __pyx_t_17 * __pyx_v_interval_end.strides[0]) )));
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":323
+      /* "pyBedGraph/ignore_missing_bp.pyx":367
  *         while current_start < end:
  *             temp_end = interval_end[value_index]
  *             if temp_end > end:             # <<<<<<<<<<<<<<
@@ -6391,7 +7226,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
       __pyx_t_4 = ((__pyx_v_temp_end > __pyx_v_end) != 0);
       if (__pyx_t_4) {
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":324
+        /* "pyBedGraph/ignore_missing_bp.pyx":368
  *             temp_end = interval_end[value_index]
  *             if temp_end > end:
  *                 temp_end = end             # <<<<<<<<<<<<<<
@@ -6400,7 +7235,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
  */
         __pyx_v_temp_end = __pyx_v_end;
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":323
+        /* "pyBedGraph/ignore_missing_bp.pyx":367
  *         while current_start < end:
  *             temp_end = interval_end[value_index]
  *             if temp_end > end:             # <<<<<<<<<<<<<<
@@ -6409,7 +7244,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
  */
       }
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":325
+      /* "pyBedGraph/ignore_missing_bp.pyx":369
  *             if temp_end > end:
  *                 temp_end = end
  *             numb_covered += (temp_end - current_start)             # <<<<<<<<<<<<<<
@@ -6418,7 +7253,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
  */
       __pyx_v_numb_covered = (__pyx_v_numb_covered + (__pyx_v_temp_end - __pyx_v_current_start));
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":327
+      /* "pyBedGraph/ignore_missing_bp.pyx":371
  *             numb_covered += (temp_end - current_start)
  * 
  *             value_index += 1             # <<<<<<<<<<<<<<
@@ -6427,7 +7262,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
  */
       __pyx_v_value_index = (__pyx_v_value_index + 1);
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":328
+      /* "pyBedGraph/ignore_missing_bp.pyx":372
  * 
  *             value_index += 1
  *             if value_index == numb_intervals:             # <<<<<<<<<<<<<<
@@ -6437,7 +7272,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
       __pyx_t_4 = ((__pyx_v_value_index == __pyx_v_numb_intervals) != 0);
       if (__pyx_t_4) {
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":329
+        /* "pyBedGraph/ignore_missing_bp.pyx":373
  *             value_index += 1
  *             if value_index == numb_intervals:
  *                 break             # <<<<<<<<<<<<<<
@@ -6446,7 +7281,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
  */
         goto __pyx_L11_break;
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":328
+        /* "pyBedGraph/ignore_missing_bp.pyx":372
  * 
  *             value_index += 1
  *             if value_index == numb_intervals:             # <<<<<<<<<<<<<<
@@ -6455,7 +7290,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
  */
       }
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":330
+      /* "pyBedGraph/ignore_missing_bp.pyx":374
  *             if value_index == numb_intervals:
  *                 break
  *             current_start = interval_start[value_index]             # <<<<<<<<<<<<<<
@@ -6467,13 +7302,13 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
       if (unlikely(__pyx_t_18 >= (size_t)__pyx_v_interval_start.shape[0])) __pyx_t_12 = 0;
       if (unlikely(__pyx_t_12 != -1)) {
         __Pyx_RaiseBufferIndexError(__pyx_t_12);
-        __PYX_ERR(0, 330, __pyx_L1_error)
+        __PYX_ERR(0, 374, __pyx_L1_error)
       }
       __pyx_v_current_start = (*((unsigned int *) ( /* dim=0 */ (__pyx_v_interval_start.data + __pyx_t_18 * __pyx_v_interval_start.strides[0]) )));
     }
     __pyx_L11_break:;
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":332
+    /* "pyBedGraph/ignore_missing_bp.pyx":376
  *             current_start = interval_start[value_index]
  * 
  *         if numb_covered > 0:             # <<<<<<<<<<<<<<
@@ -6483,7 +7318,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
     __pyx_t_4 = ((__pyx_v_numb_covered > 0) != 0);
     if (__pyx_t_4) {
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":333
+      /* "pyBedGraph/ignore_missing_bp.pyx":377
  * 
  *         if numb_covered > 0:
  *             result_view[i] = <double>numb_covered / (end - start)             # <<<<<<<<<<<<<<
@@ -6493,18 +7328,18 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
       __pyx_t_19 = (__pyx_v_end - __pyx_v_start);
       if (unlikely(__pyx_t_19 == 0)) {
         PyErr_SetString(PyExc_ZeroDivisionError, "float division");
-        __PYX_ERR(0, 333, __pyx_L1_error)
+        __PYX_ERR(0, 377, __pyx_L1_error)
       }
       __pyx_t_20 = __pyx_v_i;
       __pyx_t_12 = -1;
       if (unlikely(__pyx_t_20 >= (size_t)__pyx_v_result_view.shape[0])) __pyx_t_12 = 0;
       if (unlikely(__pyx_t_12 != -1)) {
         __Pyx_RaiseBufferIndexError(__pyx_t_12);
-        __PYX_ERR(0, 333, __pyx_L1_error)
+        __PYX_ERR(0, 377, __pyx_L1_error)
       }
       *((double *) ( /* dim=0 */ (__pyx_v_result_view.data + __pyx_t_20 * __pyx_v_result_view.strides[0]) )) = (((double)__pyx_v_numb_covered) / ((double)__pyx_t_19));
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":332
+      /* "pyBedGraph/ignore_missing_bp.pyx":376
  *             current_start = interval_start[value_index]
  * 
  *         if numb_covered > 0:             # <<<<<<<<<<<<<<
@@ -6515,7 +7350,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
     __pyx_L3_continue:;
   }
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":335
+  /* "pyBedGraph/ignore_missing_bp.pyx":379
  *             result_view[i] = <double>numb_covered / (end - start)
  * 
  *     return result             # <<<<<<<<<<<<<<
@@ -6527,7 +7362,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":295
+  /* "pyBedGraph/ignore_missing_bp.pyx":339
  *     return result
  * 
  * def get_coverages(int[:] index_list, unsigned int[:] interval_start,             # <<<<<<<<<<<<<<
@@ -6558,7 +7393,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
   return __pyx_r;
 }
 
-/* "pyBedGraph/ignore_missing_bp.pyx":337
+/* "pyBedGraph/ignore_missing_bp.pyx":381
  *     return result
  * 
  * def get_stds(double[:] value_map, int[:] index_list,             # <<<<<<<<<<<<<<
@@ -6567,9 +7402,9 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_12get_coverages(CYTHO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_15get_stds(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_10pyBedGraph_17ignore_missing_bp_15get_stds = {"get_stds", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10pyBedGraph_17ignore_missing_bp_15get_stds, METH_VARARGS|METH_KEYWORDS, 0};
-static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_15get_stds(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_19get_stds(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_10pyBedGraph_17ignore_missing_bp_19get_stds = {"get_stds", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10pyBedGraph_17ignore_missing_bp_19get_stds, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_19get_stds(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   __Pyx_memviewslice __pyx_v_value_map = { 0, 0, { 0 }, { 0 }, { 0 } };
   __Pyx_memviewslice __pyx_v_index_list = { 0, 0, { 0 }, { 0 }, { 0 } };
   __Pyx_memviewslice __pyx_v_interval_start = { 0, 0, { 0 }, { 0 }, { 0 } };
@@ -6610,35 +7445,35 @@ static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_15get_stds(PyObject *
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_index_list)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_stds", 1, 6, 6, 1); __PYX_ERR(0, 337, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_stds", 1, 6, 6, 1); __PYX_ERR(0, 381, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_interval_start)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_stds", 1, 6, 6, 2); __PYX_ERR(0, 337, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_stds", 1, 6, 6, 2); __PYX_ERR(0, 381, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  3:
         if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_interval_end)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_stds", 1, 6, 6, 3); __PYX_ERR(0, 337, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_stds", 1, 6, 6, 3); __PYX_ERR(0, 381, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  4:
         if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start_list)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_stds", 1, 6, 6, 4); __PYX_ERR(0, 337, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_stds", 1, 6, 6, 4); __PYX_ERR(0, 381, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  5:
         if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_end_list)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("get_stds", 1, 6, 6, 5); __PYX_ERR(0, 337, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("get_stds", 1, 6, 6, 5); __PYX_ERR(0, 381, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_stds") < 0)) __PYX_ERR(0, 337, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_stds") < 0)) __PYX_ERR(0, 381, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
       goto __pyx_L5_argtuple_error;
@@ -6650,29 +7485,29 @@ static PyObject *__pyx_pw_10pyBedGraph_17ignore_missing_bp_15get_stds(PyObject *
       values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
       values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
     }
-    __pyx_v_value_map = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_value_map.memview)) __PYX_ERR(0, 337, __pyx_L3_error)
-    __pyx_v_index_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_index_list.memview)) __PYX_ERR(0, 337, __pyx_L3_error)
-    __pyx_v_interval_start = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interval_start.memview)) __PYX_ERR(0, 338, __pyx_L3_error)
-    __pyx_v_interval_end = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interval_end.memview)) __PYX_ERR(0, 338, __pyx_L3_error)
-    __pyx_v_start_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_start_list.memview)) __PYX_ERR(0, 339, __pyx_L3_error)
-    __pyx_v_end_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_end_list.memview)) __PYX_ERR(0, 339, __pyx_L3_error)
+    __pyx_v_value_map = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_value_map.memview)) __PYX_ERR(0, 381, __pyx_L3_error)
+    __pyx_v_index_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_index_list.memview)) __PYX_ERR(0, 381, __pyx_L3_error)
+    __pyx_v_interval_start = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interval_start.memview)) __PYX_ERR(0, 382, __pyx_L3_error)
+    __pyx_v_interval_end = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_interval_end.memview)) __PYX_ERR(0, 382, __pyx_L3_error)
+    __pyx_v_start_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_start_list.memview)) __PYX_ERR(0, 383, __pyx_L3_error)
+    __pyx_v_end_list = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_end_list.memview)) __PYX_ERR(0, 383, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("get_stds", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 337, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("get_stds", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 381, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("pyBedGraph.ignore_missing_bp.get_stds", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(__pyx_self, __pyx_v_value_map, __pyx_v_index_list, __pyx_v_interval_start, __pyx_v_interval_end, __pyx_v_start_list, __pyx_v_end_list);
+  __pyx_r = __pyx_pf_10pyBedGraph_17ignore_missing_bp_18get_stds(__pyx_self, __pyx_v_value_map, __pyx_v_index_list, __pyx_v_interval_start, __pyx_v_interval_end, __pyx_v_start_list, __pyx_v_end_list);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_value_map, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, __Pyx_memviewslice __pyx_v_interval_end, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list) {
+static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_18get_stds(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_value_map, __Pyx_memviewslice __pyx_v_index_list, __Pyx_memviewslice __pyx_v_interval_start, __Pyx_memviewslice __pyx_v_interval_end, __Pyx_memviewslice __pyx_v_start_list, __Pyx_memviewslice __pyx_v_end_list) {
   size_t __pyx_v_i;
   size_t __pyx_v_num_tests;
   size_t __pyx_v_start;
@@ -6714,7 +7549,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
   size_t __pyx_t_22;
   __Pyx_RefNannySetupContext("get_stds", 0);
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":341
+  /* "pyBedGraph/ignore_missing_bp.pyx":385
  *                  int[:] start_list, int[:] end_list):
  * 
  *     assert tuple(start_list.shape) == tuple(end_list.shape)             # <<<<<<<<<<<<<<
@@ -6723,59 +7558,59 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!Py_OptimizeFlag)) {
-    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_start_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 341, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_start_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 385, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 341, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 385, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_end_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 341, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_end_list.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 385, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 341, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 385, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 341, __pyx_L1_error)
+    __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 385, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 341, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 385, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     if (unlikely(!__pyx_t_4)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(0, 341, __pyx_L1_error)
+      __PYX_ERR(0, 385, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":343
+  /* "pyBedGraph/ignore_missing_bp.pyx":387
  *     assert tuple(start_list.shape) == tuple(end_list.shape)
  * 
  *     cdef size_t i, num_tests = start_list.size, start, end, j             # <<<<<<<<<<<<<<
  * 
  *     result = np.full(num_tests, -1, dtype=np.float64)
  */
-  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_start_list, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 343, __pyx_L1_error)
+  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_start_list, 1, (PyObject *(*)(char *)) __pyx_memview_get_int, (int (*)(char *, PyObject *)) __pyx_memview_set_int, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 387, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 343, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 387, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 343, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 387, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_num_tests = __pyx_t_5;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":345
+  /* "pyBedGraph/ignore_missing_bp.pyx":389
  *     cdef size_t i, num_tests = start_list.size, start, end, j
  * 
  *     result = np.full(num_tests, -1, dtype=np.float64)             # <<<<<<<<<<<<<<
  *     cdef double[:] result_view = result
  *     cdef double std, difference, value
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 345, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 389, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_full); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 345, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_full); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 389, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyInt_FromSize_t(__pyx_v_num_tests); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 345, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_FromSize_t(__pyx_v_num_tests); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 389, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 345, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 389, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
@@ -6783,16 +7618,16 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
   __Pyx_GIVEREF(__pyx_int_neg_1);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_neg_1);
   __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 345, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 389, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 345, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 389, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_float64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 345, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_float64); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 389, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 345, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_7) < 0) __PYX_ERR(0, 389, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 345, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 389, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -6800,50 +7635,50 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
   __pyx_v_result = __pyx_t_7;
   __pyx_t_7 = 0;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":346
+  /* "pyBedGraph/ignore_missing_bp.pyx":390
  * 
  *     result = np.full(num_tests, -1, dtype=np.float64)
  *     cdef double[:] result_view = result             # <<<<<<<<<<<<<<
  *     cdef double std, difference, value
  *     cdef unsigned int numb_value, interval_size, value_index, temp_end
  */
-  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_result, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 346, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_result, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 390, __pyx_L1_error)
   __pyx_v_result_view = __pyx_t_8;
   __pyx_t_8.memview = NULL;
   __pyx_t_8.data = NULL;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":349
+  /* "pyBedGraph/ignore_missing_bp.pyx":393
  *     cdef double std, difference, value
  *     cdef unsigned int numb_value, interval_size, value_index, temp_end
  *     cdef size_t numb_intervals = interval_start.size             # <<<<<<<<<<<<<<
  * 
  *     cdef double[:] means = get_exact_means(value_map, index_list, interval_start,
  */
-  __pyx_t_7 = __pyx_memoryview_fromslice(__pyx_v_interval_start, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_int, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_int, 0);; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 349, __pyx_L1_error)
+  __pyx_t_7 = __pyx_memoryview_fromslice(__pyx_v_interval_start, 1, (PyObject *(*)(char *)) __pyx_memview_get_unsigned_int, (int (*)(char *, PyObject *)) __pyx_memview_set_unsigned_int, 0);; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 393, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 349, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 393, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 349, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 393, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_numb_intervals = __pyx_t_5;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":351
+  /* "pyBedGraph/ignore_missing_bp.pyx":395
  *     cdef size_t numb_intervals = interval_start.size
  * 
  *     cdef double[:] means = get_exact_means(value_map, index_list, interval_start,             # <<<<<<<<<<<<<<
  *                             interval_end, start_list, end_list)
  * 
  */
-  __pyx_t_3 = __pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__pyx_v_value_map, __pyx_v_index_list, __pyx_v_interval_start, __pyx_v_interval_end, __pyx_v_start_list, __pyx_v_end_list, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 351, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_10pyBedGraph_17ignore_missing_bp_get_exact_means(__pyx_v_value_map, __pyx_v_index_list, __pyx_v_interval_start, __pyx_v_interval_end, __pyx_v_start_list, __pyx_v_end_list, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 395, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 351, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 395, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_means = __pyx_t_8;
   __pyx_t_8.memview = NULL;
   __pyx_t_8.data = NULL;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":354
+  /* "pyBedGraph/ignore_missing_bp.pyx":398
  *                             interval_end, start_list, end_list)
  * 
  *     for i in range(num_tests):             # <<<<<<<<<<<<<<
@@ -6855,7 +7690,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
   for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
     __pyx_v_i = __pyx_t_10;
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":355
+    /* "pyBedGraph/ignore_missing_bp.pyx":399
  * 
  *     for i in range(num_tests):
  *         mean = means[i]             # <<<<<<<<<<<<<<
@@ -6867,27 +7702,27 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
     if (unlikely(__pyx_t_11 >= (size_t)__pyx_v_means.shape[0])) __pyx_t_12 = 0;
     if (unlikely(__pyx_t_12 != -1)) {
       __Pyx_RaiseBufferIndexError(__pyx_t_12);
-      __PYX_ERR(0, 355, __pyx_L1_error)
+      __PYX_ERR(0, 399, __pyx_L1_error)
     }
-    __pyx_t_3 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ (__pyx_v_means.data + __pyx_t_11 * __pyx_v_means.strides[0]) )))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 355, __pyx_L1_error)
+    __pyx_t_3 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ (__pyx_v_means.data + __pyx_t_11 * __pyx_v_means.strides[0]) )))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 399, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_XDECREF_SET(__pyx_v_mean, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":356
+    /* "pyBedGraph/ignore_missing_bp.pyx":400
  *     for i in range(num_tests):
  *         mean = means[i]
  *         if mean == -1:             # <<<<<<<<<<<<<<
  *             continue
  * 
  */
-    __pyx_t_3 = __Pyx_PyInt_EqObjC(__pyx_v_mean, __pyx_int_neg_1, -1L, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 356, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyInt_EqObjC(__pyx_v_mean, __pyx_int_neg_1, -1L, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 400, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 356, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 400, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     if (__pyx_t_4) {
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":357
+      /* "pyBedGraph/ignore_missing_bp.pyx":401
  *         mean = means[i]
  *         if mean == -1:
  *             continue             # <<<<<<<<<<<<<<
@@ -6896,7 +7731,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
  */
       goto __pyx_L3_continue;
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":356
+      /* "pyBedGraph/ignore_missing_bp.pyx":400
  *     for i in range(num_tests):
  *         mean = means[i]
  *         if mean == -1:             # <<<<<<<<<<<<<<
@@ -6905,7 +7740,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
  */
     }
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":359
+    /* "pyBedGraph/ignore_missing_bp.pyx":403
  *             continue
  * 
  *         start = start_list[i]             # <<<<<<<<<<<<<<
@@ -6917,11 +7752,11 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
     if (unlikely(__pyx_t_13 >= (size_t)__pyx_v_start_list.shape[0])) __pyx_t_12 = 0;
     if (unlikely(__pyx_t_12 != -1)) {
       __Pyx_RaiseBufferIndexError(__pyx_t_12);
-      __PYX_ERR(0, 359, __pyx_L1_error)
+      __PYX_ERR(0, 403, __pyx_L1_error)
     }
     __pyx_v_start = (*((int *) ( /* dim=0 */ (__pyx_v_start_list.data + __pyx_t_13 * __pyx_v_start_list.strides[0]) )));
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":360
+    /* "pyBedGraph/ignore_missing_bp.pyx":404
  * 
  *         start = start_list[i]
  *         end = end_list[i]             # <<<<<<<<<<<<<<
@@ -6933,11 +7768,11 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
     if (unlikely(__pyx_t_14 >= (size_t)__pyx_v_end_list.shape[0])) __pyx_t_12 = 0;
     if (unlikely(__pyx_t_12 != -1)) {
       __Pyx_RaiseBufferIndexError(__pyx_t_12);
-      __PYX_ERR(0, 360, __pyx_L1_error)
+      __PYX_ERR(0, 404, __pyx_L1_error)
     }
     __pyx_v_end = (*((int *) ( /* dim=0 */ (__pyx_v_end_list.data + __pyx_t_14 * __pyx_v_end_list.strides[0]) )));
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":363
+    /* "pyBedGraph/ignore_missing_bp.pyx":407
  * 
  *         # get to an interval
  *         while start < end and index_list[start] == -1:             # <<<<<<<<<<<<<<
@@ -6956,14 +7791,14 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
       if (unlikely(__pyx_t_16 >= (size_t)__pyx_v_index_list.shape[0])) __pyx_t_12 = 0;
       if (unlikely(__pyx_t_12 != -1)) {
         __Pyx_RaiseBufferIndexError(__pyx_t_12);
-        __PYX_ERR(0, 363, __pyx_L1_error)
+        __PYX_ERR(0, 407, __pyx_L1_error)
       }
       __pyx_t_15 = (((*((int *) ( /* dim=0 */ (__pyx_v_index_list.data + __pyx_t_16 * __pyx_v_index_list.strides[0]) ))) == -1L) != 0);
       __pyx_t_4 = __pyx_t_15;
       __pyx_L8_bool_binop_done:;
       if (!__pyx_t_4) break;
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":364
+      /* "pyBedGraph/ignore_missing_bp.pyx":408
  *         # get to an interval
  *         while start < end and index_list[start] == -1:
  *             start += 1             # <<<<<<<<<<<<<<
@@ -6973,7 +7808,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
       __pyx_v_start = (__pyx_v_start + 1);
     }
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":366
+    /* "pyBedGraph/ignore_missing_bp.pyx":410
  *             start += 1
  * 
  *         if start == end:             # <<<<<<<<<<<<<<
@@ -6983,7 +7818,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
     __pyx_t_4 = ((__pyx_v_start == __pyx_v_end) != 0);
     if (__pyx_t_4) {
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":367
+      /* "pyBedGraph/ignore_missing_bp.pyx":411
  * 
  *         if start == end:
  *             continue             # <<<<<<<<<<<<<<
@@ -6992,7 +7827,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
  */
       goto __pyx_L3_continue;
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":366
+      /* "pyBedGraph/ignore_missing_bp.pyx":410
  *             start += 1
  * 
  *         if start == end:             # <<<<<<<<<<<<<<
@@ -7001,7 +7836,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
  */
     }
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":369
+    /* "pyBedGraph/ignore_missing_bp.pyx":413
  *             continue
  * 
  *         std = 0             # <<<<<<<<<<<<<<
@@ -7010,7 +7845,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
  */
     __pyx_v_std = 0.0;
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":370
+    /* "pyBedGraph/ignore_missing_bp.pyx":414
  * 
  *         std = 0
  *         numb_value = 0             # <<<<<<<<<<<<<<
@@ -7019,7 +7854,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
  */
     __pyx_v_numb_value = 0;
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":372
+    /* "pyBedGraph/ignore_missing_bp.pyx":416
  *         numb_value = 0
  * 
  *         value_index = index_list[start]             # <<<<<<<<<<<<<<
@@ -7031,11 +7866,11 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
     if (unlikely(__pyx_t_17 >= (size_t)__pyx_v_index_list.shape[0])) __pyx_t_12 = 0;
     if (unlikely(__pyx_t_12 != -1)) {
       __Pyx_RaiseBufferIndexError(__pyx_t_12);
-      __PYX_ERR(0, 372, __pyx_L1_error)
+      __PYX_ERR(0, 416, __pyx_L1_error)
     }
     __pyx_v_value_index = (*((int *) ( /* dim=0 */ (__pyx_v_index_list.data + __pyx_t_17 * __pyx_v_index_list.strides[0]) )));
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":373
+    /* "pyBedGraph/ignore_missing_bp.pyx":417
  * 
  *         value_index = index_list[start]
  *         while start < end:             # <<<<<<<<<<<<<<
@@ -7046,7 +7881,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
       __pyx_t_4 = ((__pyx_v_start < __pyx_v_end) != 0);
       if (!__pyx_t_4) break;
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":374
+      /* "pyBedGraph/ignore_missing_bp.pyx":418
  *         value_index = index_list[start]
  *         while start < end:
  *             temp_end = interval_end[value_index]             # <<<<<<<<<<<<<<
@@ -7058,11 +7893,11 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
       if (unlikely(__pyx_t_18 >= (size_t)__pyx_v_interval_end.shape[0])) __pyx_t_12 = 0;
       if (unlikely(__pyx_t_12 != -1)) {
         __Pyx_RaiseBufferIndexError(__pyx_t_12);
-        __PYX_ERR(0, 374, __pyx_L1_error)
+        __PYX_ERR(0, 418, __pyx_L1_error)
       }
       __pyx_v_temp_end = (*((unsigned int *) ( /* dim=0 */ (__pyx_v_interval_end.data + __pyx_t_18 * __pyx_v_interval_end.strides[0]) )));
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":375
+      /* "pyBedGraph/ignore_missing_bp.pyx":419
  *         while start < end:
  *             temp_end = interval_end[value_index]
  *             if temp_end > end:             # <<<<<<<<<<<<<<
@@ -7072,7 +7907,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
       __pyx_t_4 = ((__pyx_v_temp_end > __pyx_v_end) != 0);
       if (__pyx_t_4) {
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":376
+        /* "pyBedGraph/ignore_missing_bp.pyx":420
  *             temp_end = interval_end[value_index]
  *             if temp_end > end:
  *                 temp_end = end             # <<<<<<<<<<<<<<
@@ -7081,7 +7916,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
  */
         __pyx_v_temp_end = __pyx_v_end;
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":375
+        /* "pyBedGraph/ignore_missing_bp.pyx":419
  *         while start < end:
  *             temp_end = interval_end[value_index]
  *             if temp_end > end:             # <<<<<<<<<<<<<<
@@ -7090,7 +7925,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
  */
       }
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":378
+      /* "pyBedGraph/ignore_missing_bp.pyx":422
  *                 temp_end = end
  * 
  *             interval_size = temp_end - start             # <<<<<<<<<<<<<<
@@ -7099,7 +7934,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
  */
       __pyx_v_interval_size = (__pyx_v_temp_end - __pyx_v_start);
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":379
+      /* "pyBedGraph/ignore_missing_bp.pyx":423
  * 
  *             interval_size = temp_end - start
  *             difference = value_map[value_index] - mean             # <<<<<<<<<<<<<<
@@ -7111,18 +7946,18 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
       if (unlikely(__pyx_t_19 >= (size_t)__pyx_v_value_map.shape[0])) __pyx_t_12 = 0;
       if (unlikely(__pyx_t_12 != -1)) {
         __Pyx_RaiseBufferIndexError(__pyx_t_12);
-        __PYX_ERR(0, 379, __pyx_L1_error)
+        __PYX_ERR(0, 423, __pyx_L1_error)
       }
-      __pyx_t_3 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ (__pyx_v_value_map.data + __pyx_t_19 * __pyx_v_value_map.strides[0]) )))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 379, __pyx_L1_error)
+      __pyx_t_3 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ (__pyx_v_value_map.data + __pyx_t_19 * __pyx_v_value_map.strides[0]) )))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 423, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_7 = PyNumber_Subtract(__pyx_t_3, __pyx_v_mean); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 379, __pyx_L1_error)
+      __pyx_t_7 = PyNumber_Subtract(__pyx_t_3, __pyx_v_mean); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 423, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_20 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_20 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 379, __pyx_L1_error)
+      __pyx_t_20 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_20 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 423, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __pyx_v_difference = __pyx_t_20;
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":380
+      /* "pyBedGraph/ignore_missing_bp.pyx":424
  *             interval_size = temp_end - start
  *             difference = value_map[value_index] - mean
  *             std += difference * difference * interval_size             # <<<<<<<<<<<<<<
@@ -7131,7 +7966,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
  */
       __pyx_v_std = (__pyx_v_std + ((__pyx_v_difference * __pyx_v_difference) * __pyx_v_interval_size));
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":381
+      /* "pyBedGraph/ignore_missing_bp.pyx":425
  *             difference = value_map[value_index] - mean
  *             std += difference * difference * interval_size
  *             numb_value += interval_size             # <<<<<<<<<<<<<<
@@ -7140,7 +7975,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
  */
       __pyx_v_numb_value = (__pyx_v_numb_value + __pyx_v_interval_size);
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":383
+      /* "pyBedGraph/ignore_missing_bp.pyx":427
  *             numb_value += interval_size
  * 
  *             value_index += 1             # <<<<<<<<<<<<<<
@@ -7149,7 +7984,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
  */
       __pyx_v_value_index = (__pyx_v_value_index + 1);
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":384
+      /* "pyBedGraph/ignore_missing_bp.pyx":428
  * 
  *             value_index += 1
  *             if value_index == numb_intervals:             # <<<<<<<<<<<<<<
@@ -7159,7 +7994,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
       __pyx_t_4 = ((__pyx_v_value_index == __pyx_v_numb_intervals) != 0);
       if (__pyx_t_4) {
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":385
+        /* "pyBedGraph/ignore_missing_bp.pyx":429
  *             value_index += 1
  *             if value_index == numb_intervals:
  *                 break             # <<<<<<<<<<<<<<
@@ -7168,7 +8003,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
  */
         goto __pyx_L12_break;
 
-        /* "pyBedGraph/ignore_missing_bp.pyx":384
+        /* "pyBedGraph/ignore_missing_bp.pyx":428
  * 
  *             value_index += 1
  *             if value_index == numb_intervals:             # <<<<<<<<<<<<<<
@@ -7177,7 +8012,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
  */
       }
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":386
+      /* "pyBedGraph/ignore_missing_bp.pyx":430
  *             if value_index == numb_intervals:
  *                 break
  *             start = interval_start[value_index]             # <<<<<<<<<<<<<<
@@ -7189,13 +8024,13 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
       if (unlikely(__pyx_t_21 >= (size_t)__pyx_v_interval_start.shape[0])) __pyx_t_12 = 0;
       if (unlikely(__pyx_t_12 != -1)) {
         __Pyx_RaiseBufferIndexError(__pyx_t_12);
-        __PYX_ERR(0, 386, __pyx_L1_error)
+        __PYX_ERR(0, 430, __pyx_L1_error)
       }
       __pyx_v_start = (*((unsigned int *) ( /* dim=0 */ (__pyx_v_interval_start.data + __pyx_t_21 * __pyx_v_interval_start.strides[0]) )));
     }
     __pyx_L12_break:;
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":388
+    /* "pyBedGraph/ignore_missing_bp.pyx":432
  *             start = interval_start[value_index]
  * 
  *         if numb_value == 0:             # <<<<<<<<<<<<<<
@@ -7205,7 +8040,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
     __pyx_t_4 = ((__pyx_v_numb_value == 0) != 0);
     if (__pyx_t_4) {
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":389
+      /* "pyBedGraph/ignore_missing_bp.pyx":433
  * 
  *         if numb_value == 0:
  *             continue             # <<<<<<<<<<<<<<
@@ -7214,7 +8049,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
  */
       goto __pyx_L3_continue;
 
-      /* "pyBedGraph/ignore_missing_bp.pyx":388
+      /* "pyBedGraph/ignore_missing_bp.pyx":432
  *             start = interval_start[value_index]
  * 
  *         if numb_value == 0:             # <<<<<<<<<<<<<<
@@ -7223,7 +8058,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
  */
     }
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":391
+    /* "pyBedGraph/ignore_missing_bp.pyx":435
  *             continue
  * 
  *         std /= (numb_value)             # <<<<<<<<<<<<<<
@@ -7232,11 +8067,11 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
  */
     if (unlikely(__pyx_v_numb_value == 0)) {
       PyErr_SetString(PyExc_ZeroDivisionError, "float division");
-      __PYX_ERR(0, 391, __pyx_L1_error)
+      __PYX_ERR(0, 435, __pyx_L1_error)
     }
     __pyx_v_std = (__pyx_v_std / __pyx_v_numb_value);
 
-    /* "pyBedGraph/ignore_missing_bp.pyx":392
+    /* "pyBedGraph/ignore_missing_bp.pyx":436
  * 
  *         std /= (numb_value)
  *         result_view[i] = sqrt(std)             # <<<<<<<<<<<<<<
@@ -7248,13 +8083,13 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
     if (unlikely(__pyx_t_22 >= (size_t)__pyx_v_result_view.shape[0])) __pyx_t_12 = 0;
     if (unlikely(__pyx_t_12 != -1)) {
       __Pyx_RaiseBufferIndexError(__pyx_t_12);
-      __PYX_ERR(0, 392, __pyx_L1_error)
+      __PYX_ERR(0, 436, __pyx_L1_error)
     }
     *((double *) ( /* dim=0 */ (__pyx_v_result_view.data + __pyx_t_22 * __pyx_v_result_view.strides[0]) )) = sqrt(__pyx_v_std);
     __pyx_L3_continue:;
   }
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":394
+  /* "pyBedGraph/ignore_missing_bp.pyx":438
  *         result_view[i] = sqrt(std)
  * 
  *     return result             # <<<<<<<<<<<<<<
@@ -7264,7 +8099,7 @@ static PyObject *__pyx_pf_10pyBedGraph_17ignore_missing_bp_14get_stds(CYTHON_UNU
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":337
+  /* "pyBedGraph/ignore_missing_bp.pyx":381
  *     return result
  * 
  * def get_stds(double[:] value_map, int[:] index_list,             # <<<<<<<<<<<<<<
@@ -11229,10 +12064,12 @@ static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryvi
   __Pyx_memviewslice __pyx_v_src_slice;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_t_3;
+  __Pyx_memviewslice *__pyx_t_1;
+  __Pyx_memviewslice *__pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
+  int __pyx_t_5;
+  int __pyx_t_6;
   __Pyx_RefNannySetupContext("setitem_slice_assignment", 0);
 
   /* "View.MemoryView":445
@@ -11243,6 +12080,7 @@ static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryvi
  *                                  src.ndim, dst.ndim, self.dtype_is_object)
  */
   if (!(likely(((__pyx_v_src) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_src, __pyx_memoryview_type))))) __PYX_ERR(1, 445, __pyx_L1_error)
+  __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_src), (&__pyx_v_src_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 445, __pyx_L1_error)
 
   /* "View.MemoryView":446
  * 
@@ -11252,6 +12090,7 @@ static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryvi
  * 
  */
   if (!(likely(((__pyx_v_dst) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dst, __pyx_memoryview_type))))) __PYX_ERR(1, 446, __pyx_L1_error)
+  __pyx_t_2 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_dst), (&__pyx_v_dst_slice)); if (unlikely(__pyx_t_2 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 446, __pyx_L1_error)
 
   /* "View.MemoryView":447
  *         memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0],
@@ -11260,14 +12099,14 @@ static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryvi
  * 
  *     cdef setitem_slice_assign_scalar(self, memoryview dst, value):
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_src, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 447, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 447, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dst, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 447, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 447, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_src, __pyx_n_s_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 447, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 447, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_dst, __pyx_n_s_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 447, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 447, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "View.MemoryView":445
  *         cdef __Pyx_memviewslice src_slice
@@ -11276,7 +12115,7 @@ static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryvi
  *                                  get_slice_from_memview(dst, &dst_slice)[0],
  *                                  src.ndim, dst.ndim, self.dtype_is_object)
  */
-  __pyx_t_4 = __pyx_memoryview_copy_contents((__pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_src), (&__pyx_v_src_slice))[0]), (__pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_dst), (&__pyx_v_dst_slice))[0]), __pyx_t_2, __pyx_t_3, __pyx_v_self->dtype_is_object); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 445, __pyx_L1_error)
+  __pyx_t_6 = __pyx_memoryview_copy_contents((__pyx_t_1[0]), (__pyx_t_2[0]), __pyx_t_4, __pyx_t_5, __pyx_v_self->dtype_is_object); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 445, __pyx_L1_error)
 
   /* "View.MemoryView":441
  *         return obj
@@ -11290,7 +12129,7 @@ static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryvi
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assignment", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
@@ -11315,17 +12154,18 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
   __Pyx_memviewslice __pyx_v_tmp_slice;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_t_3;
+  __Pyx_memviewslice *__pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  char const *__pyx_t_5;
-  PyObject *__pyx_t_6 = NULL;
+  int __pyx_t_5;
+  char const *__pyx_t_6;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   PyObject *__pyx_t_11 = NULL;
+  PyObject *__pyx_t_12 = NULL;
   __Pyx_RefNannySetupContext("setitem_slice_assign_scalar", 0);
 
   /* "View.MemoryView":451
@@ -11344,7 +12184,8 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
  * 
  *         if <size_t>self.view.itemsize > sizeof(array):
  */
-  __pyx_v_dst_slice = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_dst, (&__pyx_v_tmp_slice));
+  __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_dst, (&__pyx_v_tmp_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 456, __pyx_L1_error)
+  __pyx_v_dst_slice = __pyx_t_1;
 
   /* "View.MemoryView":458
  *         dst_slice = get_slice_from_memview(dst, &tmp_slice)
@@ -11353,8 +12194,8 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
  *             tmp = PyMem_Malloc(self.view.itemsize)
  *             if tmp == NULL:
  */
-  __pyx_t_1 = ((((size_t)__pyx_v_self->view.itemsize) > (sizeof(__pyx_v_array))) != 0);
-  if (__pyx_t_1) {
+  __pyx_t_2 = ((((size_t)__pyx_v_self->view.itemsize) > (sizeof(__pyx_v_array))) != 0);
+  if (__pyx_t_2) {
 
     /* "View.MemoryView":459
  * 
@@ -11372,8 +12213,8 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
  *                 raise MemoryError
  *             item = tmp
  */
-    __pyx_t_1 = ((__pyx_v_tmp == NULL) != 0);
-    if (unlikely(__pyx_t_1)) {
+    __pyx_t_2 = ((__pyx_v_tmp == NULL) != 0);
+    if (unlikely(__pyx_t_2)) {
 
       /* "View.MemoryView":461
  *             tmp = PyMem_Malloc(self.view.itemsize)
@@ -11440,8 +12281,8 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
  *                 (<PyObject **> item)[0] = <PyObject *> value
  *             else:
  */
-    __pyx_t_1 = (__pyx_v_self->dtype_is_object != 0);
-    if (__pyx_t_1) {
+    __pyx_t_2 = (__pyx_v_self->dtype_is_object != 0);
+    if (__pyx_t_2) {
 
       /* "View.MemoryView":468
  *         try:
@@ -11470,9 +12311,9 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
  * 
  */
     /*else*/ {
-      __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, ((char *)__pyx_v_item), __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 470, __pyx_L6_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, ((char *)__pyx_v_item), __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 470, __pyx_L6_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     }
     __pyx_L8:;
 
@@ -11483,8 +12324,8 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
  *                 assert_direct_dimensions(self.view.suboffsets, self.view.ndim)
  *             slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize,
  */
-    __pyx_t_1 = ((__pyx_v_self->view.suboffsets != NULL) != 0);
-    if (__pyx_t_1) {
+    __pyx_t_2 = ((__pyx_v_self->view.suboffsets != NULL) != 0);
+    if (__pyx_t_2) {
 
       /* "View.MemoryView":475
  * 
@@ -11493,9 +12334,9 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
  *             slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize,
  *                                 item, self.dtype_is_object)
  */
-      __pyx_t_2 = assert_direct_dimensions(__pyx_v_self->view.suboffsets, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 475, __pyx_L6_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __pyx_t_3 = assert_direct_dimensions(__pyx_v_self->view.suboffsets, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 475, __pyx_L6_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
       /* "View.MemoryView":474
  * 
@@ -11532,32 +12373,32 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
     /*exception exit:*/{
       __Pyx_PyThreadState_declare
       __Pyx_PyThreadState_assign
-      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
-      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
-      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
-      __Pyx_XGOTREF(__pyx_t_6);
+      __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
+      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
       __Pyx_XGOTREF(__pyx_t_7);
       __Pyx_XGOTREF(__pyx_t_8);
       __Pyx_XGOTREF(__pyx_t_9);
       __Pyx_XGOTREF(__pyx_t_10);
       __Pyx_XGOTREF(__pyx_t_11);
-      __pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
+      __Pyx_XGOTREF(__pyx_t_12);
+      __pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
       {
         PyMem_Free(__pyx_v_tmp);
       }
       if (PY_MAJOR_VERSION >= 3) {
-        __Pyx_XGIVEREF(__pyx_t_9);
         __Pyx_XGIVEREF(__pyx_t_10);
         __Pyx_XGIVEREF(__pyx_t_11);
-        __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
+        __Pyx_XGIVEREF(__pyx_t_12);
+        __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
       }
-      __Pyx_XGIVEREF(__pyx_t_6);
       __Pyx_XGIVEREF(__pyx_t_7);
       __Pyx_XGIVEREF(__pyx_t_8);
-      __Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
-      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
-      __pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
+      __Pyx_XGIVEREF(__pyx_t_9);
+      __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
+      __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
+      __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
       goto __pyx_L1_error;
     }
     __pyx_L7:;
@@ -11575,7 +12416,7 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assign_scalar", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
@@ -13542,7 +14383,8 @@ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16
   __Pyx_memviewslice __pyx_v_tmp;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  __Pyx_memviewslice *__pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("is_c_contig", 0);
 
   /* "View.MemoryView":622
@@ -13552,7 +14394,8 @@ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16
  *         return slice_is_contig(mslice[0], 'C', self.view.ndim)
  * 
  */
-  __pyx_v_mslice = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp));
+  __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 622, __pyx_L1_error)
+  __pyx_v_mslice = __pyx_t_1;
 
   /* "View.MemoryView":623
  *         cdef __Pyx_memviewslice tmp
@@ -13562,10 +14405,10 @@ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16
  *     def is_f_contig(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'C', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 623, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'C', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 623, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
   /* "View.MemoryView":619
@@ -13578,7 +14421,7 @@ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
   __Pyx_AddTraceback("View.MemoryView.memoryview.is_c_contig", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -13613,7 +14456,8 @@ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18
   __Pyx_memviewslice __pyx_v_tmp;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  __Pyx_memviewslice *__pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("is_f_contig", 0);
 
   /* "View.MemoryView":628
@@ -13623,7 +14467,8 @@ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18
  *         return slice_is_contig(mslice[0], 'F', self.view.ndim)
  * 
  */
-  __pyx_v_mslice = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp));
+  __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 628, __pyx_L1_error)
+  __pyx_v_mslice = __pyx_t_1;
 
   /* "View.MemoryView":629
  *         cdef __Pyx_memviewslice tmp
@@ -13633,10 +14478,10 @@ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18
  *     def copy(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'F', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 629, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'F', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 629, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
   /* "View.MemoryView":625
@@ -13649,7 +14494,7 @@ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
   __Pyx_AddTraceback("View.MemoryView.memoryview.is_f_contig", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -17203,7 +18048,7 @@ static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice __pyx_v_memviewsl
  * 
  * @cname('__pyx_memoryview_get_slice_from_memoryview')
  * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview,             # <<<<<<<<<<<<<<
- *                                                    __Pyx_memviewslice *mslice):
+ *                                                    __Pyx_memviewslice *mslice) except NULL:
  *     cdef _memoryviewslice obj
  */
 
@@ -17217,7 +18062,7 @@ static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __p
   __Pyx_RefNannySetupContext("get_slice_from_memview", 0);
 
   /* "View.MemoryView":1055
- *                                                    __Pyx_memviewslice *mslice):
+ *                                                    __Pyx_memviewslice *mslice) except NULL:
  *     cdef _memoryviewslice obj
  *     if isinstance(memview, _memoryviewslice):             # <<<<<<<<<<<<<<
  *         obj = memview
@@ -17251,7 +18096,7 @@ static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __p
     goto __pyx_L0;
 
     /* "View.MemoryView":1055
- *                                                    __Pyx_memviewslice *mslice):
+ *                                                    __Pyx_memviewslice *mslice) except NULL:
  *     cdef _memoryviewslice obj
  *     if isinstance(memview, _memoryviewslice):             # <<<<<<<<<<<<<<
  *         obj = memview
@@ -17284,15 +18129,15 @@ static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __p
  * 
  * @cname('__pyx_memoryview_get_slice_from_memoryview')
  * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview,             # <<<<<<<<<<<<<<
- *                                                    __Pyx_memviewslice *mslice):
+ *                                                    __Pyx_memviewslice *mslice) except NULL:
  *     cdef _memoryviewslice obj
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_WriteUnraisable("View.MemoryView.get_slice_from_memview", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
-  __pyx_r = 0;
+  __Pyx_AddTraceback("View.MemoryView.get_slice_from_memview", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XDECREF((PyObject *)__pyx_v_obj);
   __Pyx_RefNannyFinishContext();
@@ -18133,52 +18978,52 @@ static void copy_strided_to_strided(__Pyx_memviewslice *__pyx_v_src, __Pyx_memvi
  * @cname('__pyx_memoryview_slice_get_size')
  * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil:             # <<<<<<<<<<<<<<
  *     "Return the size of the memory occupied by the slice in number of bytes"
- *     cdef int i
+ *     cdef Py_ssize_t shape, size = src.memview.view.itemsize
  */
 
 static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__pyx_v_src, int __pyx_v_ndim) {
-  int __pyx_v_i;
+  Py_ssize_t __pyx_v_shape;
   Py_ssize_t __pyx_v_size;
   Py_ssize_t __pyx_r;
   Py_ssize_t __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_t_3;
-  int __pyx_t_4;
+  Py_ssize_t *__pyx_t_2;
+  Py_ssize_t *__pyx_t_3;
+  Py_ssize_t *__pyx_t_4;
 
-  /* "View.MemoryView":1180
+  /* "View.MemoryView":1179
+ * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil:
  *     "Return the size of the memory occupied by the slice in number of bytes"
- *     cdef int i
- *     cdef Py_ssize_t size = src.memview.view.itemsize             # <<<<<<<<<<<<<<
+ *     cdef Py_ssize_t shape, size = src.memview.view.itemsize             # <<<<<<<<<<<<<<
  * 
- *     for i in range(ndim):
+ *     for shape in src.shape[:ndim]:
  */
   __pyx_t_1 = __pyx_v_src->memview->view.itemsize;
   __pyx_v_size = __pyx_t_1;
 
-  /* "View.MemoryView":1182
- *     cdef Py_ssize_t size = src.memview.view.itemsize
+  /* "View.MemoryView":1181
+ *     cdef Py_ssize_t shape, size = src.memview.view.itemsize
  * 
- *     for i in range(ndim):             # <<<<<<<<<<<<<<
- *         size *= src.shape[i]
+ *     for shape in src.shape[:ndim]:             # <<<<<<<<<<<<<<
+ *         size *= shape
  * 
  */
-  __pyx_t_2 = __pyx_v_ndim;
-  __pyx_t_3 = __pyx_t_2;
-  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
-    __pyx_v_i = __pyx_t_4;
+  __pyx_t_3 = (__pyx_v_src->shape + __pyx_v_ndim);
+  for (__pyx_t_4 = __pyx_v_src->shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) {
+    __pyx_t_2 = __pyx_t_4;
+    __pyx_v_shape = (__pyx_t_2[0]);
 
-    /* "View.MemoryView":1183
+    /* "View.MemoryView":1182
  * 
- *     for i in range(ndim):
- *         size *= src.shape[i]             # <<<<<<<<<<<<<<
+ *     for shape in src.shape[:ndim]:
+ *         size *= shape             # <<<<<<<<<<<<<<
  * 
  *     return size
  */
-    __pyx_v_size = (__pyx_v_size * (__pyx_v_src->shape[__pyx_v_i]));
+    __pyx_v_size = (__pyx_v_size * __pyx_v_shape);
   }
 
-  /* "View.MemoryView":1185
- *         size *= src.shape[i]
+  /* "View.MemoryView":1184
+ *         size *= shape
  * 
  *     return size             # <<<<<<<<<<<<<<
  * 
@@ -18192,7 +19037,7 @@ static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__pyx_v_sr
  * @cname('__pyx_memoryview_slice_get_size')
  * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil:             # <<<<<<<<<<<<<<
  *     "Return the size of the memory occupied by the slice in number of bytes"
- *     cdef int i
+ *     cdef Py_ssize_t shape, size = src.memview.view.itemsize
  */
 
   /* function exit code */
@@ -18200,7 +19045,7 @@ static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__pyx_v_sr
   return __pyx_r;
 }
 
-/* "View.MemoryView":1188
+/* "View.MemoryView":1187
  * 
  * @cname('__pyx_fill_contig_strides_array')
  * cdef Py_ssize_t fill_contig_strides_array(             # <<<<<<<<<<<<<<
@@ -18216,7 +19061,7 @@ static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_
   int __pyx_t_3;
   int __pyx_t_4;
 
-  /* "View.MemoryView":1197
+  /* "View.MemoryView":1196
  *     cdef int idx
  * 
  *     if order == 'F':             # <<<<<<<<<<<<<<
@@ -18226,38 +19071,38 @@ static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_
   __pyx_t_1 = ((__pyx_v_order == 'F') != 0);
   if (__pyx_t_1) {
 
-    /* "View.MemoryView":1198
+    /* "View.MemoryView":1197
  * 
  *     if order == 'F':
  *         for idx in range(ndim):             # <<<<<<<<<<<<<<
  *             strides[idx] = stride
- *             stride = stride * shape[idx]
+ *             stride *= shape[idx]
  */
     __pyx_t_2 = __pyx_v_ndim;
     __pyx_t_3 = __pyx_t_2;
     for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
       __pyx_v_idx = __pyx_t_4;
 
-      /* "View.MemoryView":1199
+      /* "View.MemoryView":1198
  *     if order == 'F':
  *         for idx in range(ndim):
  *             strides[idx] = stride             # <<<<<<<<<<<<<<
- *             stride = stride * shape[idx]
+ *             stride *= shape[idx]
  *     else:
  */
       (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride;
 
-      /* "View.MemoryView":1200
+      /* "View.MemoryView":1199
  *         for idx in range(ndim):
  *             strides[idx] = stride
- *             stride = stride * shape[idx]             # <<<<<<<<<<<<<<
+ *             stride *= shape[idx]             # <<<<<<<<<<<<<<
  *     else:
  *         for idx in range(ndim - 1, -1, -1):
  */
       __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx]));
     }
 
-    /* "View.MemoryView":1197
+    /* "View.MemoryView":1196
  *     cdef int idx
  * 
  *     if order == 'F':             # <<<<<<<<<<<<<<
@@ -18267,30 +19112,30 @@ static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_
     goto __pyx_L3;
   }
 
-  /* "View.MemoryView":1202
- *             stride = stride * shape[idx]
+  /* "View.MemoryView":1201
+ *             stride *= shape[idx]
  *     else:
  *         for idx in range(ndim - 1, -1, -1):             # <<<<<<<<<<<<<<
  *             strides[idx] = stride
- *             stride = stride * shape[idx]
+ *             stride *= shape[idx]
  */
   /*else*/ {
     for (__pyx_t_2 = (__pyx_v_ndim - 1); __pyx_t_2 > -1; __pyx_t_2-=1) {
       __pyx_v_idx = __pyx_t_2;
 
-      /* "View.MemoryView":1203
+      /* "View.MemoryView":1202
  *     else:
  *         for idx in range(ndim - 1, -1, -1):
  *             strides[idx] = stride             # <<<<<<<<<<<<<<
- *             stride = stride * shape[idx]
+ *             stride *= shape[idx]
  * 
  */
       (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride;
 
-      /* "View.MemoryView":1204
+      /* "View.MemoryView":1203
  *         for idx in range(ndim - 1, -1, -1):
  *             strides[idx] = stride
- *             stride = stride * shape[idx]             # <<<<<<<<<<<<<<
+ *             stride *= shape[idx]             # <<<<<<<<<<<<<<
  * 
  *     return stride
  */
@@ -18299,8 +19144,8 @@ static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_
   }
   __pyx_L3:;
 
-  /* "View.MemoryView":1206
- *             stride = stride * shape[idx]
+  /* "View.MemoryView":1205
+ *             stride *= shape[idx]
  * 
  *     return stride             # <<<<<<<<<<<<<<
  * 
@@ -18309,7 +19154,7 @@ static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_
   __pyx_r = __pyx_v_stride;
   goto __pyx_L0;
 
-  /* "View.MemoryView":1188
+  /* "View.MemoryView":1187
  * 
  * @cname('__pyx_fill_contig_strides_array')
  * cdef Py_ssize_t fill_contig_strides_array(             # <<<<<<<<<<<<<<
@@ -18322,7 +19167,7 @@ static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_
   return __pyx_r;
 }
 
-/* "View.MemoryView":1209
+/* "View.MemoryView":1208
  * 
  * @cname('__pyx_memoryview_copy_data_to_temp')
  * cdef void *copy_data_to_temp(__Pyx_memviewslice *src,             # <<<<<<<<<<<<<<
@@ -18343,7 +19188,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   int __pyx_t_5;
   int __pyx_t_6;
 
-  /* "View.MemoryView":1220
+  /* "View.MemoryView":1219
  *     cdef void *result
  * 
  *     cdef size_t itemsize = src.memview.view.itemsize             # <<<<<<<<<<<<<<
@@ -18353,7 +19198,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   __pyx_t_1 = __pyx_v_src->memview->view.itemsize;
   __pyx_v_itemsize = __pyx_t_1;
 
-  /* "View.MemoryView":1221
+  /* "View.MemoryView":1220
  * 
  *     cdef size_t itemsize = src.memview.view.itemsize
  *     cdef size_t size = slice_get_size(src, ndim)             # <<<<<<<<<<<<<<
@@ -18362,7 +19207,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
  */
   __pyx_v_size = __pyx_memoryview_slice_get_size(__pyx_v_src, __pyx_v_ndim);
 
-  /* "View.MemoryView":1223
+  /* "View.MemoryView":1222
  *     cdef size_t size = slice_get_size(src, ndim)
  * 
  *     result = malloc(size)             # <<<<<<<<<<<<<<
@@ -18371,7 +19216,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
  */
   __pyx_v_result = malloc(__pyx_v_size);
 
-  /* "View.MemoryView":1224
+  /* "View.MemoryView":1223
  * 
  *     result = malloc(size)
  *     if not result:             # <<<<<<<<<<<<<<
@@ -18381,16 +19226,16 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   __pyx_t_2 = ((!(__pyx_v_result != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "View.MemoryView":1225
+    /* "View.MemoryView":1224
  *     result = malloc(size)
  *     if not result:
  *         _err(MemoryError, NULL)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-    __pyx_t_3 = __pyx_memoryview_err(__pyx_builtin_MemoryError, NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1225, __pyx_L1_error)
+    __pyx_t_3 = __pyx_memoryview_err(__pyx_builtin_MemoryError, NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1224, __pyx_L1_error)
 
-    /* "View.MemoryView":1224
+    /* "View.MemoryView":1223
  * 
  *     result = malloc(size)
  *     if not result:             # <<<<<<<<<<<<<<
@@ -18399,7 +19244,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
  */
   }
 
-  /* "View.MemoryView":1228
+  /* "View.MemoryView":1227
  * 
  * 
  *     tmpslice.data = <char *> result             # <<<<<<<<<<<<<<
@@ -18408,7 +19253,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
  */
   __pyx_v_tmpslice->data = ((char *)__pyx_v_result);
 
-  /* "View.MemoryView":1229
+  /* "View.MemoryView":1228
  * 
  *     tmpslice.data = <char *> result
  *     tmpslice.memview = src.memview             # <<<<<<<<<<<<<<
@@ -18418,7 +19263,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   __pyx_t_4 = __pyx_v_src->memview;
   __pyx_v_tmpslice->memview = __pyx_t_4;
 
-  /* "View.MemoryView":1230
+  /* "View.MemoryView":1229
  *     tmpslice.data = <char *> result
  *     tmpslice.memview = src.memview
  *     for i in range(ndim):             # <<<<<<<<<<<<<<
@@ -18430,7 +19275,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
     __pyx_v_i = __pyx_t_6;
 
-    /* "View.MemoryView":1231
+    /* "View.MemoryView":1230
  *     tmpslice.memview = src.memview
  *     for i in range(ndim):
  *         tmpslice.shape[i] = src.shape[i]             # <<<<<<<<<<<<<<
@@ -18439,7 +19284,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
  */
     (__pyx_v_tmpslice->shape[__pyx_v_i]) = (__pyx_v_src->shape[__pyx_v_i]);
 
-    /* "View.MemoryView":1232
+    /* "View.MemoryView":1231
  *     for i in range(ndim):
  *         tmpslice.shape[i] = src.shape[i]
  *         tmpslice.suboffsets[i] = -1             # <<<<<<<<<<<<<<
@@ -18449,7 +19294,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
     (__pyx_v_tmpslice->suboffsets[__pyx_v_i]) = -1L;
   }
 
-  /* "View.MemoryView":1234
+  /* "View.MemoryView":1233
  *         tmpslice.suboffsets[i] = -1
  * 
  *     fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize,             # <<<<<<<<<<<<<<
@@ -18458,7 +19303,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
  */
   (void)(__pyx_fill_contig_strides_array((&(__pyx_v_tmpslice->shape[0])), (&(__pyx_v_tmpslice->strides[0])), __pyx_v_itemsize, __pyx_v_ndim, __pyx_v_order));
 
-  /* "View.MemoryView":1238
+  /* "View.MemoryView":1237
  * 
  * 
  *     for i in range(ndim):             # <<<<<<<<<<<<<<
@@ -18470,7 +19315,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
     __pyx_v_i = __pyx_t_6;
 
-    /* "View.MemoryView":1239
+    /* "View.MemoryView":1238
  * 
  *     for i in range(ndim):
  *         if tmpslice.shape[i] == 1:             # <<<<<<<<<<<<<<
@@ -18480,7 +19325,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
     __pyx_t_2 = (((__pyx_v_tmpslice->shape[__pyx_v_i]) == 1) != 0);
     if (__pyx_t_2) {
 
-      /* "View.MemoryView":1240
+      /* "View.MemoryView":1239
  *     for i in range(ndim):
  *         if tmpslice.shape[i] == 1:
  *             tmpslice.strides[i] = 0             # <<<<<<<<<<<<<<
@@ -18489,7 +19334,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
  */
       (__pyx_v_tmpslice->strides[__pyx_v_i]) = 0;
 
-      /* "View.MemoryView":1239
+      /* "View.MemoryView":1238
  * 
  *     for i in range(ndim):
  *         if tmpslice.shape[i] == 1:             # <<<<<<<<<<<<<<
@@ -18499,7 +19344,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
     }
   }
 
-  /* "View.MemoryView":1242
+  /* "View.MemoryView":1241
  *             tmpslice.strides[i] = 0
  * 
  *     if slice_is_contig(src[0], order, ndim):             # <<<<<<<<<<<<<<
@@ -18509,7 +19354,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   __pyx_t_2 = (__pyx_memviewslice_is_contig((__pyx_v_src[0]), __pyx_v_order, __pyx_v_ndim) != 0);
   if (__pyx_t_2) {
 
-    /* "View.MemoryView":1243
+    /* "View.MemoryView":1242
  * 
  *     if slice_is_contig(src[0], order, ndim):
  *         memcpy(result, src.data, size)             # <<<<<<<<<<<<<<
@@ -18518,7 +19363,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
  */
     (void)(memcpy(__pyx_v_result, __pyx_v_src->data, __pyx_v_size));
 
-    /* "View.MemoryView":1242
+    /* "View.MemoryView":1241
  *             tmpslice.strides[i] = 0
  * 
  *     if slice_is_contig(src[0], order, ndim):             # <<<<<<<<<<<<<<
@@ -18528,7 +19373,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
     goto __pyx_L9;
   }
 
-  /* "View.MemoryView":1245
+  /* "View.MemoryView":1244
  *         memcpy(result, src.data, size)
  *     else:
  *         copy_strided_to_strided(src, tmpslice, ndim, itemsize)             # <<<<<<<<<<<<<<
@@ -18540,7 +19385,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   }
   __pyx_L9:;
 
-  /* "View.MemoryView":1247
+  /* "View.MemoryView":1246
  *         copy_strided_to_strided(src, tmpslice, ndim, itemsize)
  * 
  *     return result             # <<<<<<<<<<<<<<
@@ -18550,7 +19395,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "View.MemoryView":1209
+  /* "View.MemoryView":1208
  * 
  * @cname('__pyx_memoryview_copy_data_to_temp')
  * cdef void *copy_data_to_temp(__Pyx_memviewslice *src,             # <<<<<<<<<<<<<<
@@ -18574,7 +19419,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   return __pyx_r;
 }
 
-/* "View.MemoryView":1252
+/* "View.MemoryView":1251
  * 
  * @cname('__pyx_memoryview_err_extents')
  * cdef int _err_extents(int i, Py_ssize_t extent1,             # <<<<<<<<<<<<<<
@@ -18594,20 +19439,20 @@ static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_v_extent
   #endif
   __Pyx_RefNannySetupContext("_err_extents", 0);
 
-  /* "View.MemoryView":1255
+  /* "View.MemoryView":1254
  *                              Py_ssize_t extent2) except -1 with gil:
  *     raise ValueError("got differing extents in dimension %d (got %d and %d)" %
  *                                                         (i, extent1, extent2))             # <<<<<<<<<<<<<<
  * 
  * @cname('__pyx_memoryview_err_dim')
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1255, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1254, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_extent1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1255, __pyx_L1_error)
+  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_extent1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1254, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_extent2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1255, __pyx_L1_error)
+  __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_extent2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1254, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1255, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1254, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
@@ -18619,24 +19464,24 @@ static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_v_extent
   __pyx_t_2 = 0;
   __pyx_t_3 = 0;
 
-  /* "View.MemoryView":1254
+  /* "View.MemoryView":1253
  * cdef int _err_extents(int i, Py_ssize_t extent1,
  *                              Py_ssize_t extent2) except -1 with gil:
  *     raise ValueError("got differing extents in dimension %d (got %d and %d)" %             # <<<<<<<<<<<<<<
  *                                                         (i, extent1, extent2))
  * 
  */
-  __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1254, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1253, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1254, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1253, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_Raise(__pyx_t_4, 0, 0, 0);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __PYX_ERR(1, 1254, __pyx_L1_error)
+  __PYX_ERR(1, 1253, __pyx_L1_error)
 
-  /* "View.MemoryView":1252
+  /* "View.MemoryView":1251
  * 
  * @cname('__pyx_memoryview_err_extents')
  * cdef int _err_extents(int i, Py_ssize_t extent1,             # <<<<<<<<<<<<<<
@@ -18659,7 +19504,7 @@ static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_v_extent
   return __pyx_r;
 }
 
-/* "View.MemoryView":1258
+/* "View.MemoryView":1257
  * 
  * @cname('__pyx_memoryview_err_dim')
  * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil:             # <<<<<<<<<<<<<<
@@ -18680,18 +19525,18 @@ static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, char *__pyx_v_msg,
   __Pyx_RefNannySetupContext("_err_dim", 0);
   __Pyx_INCREF(__pyx_v_error);
 
-  /* "View.MemoryView":1259
+  /* "View.MemoryView":1258
  * @cname('__pyx_memoryview_err_dim')
  * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil:
  *     raise error(msg.decode('ascii') % dim)             # <<<<<<<<<<<<<<
  * 
  * @cname('__pyx_memoryview_err')
  */
-  __pyx_t_2 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1259, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1258, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1259, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1258, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyUnicode_Format(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1259, __pyx_L1_error)
+  __pyx_t_4 = PyUnicode_Format(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1258, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -18709,14 +19554,14 @@ static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, char *__pyx_v_msg,
   __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
   __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1259, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1258, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __PYX_ERR(1, 1259, __pyx_L1_error)
+  __PYX_ERR(1, 1258, __pyx_L1_error)
 
-  /* "View.MemoryView":1258
+  /* "View.MemoryView":1257
  * 
  * @cname('__pyx_memoryview_err_dim')
  * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil:             # <<<<<<<<<<<<<<
@@ -18740,7 +19585,7 @@ static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, char *__pyx_v_msg,
   return __pyx_r;
 }
 
-/* "View.MemoryView":1262
+/* "View.MemoryView":1261
  * 
  * @cname('__pyx_memoryview_err')
  * cdef int _err(object error, char *msg) except -1 with gil:             # <<<<<<<<<<<<<<
@@ -18762,7 +19607,7 @@ static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) {
   __Pyx_RefNannySetupContext("_err", 0);
   __Pyx_INCREF(__pyx_v_error);
 
-  /* "View.MemoryView":1263
+  /* "View.MemoryView":1262
  * @cname('__pyx_memoryview_err')
  * cdef int _err(object error, char *msg) except -1 with gil:
  *     if msg != NULL:             # <<<<<<<<<<<<<<
@@ -18772,14 +19617,14 @@ static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) {
   __pyx_t_1 = ((__pyx_v_msg != NULL) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "View.MemoryView":1264
+    /* "View.MemoryView":1263
  * cdef int _err(object error, char *msg) except -1 with gil:
  *     if msg != NULL:
  *         raise error(msg.decode('ascii'))             # <<<<<<<<<<<<<<
  *     else:
  *         raise error
  */
-    __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1264, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1263, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_error);
     __pyx_t_4 = __pyx_v_error; __pyx_t_5 = NULL;
@@ -18795,14 +19640,14 @@ static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) {
     __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3);
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1264, __pyx_L1_error)
+    if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1263, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __PYX_ERR(1, 1264, __pyx_L1_error)
+    __PYX_ERR(1, 1263, __pyx_L1_error)
 
-    /* "View.MemoryView":1263
+    /* "View.MemoryView":1262
  * @cname('__pyx_memoryview_err')
  * cdef int _err(object error, char *msg) except -1 with gil:
  *     if msg != NULL:             # <<<<<<<<<<<<<<
@@ -18811,7 +19656,7 @@ static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) {
  */
   }
 
-  /* "View.MemoryView":1266
+  /* "View.MemoryView":1265
  *         raise error(msg.decode('ascii'))
  *     else:
  *         raise error             # <<<<<<<<<<<<<<
@@ -18820,10 +19665,10 @@ static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) {
  */
   /*else*/ {
     __Pyx_Raise(__pyx_v_error, 0, 0, 0);
-    __PYX_ERR(1, 1266, __pyx_L1_error)
+    __PYX_ERR(1, 1265, __pyx_L1_error)
   }
 
-  /* "View.MemoryView":1262
+  /* "View.MemoryView":1261
  * 
  * @cname('__pyx_memoryview_err')
  * cdef int _err(object error, char *msg) except -1 with gil:             # <<<<<<<<<<<<<<
@@ -18847,7 +19692,7 @@ static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) {
   return __pyx_r;
 }
 
-/* "View.MemoryView":1269
+/* "View.MemoryView":1268
  * 
  * @cname('__pyx_memoryview_copy_contents')
  * cdef int memoryview_copy_contents(__Pyx_memviewslice src,             # <<<<<<<<<<<<<<
@@ -18874,7 +19719,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   void *__pyx_t_7;
   int __pyx_t_8;
 
-  /* "View.MemoryView":1277
+  /* "View.MemoryView":1276
  *     Check for overlapping memory and verify the shapes.
  *     """
  *     cdef void *tmpdata = NULL             # <<<<<<<<<<<<<<
@@ -18883,7 +19728,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   __pyx_v_tmpdata = NULL;
 
-  /* "View.MemoryView":1278
+  /* "View.MemoryView":1277
  *     """
  *     cdef void *tmpdata = NULL
  *     cdef size_t itemsize = src.memview.view.itemsize             # <<<<<<<<<<<<<<
@@ -18893,7 +19738,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   __pyx_t_1 = __pyx_v_src.memview->view.itemsize;
   __pyx_v_itemsize = __pyx_t_1;
 
-  /* "View.MemoryView":1280
+  /* "View.MemoryView":1279
  *     cdef size_t itemsize = src.memview.view.itemsize
  *     cdef int i
  *     cdef char order = get_best_order(&src, src_ndim)             # <<<<<<<<<<<<<<
@@ -18902,7 +19747,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_src), __pyx_v_src_ndim);
 
-  /* "View.MemoryView":1281
+  /* "View.MemoryView":1280
  *     cdef int i
  *     cdef char order = get_best_order(&src, src_ndim)
  *     cdef bint broadcasting = False             # <<<<<<<<<<<<<<
@@ -18911,7 +19756,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   __pyx_v_broadcasting = 0;
 
-  /* "View.MemoryView":1282
+  /* "View.MemoryView":1281
  *     cdef char order = get_best_order(&src, src_ndim)
  *     cdef bint broadcasting = False
  *     cdef bint direct_copy = False             # <<<<<<<<<<<<<<
@@ -18920,7 +19765,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   __pyx_v_direct_copy = 0;
 
-  /* "View.MemoryView":1285
+  /* "View.MemoryView":1284
  *     cdef __Pyx_memviewslice tmp
  * 
  *     if src_ndim < dst_ndim:             # <<<<<<<<<<<<<<
@@ -18930,7 +19775,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   __pyx_t_2 = ((__pyx_v_src_ndim < __pyx_v_dst_ndim) != 0);
   if (__pyx_t_2) {
 
-    /* "View.MemoryView":1286
+    /* "View.MemoryView":1285
  * 
  *     if src_ndim < dst_ndim:
  *         broadcast_leading(&src, src_ndim, dst_ndim)             # <<<<<<<<<<<<<<
@@ -18939,7 +19784,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
     __pyx_memoryview_broadcast_leading((&__pyx_v_src), __pyx_v_src_ndim, __pyx_v_dst_ndim);
 
-    /* "View.MemoryView":1285
+    /* "View.MemoryView":1284
  *     cdef __Pyx_memviewslice tmp
  * 
  *     if src_ndim < dst_ndim:             # <<<<<<<<<<<<<<
@@ -18949,7 +19794,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     goto __pyx_L3;
   }
 
-  /* "View.MemoryView":1287
+  /* "View.MemoryView":1286
  *     if src_ndim < dst_ndim:
  *         broadcast_leading(&src, src_ndim, dst_ndim)
  *     elif dst_ndim < src_ndim:             # <<<<<<<<<<<<<<
@@ -18959,7 +19804,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   __pyx_t_2 = ((__pyx_v_dst_ndim < __pyx_v_src_ndim) != 0);
   if (__pyx_t_2) {
 
-    /* "View.MemoryView":1288
+    /* "View.MemoryView":1287
  *         broadcast_leading(&src, src_ndim, dst_ndim)
  *     elif dst_ndim < src_ndim:
  *         broadcast_leading(&dst, dst_ndim, src_ndim)             # <<<<<<<<<<<<<<
@@ -18968,7 +19813,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
     __pyx_memoryview_broadcast_leading((&__pyx_v_dst), __pyx_v_dst_ndim, __pyx_v_src_ndim);
 
-    /* "View.MemoryView":1287
+    /* "View.MemoryView":1286
  *     if src_ndim < dst_ndim:
  *         broadcast_leading(&src, src_ndim, dst_ndim)
  *     elif dst_ndim < src_ndim:             # <<<<<<<<<<<<<<
@@ -18978,7 +19823,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   }
   __pyx_L3:;
 
-  /* "View.MemoryView":1290
+  /* "View.MemoryView":1289
  *         broadcast_leading(&dst, dst_ndim, src_ndim)
  * 
  *     cdef int ndim = max(src_ndim, dst_ndim)             # <<<<<<<<<<<<<<
@@ -18994,7 +19839,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   }
   __pyx_v_ndim = __pyx_t_5;
 
-  /* "View.MemoryView":1292
+  /* "View.MemoryView":1291
  *     cdef int ndim = max(src_ndim, dst_ndim)
  * 
  *     for i in range(ndim):             # <<<<<<<<<<<<<<
@@ -19006,7 +19851,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
     __pyx_v_i = __pyx_t_4;
 
-    /* "View.MemoryView":1293
+    /* "View.MemoryView":1292
  * 
  *     for i in range(ndim):
  *         if src.shape[i] != dst.shape[i]:             # <<<<<<<<<<<<<<
@@ -19016,7 +19861,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) != (__pyx_v_dst.shape[__pyx_v_i])) != 0);
     if (__pyx_t_2) {
 
-      /* "View.MemoryView":1294
+      /* "View.MemoryView":1293
  *     for i in range(ndim):
  *         if src.shape[i] != dst.shape[i]:
  *             if src.shape[i] == 1:             # <<<<<<<<<<<<<<
@@ -19026,7 +19871,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
       __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) == 1) != 0);
       if (__pyx_t_2) {
 
-        /* "View.MemoryView":1295
+        /* "View.MemoryView":1294
  *         if src.shape[i] != dst.shape[i]:
  *             if src.shape[i] == 1:
  *                 broadcasting = True             # <<<<<<<<<<<<<<
@@ -19035,7 +19880,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
         __pyx_v_broadcasting = 1;
 
-        /* "View.MemoryView":1296
+        /* "View.MemoryView":1295
  *             if src.shape[i] == 1:
  *                 broadcasting = True
  *                 src.strides[i] = 0             # <<<<<<<<<<<<<<
@@ -19044,7 +19889,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
         (__pyx_v_src.strides[__pyx_v_i]) = 0;
 
-        /* "View.MemoryView":1294
+        /* "View.MemoryView":1293
  *     for i in range(ndim):
  *         if src.shape[i] != dst.shape[i]:
  *             if src.shape[i] == 1:             # <<<<<<<<<<<<<<
@@ -19054,7 +19899,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
         goto __pyx_L7;
       }
 
-      /* "View.MemoryView":1298
+      /* "View.MemoryView":1297
  *                 src.strides[i] = 0
  *             else:
  *                 _err_extents(i, dst.shape[i], src.shape[i])             # <<<<<<<<<<<<<<
@@ -19062,11 +19907,11 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  *         if src.suboffsets[i] >= 0:
  */
       /*else*/ {
-        __pyx_t_6 = __pyx_memoryview_err_extents(__pyx_v_i, (__pyx_v_dst.shape[__pyx_v_i]), (__pyx_v_src.shape[__pyx_v_i])); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1298, __pyx_L1_error)
+        __pyx_t_6 = __pyx_memoryview_err_extents(__pyx_v_i, (__pyx_v_dst.shape[__pyx_v_i]), (__pyx_v_src.shape[__pyx_v_i])); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1297, __pyx_L1_error)
       }
       __pyx_L7:;
 
-      /* "View.MemoryView":1293
+      /* "View.MemoryView":1292
  * 
  *     for i in range(ndim):
  *         if src.shape[i] != dst.shape[i]:             # <<<<<<<<<<<<<<
@@ -19075,7 +19920,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
     }
 
-    /* "View.MemoryView":1300
+    /* "View.MemoryView":1299
  *                 _err_extents(i, dst.shape[i], src.shape[i])
  * 
  *         if src.suboffsets[i] >= 0:             # <<<<<<<<<<<<<<
@@ -19085,16 +19930,16 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     __pyx_t_2 = (((__pyx_v_src.suboffsets[__pyx_v_i]) >= 0) != 0);
     if (__pyx_t_2) {
 
-      /* "View.MemoryView":1301
+      /* "View.MemoryView":1300
  * 
  *         if src.suboffsets[i] >= 0:
  *             _err_dim(ValueError, "Dimension %d is not direct", i)             # <<<<<<<<<<<<<<
  * 
  *     if slices_overlap(&src, &dst, ndim, itemsize):
  */
-      __pyx_t_6 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Dimension %d is not direct"), __pyx_v_i); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1301, __pyx_L1_error)
+      __pyx_t_6 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Dimension %d is not direct"), __pyx_v_i); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1300, __pyx_L1_error)
 
-      /* "View.MemoryView":1300
+      /* "View.MemoryView":1299
  *                 _err_extents(i, dst.shape[i], src.shape[i])
  * 
  *         if src.suboffsets[i] >= 0:             # <<<<<<<<<<<<<<
@@ -19104,7 +19949,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     }
   }
 
-  /* "View.MemoryView":1303
+  /* "View.MemoryView":1302
  *             _err_dim(ValueError, "Dimension %d is not direct", i)
  * 
  *     if slices_overlap(&src, &dst, ndim, itemsize):             # <<<<<<<<<<<<<<
@@ -19114,7 +19959,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   __pyx_t_2 = (__pyx_slices_overlap((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize) != 0);
   if (__pyx_t_2) {
 
-    /* "View.MemoryView":1305
+    /* "View.MemoryView":1304
  *     if slices_overlap(&src, &dst, ndim, itemsize):
  * 
  *         if not slice_is_contig(src, order, ndim):             # <<<<<<<<<<<<<<
@@ -19124,7 +19969,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     __pyx_t_2 = ((!(__pyx_memviewslice_is_contig(__pyx_v_src, __pyx_v_order, __pyx_v_ndim) != 0)) != 0);
     if (__pyx_t_2) {
 
-      /* "View.MemoryView":1306
+      /* "View.MemoryView":1305
  * 
  *         if not slice_is_contig(src, order, ndim):
  *             order = get_best_order(&dst, ndim)             # <<<<<<<<<<<<<<
@@ -19133,7 +19978,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
       __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim);
 
-      /* "View.MemoryView":1305
+      /* "View.MemoryView":1304
  *     if slices_overlap(&src, &dst, ndim, itemsize):
  * 
  *         if not slice_is_contig(src, order, ndim):             # <<<<<<<<<<<<<<
@@ -19142,17 +19987,17 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
     }
 
-    /* "View.MemoryView":1308
+    /* "View.MemoryView":1307
  *             order = get_best_order(&dst, ndim)
  * 
  *         tmpdata = copy_data_to_temp(&src, &tmp, order, ndim)             # <<<<<<<<<<<<<<
  *         src = tmp
  * 
  */
-    __pyx_t_7 = __pyx_memoryview_copy_data_to_temp((&__pyx_v_src), (&__pyx_v_tmp), __pyx_v_order, __pyx_v_ndim); if (unlikely(__pyx_t_7 == ((void *)NULL))) __PYX_ERR(1, 1308, __pyx_L1_error)
+    __pyx_t_7 = __pyx_memoryview_copy_data_to_temp((&__pyx_v_src), (&__pyx_v_tmp), __pyx_v_order, __pyx_v_ndim); if (unlikely(__pyx_t_7 == ((void *)NULL))) __PYX_ERR(1, 1307, __pyx_L1_error)
     __pyx_v_tmpdata = __pyx_t_7;
 
-    /* "View.MemoryView":1309
+    /* "View.MemoryView":1308
  * 
  *         tmpdata = copy_data_to_temp(&src, &tmp, order, ndim)
  *         src = tmp             # <<<<<<<<<<<<<<
@@ -19161,7 +20006,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
     __pyx_v_src = __pyx_v_tmp;
 
-    /* "View.MemoryView":1303
+    /* "View.MemoryView":1302
  *             _err_dim(ValueError, "Dimension %d is not direct", i)
  * 
  *     if slices_overlap(&src, &dst, ndim, itemsize):             # <<<<<<<<<<<<<<
@@ -19170,7 +20015,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   }
 
-  /* "View.MemoryView":1311
+  /* "View.MemoryView":1310
  *         src = tmp
  * 
  *     if not broadcasting:             # <<<<<<<<<<<<<<
@@ -19180,7 +20025,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   __pyx_t_2 = ((!(__pyx_v_broadcasting != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "View.MemoryView":1314
+    /* "View.MemoryView":1313
  * 
  * 
  *         if slice_is_contig(src, 'C', ndim):             # <<<<<<<<<<<<<<
@@ -19190,7 +20035,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'C', __pyx_v_ndim) != 0);
     if (__pyx_t_2) {
 
-      /* "View.MemoryView":1315
+      /* "View.MemoryView":1314
  * 
  *         if slice_is_contig(src, 'C', ndim):
  *             direct_copy = slice_is_contig(dst, 'C', ndim)             # <<<<<<<<<<<<<<
@@ -19199,7 +20044,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
       __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'C', __pyx_v_ndim);
 
-      /* "View.MemoryView":1314
+      /* "View.MemoryView":1313
  * 
  * 
  *         if slice_is_contig(src, 'C', ndim):             # <<<<<<<<<<<<<<
@@ -19209,7 +20054,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
       goto __pyx_L12;
     }
 
-    /* "View.MemoryView":1316
+    /* "View.MemoryView":1315
  *         if slice_is_contig(src, 'C', ndim):
  *             direct_copy = slice_is_contig(dst, 'C', ndim)
  *         elif slice_is_contig(src, 'F', ndim):             # <<<<<<<<<<<<<<
@@ -19219,7 +20064,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'F', __pyx_v_ndim) != 0);
     if (__pyx_t_2) {
 
-      /* "View.MemoryView":1317
+      /* "View.MemoryView":1316
  *             direct_copy = slice_is_contig(dst, 'C', ndim)
  *         elif slice_is_contig(src, 'F', ndim):
  *             direct_copy = slice_is_contig(dst, 'F', ndim)             # <<<<<<<<<<<<<<
@@ -19228,7 +20073,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
       __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'F', __pyx_v_ndim);
 
-      /* "View.MemoryView":1316
+      /* "View.MemoryView":1315
  *         if slice_is_contig(src, 'C', ndim):
  *             direct_copy = slice_is_contig(dst, 'C', ndim)
  *         elif slice_is_contig(src, 'F', ndim):             # <<<<<<<<<<<<<<
@@ -19238,7 +20083,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     }
     __pyx_L12:;
 
-    /* "View.MemoryView":1319
+    /* "View.MemoryView":1318
  *             direct_copy = slice_is_contig(dst, 'F', ndim)
  * 
  *         if direct_copy:             # <<<<<<<<<<<<<<
@@ -19248,7 +20093,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     __pyx_t_2 = (__pyx_v_direct_copy != 0);
     if (__pyx_t_2) {
 
-      /* "View.MemoryView":1321
+      /* "View.MemoryView":1320
  *         if direct_copy:
  * 
  *             refcount_copying(&dst, dtype_is_object, ndim, False)             # <<<<<<<<<<<<<<
@@ -19257,7 +20102,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
       __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0);
 
-      /* "View.MemoryView":1322
+      /* "View.MemoryView":1321
  * 
  *             refcount_copying(&dst, dtype_is_object, ndim, False)
  *             memcpy(dst.data, src.data, slice_get_size(&src, ndim))             # <<<<<<<<<<<<<<
@@ -19266,7 +20111,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
       (void)(memcpy(__pyx_v_dst.data, __pyx_v_src.data, __pyx_memoryview_slice_get_size((&__pyx_v_src), __pyx_v_ndim)));
 
-      /* "View.MemoryView":1323
+      /* "View.MemoryView":1322
  *             refcount_copying(&dst, dtype_is_object, ndim, False)
  *             memcpy(dst.data, src.data, slice_get_size(&src, ndim))
  *             refcount_copying(&dst, dtype_is_object, ndim, True)             # <<<<<<<<<<<<<<
@@ -19275,7 +20120,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
       __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1);
 
-      /* "View.MemoryView":1324
+      /* "View.MemoryView":1323
  *             memcpy(dst.data, src.data, slice_get_size(&src, ndim))
  *             refcount_copying(&dst, dtype_is_object, ndim, True)
  *             free(tmpdata)             # <<<<<<<<<<<<<<
@@ -19284,7 +20129,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
       free(__pyx_v_tmpdata);
 
-      /* "View.MemoryView":1325
+      /* "View.MemoryView":1324
  *             refcount_copying(&dst, dtype_is_object, ndim, True)
  *             free(tmpdata)
  *             return 0             # <<<<<<<<<<<<<<
@@ -19294,7 +20139,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
       __pyx_r = 0;
       goto __pyx_L0;
 
-      /* "View.MemoryView":1319
+      /* "View.MemoryView":1318
  *             direct_copy = slice_is_contig(dst, 'F', ndim)
  * 
  *         if direct_copy:             # <<<<<<<<<<<<<<
@@ -19303,7 +20148,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
     }
 
-    /* "View.MemoryView":1311
+    /* "View.MemoryView":1310
  *         src = tmp
  * 
  *     if not broadcasting:             # <<<<<<<<<<<<<<
@@ -19312,7 +20157,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   }
 
-  /* "View.MemoryView":1327
+  /* "View.MemoryView":1326
  *             return 0
  * 
  *     if order == 'F' == get_best_order(&dst, ndim):             # <<<<<<<<<<<<<<
@@ -19326,25 +20171,25 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   __pyx_t_8 = (__pyx_t_2 != 0);
   if (__pyx_t_8) {
 
-    /* "View.MemoryView":1330
+    /* "View.MemoryView":1329
  * 
  * 
  *         transpose_memslice(&src)             # <<<<<<<<<<<<<<
  *         transpose_memslice(&dst)
  * 
  */
-    __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_src)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1330, __pyx_L1_error)
+    __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_src)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1329, __pyx_L1_error)
 
-    /* "View.MemoryView":1331
+    /* "View.MemoryView":1330
  * 
  *         transpose_memslice(&src)
  *         transpose_memslice(&dst)             # <<<<<<<<<<<<<<
  * 
  *     refcount_copying(&dst, dtype_is_object, ndim, False)
  */
-    __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_dst)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1331, __pyx_L1_error)
+    __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_dst)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1330, __pyx_L1_error)
 
-    /* "View.MemoryView":1327
+    /* "View.MemoryView":1326
  *             return 0
  * 
  *     if order == 'F' == get_best_order(&dst, ndim):             # <<<<<<<<<<<<<<
@@ -19353,7 +20198,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   }
 
-  /* "View.MemoryView":1333
+  /* "View.MemoryView":1332
  *         transpose_memslice(&dst)
  * 
  *     refcount_copying(&dst, dtype_is_object, ndim, False)             # <<<<<<<<<<<<<<
@@ -19362,7 +20207,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0);
 
-  /* "View.MemoryView":1334
+  /* "View.MemoryView":1333
  * 
  *     refcount_copying(&dst, dtype_is_object, ndim, False)
  *     copy_strided_to_strided(&src, &dst, ndim, itemsize)             # <<<<<<<<<<<<<<
@@ -19371,7 +20216,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   copy_strided_to_strided((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize);
 
-  /* "View.MemoryView":1335
+  /* "View.MemoryView":1334
  *     refcount_copying(&dst, dtype_is_object, ndim, False)
  *     copy_strided_to_strided(&src, &dst, ndim, itemsize)
  *     refcount_copying(&dst, dtype_is_object, ndim, True)             # <<<<<<<<<<<<<<
@@ -19380,7 +20225,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1);
 
-  /* "View.MemoryView":1337
+  /* "View.MemoryView":1336
  *     refcount_copying(&dst, dtype_is_object, ndim, True)
  * 
  *     free(tmpdata)             # <<<<<<<<<<<<<<
@@ -19389,7 +20234,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   free(__pyx_v_tmpdata);
 
-  /* "View.MemoryView":1338
+  /* "View.MemoryView":1337
  * 
  *     free(tmpdata)
  *     return 0             # <<<<<<<<<<<<<<
@@ -19399,7 +20244,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "View.MemoryView":1269
+  /* "View.MemoryView":1268
  * 
  * @cname('__pyx_memoryview_copy_contents')
  * cdef int memoryview_copy_contents(__Pyx_memviewslice src,             # <<<<<<<<<<<<<<
@@ -19423,7 +20268,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   return __pyx_r;
 }
 
-/* "View.MemoryView":1341
+/* "View.MemoryView":1340
  * 
  * @cname('__pyx_memoryview_broadcast_leading')
  * cdef void broadcast_leading(__Pyx_memviewslice *mslice,             # <<<<<<<<<<<<<<
@@ -19438,7 +20283,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
   int __pyx_t_2;
   int __pyx_t_3;
 
-  /* "View.MemoryView":1345
+  /* "View.MemoryView":1344
  *                             int ndim_other) nogil:
  *     cdef int i
  *     cdef int offset = ndim_other - ndim             # <<<<<<<<<<<<<<
@@ -19447,7 +20292,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
  */
   __pyx_v_offset = (__pyx_v_ndim_other - __pyx_v_ndim);
 
-  /* "View.MemoryView":1347
+  /* "View.MemoryView":1346
  *     cdef int offset = ndim_other - ndim
  * 
  *     for i in range(ndim - 1, -1, -1):             # <<<<<<<<<<<<<<
@@ -19457,7 +20302,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
   for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) {
     __pyx_v_i = __pyx_t_1;
 
-    /* "View.MemoryView":1348
+    /* "View.MemoryView":1347
  * 
  *     for i in range(ndim - 1, -1, -1):
  *         mslice.shape[i + offset] = mslice.shape[i]             # <<<<<<<<<<<<<<
@@ -19466,7 +20311,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
  */
     (__pyx_v_mslice->shape[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->shape[__pyx_v_i]);
 
-    /* "View.MemoryView":1349
+    /* "View.MemoryView":1348
  *     for i in range(ndim - 1, -1, -1):
  *         mslice.shape[i + offset] = mslice.shape[i]
  *         mslice.strides[i + offset] = mslice.strides[i]             # <<<<<<<<<<<<<<
@@ -19475,7 +20320,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
  */
     (__pyx_v_mslice->strides[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->strides[__pyx_v_i]);
 
-    /* "View.MemoryView":1350
+    /* "View.MemoryView":1349
  *         mslice.shape[i + offset] = mslice.shape[i]
  *         mslice.strides[i + offset] = mslice.strides[i]
  *         mslice.suboffsets[i + offset] = mslice.suboffsets[i]             # <<<<<<<<<<<<<<
@@ -19485,7 +20330,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
     (__pyx_v_mslice->suboffsets[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->suboffsets[__pyx_v_i]);
   }
 
-  /* "View.MemoryView":1352
+  /* "View.MemoryView":1351
  *         mslice.suboffsets[i + offset] = mslice.suboffsets[i]
  * 
  *     for i in range(offset):             # <<<<<<<<<<<<<<
@@ -19497,7 +20342,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
   for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
     __pyx_v_i = __pyx_t_3;
 
-    /* "View.MemoryView":1353
+    /* "View.MemoryView":1352
  * 
  *     for i in range(offset):
  *         mslice.shape[i] = 1             # <<<<<<<<<<<<<<
@@ -19506,7 +20351,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
  */
     (__pyx_v_mslice->shape[__pyx_v_i]) = 1;
 
-    /* "View.MemoryView":1354
+    /* "View.MemoryView":1353
  *     for i in range(offset):
  *         mslice.shape[i] = 1
  *         mslice.strides[i] = mslice.strides[0]             # <<<<<<<<<<<<<<
@@ -19515,7 +20360,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
  */
     (__pyx_v_mslice->strides[__pyx_v_i]) = (__pyx_v_mslice->strides[0]);
 
-    /* "View.MemoryView":1355
+    /* "View.MemoryView":1354
  *         mslice.shape[i] = 1
  *         mslice.strides[i] = mslice.strides[0]
  *         mslice.suboffsets[i] = -1             # <<<<<<<<<<<<<<
@@ -19525,7 +20370,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
     (__pyx_v_mslice->suboffsets[__pyx_v_i]) = -1L;
   }
 
-  /* "View.MemoryView":1341
+  /* "View.MemoryView":1340
  * 
  * @cname('__pyx_memoryview_broadcast_leading')
  * cdef void broadcast_leading(__Pyx_memviewslice *mslice,             # <<<<<<<<<<<<<<
@@ -19536,7 +20381,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
   /* function exit code */
 }
 
-/* "View.MemoryView":1363
+/* "View.MemoryView":1362
  * 
  * @cname('__pyx_memoryview_refcount_copying')
  * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object,             # <<<<<<<<<<<<<<
@@ -19547,7 +20392,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
 static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_dtype_is_object, int __pyx_v_ndim, int __pyx_v_inc) {
   int __pyx_t_1;
 
-  /* "View.MemoryView":1367
+  /* "View.MemoryView":1366
  * 
  * 
  *     if dtype_is_object:             # <<<<<<<<<<<<<<
@@ -19557,7 +20402,7 @@ static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, i
   __pyx_t_1 = (__pyx_v_dtype_is_object != 0);
   if (__pyx_t_1) {
 
-    /* "View.MemoryView":1368
+    /* "View.MemoryView":1367
  * 
  *     if dtype_is_object:
  *         refcount_objects_in_slice_with_gil(dst.data, dst.shape,             # <<<<<<<<<<<<<<
@@ -19566,7 +20411,7 @@ static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, i
  */
     __pyx_memoryview_refcount_objects_in_slice_with_gil(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_inc);
 
-    /* "View.MemoryView":1367
+    /* "View.MemoryView":1366
  * 
  * 
  *     if dtype_is_object:             # <<<<<<<<<<<<<<
@@ -19575,7 +20420,7 @@ static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, i
  */
   }
 
-  /* "View.MemoryView":1363
+  /* "View.MemoryView":1362
  * 
  * @cname('__pyx_memoryview_refcount_copying')
  * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object,             # <<<<<<<<<<<<<<
@@ -19586,7 +20431,7 @@ static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, i
   /* function exit code */
 }
 
-/* "View.MemoryView":1372
+/* "View.MemoryView":1371
  * 
  * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil')
  * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
@@ -19601,7 +20446,7 @@ static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__pyx_v_da
   #endif
   __Pyx_RefNannySetupContext("refcount_objects_in_slice_with_gil", 0);
 
-  /* "View.MemoryView":1375
+  /* "View.MemoryView":1374
  *                                              Py_ssize_t *strides, int ndim,
  *                                              bint inc) with gil:
  *     refcount_objects_in_slice(data, shape, strides, ndim, inc)             # <<<<<<<<<<<<<<
@@ -19610,7 +20455,7 @@ static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__pyx_v_da
  */
   __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, __pyx_v_shape, __pyx_v_strides, __pyx_v_ndim, __pyx_v_inc);
 
-  /* "View.MemoryView":1372
+  /* "View.MemoryView":1371
  * 
  * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil')
  * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
@@ -19625,7 +20470,7 @@ static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__pyx_v_da
   #endif
 }
 
-/* "View.MemoryView":1378
+/* "View.MemoryView":1377
  * 
  * @cname('__pyx_memoryview_refcount_objects_in_slice')
  * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
@@ -19642,7 +20487,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("refcount_objects_in_slice", 0);
 
-  /* "View.MemoryView":1382
+  /* "View.MemoryView":1381
  *     cdef Py_ssize_t i
  * 
  *     for i in range(shape[0]):             # <<<<<<<<<<<<<<
@@ -19654,7 +20499,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
   for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
     __pyx_v_i = __pyx_t_3;
 
-    /* "View.MemoryView":1383
+    /* "View.MemoryView":1382
  * 
  *     for i in range(shape[0]):
  *         if ndim == 1:             # <<<<<<<<<<<<<<
@@ -19664,7 +20509,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
     __pyx_t_4 = ((__pyx_v_ndim == 1) != 0);
     if (__pyx_t_4) {
 
-      /* "View.MemoryView":1384
+      /* "View.MemoryView":1383
  *     for i in range(shape[0]):
  *         if ndim == 1:
  *             if inc:             # <<<<<<<<<<<<<<
@@ -19674,7 +20519,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
       __pyx_t_4 = (__pyx_v_inc != 0);
       if (__pyx_t_4) {
 
-        /* "View.MemoryView":1385
+        /* "View.MemoryView":1384
  *         if ndim == 1:
  *             if inc:
  *                 Py_INCREF((<PyObject **> data)[0])             # <<<<<<<<<<<<<<
@@ -19683,7 +20528,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
  */
         Py_INCREF((((PyObject **)__pyx_v_data)[0]));
 
-        /* "View.MemoryView":1384
+        /* "View.MemoryView":1383
  *     for i in range(shape[0]):
  *         if ndim == 1:
  *             if inc:             # <<<<<<<<<<<<<<
@@ -19693,7 +20538,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
         goto __pyx_L6;
       }
 
-      /* "View.MemoryView":1387
+      /* "View.MemoryView":1386
  *                 Py_INCREF((<PyObject **> data)[0])
  *             else:
  *                 Py_DECREF((<PyObject **> data)[0])             # <<<<<<<<<<<<<<
@@ -19705,7 +20550,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
       }
       __pyx_L6:;
 
-      /* "View.MemoryView":1383
+      /* "View.MemoryView":1382
  * 
  *     for i in range(shape[0]):
  *         if ndim == 1:             # <<<<<<<<<<<<<<
@@ -19715,7 +20560,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
       goto __pyx_L5;
     }
 
-    /* "View.MemoryView":1389
+    /* "View.MemoryView":1388
  *                 Py_DECREF((<PyObject **> data)[0])
  *         else:
  *             refcount_objects_in_slice(data, shape + 1, strides + 1,             # <<<<<<<<<<<<<<
@@ -19724,7 +20569,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
  */
     /*else*/ {
 
-      /* "View.MemoryView":1390
+      /* "View.MemoryView":1389
  *         else:
  *             refcount_objects_in_slice(data, shape + 1, strides + 1,
  *                                       ndim - 1, inc)             # <<<<<<<<<<<<<<
@@ -19735,7 +20580,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
     }
     __pyx_L5:;
 
-    /* "View.MemoryView":1392
+    /* "View.MemoryView":1391
  *                                       ndim - 1, inc)
  * 
  *         data += strides[0]             # <<<<<<<<<<<<<<
@@ -19745,7 +20590,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
     __pyx_v_data = (__pyx_v_data + (__pyx_v_strides[0]));
   }
 
-  /* "View.MemoryView":1378
+  /* "View.MemoryView":1377
  * 
  * @cname('__pyx_memoryview_refcount_objects_in_slice')
  * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
@@ -19757,7 +20602,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
   __Pyx_RefNannyFinishContext();
 }
 
-/* "View.MemoryView":1398
+/* "View.MemoryView":1397
  * 
  * @cname('__pyx_memoryview_slice_assign_scalar')
  * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim,             # <<<<<<<<<<<<<<
@@ -19767,7 +20612,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
 
 static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item, int __pyx_v_dtype_is_object) {
 
-  /* "View.MemoryView":1401
+  /* "View.MemoryView":1400
  *                               size_t itemsize, void *item,
  *                               bint dtype_is_object) nogil:
  *     refcount_copying(dst, dtype_is_object, ndim, False)             # <<<<<<<<<<<<<<
@@ -19776,7 +20621,7 @@ static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst
  */
   __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 0);
 
-  /* "View.MemoryView":1402
+  /* "View.MemoryView":1401
  *                               bint dtype_is_object) nogil:
  *     refcount_copying(dst, dtype_is_object, ndim, False)
  *     _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim,             # <<<<<<<<<<<<<<
@@ -19785,7 +20630,7 @@ static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst
  */
   __pyx_memoryview__slice_assign_scalar(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_itemsize, __pyx_v_item);
 
-  /* "View.MemoryView":1404
+  /* "View.MemoryView":1403
  *     _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim,
  *                          itemsize, item)
  *     refcount_copying(dst, dtype_is_object, ndim, True)             # <<<<<<<<<<<<<<
@@ -19794,7 +20639,7 @@ static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst
  */
   __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 1);
 
-  /* "View.MemoryView":1398
+  /* "View.MemoryView":1397
  * 
  * @cname('__pyx_memoryview_slice_assign_scalar')
  * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim,             # <<<<<<<<<<<<<<
@@ -19805,7 +20650,7 @@ static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst
   /* function exit code */
 }
 
-/* "View.MemoryView":1408
+/* "View.MemoryView":1407
  * 
  * @cname('__pyx_memoryview__slice_assign_scalar')
  * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
@@ -19822,7 +20667,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
   Py_ssize_t __pyx_t_3;
   Py_ssize_t __pyx_t_4;
 
-  /* "View.MemoryView":1412
+  /* "View.MemoryView":1411
  *                               size_t itemsize, void *item) nogil:
  *     cdef Py_ssize_t i
  *     cdef Py_ssize_t stride = strides[0]             # <<<<<<<<<<<<<<
@@ -19831,7 +20676,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
  */
   __pyx_v_stride = (__pyx_v_strides[0]);
 
-  /* "View.MemoryView":1413
+  /* "View.MemoryView":1412
  *     cdef Py_ssize_t i
  *     cdef Py_ssize_t stride = strides[0]
  *     cdef Py_ssize_t extent = shape[0]             # <<<<<<<<<<<<<<
@@ -19840,7 +20685,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
  */
   __pyx_v_extent = (__pyx_v_shape[0]);
 
-  /* "View.MemoryView":1415
+  /* "View.MemoryView":1414
  *     cdef Py_ssize_t extent = shape[0]
  * 
  *     if ndim == 1:             # <<<<<<<<<<<<<<
@@ -19850,7 +20695,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
   __pyx_t_1 = ((__pyx_v_ndim == 1) != 0);
   if (__pyx_t_1) {
 
-    /* "View.MemoryView":1416
+    /* "View.MemoryView":1415
  * 
  *     if ndim == 1:
  *         for i in range(extent):             # <<<<<<<<<<<<<<
@@ -19862,7 +20707,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
     for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
       __pyx_v_i = __pyx_t_4;
 
-      /* "View.MemoryView":1417
+      /* "View.MemoryView":1416
  *     if ndim == 1:
  *         for i in range(extent):
  *             memcpy(data, item, itemsize)             # <<<<<<<<<<<<<<
@@ -19871,7 +20716,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
  */
       (void)(memcpy(__pyx_v_data, __pyx_v_item, __pyx_v_itemsize));
 
-      /* "View.MemoryView":1418
+      /* "View.MemoryView":1417
  *         for i in range(extent):
  *             memcpy(data, item, itemsize)
  *             data += stride             # <<<<<<<<<<<<<<
@@ -19881,7 +20726,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
       __pyx_v_data = (__pyx_v_data + __pyx_v_stride);
     }
 
-    /* "View.MemoryView":1415
+    /* "View.MemoryView":1414
  *     cdef Py_ssize_t extent = shape[0]
  * 
  *     if ndim == 1:             # <<<<<<<<<<<<<<
@@ -19891,7 +20736,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
     goto __pyx_L3;
   }
 
-  /* "View.MemoryView":1420
+  /* "View.MemoryView":1419
  *             data += stride
  *     else:
  *         for i in range(extent):             # <<<<<<<<<<<<<<
@@ -19904,7 +20749,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
     for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
       __pyx_v_i = __pyx_t_4;
 
-      /* "View.MemoryView":1421
+      /* "View.MemoryView":1420
  *     else:
  *         for i in range(extent):
  *             _slice_assign_scalar(data, shape + 1, strides + 1,             # <<<<<<<<<<<<<<
@@ -19913,7 +20758,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
  */
       __pyx_memoryview__slice_assign_scalar(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize, __pyx_v_item);
 
-      /* "View.MemoryView":1423
+      /* "View.MemoryView":1422
  *             _slice_assign_scalar(data, shape + 1, strides + 1,
  *                                 ndim - 1, itemsize, item)
  *             data += stride             # <<<<<<<<<<<<<<
@@ -19925,7 +20770,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
   }
   __pyx_L3:;
 
-  /* "View.MemoryView":1408
+  /* "View.MemoryView":1407
  * 
  * @cname('__pyx_memoryview__slice_assign_scalar')
  * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
@@ -20450,7 +21295,12 @@ static PyTypeObject __pyx_type___pyx_array = {
   sizeof(struct __pyx_array_obj), /*tp_basicsize*/
   0, /*tp_itemsize*/
   __pyx_tp_dealloc_array, /*tp_dealloc*/
+  #if PY_VERSION_HEX < 0x030800b4
   0, /*tp_print*/
+  #endif
+  #if PY_VERSION_HEX >= 0x030800b4
+  0, /*tp_vectorcall_offset*/
+  #endif
   0, /*tp_getattr*/
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
@@ -20503,6 +21353,9 @@ static PyTypeObject __pyx_type___pyx_array = {
   #if PY_VERSION_HEX >= 0x030800b1
   0, /*tp_vectorcall*/
   #endif
+  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+  0, /*tp_print*/
+  #endif
 };
 
 static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
@@ -20561,7 +21414,12 @@ static PyTypeObject __pyx_type___pyx_MemviewEnum = {
   sizeof(struct __pyx_MemviewEnum_obj), /*tp_basicsize*/
   0, /*tp_itemsize*/
   __pyx_tp_dealloc_Enum, /*tp_dealloc*/
+  #if PY_VERSION_HEX < 0x030800b4
   0, /*tp_print*/
+  #endif
+  #if PY_VERSION_HEX >= 0x030800b4
+  0, /*tp_vectorcall_offset*/
+  #endif
   0, /*tp_getattr*/
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
@@ -20614,6 +21472,9 @@ static PyTypeObject __pyx_type___pyx_MemviewEnum = {
   #if PY_VERSION_HEX >= 0x030800b1
   0, /*tp_vectorcall*/
   #endif
+  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+  0, /*tp_print*/
+  #endif
 };
 static struct __pyx_vtabstruct_memoryview __pyx_vtable_memoryview;
 
@@ -20814,7 +21675,12 @@ static PyTypeObject __pyx_type___pyx_memoryview = {
   sizeof(struct __pyx_memoryview_obj), /*tp_basicsize*/
   0, /*tp_itemsize*/
   __pyx_tp_dealloc_memoryview, /*tp_dealloc*/
+  #if PY_VERSION_HEX < 0x030800b4
   0, /*tp_print*/
+  #endif
+  #if PY_VERSION_HEX >= 0x030800b4
+  0, /*tp_vectorcall_offset*/
+  #endif
   0, /*tp_getattr*/
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
@@ -20867,6 +21733,9 @@ static PyTypeObject __pyx_type___pyx_memoryview = {
   #if PY_VERSION_HEX >= 0x030800b1
   0, /*tp_vectorcall*/
   #endif
+  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+  0, /*tp_print*/
+  #endif
 };
 static struct __pyx_vtabstruct__memoryviewslice __pyx_vtable__memoryviewslice;
 
@@ -20944,7 +21813,12 @@ static PyTypeObject __pyx_type___pyx_memoryviewslice = {
   sizeof(struct __pyx_memoryviewslice_obj), /*tp_basicsize*/
   0, /*tp_itemsize*/
   __pyx_tp_dealloc__memoryviewslice, /*tp_dealloc*/
+  #if PY_VERSION_HEX < 0x030800b4
   0, /*tp_print*/
+  #endif
+  #if PY_VERSION_HEX >= 0x030800b4
+  0, /*tp_vectorcall_offset*/
+  #endif
   0, /*tp_getattr*/
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
@@ -21005,10 +21879,13 @@ static PyTypeObject __pyx_type___pyx_memoryviewslice = {
   #if PY_VERSION_HEX >= 0x030800b1
   0, /*tp_vectorcall*/
   #endif
+  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+  0, /*tp_print*/
+  #endif
 };
 
 static PyMethodDef __pyx_methods[] = {
-  {"get_exact_means", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10pyBedGraph_17ignore_missing_bp_7get_exact_means, METH_VARARGS|METH_KEYWORDS, 0},
+  {"get_exact_means", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10pyBedGraph_17ignore_missing_bp_11get_exact_means, METH_VARARGS|METH_KEYWORDS, 0},
   {0, 0, 0, 0}
 };
 
@@ -21117,6 +21994,8 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_get_maximums, __pyx_k_get_maximums, sizeof(__pyx_k_get_maximums), 0, 0, 1, 1},
   {&__pyx_n_s_get_minimums, __pyx_k_get_minimums, sizeof(__pyx_k_get_minimums), 0, 0, 1, 1},
   {&__pyx_n_s_get_stds, __pyx_k_get_stds, sizeof(__pyx_k_get_stds), 0, 0, 1, 1},
+  {&__pyx_n_s_get_sum, __pyx_k_get_sum, sizeof(__pyx_k_get_sum), 0, 0, 1, 1},
+  {&__pyx_n_s_get_values, __pyx_k_get_values, sizeof(__pyx_k_get_values), 0, 0, 1, 1},
   {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1},
   {&__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_k_got_differing_extents_in_dimensi, sizeof(__pyx_k_got_differing_extents_in_dimensi), 0, 0, 1, 0},
   {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1},
@@ -21188,6 +22067,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_kp_s_strided_and_indirect, __pyx_k_strided_and_indirect, sizeof(__pyx_k_strided_and_indirect), 0, 0, 1, 0},
   {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0},
   {&__pyx_n_s_struct, __pyx_k_struct, sizeof(__pyx_k_struct), 0, 0, 1, 1},
+  {&__pyx_n_s_sum, __pyx_k_sum, sizeof(__pyx_k_sum), 0, 0, 1, 1},
   {&__pyx_n_s_temp_end, __pyx_k_temp_end, sizeof(__pyx_k_temp_end), 0, 0, 1, 1},
   {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1},
   {&__pyx_n_s_total, __pyx_k_total, sizeof(__pyx_k_total), 0, 0, 1, 1},
@@ -21437,65 +22317,89 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
   __Pyx_GIVEREF(__pyx_tuple__21);
   __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(2, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__21, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyBedGraph_ignore_missing_bp_pyx, __pyx_n_s_load_bins, 36, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) __PYX_ERR(0, 36, __pyx_L1_error)
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":106
+  /* "pyBedGraph/ignore_missing_bp.pyx":72
+ *     return bins, bins_coverage
+ * 
+ * def get_values(double[:] value_map, int[:] index_list,             # <<<<<<<<<<<<<<
+ *                 unsigned int[:] interval_start, unsigned int[:] interval_end,
+ *                 unsigned int start, unsigned int end):
+ */
+  __pyx_tuple__23 = PyTuple_Pack(14, __pyx_n_s_value_map, __pyx_n_s_index_list, __pyx_n_s_interval_start, __pyx_n_s_interval_end, __pyx_n_s_start, __pyx_n_s_end, __pyx_n_s_total, __pyx_n_s_value, __pyx_n_s_coverage, __pyx_n_s_value_index, __pyx_n_s_temp_end, __pyx_n_s_interval_size, __pyx_n_s_i, __pyx_n_s_numb_intervals); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__23);
+  __Pyx_GIVEREF(__pyx_tuple__23);
+  __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(6, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyBedGraph_ignore_missing_bp_pyx, __pyx_n_s_get_values, 72, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 72, __pyx_L1_error)
+
+  /* "pyBedGraph/ignore_missing_bp.pyx":105
+ * 
+ * 
+ * def get_sum(double[:] value_map, int[:] index_list,             # <<<<<<<<<<<<<<
+ *             unsigned int[:] interval_start, unsigned int[:] interval_end,
+ *             int[:] start_list, int[:] end_list):
+ */
+  __pyx_tuple__25 = PyTuple_Pack(17, __pyx_n_s_value_map, __pyx_n_s_index_list, __pyx_n_s_interval_start, __pyx_n_s_interval_end, __pyx_n_s_start_list, __pyx_n_s_end_list, __pyx_n_s_i, __pyx_n_s_num_tests, __pyx_n_s_start, __pyx_n_s_end, __pyx_n_s_value_index, __pyx_n_s_numb_intervals, __pyx_n_s_sum, __pyx_n_s_temp_end, __pyx_n_s_interval_size, __pyx_n_s_result, __pyx_n_s_result_view); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 105, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__25);
+  __Pyx_GIVEREF(__pyx_tuple__25);
+  __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(6, 0, 17, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyBedGraph_ignore_missing_bp_pyx, __pyx_n_s_get_sum, 105, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 105, __pyx_L1_error)
+
+  /* "pyBedGraph/ignore_missing_bp.pyx":150
  * @cython.cdivision(True)
  * @cython.boundscheck(False)
  * def get_approx_means(double[:] bin_list, unsigned int[:] bin_coverage_list,             # <<<<<<<<<<<<<<
  *                      int max_bin_size, int[:] start_list, int[:] end_list):
  * 
  */
-  __pyx_tuple__23 = PyTuple_Pack(17, __pyx_n_s_bin_list, __pyx_n_s_bin_coverage_list, __pyx_n_s_max_bin_size, __pyx_n_s_start_list, __pyx_n_s_end_list, __pyx_n_s_i, __pyx_n_s_start, __pyx_n_s_end, __pyx_n_s_bin_end, __pyx_n_s_bin_index, __pyx_n_s_num_tests, __pyx_n_s_total, __pyx_n_s_numb_value, __pyx_n_s_fraction, __pyx_n_s_weight, __pyx_n_s_result, __pyx_n_s_result_view); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 106, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__23);
-  __Pyx_GIVEREF(__pyx_tuple__23);
-  __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(5, 0, 17, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyBedGraph_ignore_missing_bp_pyx, __pyx_n_s_get_approx_means, 106, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 106, __pyx_L1_error)
+  __pyx_tuple__27 = PyTuple_Pack(17, __pyx_n_s_bin_list, __pyx_n_s_bin_coverage_list, __pyx_n_s_max_bin_size, __pyx_n_s_start_list, __pyx_n_s_end_list, __pyx_n_s_i, __pyx_n_s_start, __pyx_n_s_end, __pyx_n_s_bin_end, __pyx_n_s_bin_index, __pyx_n_s_num_tests, __pyx_n_s_total, __pyx_n_s_numb_value, __pyx_n_s_fraction, __pyx_n_s_weight, __pyx_n_s_result, __pyx_n_s_result_view); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 150, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__27);
+  __Pyx_GIVEREF(__pyx_tuple__27);
+  __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(5, 0, 17, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyBedGraph_ignore_missing_bp_pyx, __pyx_n_s_get_approx_means, 150, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 150, __pyx_L1_error)
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":216
+  /* "pyBedGraph/ignore_missing_bp.pyx":260
  *     return result
  * 
  * def get_minimums(double[:] value_map, int[:] index_list,             # <<<<<<<<<<<<<<
  *                  unsigned int[:] interval_start, unsigned int[:] interval_end,
  *                  int[:] start_list, int[:] end_list):
  */
-  __pyx_tuple__25 = PyTuple_Pack(15, __pyx_n_s_value_map, __pyx_n_s_index_list, __pyx_n_s_interval_start, __pyx_n_s_interval_end, __pyx_n_s_start_list, __pyx_n_s_end_list, __pyx_n_s_i, __pyx_n_s_num_tests, __pyx_n_s_start, __pyx_n_s_end, __pyx_n_s_value_index, __pyx_n_s_numb_intervals, __pyx_n_s_minimum, __pyx_n_s_result, __pyx_n_s_result_view); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 216, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__25);
-  __Pyx_GIVEREF(__pyx_tuple__25);
-  __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(6, 0, 15, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyBedGraph_ignore_missing_bp_pyx, __pyx_n_s_get_minimums, 216, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 216, __pyx_L1_error)
+  __pyx_tuple__29 = PyTuple_Pack(15, __pyx_n_s_value_map, __pyx_n_s_index_list, __pyx_n_s_interval_start, __pyx_n_s_interval_end, __pyx_n_s_start_list, __pyx_n_s_end_list, __pyx_n_s_i, __pyx_n_s_num_tests, __pyx_n_s_start, __pyx_n_s_end, __pyx_n_s_value_index, __pyx_n_s_numb_intervals, __pyx_n_s_minimum, __pyx_n_s_result, __pyx_n_s_result_view); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 260, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__29);
+  __Pyx_GIVEREF(__pyx_tuple__29);
+  __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(6, 0, 15, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyBedGraph_ignore_missing_bp_pyx, __pyx_n_s_get_minimums, 260, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 260, __pyx_L1_error)
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":255
+  /* "pyBedGraph/ignore_missing_bp.pyx":299
  *     return result
  * 
  * def get_maximums(double[:] value_map, int[:] index_list,             # <<<<<<<<<<<<<<
  *                  unsigned int[:] interval_start, unsigned int[:] interval_end,
  *                  int[:] start_list, int[:] end_list):
  */
-  __pyx_tuple__27 = PyTuple_Pack(16, __pyx_n_s_value_map, __pyx_n_s_index_list, __pyx_n_s_interval_start, __pyx_n_s_interval_end, __pyx_n_s_start_list, __pyx_n_s_end_list, __pyx_n_s_i, __pyx_n_s_num_tests, __pyx_n_s_start, __pyx_n_s_end, __pyx_n_s_value_index, __pyx_n_s_numb_intervals, __pyx_n_s_maximum, __pyx_n_s_value, __pyx_n_s_result, __pyx_n_s_result_view); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 255, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__27);
-  __Pyx_GIVEREF(__pyx_tuple__27);
-  __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(6, 0, 16, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyBedGraph_ignore_missing_bp_pyx, __pyx_n_s_get_maximums, 255, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 255, __pyx_L1_error)
+  __pyx_tuple__31 = PyTuple_Pack(16, __pyx_n_s_value_map, __pyx_n_s_index_list, __pyx_n_s_interval_start, __pyx_n_s_interval_end, __pyx_n_s_start_list, __pyx_n_s_end_list, __pyx_n_s_i, __pyx_n_s_num_tests, __pyx_n_s_start, __pyx_n_s_end, __pyx_n_s_value_index, __pyx_n_s_numb_intervals, __pyx_n_s_maximum, __pyx_n_s_value, __pyx_n_s_result, __pyx_n_s_result_view); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 299, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__31);
+  __Pyx_GIVEREF(__pyx_tuple__31);
+  __pyx_codeobj__32 = (PyObject*)__Pyx_PyCode_New(6, 0, 16, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__31, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyBedGraph_ignore_missing_bp_pyx, __pyx_n_s_get_maximums, 299, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__32)) __PYX_ERR(0, 299, __pyx_L1_error)
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":295
+  /* "pyBedGraph/ignore_missing_bp.pyx":339
  *     return result
  * 
  * def get_coverages(int[:] index_list, unsigned int[:] interval_start,             # <<<<<<<<<<<<<<
  *                   unsigned int[:] interval_end, int[:] start_list, int[:] end_list):
  * 
  */
-  __pyx_tuple__29 = PyTuple_Pack(16, __pyx_n_s_index_list, __pyx_n_s_interval_start, __pyx_n_s_interval_end, __pyx_n_s_start_list, __pyx_n_s_end_list, __pyx_n_s_i, __pyx_n_s_num_tests, __pyx_n_s_start, __pyx_n_s_end, __pyx_n_s_current_start, __pyx_n_s_numb_intervals, __pyx_n_s_numb_covered, __pyx_n_s_temp_end, __pyx_n_s_value_index, __pyx_n_s_result, __pyx_n_s_result_view); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 295, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__29);
-  __Pyx_GIVEREF(__pyx_tuple__29);
-  __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(5, 0, 16, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyBedGraph_ignore_missing_bp_pyx, __pyx_n_s_get_coverages, 295, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 295, __pyx_L1_error)
+  __pyx_tuple__33 = PyTuple_Pack(16, __pyx_n_s_index_list, __pyx_n_s_interval_start, __pyx_n_s_interval_end, __pyx_n_s_start_list, __pyx_n_s_end_list, __pyx_n_s_i, __pyx_n_s_num_tests, __pyx_n_s_start, __pyx_n_s_end, __pyx_n_s_current_start, __pyx_n_s_numb_intervals, __pyx_n_s_numb_covered, __pyx_n_s_temp_end, __pyx_n_s_value_index, __pyx_n_s_result, __pyx_n_s_result_view); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 339, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__33);
+  __Pyx_GIVEREF(__pyx_tuple__33);
+  __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(5, 0, 16, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__33, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyBedGraph_ignore_missing_bp_pyx, __pyx_n_s_get_coverages, 339, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) __PYX_ERR(0, 339, __pyx_L1_error)
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":337
+  /* "pyBedGraph/ignore_missing_bp.pyx":381
  *     return result
  * 
  * def get_stds(double[:] value_map, int[:] index_list,             # <<<<<<<<<<<<<<
  *                  unsigned int[:] interval_start, unsigned int[:] interval_end,
  *                  int[:] start_list, int[:] end_list):
  */
-  __pyx_tuple__31 = PyTuple_Pack(23, __pyx_n_s_value_map, __pyx_n_s_index_list, __pyx_n_s_interval_start, __pyx_n_s_interval_end, __pyx_n_s_start_list, __pyx_n_s_end_list, __pyx_n_s_i, __pyx_n_s_num_tests, __pyx_n_s_start, __pyx_n_s_end, __pyx_n_s_j, __pyx_n_s_result, __pyx_n_s_result_view, __pyx_n_s_std, __pyx_n_s_difference, __pyx_n_s_value, __pyx_n_s_numb_value, __pyx_n_s_interval_size, __pyx_n_s_value_index, __pyx_n_s_temp_end, __pyx_n_s_numb_intervals, __pyx_n_s_means, __pyx_n_s_mean); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 337, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__31);
-  __Pyx_GIVEREF(__pyx_tuple__31);
-  __pyx_codeobj__32 = (PyObject*)__Pyx_PyCode_New(6, 0, 23, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__31, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyBedGraph_ignore_missing_bp_pyx, __pyx_n_s_get_stds, 337, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__32)) __PYX_ERR(0, 337, __pyx_L1_error)
+  __pyx_tuple__35 = PyTuple_Pack(23, __pyx_n_s_value_map, __pyx_n_s_index_list, __pyx_n_s_interval_start, __pyx_n_s_interval_end, __pyx_n_s_start_list, __pyx_n_s_end_list, __pyx_n_s_i, __pyx_n_s_num_tests, __pyx_n_s_start, __pyx_n_s_end, __pyx_n_s_j, __pyx_n_s_result, __pyx_n_s_result_view, __pyx_n_s_std, __pyx_n_s_difference, __pyx_n_s_value, __pyx_n_s_numb_value, __pyx_n_s_interval_size, __pyx_n_s_value_index, __pyx_n_s_temp_end, __pyx_n_s_numb_intervals, __pyx_n_s_means, __pyx_n_s_mean); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 381, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__35);
+  __Pyx_GIVEREF(__pyx_tuple__35);
+  __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(6, 0, 23, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__35, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyBedGraph_ignore_missing_bp_pyx, __pyx_n_s_get_stds, 381, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) __PYX_ERR(0, 381, __pyx_L1_error)
 
   /* "View.MemoryView":286
  *         return self.name
@@ -21504,9 +22408,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  * cdef strided = Enum("<strided and direct>") # default
  * cdef indirect = Enum("<strided and indirect>")
  */
-  __pyx_tuple__33 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct_or_indirect); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(1, 286, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__33);
-  __Pyx_GIVEREF(__pyx_tuple__33);
+  __pyx_tuple__37 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct_or_indirect); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(1, 286, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__37);
+  __Pyx_GIVEREF(__pyx_tuple__37);
 
   /* "View.MemoryView":287
  * 
@@ -21515,9 +22419,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  * cdef indirect = Enum("<strided and indirect>")
  * 
  */
-  __pyx_tuple__34 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(1, 287, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__34);
-  __Pyx_GIVEREF(__pyx_tuple__34);
+  __pyx_tuple__38 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(1, 287, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__38);
+  __Pyx_GIVEREF(__pyx_tuple__38);
 
   /* "View.MemoryView":288
  * cdef generic = Enum("<strided and direct or indirect>")
@@ -21526,9 +22430,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  * 
  * 
  */
-  __pyx_tuple__35 = PyTuple_Pack(1, __pyx_kp_s_strided_and_indirect); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(1, 288, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__35);
-  __Pyx_GIVEREF(__pyx_tuple__35);
+  __pyx_tuple__39 = PyTuple_Pack(1, __pyx_kp_s_strided_and_indirect); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(1, 288, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__39);
+  __Pyx_GIVEREF(__pyx_tuple__39);
 
   /* "View.MemoryView":291
  * 
@@ -21537,9 +22441,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  * cdef indirect_contiguous = Enum("<contiguous and indirect>")
  * 
  */
-  __pyx_tuple__36 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_direct); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(1, 291, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__36);
-  __Pyx_GIVEREF(__pyx_tuple__36);
+  __pyx_tuple__40 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_direct); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(1, 291, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__40);
+  __Pyx_GIVEREF(__pyx_tuple__40);
 
   /* "View.MemoryView":292
  * 
@@ -21548,19 +22452,19 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  * 
  * 
  */
-  __pyx_tuple__37 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_indirect); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(1, 292, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__37);
-  __Pyx_GIVEREF(__pyx_tuple__37);
+  __pyx_tuple__41 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_indirect); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(1, 292, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__41);
+  __Pyx_GIVEREF(__pyx_tuple__41);
 
   /* "(tree fragment)":1
  * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
  *     cdef object __pyx_PickleError
  *     cdef object __pyx_result
  */
-  __pyx_tuple__38 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(1, 1, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__38);
-  __Pyx_GIVEREF(__pyx_tuple__38);
-  __pyx_codeobj__39 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__38, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_Enum, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__39)) __PYX_ERR(1, 1, __pyx_L1_error)
+  __pyx_tuple__42 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(1, 1, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__42);
+  __Pyx_GIVEREF(__pyx_tuple__42);
+  __pyx_codeobj__43 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_Enum, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__43)) __PYX_ERR(1, 1, __pyx_L1_error)
   __Pyx_RefNannyFinishContext();
   return 0;
   __pyx_L1_error:;
@@ -21934,64 +22838,88 @@ if (!__Pyx_RefNanny) {
   if (PyDict_SetItem(__pyx_d, __pyx_n_s_load_bins, __pyx_t_1) < 0) __PYX_ERR(0, 36, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":106
+  /* "pyBedGraph/ignore_missing_bp.pyx":72
+ *     return bins, bins_coverage
+ * 
+ * def get_values(double[:] value_map, int[:] index_list,             # <<<<<<<<<<<<<<
+ *                 unsigned int[:] interval_start, unsigned int[:] interval_end,
+ *                 unsigned int start, unsigned int end):
+ */
+  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_10pyBedGraph_17ignore_missing_bp_5get_values, NULL, __pyx_n_s_pyBedGraph_ignore_missing_bp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_values, __pyx_t_1) < 0) __PYX_ERR(0, 72, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "pyBedGraph/ignore_missing_bp.pyx":105
+ * 
+ * 
+ * def get_sum(double[:] value_map, int[:] index_list,             # <<<<<<<<<<<<<<
+ *             unsigned int[:] interval_start, unsigned int[:] interval_end,
+ *             int[:] start_list, int[:] end_list):
+ */
+  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_10pyBedGraph_17ignore_missing_bp_7get_sum, NULL, __pyx_n_s_pyBedGraph_ignore_missing_bp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 105, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_sum, __pyx_t_1) < 0) __PYX_ERR(0, 105, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "pyBedGraph/ignore_missing_bp.pyx":150
  * @cython.cdivision(True)
  * @cython.boundscheck(False)
  * def get_approx_means(double[:] bin_list, unsigned int[:] bin_coverage_list,             # <<<<<<<<<<<<<<
  *                      int max_bin_size, int[:] start_list, int[:] end_list):
  * 
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_10pyBedGraph_17ignore_missing_bp_5get_approx_means, NULL, __pyx_n_s_pyBedGraph_ignore_missing_bp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 106, __pyx_L1_error)
+  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_10pyBedGraph_17ignore_missing_bp_9get_approx_means, NULL, __pyx_n_s_pyBedGraph_ignore_missing_bp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 150, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_approx_means, __pyx_t_1) < 0) __PYX_ERR(0, 106, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_approx_means, __pyx_t_1) < 0) __PYX_ERR(0, 150, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":216
+  /* "pyBedGraph/ignore_missing_bp.pyx":260
  *     return result
  * 
  * def get_minimums(double[:] value_map, int[:] index_list,             # <<<<<<<<<<<<<<
  *                  unsigned int[:] interval_start, unsigned int[:] interval_end,
  *                  int[:] start_list, int[:] end_list):
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_10pyBedGraph_17ignore_missing_bp_9get_minimums, NULL, __pyx_n_s_pyBedGraph_ignore_missing_bp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 216, __pyx_L1_error)
+  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_10pyBedGraph_17ignore_missing_bp_13get_minimums, NULL, __pyx_n_s_pyBedGraph_ignore_missing_bp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_minimums, __pyx_t_1) < 0) __PYX_ERR(0, 216, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_minimums, __pyx_t_1) < 0) __PYX_ERR(0, 260, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":255
+  /* "pyBedGraph/ignore_missing_bp.pyx":299
  *     return result
  * 
  * def get_maximums(double[:] value_map, int[:] index_list,             # <<<<<<<<<<<<<<
  *                  unsigned int[:] interval_start, unsigned int[:] interval_end,
  *                  int[:] start_list, int[:] end_list):
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_10pyBedGraph_17ignore_missing_bp_11get_maximums, NULL, __pyx_n_s_pyBedGraph_ignore_missing_bp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error)
+  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_10pyBedGraph_17ignore_missing_bp_15get_maximums, NULL, __pyx_n_s_pyBedGraph_ignore_missing_bp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 299, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_maximums, __pyx_t_1) < 0) __PYX_ERR(0, 255, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_maximums, __pyx_t_1) < 0) __PYX_ERR(0, 299, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":295
+  /* "pyBedGraph/ignore_missing_bp.pyx":339
  *     return result
  * 
  * def get_coverages(int[:] index_list, unsigned int[:] interval_start,             # <<<<<<<<<<<<<<
  *                   unsigned int[:] interval_end, int[:] start_list, int[:] end_list):
  * 
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_10pyBedGraph_17ignore_missing_bp_13get_coverages, NULL, __pyx_n_s_pyBedGraph_ignore_missing_bp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 295, __pyx_L1_error)
+  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_10pyBedGraph_17ignore_missing_bp_17get_coverages, NULL, __pyx_n_s_pyBedGraph_ignore_missing_bp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 339, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_coverages, __pyx_t_1) < 0) __PYX_ERR(0, 295, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_coverages, __pyx_t_1) < 0) __PYX_ERR(0, 339, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "pyBedGraph/ignore_missing_bp.pyx":337
+  /* "pyBedGraph/ignore_missing_bp.pyx":381
  *     return result
  * 
  * def get_stds(double[:] value_map, int[:] index_list,             # <<<<<<<<<<<<<<
  *                  unsigned int[:] interval_start, unsigned int[:] interval_end,
  *                  int[:] start_list, int[:] end_list):
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_10pyBedGraph_17ignore_missing_bp_15get_stds, NULL, __pyx_n_s_pyBedGraph_ignore_missing_bp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 337, __pyx_L1_error)
+  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_10pyBedGraph_17ignore_missing_bp_19get_stds, NULL, __pyx_n_s_pyBedGraph_ignore_missing_bp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 381, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_stds, __pyx_t_1) < 0) __PYX_ERR(0, 337, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_stds, __pyx_t_1) < 0) __PYX_ERR(0, 381, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "pyBedGraph/ignore_missing_bp.pyx":1
@@ -22024,7 +22952,7 @@ if (!__Pyx_RefNanny) {
  * cdef strided = Enum("<strided and direct>") # default
  * cdef indirect = Enum("<strided and indirect>")
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__33, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 286, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__37, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 286, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(generic);
   __Pyx_DECREF_SET(generic, __pyx_t_1);
@@ -22038,7 +22966,7 @@ if (!__Pyx_RefNanny) {
  * cdef indirect = Enum("<strided and indirect>")
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__34, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 287, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__38, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 287, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(strided);
   __Pyx_DECREF_SET(strided, __pyx_t_1);
@@ -22052,7 +22980,7 @@ if (!__Pyx_RefNanny) {
  * 
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__35, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 288, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__39, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 288, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(indirect);
   __Pyx_DECREF_SET(indirect, __pyx_t_1);
@@ -22066,7 +22994,7 @@ if (!__Pyx_RefNanny) {
  * cdef indirect_contiguous = Enum("<contiguous and indirect>")
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__36, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 291, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__40, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 291, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(contiguous);
   __Pyx_DECREF_SET(contiguous, __pyx_t_1);
@@ -22080,7 +23008,7 @@ if (!__Pyx_RefNanny) {
  * 
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__37, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 292, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__41, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 292, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(indirect_contiguous);
   __Pyx_DECREF_SET(indirect_contiguous, __pyx_t_1);
@@ -22419,34 +23347,176 @@ static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name)
         return __Pyx_NewRef(result);
     }
 #endif
-#else
-    result = PyObject_GetItem(__pyx_d, name);
-    __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version)
-    if (likely(result)) {
-        return __Pyx_NewRef(result);
+#else
+    result = PyObject_GetItem(__pyx_d, name);
+    __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version)
+    if (likely(result)) {
+        return __Pyx_NewRef(result);
+    }
+    PyErr_Clear();
+#endif
+    return __Pyx_GetBuiltinName(name);
+}
+
+/* PyObjectCall */
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
+    PyObject *result;
+    ternaryfunc call = func->ob_type->tp_call;
+    if (unlikely(!call))
+        return PyObject_Call(func, arg, kw);
+    if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
+        return NULL;
+    result = (*call)(func, arg, kw);
+    Py_LeaveRecursiveCall();
+    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
+        PyErr_SetString(
+            PyExc_SystemError,
+            "NULL result without error in PyObject_Call");
+    }
+    return result;
+}
+#endif
+
+/* PyFunctionFastCall */
+#if CYTHON_FAST_PYCALL
+static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na,
+                                               PyObject *globals) {
+    PyFrameObject *f;
+    PyThreadState *tstate = __Pyx_PyThreadState_Current;
+    PyObject **fastlocals;
+    Py_ssize_t i;
+    PyObject *result;
+    assert(globals != NULL);
+    /* XXX Perhaps we should create a specialized
+       PyFrame_New() that doesn't take locals, but does
+       take builtins without sanity checking them.
+       */
+    assert(tstate != NULL);
+    f = PyFrame_New(tstate, co, globals, NULL);
+    if (f == NULL) {
+        return NULL;
+    }
+    fastlocals = __Pyx_PyFrame_GetLocalsplus(f);
+    for (i = 0; i < na; i++) {
+        Py_INCREF(*args);
+        fastlocals[i] = *args++;
+    }
+    result = PyEval_EvalFrameEx(f,0);
+    ++tstate->recursion_depth;
+    Py_DECREF(f);
+    --tstate->recursion_depth;
+    return result;
+}
+#if 1 || PY_VERSION_HEX < 0x030600B1
+static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) {
+    PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func);
+    PyObject *globals = PyFunction_GET_GLOBALS(func);
+    PyObject *argdefs = PyFunction_GET_DEFAULTS(func);
+    PyObject *closure;
+#if PY_MAJOR_VERSION >= 3
+    PyObject *kwdefs;
+#endif
+    PyObject *kwtuple, **k;
+    PyObject **d;
+    Py_ssize_t nd;
+    Py_ssize_t nk;
+    PyObject *result;
+    assert(kwargs == NULL || PyDict_Check(kwargs));
+    nk = kwargs ? PyDict_Size(kwargs) : 0;
+    if (Py_EnterRecursiveCall((char*)" while calling a Python object")) {
+        return NULL;
+    }
+    if (
+#if PY_MAJOR_VERSION >= 3
+            co->co_kwonlyargcount == 0 &&
+#endif
+            likely(kwargs == NULL || nk == 0) &&
+            co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) {
+        if (argdefs == NULL && co->co_argcount == nargs) {
+            result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals);
+            goto done;
+        }
+        else if (nargs == 0 && argdefs != NULL
+                 && co->co_argcount == Py_SIZE(argdefs)) {
+            /* function called with no arguments, but all parameters have
+               a default value: use default values as arguments .*/
+            args = &PyTuple_GET_ITEM(argdefs, 0);
+            result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals);
+            goto done;
+        }
+    }
+    if (kwargs != NULL) {
+        Py_ssize_t pos, i;
+        kwtuple = PyTuple_New(2 * nk);
+        if (kwtuple == NULL) {
+            result = NULL;
+            goto done;
+        }
+        k = &PyTuple_GET_ITEM(kwtuple, 0);
+        pos = i = 0;
+        while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) {
+            Py_INCREF(k[i]);
+            Py_INCREF(k[i+1]);
+            i += 2;
+        }
+        nk = i / 2;
+    }
+    else {
+        kwtuple = NULL;
+        k = NULL;
+    }
+    closure = PyFunction_GET_CLOSURE(func);
+#if PY_MAJOR_VERSION >= 3
+    kwdefs = PyFunction_GET_KW_DEFAULTS(func);
+#endif
+    if (argdefs != NULL) {
+        d = &PyTuple_GET_ITEM(argdefs, 0);
+        nd = Py_SIZE(argdefs);
     }
-    PyErr_Clear();
+    else {
+        d = NULL;
+        nd = 0;
+    }
+#if PY_MAJOR_VERSION >= 3
+    result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL,
+                               args, (int)nargs,
+                               k, (int)nk,
+                               d, (int)nd, kwdefs, closure);
+#else
+    result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL,
+                               args, (int)nargs,
+                               k, (int)nk,
+                               d, (int)nd, closure);
 #endif
-    return __Pyx_GetBuiltinName(name);
+    Py_XDECREF(kwtuple);
+done:
+    Py_LeaveRecursiveCall();
+    return result;
 }
+#endif
+#endif
 
-/* PyObjectCall */
-#if CYTHON_COMPILING_IN_CPYTHON
-static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
-    PyObject *result;
-    ternaryfunc call = func->ob_type->tp_call;
-    if (unlikely(!call))
-        return PyObject_Call(func, arg, kw);
-    if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
-        return NULL;
-    result = (*call)(func, arg, kw);
-    Py_LeaveRecursiveCall();
-    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
-        PyErr_SetString(
-            PyExc_SystemError,
-            "NULL result without error in PyObject_Call");
+/* PyCFunctionFastCall */
+#if CYTHON_FAST_PYCCALL
+static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) {
+    PyCFunctionObject *func = (PyCFunctionObject*)func_obj;
+    PyCFunction meth = PyCFunction_GET_FUNCTION(func);
+    PyObject *self = PyCFunction_GET_SELF(func);
+    int flags = PyCFunction_GET_FLAGS(func);
+    assert(PyCFunction_Check(func));
+    assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS)));
+    assert(nargs >= 0);
+    assert(nargs == 0 || args != NULL);
+    /* _PyCFunction_FastCallDict() must not be called with an exception set,
+       because it may clear it (directly or indirectly) and so the
+       caller loses its exception */
+    assert(!PyErr_Occurred());
+    if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) {
+        return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL);
+    } else {
+        return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs);
     }
-    return result;
 }
 #endif
 
@@ -22926,148 +23996,6 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
 }
 #endif
 
-/* PyCFunctionFastCall */
-#if CYTHON_FAST_PYCCALL
-static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) {
-    PyCFunctionObject *func = (PyCFunctionObject*)func_obj;
-    PyCFunction meth = PyCFunction_GET_FUNCTION(func);
-    PyObject *self = PyCFunction_GET_SELF(func);
-    int flags = PyCFunction_GET_FLAGS(func);
-    assert(PyCFunction_Check(func));
-    assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS)));
-    assert(nargs >= 0);
-    assert(nargs == 0 || args != NULL);
-    /* _PyCFunction_FastCallDict() must not be called with an exception set,
-       because it may clear it (directly or indirectly) and so the
-       caller loses its exception */
-    assert(!PyErr_Occurred());
-    if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) {
-        return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL);
-    } else {
-        return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs);
-    }
-}
-#endif
-
-/* PyFunctionFastCall */
-#if CYTHON_FAST_PYCALL
-static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na,
-                                               PyObject *globals) {
-    PyFrameObject *f;
-    PyThreadState *tstate = __Pyx_PyThreadState_Current;
-    PyObject **fastlocals;
-    Py_ssize_t i;
-    PyObject *result;
-    assert(globals != NULL);
-    /* XXX Perhaps we should create a specialized
-       PyFrame_New() that doesn't take locals, but does
-       take builtins without sanity checking them.
-       */
-    assert(tstate != NULL);
-    f = PyFrame_New(tstate, co, globals, NULL);
-    if (f == NULL) {
-        return NULL;
-    }
-    fastlocals = __Pyx_PyFrame_GetLocalsplus(f);
-    for (i = 0; i < na; i++) {
-        Py_INCREF(*args);
-        fastlocals[i] = *args++;
-    }
-    result = PyEval_EvalFrameEx(f,0);
-    ++tstate->recursion_depth;
-    Py_DECREF(f);
-    --tstate->recursion_depth;
-    return result;
-}
-#if 1 || PY_VERSION_HEX < 0x030600B1
-static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) {
-    PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func);
-    PyObject *globals = PyFunction_GET_GLOBALS(func);
-    PyObject *argdefs = PyFunction_GET_DEFAULTS(func);
-    PyObject *closure;
-#if PY_MAJOR_VERSION >= 3
-    PyObject *kwdefs;
-#endif
-    PyObject *kwtuple, **k;
-    PyObject **d;
-    Py_ssize_t nd;
-    Py_ssize_t nk;
-    PyObject *result;
-    assert(kwargs == NULL || PyDict_Check(kwargs));
-    nk = kwargs ? PyDict_Size(kwargs) : 0;
-    if (Py_EnterRecursiveCall((char*)" while calling a Python object")) {
-        return NULL;
-    }
-    if (
-#if PY_MAJOR_VERSION >= 3
-            co->co_kwonlyargcount == 0 &&
-#endif
-            likely(kwargs == NULL || nk == 0) &&
-            co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) {
-        if (argdefs == NULL && co->co_argcount == nargs) {
-            result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals);
-            goto done;
-        }
-        else if (nargs == 0 && argdefs != NULL
-                 && co->co_argcount == Py_SIZE(argdefs)) {
-            /* function called with no arguments, but all parameters have
-               a default value: use default values as arguments .*/
-            args = &PyTuple_GET_ITEM(argdefs, 0);
-            result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals);
-            goto done;
-        }
-    }
-    if (kwargs != NULL) {
-        Py_ssize_t pos, i;
-        kwtuple = PyTuple_New(2 * nk);
-        if (kwtuple == NULL) {
-            result = NULL;
-            goto done;
-        }
-        k = &PyTuple_GET_ITEM(kwtuple, 0);
-        pos = i = 0;
-        while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) {
-            Py_INCREF(k[i]);
-            Py_INCREF(k[i+1]);
-            i += 2;
-        }
-        nk = i / 2;
-    }
-    else {
-        kwtuple = NULL;
-        k = NULL;
-    }
-    closure = PyFunction_GET_CLOSURE(func);
-#if PY_MAJOR_VERSION >= 3
-    kwdefs = PyFunction_GET_KW_DEFAULTS(func);
-#endif
-    if (argdefs != NULL) {
-        d = &PyTuple_GET_ITEM(argdefs, 0);
-        nd = Py_SIZE(argdefs);
-    }
-    else {
-        d = NULL;
-        nd = 0;
-    }
-#if PY_MAJOR_VERSION >= 3
-    result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL,
-                               args, (int)nargs,
-                               k, (int)nk,
-                               d, (int)nd, kwdefs, closure);
-#else
-    result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL,
-                               args, (int)nargs,
-                               k, (int)nk,
-                               d, (int)nd, closure);
-#endif
-    Py_XDECREF(kwtuple);
-done:
-    Py_LeaveRecursiveCall();
-    return result;
-}
-#endif
-#endif
-
 /* PyObjectCall2Args */
 static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) {
     PyObject *args, *result = NULL;
@@ -23996,48 +24924,6 @@ static CYTHON_INLINE long __Pyx_div_long(long a, long b) {
     return q;
 }
 
-/* WriteUnraisableException */
-static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
-                                  CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename,
-                                  int full_traceback, CYTHON_UNUSED int nogil) {
-    PyObject *old_exc, *old_val, *old_tb;
-    PyObject *ctx;
-    __Pyx_PyThreadState_declare
-#ifdef WITH_THREAD
-    PyGILState_STATE state;
-    if (nogil)
-        state = PyGILState_Ensure();
-#ifdef _MSC_VER
-    else state = (PyGILState_STATE)-1;
-#endif
-#endif
-    __Pyx_PyThreadState_assign
-    __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
-    if (full_traceback) {
-        Py_XINCREF(old_exc);
-        Py_XINCREF(old_val);
-        Py_XINCREF(old_tb);
-        __Pyx_ErrRestore(old_exc, old_val, old_tb);
-        PyErr_PrintEx(1);
-    }
-    #if PY_MAJOR_VERSION < 3
-    ctx = PyString_FromString(name);
-    #else
-    ctx = PyUnicode_FromString(name);
-    #endif
-    __Pyx_ErrRestore(old_exc, old_val, old_tb);
-    if (!ctx) {
-        PyErr_WriteUnraisable(Py_None);
-    } else {
-        PyErr_WriteUnraisable(ctx);
-        Py_DECREF(ctx);
-    }
-#ifdef WITH_THREAD
-    if (nogil)
-        PyGILState_Release(state);
-#endif
-}
-
 /* ImportFrom */
 static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
     PyObject* value = __Pyx_PyObject_GetAttrStr(module, name);
@@ -24165,43 +25051,43 @@ static int __Pyx_setup_reduce(PyObject* type_obj) {
     PyObject *setstate = NULL;
     PyObject *setstate_cython = NULL;
 #if CYTHON_USE_PYTYPE_LOOKUP
-    if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto GOOD;
+    if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD;
 #else
-    if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto GOOD;
+    if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD;
 #endif
 #if CYTHON_USE_PYTYPE_LOOKUP
-    object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto BAD;
+    object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD;
 #else
-    object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto BAD;
+    object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD;
 #endif
-    reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto BAD;
+    reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto __PYX_BAD;
     if (reduce_ex == object_reduce_ex) {
 #if CYTHON_USE_PYTYPE_LOOKUP
-        object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto BAD;
+        object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD;
 #else
-        object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto BAD;
+        object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD;
 #endif
-        reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto BAD;
+        reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto __PYX_BAD;
         if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) {
-            reduce_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_cython); if (unlikely(!reduce_cython)) goto BAD;
-            ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto BAD;
-            ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto BAD;
+            reduce_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_cython); if (unlikely(!reduce_cython)) goto __PYX_BAD;
+            ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
+            ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
             setstate = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate);
             if (!setstate) PyErr_Clear();
             if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) {
-                setstate_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate_cython); if (unlikely(!setstate_cython)) goto BAD;
-                ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto BAD;
-                ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto BAD;
+                setstate_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate_cython); if (unlikely(!setstate_cython)) goto __PYX_BAD;
+                ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
+                ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
             }
             PyType_Modified((PyTypeObject*)type_obj);
         }
     }
-    goto GOOD;
-BAD:
+    goto __PYX_GOOD;
+__PYX_BAD:
     if (!PyErr_Occurred())
         PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name);
     ret = -1;
-GOOD:
+__PYX_GOOD:
 #if !CYTHON_USE_PYTYPE_LOOKUP
     Py_XDECREF(object_reduce);
     Py_XDECREF(object_reduce_ex);
@@ -24216,7 +25102,7 @@ static int __Pyx_setup_reduce(PyObject* type_obj) {
 
 /* CLineInTraceback */
 #ifndef CYTHON_CLINE_IN_TRACEBACK
-static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) {
+static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) {
     PyObject *use_cline;
     PyObject *ptype, *pvalue, *ptraceback;
 #if CYTHON_COMPILING_IN_CPYTHON
@@ -24320,7 +25206,7 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
     if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
         int new_max = __pyx_code_cache.max_count + 64;
         entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
-            __pyx_code_cache.entries, (size_t)new_max*sizeof(__Pyx_CodeObjectCacheEntry));
+            __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry));
         if (unlikely(!entries)) {
             return;
         }
@@ -24581,6 +25467,7 @@ static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) {
 }
 static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) {
   switch (ch) {
+    case '?': return "'bool'";
     case 'c': return "'char'";
     case 'b': return "'signed char'";
     case 'B': return "'unsigned char'";
@@ -24623,7 +25510,7 @@ static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) {
 }
 static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) {
   switch (ch) {
-    case 'c': case 'b': case 'B': case 's': case 'p': return 1;
+    case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
     case 'h': case 'H': return sizeof(short);
     case 'i': case 'I': return sizeof(int);
     case 'l': case 'L': return sizeof(long);
@@ -24707,7 +25594,7 @@ static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) {
     case 'b': case 'h': case 'i':
     case 'l': case 'q': case 's': case 'p':
         return 'I';
-    case 'B': case 'H': case 'I': case 'L': case 'Q':
+    case '?': case 'B': case 'H': case 'I': case 'L': case 'Q':
         return 'U';
     case 'f': case 'd': case 'g':
         return (is_complex ? 'C' : 'R');
@@ -24986,7 +25873,7 @@ static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const cha
           return NULL;
         }
         CYTHON_FALLTHROUGH;
-      case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I':
+      case '?': case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I':
       case 'l': case 'L': case 'q': case 'Q':
       case 'f': case 'd': case 'g':
       case 'O': case 'p':
@@ -25384,18 +26271,6 @@ static CYTHON_INLINE int __pyx_memview_set_double(const char *itemp, PyObject *o
     return 1;
 }
 
-/* MemviewDtypeToObject */
-  static CYTHON_INLINE PyObject *__pyx_memview_get_unsigned_int(const char *itemp) {
-    return (PyObject *) __Pyx_PyInt_From_unsigned_int(*(unsigned int *) itemp);
-}
-static CYTHON_INLINE int __pyx_memview_set_unsigned_int(const char *itemp, PyObject *obj) {
-    unsigned int value = __Pyx_PyInt_As_unsigned_int(obj);
-    if ((value == (unsigned int)-1) && PyErr_Occurred())
-        return 0;
-    *(unsigned int *) itemp = value;
-    return 1;
-}
-
 /* CIntToPy */
   static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
     const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0;
@@ -25439,6 +26314,18 @@ static CYTHON_INLINE int __pyx_memview_set_int(const char *itemp, PyObject *obj)
     return 1;
 }
 
+/* MemviewDtypeToObject */
+  static CYTHON_INLINE PyObject *__pyx_memview_get_unsigned_int(const char *itemp) {
+    return (PyObject *) __Pyx_PyInt_From_unsigned_int(*(unsigned int *) itemp);
+}
+static CYTHON_INLINE int __pyx_memview_set_unsigned_int(const char *itemp, PyObject *obj) {
+    unsigned int value = __Pyx_PyInt_As_unsigned_int(obj);
+    if ((value == (unsigned int)-1) && PyErr_Occurred())
+        return 0;
+    *(unsigned int *) itemp = value;
+    return 1;
+}
+
 /* MemviewSliceCopyTemplate */
   static __Pyx_memviewslice
 __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs,
diff --git a/pyBedGraph/ignore_missing_bp.pyx b/pyBedGraph/ignore_missing_bp.pyx
index 2e73bb9..8781822 100644
--- a/pyBedGraph/ignore_missing_bp.pyx
+++ b/pyBedGraph/ignore_missing_bp.pyx
@@ -69,7 +69,7 @@ def load_bins(double[:] prev_bin_level_mean, unsigned int[:] prev_bin_level_cove
 
     return bins, bins_coverage
 
-cdef get_values(double[:] value_map, int[:] index_list,
+def get_values(double[:] value_map, int[:] index_list,
                 unsigned int[:] interval_start, unsigned int[:] interval_end,
                 unsigned int start, unsigned int end):
 
@@ -101,6 +101,50 @@ cdef get_values(double[:] value_map, int[:] index_list,
 
     return total, coverage
 
+
+def get_sum(double[:] value_map, int[:] index_list,
+            unsigned int[:] interval_start, unsigned int[:] interval_end,
+            int[:] start_list, int[:] end_list):
+
+    assert tuple(start_list.shape) == tuple(end_list.shape)
+
+    cdef size_t i, num_tests = start_list.size, start, end, value_index
+    cdef size_t numb_intervals = interval_start.size
+    cdef double sum
+    cdef unsigned int temp_end, interval_size
+
+    result = np.full(num_tests, 0, dtype=np.float64)
+    cdef double[:] result_view = result
+
+    for i in range(num_tests):
+        sum = 0
+        start = start_list[i]
+        end = end_list[i]
+
+        # get to an interval
+        while start < end and index_list[start] == -1:
+            start += 1
+
+        if start == end:
+            continue
+
+        value_index = index_list[start]
+        while start < end and start < interval_end[value_index]:
+            temp_end = interval_end[value_index]
+            if temp_end > end:
+                temp_end = end
+            interval_size = temp_end - start
+            sum += value_map[value_index] * interval_size
+
+            value_index += 1
+            if value_index == numb_intervals:
+                break
+            start = interval_start[value_index]
+
+        result_view[i] = sum
+
+    return result
+
 @cython.cdivision(True)
 @cython.boundscheck(False)
 def get_approx_means(double[:] bin_list, unsigned int[:] bin_coverage_list,
diff --git a/pyBedGraph/include_missing_bp.c b/pyBedGraph/include_missing_bp.c
index 849f9d2..b50ed44 100644
--- a/pyBedGraph/include_missing_bp.c
+++ b/pyBedGraph/include_missing_bp.c
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.29.13 */
+/* Generated by Cython 0.29.16 */
 
 /* BEGIN: Cython Metadata
 {
@@ -20,8 +20,8 @@ END: Cython Metadata */
 #elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)
     #error Cython requires Python 2.6+ or Python 3.3+.
 #else
-#define CYTHON_ABI "0_29_13"
-#define CYTHON_HEX_VERSION 0x001D0DF0
+#define CYTHON_ABI "0_29_16"
+#define CYTHON_HEX_VERSION 0x001D10F0
 #define CYTHON_FUTURE_DIVISION 1
 #include <stddef.h>
 #ifndef offsetof
@@ -497,8 +497,10 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
   #define PyString_Type                PyUnicode_Type
   #define PyString_Check               PyUnicode_Check
   #define PyString_CheckExact          PyUnicode_CheckExact
+#ifndef PyObject_Unicode
   #define PyObject_Unicode             PyObject_Str
 #endif
+#endif
 #if PY_MAJOR_VERSION >= 3
   #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj)
   #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj)
@@ -1532,11 +1534,6 @@ static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
 /* None.proto */
 static CYTHON_INLINE long __Pyx_div_long(long, long);
 
-/* WriteUnraisableException.proto */
-static void __Pyx_WriteUnraisable(const char *name, int clineno,
-                                  int lineno, const char *filename,
-                                  int full_traceback, int nogil);
-
 /* ImportFrom.proto */
 static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
 
@@ -11807,10 +11804,12 @@ static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryvi
   __Pyx_memviewslice __pyx_v_src_slice;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_t_3;
+  __Pyx_memviewslice *__pyx_t_1;
+  __Pyx_memviewslice *__pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
+  int __pyx_t_5;
+  int __pyx_t_6;
   __Pyx_RefNannySetupContext("setitem_slice_assignment", 0);
 
   /* "View.MemoryView":445
@@ -11821,6 +11820,7 @@ static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryvi
  *                                  src.ndim, dst.ndim, self.dtype_is_object)
  */
   if (!(likely(((__pyx_v_src) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_src, __pyx_memoryview_type))))) __PYX_ERR(1, 445, __pyx_L1_error)
+  __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_src), (&__pyx_v_src_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 445, __pyx_L1_error)
 
   /* "View.MemoryView":446
  * 
@@ -11830,6 +11830,7 @@ static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryvi
  * 
  */
   if (!(likely(((__pyx_v_dst) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dst, __pyx_memoryview_type))))) __PYX_ERR(1, 446, __pyx_L1_error)
+  __pyx_t_2 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_dst), (&__pyx_v_dst_slice)); if (unlikely(__pyx_t_2 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 446, __pyx_L1_error)
 
   /* "View.MemoryView":447
  *         memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0],
@@ -11838,14 +11839,14 @@ static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryvi
  * 
  *     cdef setitem_slice_assign_scalar(self, memoryview dst, value):
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_src, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 447, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 447, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dst, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 447, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 447, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_src, __pyx_n_s_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 447, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 447, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_dst, __pyx_n_s_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 447, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 447, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "View.MemoryView":445
  *         cdef __Pyx_memviewslice src_slice
@@ -11854,7 +11855,7 @@ static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryvi
  *                                  get_slice_from_memview(dst, &dst_slice)[0],
  *                                  src.ndim, dst.ndim, self.dtype_is_object)
  */
-  __pyx_t_4 = __pyx_memoryview_copy_contents((__pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_src), (&__pyx_v_src_slice))[0]), (__pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_dst), (&__pyx_v_dst_slice))[0]), __pyx_t_2, __pyx_t_3, __pyx_v_self->dtype_is_object); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 445, __pyx_L1_error)
+  __pyx_t_6 = __pyx_memoryview_copy_contents((__pyx_t_1[0]), (__pyx_t_2[0]), __pyx_t_4, __pyx_t_5, __pyx_v_self->dtype_is_object); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 445, __pyx_L1_error)
 
   /* "View.MemoryView":441
  *         return obj
@@ -11868,7 +11869,7 @@ static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryvi
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assignment", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
@@ -11893,17 +11894,18 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
   __Pyx_memviewslice __pyx_v_tmp_slice;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_t_3;
+  __Pyx_memviewslice *__pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  char const *__pyx_t_5;
-  PyObject *__pyx_t_6 = NULL;
+  int __pyx_t_5;
+  char const *__pyx_t_6;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   PyObject *__pyx_t_11 = NULL;
+  PyObject *__pyx_t_12 = NULL;
   __Pyx_RefNannySetupContext("setitem_slice_assign_scalar", 0);
 
   /* "View.MemoryView":451
@@ -11922,7 +11924,8 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
  * 
  *         if <size_t>self.view.itemsize > sizeof(array):
  */
-  __pyx_v_dst_slice = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_dst, (&__pyx_v_tmp_slice));
+  __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_dst, (&__pyx_v_tmp_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 456, __pyx_L1_error)
+  __pyx_v_dst_slice = __pyx_t_1;
 
   /* "View.MemoryView":458
  *         dst_slice = get_slice_from_memview(dst, &tmp_slice)
@@ -11931,8 +11934,8 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
  *             tmp = PyMem_Malloc(self.view.itemsize)
  *             if tmp == NULL:
  */
-  __pyx_t_1 = ((((size_t)__pyx_v_self->view.itemsize) > (sizeof(__pyx_v_array))) != 0);
-  if (__pyx_t_1) {
+  __pyx_t_2 = ((((size_t)__pyx_v_self->view.itemsize) > (sizeof(__pyx_v_array))) != 0);
+  if (__pyx_t_2) {
 
     /* "View.MemoryView":459
  * 
@@ -11950,8 +11953,8 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
  *                 raise MemoryError
  *             item = tmp
  */
-    __pyx_t_1 = ((__pyx_v_tmp == NULL) != 0);
-    if (unlikely(__pyx_t_1)) {
+    __pyx_t_2 = ((__pyx_v_tmp == NULL) != 0);
+    if (unlikely(__pyx_t_2)) {
 
       /* "View.MemoryView":461
  *             tmp = PyMem_Malloc(self.view.itemsize)
@@ -12018,8 +12021,8 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
  *                 (<PyObject **> item)[0] = <PyObject *> value
  *             else:
  */
-    __pyx_t_1 = (__pyx_v_self->dtype_is_object != 0);
-    if (__pyx_t_1) {
+    __pyx_t_2 = (__pyx_v_self->dtype_is_object != 0);
+    if (__pyx_t_2) {
 
       /* "View.MemoryView":468
  *         try:
@@ -12048,9 +12051,9 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
  * 
  */
     /*else*/ {
-      __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, ((char *)__pyx_v_item), __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 470, __pyx_L6_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, ((char *)__pyx_v_item), __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 470, __pyx_L6_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     }
     __pyx_L8:;
 
@@ -12061,8 +12064,8 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
  *                 assert_direct_dimensions(self.view.suboffsets, self.view.ndim)
  *             slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize,
  */
-    __pyx_t_1 = ((__pyx_v_self->view.suboffsets != NULL) != 0);
-    if (__pyx_t_1) {
+    __pyx_t_2 = ((__pyx_v_self->view.suboffsets != NULL) != 0);
+    if (__pyx_t_2) {
 
       /* "View.MemoryView":475
  * 
@@ -12071,9 +12074,9 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
  *             slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize,
  *                                 item, self.dtype_is_object)
  */
-      __pyx_t_2 = assert_direct_dimensions(__pyx_v_self->view.suboffsets, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 475, __pyx_L6_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __pyx_t_3 = assert_direct_dimensions(__pyx_v_self->view.suboffsets, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 475, __pyx_L6_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
       /* "View.MemoryView":474
  * 
@@ -12110,32 +12113,32 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
     /*exception exit:*/{
       __Pyx_PyThreadState_declare
       __Pyx_PyThreadState_assign
-      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
-      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
-      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
-      __Pyx_XGOTREF(__pyx_t_6);
+      __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
+      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
       __Pyx_XGOTREF(__pyx_t_7);
       __Pyx_XGOTREF(__pyx_t_8);
       __Pyx_XGOTREF(__pyx_t_9);
       __Pyx_XGOTREF(__pyx_t_10);
       __Pyx_XGOTREF(__pyx_t_11);
-      __pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
+      __Pyx_XGOTREF(__pyx_t_12);
+      __pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
       {
         PyMem_Free(__pyx_v_tmp);
       }
       if (PY_MAJOR_VERSION >= 3) {
-        __Pyx_XGIVEREF(__pyx_t_9);
         __Pyx_XGIVEREF(__pyx_t_10);
         __Pyx_XGIVEREF(__pyx_t_11);
-        __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
+        __Pyx_XGIVEREF(__pyx_t_12);
+        __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
       }
-      __Pyx_XGIVEREF(__pyx_t_6);
       __Pyx_XGIVEREF(__pyx_t_7);
       __Pyx_XGIVEREF(__pyx_t_8);
-      __Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
-      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
-      __pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
+      __Pyx_XGIVEREF(__pyx_t_9);
+      __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
+      __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
+      __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
       goto __pyx_L1_error;
     }
     __pyx_L7:;
@@ -12153,7 +12156,7 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assign_scalar", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
@@ -14120,7 +14123,8 @@ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16
   __Pyx_memviewslice __pyx_v_tmp;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  __Pyx_memviewslice *__pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("is_c_contig", 0);
 
   /* "View.MemoryView":622
@@ -14130,7 +14134,8 @@ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16
  *         return slice_is_contig(mslice[0], 'C', self.view.ndim)
  * 
  */
-  __pyx_v_mslice = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp));
+  __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 622, __pyx_L1_error)
+  __pyx_v_mslice = __pyx_t_1;
 
   /* "View.MemoryView":623
  *         cdef __Pyx_memviewslice tmp
@@ -14140,10 +14145,10 @@ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16
  *     def is_f_contig(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'C', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 623, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'C', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 623, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
   /* "View.MemoryView":619
@@ -14156,7 +14161,7 @@ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
   __Pyx_AddTraceback("View.MemoryView.memoryview.is_c_contig", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -14191,7 +14196,8 @@ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18
   __Pyx_memviewslice __pyx_v_tmp;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  __Pyx_memviewslice *__pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("is_f_contig", 0);
 
   /* "View.MemoryView":628
@@ -14201,7 +14207,8 @@ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18
  *         return slice_is_contig(mslice[0], 'F', self.view.ndim)
  * 
  */
-  __pyx_v_mslice = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp));
+  __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 628, __pyx_L1_error)
+  __pyx_v_mslice = __pyx_t_1;
 
   /* "View.MemoryView":629
  *         cdef __Pyx_memviewslice tmp
@@ -14211,10 +14218,10 @@ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18
  *     def copy(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'F', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 629, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'F', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 629, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
   /* "View.MemoryView":625
@@ -14227,7 +14234,7 @@ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
   __Pyx_AddTraceback("View.MemoryView.memoryview.is_f_contig", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -17781,7 +17788,7 @@ static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice __pyx_v_memviewsl
  * 
  * @cname('__pyx_memoryview_get_slice_from_memoryview')
  * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview,             # <<<<<<<<<<<<<<
- *                                                    __Pyx_memviewslice *mslice):
+ *                                                    __Pyx_memviewslice *mslice) except NULL:
  *     cdef _memoryviewslice obj
  */
 
@@ -17795,7 +17802,7 @@ static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __p
   __Pyx_RefNannySetupContext("get_slice_from_memview", 0);
 
   /* "View.MemoryView":1055
- *                                                    __Pyx_memviewslice *mslice):
+ *                                                    __Pyx_memviewslice *mslice) except NULL:
  *     cdef _memoryviewslice obj
  *     if isinstance(memview, _memoryviewslice):             # <<<<<<<<<<<<<<
  *         obj = memview
@@ -17829,7 +17836,7 @@ static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __p
     goto __pyx_L0;
 
     /* "View.MemoryView":1055
- *                                                    __Pyx_memviewslice *mslice):
+ *                                                    __Pyx_memviewslice *mslice) except NULL:
  *     cdef _memoryviewslice obj
  *     if isinstance(memview, _memoryviewslice):             # <<<<<<<<<<<<<<
  *         obj = memview
@@ -17862,15 +17869,15 @@ static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __p
  * 
  * @cname('__pyx_memoryview_get_slice_from_memoryview')
  * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview,             # <<<<<<<<<<<<<<
- *                                                    __Pyx_memviewslice *mslice):
+ *                                                    __Pyx_memviewslice *mslice) except NULL:
  *     cdef _memoryviewslice obj
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_WriteUnraisable("View.MemoryView.get_slice_from_memview", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
-  __pyx_r = 0;
+  __Pyx_AddTraceback("View.MemoryView.get_slice_from_memview", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XDECREF((PyObject *)__pyx_v_obj);
   __Pyx_RefNannyFinishContext();
@@ -18711,52 +18718,52 @@ static void copy_strided_to_strided(__Pyx_memviewslice *__pyx_v_src, __Pyx_memvi
  * @cname('__pyx_memoryview_slice_get_size')
  * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil:             # <<<<<<<<<<<<<<
  *     "Return the size of the memory occupied by the slice in number of bytes"
- *     cdef int i
+ *     cdef Py_ssize_t shape, size = src.memview.view.itemsize
  */
 
 static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__pyx_v_src, int __pyx_v_ndim) {
-  int __pyx_v_i;
+  Py_ssize_t __pyx_v_shape;
   Py_ssize_t __pyx_v_size;
   Py_ssize_t __pyx_r;
   Py_ssize_t __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_t_3;
-  int __pyx_t_4;
+  Py_ssize_t *__pyx_t_2;
+  Py_ssize_t *__pyx_t_3;
+  Py_ssize_t *__pyx_t_4;
 
-  /* "View.MemoryView":1180
+  /* "View.MemoryView":1179
+ * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil:
  *     "Return the size of the memory occupied by the slice in number of bytes"
- *     cdef int i
- *     cdef Py_ssize_t size = src.memview.view.itemsize             # <<<<<<<<<<<<<<
+ *     cdef Py_ssize_t shape, size = src.memview.view.itemsize             # <<<<<<<<<<<<<<
  * 
- *     for i in range(ndim):
+ *     for shape in src.shape[:ndim]:
  */
   __pyx_t_1 = __pyx_v_src->memview->view.itemsize;
   __pyx_v_size = __pyx_t_1;
 
-  /* "View.MemoryView":1182
- *     cdef Py_ssize_t size = src.memview.view.itemsize
+  /* "View.MemoryView":1181
+ *     cdef Py_ssize_t shape, size = src.memview.view.itemsize
  * 
- *     for i in range(ndim):             # <<<<<<<<<<<<<<
- *         size *= src.shape[i]
+ *     for shape in src.shape[:ndim]:             # <<<<<<<<<<<<<<
+ *         size *= shape
  * 
  */
-  __pyx_t_2 = __pyx_v_ndim;
-  __pyx_t_3 = __pyx_t_2;
-  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
-    __pyx_v_i = __pyx_t_4;
+  __pyx_t_3 = (__pyx_v_src->shape + __pyx_v_ndim);
+  for (__pyx_t_4 = __pyx_v_src->shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) {
+    __pyx_t_2 = __pyx_t_4;
+    __pyx_v_shape = (__pyx_t_2[0]);
 
-    /* "View.MemoryView":1183
+    /* "View.MemoryView":1182
  * 
- *     for i in range(ndim):
- *         size *= src.shape[i]             # <<<<<<<<<<<<<<
+ *     for shape in src.shape[:ndim]:
+ *         size *= shape             # <<<<<<<<<<<<<<
  * 
  *     return size
  */
-    __pyx_v_size = (__pyx_v_size * (__pyx_v_src->shape[__pyx_v_i]));
+    __pyx_v_size = (__pyx_v_size * __pyx_v_shape);
   }
 
-  /* "View.MemoryView":1185
- *         size *= src.shape[i]
+  /* "View.MemoryView":1184
+ *         size *= shape
  * 
  *     return size             # <<<<<<<<<<<<<<
  * 
@@ -18770,7 +18777,7 @@ static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__pyx_v_sr
  * @cname('__pyx_memoryview_slice_get_size')
  * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil:             # <<<<<<<<<<<<<<
  *     "Return the size of the memory occupied by the slice in number of bytes"
- *     cdef int i
+ *     cdef Py_ssize_t shape, size = src.memview.view.itemsize
  */
 
   /* function exit code */
@@ -18778,7 +18785,7 @@ static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__pyx_v_sr
   return __pyx_r;
 }
 
-/* "View.MemoryView":1188
+/* "View.MemoryView":1187
  * 
  * @cname('__pyx_fill_contig_strides_array')
  * cdef Py_ssize_t fill_contig_strides_array(             # <<<<<<<<<<<<<<
@@ -18794,7 +18801,7 @@ static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_
   int __pyx_t_3;
   int __pyx_t_4;
 
-  /* "View.MemoryView":1197
+  /* "View.MemoryView":1196
  *     cdef int idx
  * 
  *     if order == 'F':             # <<<<<<<<<<<<<<
@@ -18804,38 +18811,38 @@ static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_
   __pyx_t_1 = ((__pyx_v_order == 'F') != 0);
   if (__pyx_t_1) {
 
-    /* "View.MemoryView":1198
+    /* "View.MemoryView":1197
  * 
  *     if order == 'F':
  *         for idx in range(ndim):             # <<<<<<<<<<<<<<
  *             strides[idx] = stride
- *             stride = stride * shape[idx]
+ *             stride *= shape[idx]
  */
     __pyx_t_2 = __pyx_v_ndim;
     __pyx_t_3 = __pyx_t_2;
     for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
       __pyx_v_idx = __pyx_t_4;
 
-      /* "View.MemoryView":1199
+      /* "View.MemoryView":1198
  *     if order == 'F':
  *         for idx in range(ndim):
  *             strides[idx] = stride             # <<<<<<<<<<<<<<
- *             stride = stride * shape[idx]
+ *             stride *= shape[idx]
  *     else:
  */
       (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride;
 
-      /* "View.MemoryView":1200
+      /* "View.MemoryView":1199
  *         for idx in range(ndim):
  *             strides[idx] = stride
- *             stride = stride * shape[idx]             # <<<<<<<<<<<<<<
+ *             stride *= shape[idx]             # <<<<<<<<<<<<<<
  *     else:
  *         for idx in range(ndim - 1, -1, -1):
  */
       __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx]));
     }
 
-    /* "View.MemoryView":1197
+    /* "View.MemoryView":1196
  *     cdef int idx
  * 
  *     if order == 'F':             # <<<<<<<<<<<<<<
@@ -18845,30 +18852,30 @@ static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_
     goto __pyx_L3;
   }
 
-  /* "View.MemoryView":1202
- *             stride = stride * shape[idx]
+  /* "View.MemoryView":1201
+ *             stride *= shape[idx]
  *     else:
  *         for idx in range(ndim - 1, -1, -1):             # <<<<<<<<<<<<<<
  *             strides[idx] = stride
- *             stride = stride * shape[idx]
+ *             stride *= shape[idx]
  */
   /*else*/ {
     for (__pyx_t_2 = (__pyx_v_ndim - 1); __pyx_t_2 > -1; __pyx_t_2-=1) {
       __pyx_v_idx = __pyx_t_2;
 
-      /* "View.MemoryView":1203
+      /* "View.MemoryView":1202
  *     else:
  *         for idx in range(ndim - 1, -1, -1):
  *             strides[idx] = stride             # <<<<<<<<<<<<<<
- *             stride = stride * shape[idx]
+ *             stride *= shape[idx]
  * 
  */
       (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride;
 
-      /* "View.MemoryView":1204
+      /* "View.MemoryView":1203
  *         for idx in range(ndim - 1, -1, -1):
  *             strides[idx] = stride
- *             stride = stride * shape[idx]             # <<<<<<<<<<<<<<
+ *             stride *= shape[idx]             # <<<<<<<<<<<<<<
  * 
  *     return stride
  */
@@ -18877,8 +18884,8 @@ static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_
   }
   __pyx_L3:;
 
-  /* "View.MemoryView":1206
- *             stride = stride * shape[idx]
+  /* "View.MemoryView":1205
+ *             stride *= shape[idx]
  * 
  *     return stride             # <<<<<<<<<<<<<<
  * 
@@ -18887,7 +18894,7 @@ static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_
   __pyx_r = __pyx_v_stride;
   goto __pyx_L0;
 
-  /* "View.MemoryView":1188
+  /* "View.MemoryView":1187
  * 
  * @cname('__pyx_fill_contig_strides_array')
  * cdef Py_ssize_t fill_contig_strides_array(             # <<<<<<<<<<<<<<
@@ -18900,7 +18907,7 @@ static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_
   return __pyx_r;
 }
 
-/* "View.MemoryView":1209
+/* "View.MemoryView":1208
  * 
  * @cname('__pyx_memoryview_copy_data_to_temp')
  * cdef void *copy_data_to_temp(__Pyx_memviewslice *src,             # <<<<<<<<<<<<<<
@@ -18921,7 +18928,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   int __pyx_t_5;
   int __pyx_t_6;
 
-  /* "View.MemoryView":1220
+  /* "View.MemoryView":1219
  *     cdef void *result
  * 
  *     cdef size_t itemsize = src.memview.view.itemsize             # <<<<<<<<<<<<<<
@@ -18931,7 +18938,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   __pyx_t_1 = __pyx_v_src->memview->view.itemsize;
   __pyx_v_itemsize = __pyx_t_1;
 
-  /* "View.MemoryView":1221
+  /* "View.MemoryView":1220
  * 
  *     cdef size_t itemsize = src.memview.view.itemsize
  *     cdef size_t size = slice_get_size(src, ndim)             # <<<<<<<<<<<<<<
@@ -18940,7 +18947,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
  */
   __pyx_v_size = __pyx_memoryview_slice_get_size(__pyx_v_src, __pyx_v_ndim);
 
-  /* "View.MemoryView":1223
+  /* "View.MemoryView":1222
  *     cdef size_t size = slice_get_size(src, ndim)
  * 
  *     result = malloc(size)             # <<<<<<<<<<<<<<
@@ -18949,7 +18956,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
  */
   __pyx_v_result = malloc(__pyx_v_size);
 
-  /* "View.MemoryView":1224
+  /* "View.MemoryView":1223
  * 
  *     result = malloc(size)
  *     if not result:             # <<<<<<<<<<<<<<
@@ -18959,16 +18966,16 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   __pyx_t_2 = ((!(__pyx_v_result != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "View.MemoryView":1225
+    /* "View.MemoryView":1224
  *     result = malloc(size)
  *     if not result:
  *         _err(MemoryError, NULL)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-    __pyx_t_3 = __pyx_memoryview_err(__pyx_builtin_MemoryError, NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1225, __pyx_L1_error)
+    __pyx_t_3 = __pyx_memoryview_err(__pyx_builtin_MemoryError, NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1224, __pyx_L1_error)
 
-    /* "View.MemoryView":1224
+    /* "View.MemoryView":1223
  * 
  *     result = malloc(size)
  *     if not result:             # <<<<<<<<<<<<<<
@@ -18977,7 +18984,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
  */
   }
 
-  /* "View.MemoryView":1228
+  /* "View.MemoryView":1227
  * 
  * 
  *     tmpslice.data = <char *> result             # <<<<<<<<<<<<<<
@@ -18986,7 +18993,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
  */
   __pyx_v_tmpslice->data = ((char *)__pyx_v_result);
 
-  /* "View.MemoryView":1229
+  /* "View.MemoryView":1228
  * 
  *     tmpslice.data = <char *> result
  *     tmpslice.memview = src.memview             # <<<<<<<<<<<<<<
@@ -18996,7 +19003,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   __pyx_t_4 = __pyx_v_src->memview;
   __pyx_v_tmpslice->memview = __pyx_t_4;
 
-  /* "View.MemoryView":1230
+  /* "View.MemoryView":1229
  *     tmpslice.data = <char *> result
  *     tmpslice.memview = src.memview
  *     for i in range(ndim):             # <<<<<<<<<<<<<<
@@ -19008,7 +19015,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
     __pyx_v_i = __pyx_t_6;
 
-    /* "View.MemoryView":1231
+    /* "View.MemoryView":1230
  *     tmpslice.memview = src.memview
  *     for i in range(ndim):
  *         tmpslice.shape[i] = src.shape[i]             # <<<<<<<<<<<<<<
@@ -19017,7 +19024,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
  */
     (__pyx_v_tmpslice->shape[__pyx_v_i]) = (__pyx_v_src->shape[__pyx_v_i]);
 
-    /* "View.MemoryView":1232
+    /* "View.MemoryView":1231
  *     for i in range(ndim):
  *         tmpslice.shape[i] = src.shape[i]
  *         tmpslice.suboffsets[i] = -1             # <<<<<<<<<<<<<<
@@ -19027,7 +19034,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
     (__pyx_v_tmpslice->suboffsets[__pyx_v_i]) = -1L;
   }
 
-  /* "View.MemoryView":1234
+  /* "View.MemoryView":1233
  *         tmpslice.suboffsets[i] = -1
  * 
  *     fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize,             # <<<<<<<<<<<<<<
@@ -19036,7 +19043,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
  */
   (void)(__pyx_fill_contig_strides_array((&(__pyx_v_tmpslice->shape[0])), (&(__pyx_v_tmpslice->strides[0])), __pyx_v_itemsize, __pyx_v_ndim, __pyx_v_order));
 
-  /* "View.MemoryView":1238
+  /* "View.MemoryView":1237
  * 
  * 
  *     for i in range(ndim):             # <<<<<<<<<<<<<<
@@ -19048,7 +19055,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
     __pyx_v_i = __pyx_t_6;
 
-    /* "View.MemoryView":1239
+    /* "View.MemoryView":1238
  * 
  *     for i in range(ndim):
  *         if tmpslice.shape[i] == 1:             # <<<<<<<<<<<<<<
@@ -19058,7 +19065,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
     __pyx_t_2 = (((__pyx_v_tmpslice->shape[__pyx_v_i]) == 1) != 0);
     if (__pyx_t_2) {
 
-      /* "View.MemoryView":1240
+      /* "View.MemoryView":1239
  *     for i in range(ndim):
  *         if tmpslice.shape[i] == 1:
  *             tmpslice.strides[i] = 0             # <<<<<<<<<<<<<<
@@ -19067,7 +19074,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
  */
       (__pyx_v_tmpslice->strides[__pyx_v_i]) = 0;
 
-      /* "View.MemoryView":1239
+      /* "View.MemoryView":1238
  * 
  *     for i in range(ndim):
  *         if tmpslice.shape[i] == 1:             # <<<<<<<<<<<<<<
@@ -19077,7 +19084,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
     }
   }
 
-  /* "View.MemoryView":1242
+  /* "View.MemoryView":1241
  *             tmpslice.strides[i] = 0
  * 
  *     if slice_is_contig(src[0], order, ndim):             # <<<<<<<<<<<<<<
@@ -19087,7 +19094,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   __pyx_t_2 = (__pyx_memviewslice_is_contig((__pyx_v_src[0]), __pyx_v_order, __pyx_v_ndim) != 0);
   if (__pyx_t_2) {
 
-    /* "View.MemoryView":1243
+    /* "View.MemoryView":1242
  * 
  *     if slice_is_contig(src[0], order, ndim):
  *         memcpy(result, src.data, size)             # <<<<<<<<<<<<<<
@@ -19096,7 +19103,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
  */
     (void)(memcpy(__pyx_v_result, __pyx_v_src->data, __pyx_v_size));
 
-    /* "View.MemoryView":1242
+    /* "View.MemoryView":1241
  *             tmpslice.strides[i] = 0
  * 
  *     if slice_is_contig(src[0], order, ndim):             # <<<<<<<<<<<<<<
@@ -19106,7 +19113,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
     goto __pyx_L9;
   }
 
-  /* "View.MemoryView":1245
+  /* "View.MemoryView":1244
  *         memcpy(result, src.data, size)
  *     else:
  *         copy_strided_to_strided(src, tmpslice, ndim, itemsize)             # <<<<<<<<<<<<<<
@@ -19118,7 +19125,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   }
   __pyx_L9:;
 
-  /* "View.MemoryView":1247
+  /* "View.MemoryView":1246
  *         copy_strided_to_strided(src, tmpslice, ndim, itemsize)
  * 
  *     return result             # <<<<<<<<<<<<<<
@@ -19128,7 +19135,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "View.MemoryView":1209
+  /* "View.MemoryView":1208
  * 
  * @cname('__pyx_memoryview_copy_data_to_temp')
  * cdef void *copy_data_to_temp(__Pyx_memviewslice *src,             # <<<<<<<<<<<<<<
@@ -19152,7 +19159,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   return __pyx_r;
 }
 
-/* "View.MemoryView":1252
+/* "View.MemoryView":1251
  * 
  * @cname('__pyx_memoryview_err_extents')
  * cdef int _err_extents(int i, Py_ssize_t extent1,             # <<<<<<<<<<<<<<
@@ -19172,20 +19179,20 @@ static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_v_extent
   #endif
   __Pyx_RefNannySetupContext("_err_extents", 0);
 
-  /* "View.MemoryView":1255
+  /* "View.MemoryView":1254
  *                              Py_ssize_t extent2) except -1 with gil:
  *     raise ValueError("got differing extents in dimension %d (got %d and %d)" %
  *                                                         (i, extent1, extent2))             # <<<<<<<<<<<<<<
  * 
  * @cname('__pyx_memoryview_err_dim')
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1255, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1254, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_extent1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1255, __pyx_L1_error)
+  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_extent1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1254, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_extent2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1255, __pyx_L1_error)
+  __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_extent2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1254, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1255, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1254, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
@@ -19197,24 +19204,24 @@ static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_v_extent
   __pyx_t_2 = 0;
   __pyx_t_3 = 0;
 
-  /* "View.MemoryView":1254
+  /* "View.MemoryView":1253
  * cdef int _err_extents(int i, Py_ssize_t extent1,
  *                              Py_ssize_t extent2) except -1 with gil:
  *     raise ValueError("got differing extents in dimension %d (got %d and %d)" %             # <<<<<<<<<<<<<<
  *                                                         (i, extent1, extent2))
  * 
  */
-  __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1254, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1253, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1254, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1253, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_Raise(__pyx_t_4, 0, 0, 0);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __PYX_ERR(1, 1254, __pyx_L1_error)
+  __PYX_ERR(1, 1253, __pyx_L1_error)
 
-  /* "View.MemoryView":1252
+  /* "View.MemoryView":1251
  * 
  * @cname('__pyx_memoryview_err_extents')
  * cdef int _err_extents(int i, Py_ssize_t extent1,             # <<<<<<<<<<<<<<
@@ -19237,7 +19244,7 @@ static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_v_extent
   return __pyx_r;
 }
 
-/* "View.MemoryView":1258
+/* "View.MemoryView":1257
  * 
  * @cname('__pyx_memoryview_err_dim')
  * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil:             # <<<<<<<<<<<<<<
@@ -19258,18 +19265,18 @@ static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, char *__pyx_v_msg,
   __Pyx_RefNannySetupContext("_err_dim", 0);
   __Pyx_INCREF(__pyx_v_error);
 
-  /* "View.MemoryView":1259
+  /* "View.MemoryView":1258
  * @cname('__pyx_memoryview_err_dim')
  * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil:
  *     raise error(msg.decode('ascii') % dim)             # <<<<<<<<<<<<<<
  * 
  * @cname('__pyx_memoryview_err')
  */
-  __pyx_t_2 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1259, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1258, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1259, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1258, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyUnicode_Format(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1259, __pyx_L1_error)
+  __pyx_t_4 = PyUnicode_Format(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1258, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -19287,14 +19294,14 @@ static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, char *__pyx_v_msg,
   __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
   __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1259, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1258, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __PYX_ERR(1, 1259, __pyx_L1_error)
+  __PYX_ERR(1, 1258, __pyx_L1_error)
 
-  /* "View.MemoryView":1258
+  /* "View.MemoryView":1257
  * 
  * @cname('__pyx_memoryview_err_dim')
  * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil:             # <<<<<<<<<<<<<<
@@ -19318,7 +19325,7 @@ static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, char *__pyx_v_msg,
   return __pyx_r;
 }
 
-/* "View.MemoryView":1262
+/* "View.MemoryView":1261
  * 
  * @cname('__pyx_memoryview_err')
  * cdef int _err(object error, char *msg) except -1 with gil:             # <<<<<<<<<<<<<<
@@ -19340,7 +19347,7 @@ static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) {
   __Pyx_RefNannySetupContext("_err", 0);
   __Pyx_INCREF(__pyx_v_error);
 
-  /* "View.MemoryView":1263
+  /* "View.MemoryView":1262
  * @cname('__pyx_memoryview_err')
  * cdef int _err(object error, char *msg) except -1 with gil:
  *     if msg != NULL:             # <<<<<<<<<<<<<<
@@ -19350,14 +19357,14 @@ static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) {
   __pyx_t_1 = ((__pyx_v_msg != NULL) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "View.MemoryView":1264
+    /* "View.MemoryView":1263
  * cdef int _err(object error, char *msg) except -1 with gil:
  *     if msg != NULL:
  *         raise error(msg.decode('ascii'))             # <<<<<<<<<<<<<<
  *     else:
  *         raise error
  */
-    __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1264, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1263, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_error);
     __pyx_t_4 = __pyx_v_error; __pyx_t_5 = NULL;
@@ -19373,14 +19380,14 @@ static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) {
     __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3);
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1264, __pyx_L1_error)
+    if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1263, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __PYX_ERR(1, 1264, __pyx_L1_error)
+    __PYX_ERR(1, 1263, __pyx_L1_error)
 
-    /* "View.MemoryView":1263
+    /* "View.MemoryView":1262
  * @cname('__pyx_memoryview_err')
  * cdef int _err(object error, char *msg) except -1 with gil:
  *     if msg != NULL:             # <<<<<<<<<<<<<<
@@ -19389,7 +19396,7 @@ static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) {
  */
   }
 
-  /* "View.MemoryView":1266
+  /* "View.MemoryView":1265
  *         raise error(msg.decode('ascii'))
  *     else:
  *         raise error             # <<<<<<<<<<<<<<
@@ -19398,10 +19405,10 @@ static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) {
  */
   /*else*/ {
     __Pyx_Raise(__pyx_v_error, 0, 0, 0);
-    __PYX_ERR(1, 1266, __pyx_L1_error)
+    __PYX_ERR(1, 1265, __pyx_L1_error)
   }
 
-  /* "View.MemoryView":1262
+  /* "View.MemoryView":1261
  * 
  * @cname('__pyx_memoryview_err')
  * cdef int _err(object error, char *msg) except -1 with gil:             # <<<<<<<<<<<<<<
@@ -19425,7 +19432,7 @@ static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) {
   return __pyx_r;
 }
 
-/* "View.MemoryView":1269
+/* "View.MemoryView":1268
  * 
  * @cname('__pyx_memoryview_copy_contents')
  * cdef int memoryview_copy_contents(__Pyx_memviewslice src,             # <<<<<<<<<<<<<<
@@ -19452,7 +19459,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   void *__pyx_t_7;
   int __pyx_t_8;
 
-  /* "View.MemoryView":1277
+  /* "View.MemoryView":1276
  *     Check for overlapping memory and verify the shapes.
  *     """
  *     cdef void *tmpdata = NULL             # <<<<<<<<<<<<<<
@@ -19461,7 +19468,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   __pyx_v_tmpdata = NULL;
 
-  /* "View.MemoryView":1278
+  /* "View.MemoryView":1277
  *     """
  *     cdef void *tmpdata = NULL
  *     cdef size_t itemsize = src.memview.view.itemsize             # <<<<<<<<<<<<<<
@@ -19471,7 +19478,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   __pyx_t_1 = __pyx_v_src.memview->view.itemsize;
   __pyx_v_itemsize = __pyx_t_1;
 
-  /* "View.MemoryView":1280
+  /* "View.MemoryView":1279
  *     cdef size_t itemsize = src.memview.view.itemsize
  *     cdef int i
  *     cdef char order = get_best_order(&src, src_ndim)             # <<<<<<<<<<<<<<
@@ -19480,7 +19487,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_src), __pyx_v_src_ndim);
 
-  /* "View.MemoryView":1281
+  /* "View.MemoryView":1280
  *     cdef int i
  *     cdef char order = get_best_order(&src, src_ndim)
  *     cdef bint broadcasting = False             # <<<<<<<<<<<<<<
@@ -19489,7 +19496,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   __pyx_v_broadcasting = 0;
 
-  /* "View.MemoryView":1282
+  /* "View.MemoryView":1281
  *     cdef char order = get_best_order(&src, src_ndim)
  *     cdef bint broadcasting = False
  *     cdef bint direct_copy = False             # <<<<<<<<<<<<<<
@@ -19498,7 +19505,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   __pyx_v_direct_copy = 0;
 
-  /* "View.MemoryView":1285
+  /* "View.MemoryView":1284
  *     cdef __Pyx_memviewslice tmp
  * 
  *     if src_ndim < dst_ndim:             # <<<<<<<<<<<<<<
@@ -19508,7 +19515,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   __pyx_t_2 = ((__pyx_v_src_ndim < __pyx_v_dst_ndim) != 0);
   if (__pyx_t_2) {
 
-    /* "View.MemoryView":1286
+    /* "View.MemoryView":1285
  * 
  *     if src_ndim < dst_ndim:
  *         broadcast_leading(&src, src_ndim, dst_ndim)             # <<<<<<<<<<<<<<
@@ -19517,7 +19524,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
     __pyx_memoryview_broadcast_leading((&__pyx_v_src), __pyx_v_src_ndim, __pyx_v_dst_ndim);
 
-    /* "View.MemoryView":1285
+    /* "View.MemoryView":1284
  *     cdef __Pyx_memviewslice tmp
  * 
  *     if src_ndim < dst_ndim:             # <<<<<<<<<<<<<<
@@ -19527,7 +19534,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     goto __pyx_L3;
   }
 
-  /* "View.MemoryView":1287
+  /* "View.MemoryView":1286
  *     if src_ndim < dst_ndim:
  *         broadcast_leading(&src, src_ndim, dst_ndim)
  *     elif dst_ndim < src_ndim:             # <<<<<<<<<<<<<<
@@ -19537,7 +19544,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   __pyx_t_2 = ((__pyx_v_dst_ndim < __pyx_v_src_ndim) != 0);
   if (__pyx_t_2) {
 
-    /* "View.MemoryView":1288
+    /* "View.MemoryView":1287
  *         broadcast_leading(&src, src_ndim, dst_ndim)
  *     elif dst_ndim < src_ndim:
  *         broadcast_leading(&dst, dst_ndim, src_ndim)             # <<<<<<<<<<<<<<
@@ -19546,7 +19553,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
     __pyx_memoryview_broadcast_leading((&__pyx_v_dst), __pyx_v_dst_ndim, __pyx_v_src_ndim);
 
-    /* "View.MemoryView":1287
+    /* "View.MemoryView":1286
  *     if src_ndim < dst_ndim:
  *         broadcast_leading(&src, src_ndim, dst_ndim)
  *     elif dst_ndim < src_ndim:             # <<<<<<<<<<<<<<
@@ -19556,7 +19563,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   }
   __pyx_L3:;
 
-  /* "View.MemoryView":1290
+  /* "View.MemoryView":1289
  *         broadcast_leading(&dst, dst_ndim, src_ndim)
  * 
  *     cdef int ndim = max(src_ndim, dst_ndim)             # <<<<<<<<<<<<<<
@@ -19572,7 +19579,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   }
   __pyx_v_ndim = __pyx_t_5;
 
-  /* "View.MemoryView":1292
+  /* "View.MemoryView":1291
  *     cdef int ndim = max(src_ndim, dst_ndim)
  * 
  *     for i in range(ndim):             # <<<<<<<<<<<<<<
@@ -19584,7 +19591,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
     __pyx_v_i = __pyx_t_4;
 
-    /* "View.MemoryView":1293
+    /* "View.MemoryView":1292
  * 
  *     for i in range(ndim):
  *         if src.shape[i] != dst.shape[i]:             # <<<<<<<<<<<<<<
@@ -19594,7 +19601,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) != (__pyx_v_dst.shape[__pyx_v_i])) != 0);
     if (__pyx_t_2) {
 
-      /* "View.MemoryView":1294
+      /* "View.MemoryView":1293
  *     for i in range(ndim):
  *         if src.shape[i] != dst.shape[i]:
  *             if src.shape[i] == 1:             # <<<<<<<<<<<<<<
@@ -19604,7 +19611,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
       __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) == 1) != 0);
       if (__pyx_t_2) {
 
-        /* "View.MemoryView":1295
+        /* "View.MemoryView":1294
  *         if src.shape[i] != dst.shape[i]:
  *             if src.shape[i] == 1:
  *                 broadcasting = True             # <<<<<<<<<<<<<<
@@ -19613,7 +19620,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
         __pyx_v_broadcasting = 1;
 
-        /* "View.MemoryView":1296
+        /* "View.MemoryView":1295
  *             if src.shape[i] == 1:
  *                 broadcasting = True
  *                 src.strides[i] = 0             # <<<<<<<<<<<<<<
@@ -19622,7 +19629,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
         (__pyx_v_src.strides[__pyx_v_i]) = 0;
 
-        /* "View.MemoryView":1294
+        /* "View.MemoryView":1293
  *     for i in range(ndim):
  *         if src.shape[i] != dst.shape[i]:
  *             if src.shape[i] == 1:             # <<<<<<<<<<<<<<
@@ -19632,7 +19639,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
         goto __pyx_L7;
       }
 
-      /* "View.MemoryView":1298
+      /* "View.MemoryView":1297
  *                 src.strides[i] = 0
  *             else:
  *                 _err_extents(i, dst.shape[i], src.shape[i])             # <<<<<<<<<<<<<<
@@ -19640,11 +19647,11 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  *         if src.suboffsets[i] >= 0:
  */
       /*else*/ {
-        __pyx_t_6 = __pyx_memoryview_err_extents(__pyx_v_i, (__pyx_v_dst.shape[__pyx_v_i]), (__pyx_v_src.shape[__pyx_v_i])); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1298, __pyx_L1_error)
+        __pyx_t_6 = __pyx_memoryview_err_extents(__pyx_v_i, (__pyx_v_dst.shape[__pyx_v_i]), (__pyx_v_src.shape[__pyx_v_i])); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1297, __pyx_L1_error)
       }
       __pyx_L7:;
 
-      /* "View.MemoryView":1293
+      /* "View.MemoryView":1292
  * 
  *     for i in range(ndim):
  *         if src.shape[i] != dst.shape[i]:             # <<<<<<<<<<<<<<
@@ -19653,7 +19660,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
     }
 
-    /* "View.MemoryView":1300
+    /* "View.MemoryView":1299
  *                 _err_extents(i, dst.shape[i], src.shape[i])
  * 
  *         if src.suboffsets[i] >= 0:             # <<<<<<<<<<<<<<
@@ -19663,16 +19670,16 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     __pyx_t_2 = (((__pyx_v_src.suboffsets[__pyx_v_i]) >= 0) != 0);
     if (__pyx_t_2) {
 
-      /* "View.MemoryView":1301
+      /* "View.MemoryView":1300
  * 
  *         if src.suboffsets[i] >= 0:
  *             _err_dim(ValueError, "Dimension %d is not direct", i)             # <<<<<<<<<<<<<<
  * 
  *     if slices_overlap(&src, &dst, ndim, itemsize):
  */
-      __pyx_t_6 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Dimension %d is not direct"), __pyx_v_i); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1301, __pyx_L1_error)
+      __pyx_t_6 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Dimension %d is not direct"), __pyx_v_i); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1300, __pyx_L1_error)
 
-      /* "View.MemoryView":1300
+      /* "View.MemoryView":1299
  *                 _err_extents(i, dst.shape[i], src.shape[i])
  * 
  *         if src.suboffsets[i] >= 0:             # <<<<<<<<<<<<<<
@@ -19682,7 +19689,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     }
   }
 
-  /* "View.MemoryView":1303
+  /* "View.MemoryView":1302
  *             _err_dim(ValueError, "Dimension %d is not direct", i)
  * 
  *     if slices_overlap(&src, &dst, ndim, itemsize):             # <<<<<<<<<<<<<<
@@ -19692,7 +19699,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   __pyx_t_2 = (__pyx_slices_overlap((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize) != 0);
   if (__pyx_t_2) {
 
-    /* "View.MemoryView":1305
+    /* "View.MemoryView":1304
  *     if slices_overlap(&src, &dst, ndim, itemsize):
  * 
  *         if not slice_is_contig(src, order, ndim):             # <<<<<<<<<<<<<<
@@ -19702,7 +19709,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     __pyx_t_2 = ((!(__pyx_memviewslice_is_contig(__pyx_v_src, __pyx_v_order, __pyx_v_ndim) != 0)) != 0);
     if (__pyx_t_2) {
 
-      /* "View.MemoryView":1306
+      /* "View.MemoryView":1305
  * 
  *         if not slice_is_contig(src, order, ndim):
  *             order = get_best_order(&dst, ndim)             # <<<<<<<<<<<<<<
@@ -19711,7 +19718,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
       __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim);
 
-      /* "View.MemoryView":1305
+      /* "View.MemoryView":1304
  *     if slices_overlap(&src, &dst, ndim, itemsize):
  * 
  *         if not slice_is_contig(src, order, ndim):             # <<<<<<<<<<<<<<
@@ -19720,17 +19727,17 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
     }
 
-    /* "View.MemoryView":1308
+    /* "View.MemoryView":1307
  *             order = get_best_order(&dst, ndim)
  * 
  *         tmpdata = copy_data_to_temp(&src, &tmp, order, ndim)             # <<<<<<<<<<<<<<
  *         src = tmp
  * 
  */
-    __pyx_t_7 = __pyx_memoryview_copy_data_to_temp((&__pyx_v_src), (&__pyx_v_tmp), __pyx_v_order, __pyx_v_ndim); if (unlikely(__pyx_t_7 == ((void *)NULL))) __PYX_ERR(1, 1308, __pyx_L1_error)
+    __pyx_t_7 = __pyx_memoryview_copy_data_to_temp((&__pyx_v_src), (&__pyx_v_tmp), __pyx_v_order, __pyx_v_ndim); if (unlikely(__pyx_t_7 == ((void *)NULL))) __PYX_ERR(1, 1307, __pyx_L1_error)
     __pyx_v_tmpdata = __pyx_t_7;
 
-    /* "View.MemoryView":1309
+    /* "View.MemoryView":1308
  * 
  *         tmpdata = copy_data_to_temp(&src, &tmp, order, ndim)
  *         src = tmp             # <<<<<<<<<<<<<<
@@ -19739,7 +19746,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
     __pyx_v_src = __pyx_v_tmp;
 
-    /* "View.MemoryView":1303
+    /* "View.MemoryView":1302
  *             _err_dim(ValueError, "Dimension %d is not direct", i)
  * 
  *     if slices_overlap(&src, &dst, ndim, itemsize):             # <<<<<<<<<<<<<<
@@ -19748,7 +19755,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   }
 
-  /* "View.MemoryView":1311
+  /* "View.MemoryView":1310
  *         src = tmp
  * 
  *     if not broadcasting:             # <<<<<<<<<<<<<<
@@ -19758,7 +19765,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   __pyx_t_2 = ((!(__pyx_v_broadcasting != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "View.MemoryView":1314
+    /* "View.MemoryView":1313
  * 
  * 
  *         if slice_is_contig(src, 'C', ndim):             # <<<<<<<<<<<<<<
@@ -19768,7 +19775,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'C', __pyx_v_ndim) != 0);
     if (__pyx_t_2) {
 
-      /* "View.MemoryView":1315
+      /* "View.MemoryView":1314
  * 
  *         if slice_is_contig(src, 'C', ndim):
  *             direct_copy = slice_is_contig(dst, 'C', ndim)             # <<<<<<<<<<<<<<
@@ -19777,7 +19784,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
       __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'C', __pyx_v_ndim);
 
-      /* "View.MemoryView":1314
+      /* "View.MemoryView":1313
  * 
  * 
  *         if slice_is_contig(src, 'C', ndim):             # <<<<<<<<<<<<<<
@@ -19787,7 +19794,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
       goto __pyx_L12;
     }
 
-    /* "View.MemoryView":1316
+    /* "View.MemoryView":1315
  *         if slice_is_contig(src, 'C', ndim):
  *             direct_copy = slice_is_contig(dst, 'C', ndim)
  *         elif slice_is_contig(src, 'F', ndim):             # <<<<<<<<<<<<<<
@@ -19797,7 +19804,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'F', __pyx_v_ndim) != 0);
     if (__pyx_t_2) {
 
-      /* "View.MemoryView":1317
+      /* "View.MemoryView":1316
  *             direct_copy = slice_is_contig(dst, 'C', ndim)
  *         elif slice_is_contig(src, 'F', ndim):
  *             direct_copy = slice_is_contig(dst, 'F', ndim)             # <<<<<<<<<<<<<<
@@ -19806,7 +19813,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
       __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'F', __pyx_v_ndim);
 
-      /* "View.MemoryView":1316
+      /* "View.MemoryView":1315
  *         if slice_is_contig(src, 'C', ndim):
  *             direct_copy = slice_is_contig(dst, 'C', ndim)
  *         elif slice_is_contig(src, 'F', ndim):             # <<<<<<<<<<<<<<
@@ -19816,7 +19823,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     }
     __pyx_L12:;
 
-    /* "View.MemoryView":1319
+    /* "View.MemoryView":1318
  *             direct_copy = slice_is_contig(dst, 'F', ndim)
  * 
  *         if direct_copy:             # <<<<<<<<<<<<<<
@@ -19826,7 +19833,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     __pyx_t_2 = (__pyx_v_direct_copy != 0);
     if (__pyx_t_2) {
 
-      /* "View.MemoryView":1321
+      /* "View.MemoryView":1320
  *         if direct_copy:
  * 
  *             refcount_copying(&dst, dtype_is_object, ndim, False)             # <<<<<<<<<<<<<<
@@ -19835,7 +19842,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
       __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0);
 
-      /* "View.MemoryView":1322
+      /* "View.MemoryView":1321
  * 
  *             refcount_copying(&dst, dtype_is_object, ndim, False)
  *             memcpy(dst.data, src.data, slice_get_size(&src, ndim))             # <<<<<<<<<<<<<<
@@ -19844,7 +19851,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
       (void)(memcpy(__pyx_v_dst.data, __pyx_v_src.data, __pyx_memoryview_slice_get_size((&__pyx_v_src), __pyx_v_ndim)));
 
-      /* "View.MemoryView":1323
+      /* "View.MemoryView":1322
  *             refcount_copying(&dst, dtype_is_object, ndim, False)
  *             memcpy(dst.data, src.data, slice_get_size(&src, ndim))
  *             refcount_copying(&dst, dtype_is_object, ndim, True)             # <<<<<<<<<<<<<<
@@ -19853,7 +19860,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
       __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1);
 
-      /* "View.MemoryView":1324
+      /* "View.MemoryView":1323
  *             memcpy(dst.data, src.data, slice_get_size(&src, ndim))
  *             refcount_copying(&dst, dtype_is_object, ndim, True)
  *             free(tmpdata)             # <<<<<<<<<<<<<<
@@ -19862,7 +19869,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
       free(__pyx_v_tmpdata);
 
-      /* "View.MemoryView":1325
+      /* "View.MemoryView":1324
  *             refcount_copying(&dst, dtype_is_object, ndim, True)
  *             free(tmpdata)
  *             return 0             # <<<<<<<<<<<<<<
@@ -19872,7 +19879,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
       __pyx_r = 0;
       goto __pyx_L0;
 
-      /* "View.MemoryView":1319
+      /* "View.MemoryView":1318
  *             direct_copy = slice_is_contig(dst, 'F', ndim)
  * 
  *         if direct_copy:             # <<<<<<<<<<<<<<
@@ -19881,7 +19888,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
     }
 
-    /* "View.MemoryView":1311
+    /* "View.MemoryView":1310
  *         src = tmp
  * 
  *     if not broadcasting:             # <<<<<<<<<<<<<<
@@ -19890,7 +19897,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   }
 
-  /* "View.MemoryView":1327
+  /* "View.MemoryView":1326
  *             return 0
  * 
  *     if order == 'F' == get_best_order(&dst, ndim):             # <<<<<<<<<<<<<<
@@ -19904,25 +19911,25 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   __pyx_t_8 = (__pyx_t_2 != 0);
   if (__pyx_t_8) {
 
-    /* "View.MemoryView":1330
+    /* "View.MemoryView":1329
  * 
  * 
  *         transpose_memslice(&src)             # <<<<<<<<<<<<<<
  *         transpose_memslice(&dst)
  * 
  */
-    __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_src)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1330, __pyx_L1_error)
+    __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_src)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1329, __pyx_L1_error)
 
-    /* "View.MemoryView":1331
+    /* "View.MemoryView":1330
  * 
  *         transpose_memslice(&src)
  *         transpose_memslice(&dst)             # <<<<<<<<<<<<<<
  * 
  *     refcount_copying(&dst, dtype_is_object, ndim, False)
  */
-    __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_dst)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1331, __pyx_L1_error)
+    __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_dst)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1330, __pyx_L1_error)
 
-    /* "View.MemoryView":1327
+    /* "View.MemoryView":1326
  *             return 0
  * 
  *     if order == 'F' == get_best_order(&dst, ndim):             # <<<<<<<<<<<<<<
@@ -19931,7 +19938,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   }
 
-  /* "View.MemoryView":1333
+  /* "View.MemoryView":1332
  *         transpose_memslice(&dst)
  * 
  *     refcount_copying(&dst, dtype_is_object, ndim, False)             # <<<<<<<<<<<<<<
@@ -19940,7 +19947,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0);
 
-  /* "View.MemoryView":1334
+  /* "View.MemoryView":1333
  * 
  *     refcount_copying(&dst, dtype_is_object, ndim, False)
  *     copy_strided_to_strided(&src, &dst, ndim, itemsize)             # <<<<<<<<<<<<<<
@@ -19949,7 +19956,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   copy_strided_to_strided((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize);
 
-  /* "View.MemoryView":1335
+  /* "View.MemoryView":1334
  *     refcount_copying(&dst, dtype_is_object, ndim, False)
  *     copy_strided_to_strided(&src, &dst, ndim, itemsize)
  *     refcount_copying(&dst, dtype_is_object, ndim, True)             # <<<<<<<<<<<<<<
@@ -19958,7 +19965,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1);
 
-  /* "View.MemoryView":1337
+  /* "View.MemoryView":1336
  *     refcount_copying(&dst, dtype_is_object, ndim, True)
  * 
  *     free(tmpdata)             # <<<<<<<<<<<<<<
@@ -19967,7 +19974,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   free(__pyx_v_tmpdata);
 
-  /* "View.MemoryView":1338
+  /* "View.MemoryView":1337
  * 
  *     free(tmpdata)
  *     return 0             # <<<<<<<<<<<<<<
@@ -19977,7 +19984,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "View.MemoryView":1269
+  /* "View.MemoryView":1268
  * 
  * @cname('__pyx_memoryview_copy_contents')
  * cdef int memoryview_copy_contents(__Pyx_memviewslice src,             # <<<<<<<<<<<<<<
@@ -20001,7 +20008,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   return __pyx_r;
 }
 
-/* "View.MemoryView":1341
+/* "View.MemoryView":1340
  * 
  * @cname('__pyx_memoryview_broadcast_leading')
  * cdef void broadcast_leading(__Pyx_memviewslice *mslice,             # <<<<<<<<<<<<<<
@@ -20016,7 +20023,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
   int __pyx_t_2;
   int __pyx_t_3;
 
-  /* "View.MemoryView":1345
+  /* "View.MemoryView":1344
  *                             int ndim_other) nogil:
  *     cdef int i
  *     cdef int offset = ndim_other - ndim             # <<<<<<<<<<<<<<
@@ -20025,7 +20032,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
  */
   __pyx_v_offset = (__pyx_v_ndim_other - __pyx_v_ndim);
 
-  /* "View.MemoryView":1347
+  /* "View.MemoryView":1346
  *     cdef int offset = ndim_other - ndim
  * 
  *     for i in range(ndim - 1, -1, -1):             # <<<<<<<<<<<<<<
@@ -20035,7 +20042,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
   for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) {
     __pyx_v_i = __pyx_t_1;
 
-    /* "View.MemoryView":1348
+    /* "View.MemoryView":1347
  * 
  *     for i in range(ndim - 1, -1, -1):
  *         mslice.shape[i + offset] = mslice.shape[i]             # <<<<<<<<<<<<<<
@@ -20044,7 +20051,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
  */
     (__pyx_v_mslice->shape[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->shape[__pyx_v_i]);
 
-    /* "View.MemoryView":1349
+    /* "View.MemoryView":1348
  *     for i in range(ndim - 1, -1, -1):
  *         mslice.shape[i + offset] = mslice.shape[i]
  *         mslice.strides[i + offset] = mslice.strides[i]             # <<<<<<<<<<<<<<
@@ -20053,7 +20060,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
  */
     (__pyx_v_mslice->strides[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->strides[__pyx_v_i]);
 
-    /* "View.MemoryView":1350
+    /* "View.MemoryView":1349
  *         mslice.shape[i + offset] = mslice.shape[i]
  *         mslice.strides[i + offset] = mslice.strides[i]
  *         mslice.suboffsets[i + offset] = mslice.suboffsets[i]             # <<<<<<<<<<<<<<
@@ -20063,7 +20070,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
     (__pyx_v_mslice->suboffsets[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->suboffsets[__pyx_v_i]);
   }
 
-  /* "View.MemoryView":1352
+  /* "View.MemoryView":1351
  *         mslice.suboffsets[i + offset] = mslice.suboffsets[i]
  * 
  *     for i in range(offset):             # <<<<<<<<<<<<<<
@@ -20075,7 +20082,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
   for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
     __pyx_v_i = __pyx_t_3;
 
-    /* "View.MemoryView":1353
+    /* "View.MemoryView":1352
  * 
  *     for i in range(offset):
  *         mslice.shape[i] = 1             # <<<<<<<<<<<<<<
@@ -20084,7 +20091,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
  */
     (__pyx_v_mslice->shape[__pyx_v_i]) = 1;
 
-    /* "View.MemoryView":1354
+    /* "View.MemoryView":1353
  *     for i in range(offset):
  *         mslice.shape[i] = 1
  *         mslice.strides[i] = mslice.strides[0]             # <<<<<<<<<<<<<<
@@ -20093,7 +20100,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
  */
     (__pyx_v_mslice->strides[__pyx_v_i]) = (__pyx_v_mslice->strides[0]);
 
-    /* "View.MemoryView":1355
+    /* "View.MemoryView":1354
  *         mslice.shape[i] = 1
  *         mslice.strides[i] = mslice.strides[0]
  *         mslice.suboffsets[i] = -1             # <<<<<<<<<<<<<<
@@ -20103,7 +20110,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
     (__pyx_v_mslice->suboffsets[__pyx_v_i]) = -1L;
   }
 
-  /* "View.MemoryView":1341
+  /* "View.MemoryView":1340
  * 
  * @cname('__pyx_memoryview_broadcast_leading')
  * cdef void broadcast_leading(__Pyx_memviewslice *mslice,             # <<<<<<<<<<<<<<
@@ -20114,7 +20121,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
   /* function exit code */
 }
 
-/* "View.MemoryView":1363
+/* "View.MemoryView":1362
  * 
  * @cname('__pyx_memoryview_refcount_copying')
  * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object,             # <<<<<<<<<<<<<<
@@ -20125,7 +20132,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
 static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_dtype_is_object, int __pyx_v_ndim, int __pyx_v_inc) {
   int __pyx_t_1;
 
-  /* "View.MemoryView":1367
+  /* "View.MemoryView":1366
  * 
  * 
  *     if dtype_is_object:             # <<<<<<<<<<<<<<
@@ -20135,7 +20142,7 @@ static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, i
   __pyx_t_1 = (__pyx_v_dtype_is_object != 0);
   if (__pyx_t_1) {
 
-    /* "View.MemoryView":1368
+    /* "View.MemoryView":1367
  * 
  *     if dtype_is_object:
  *         refcount_objects_in_slice_with_gil(dst.data, dst.shape,             # <<<<<<<<<<<<<<
@@ -20144,7 +20151,7 @@ static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, i
  */
     __pyx_memoryview_refcount_objects_in_slice_with_gil(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_inc);
 
-    /* "View.MemoryView":1367
+    /* "View.MemoryView":1366
  * 
  * 
  *     if dtype_is_object:             # <<<<<<<<<<<<<<
@@ -20153,7 +20160,7 @@ static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, i
  */
   }
 
-  /* "View.MemoryView":1363
+  /* "View.MemoryView":1362
  * 
  * @cname('__pyx_memoryview_refcount_copying')
  * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object,             # <<<<<<<<<<<<<<
@@ -20164,7 +20171,7 @@ static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, i
   /* function exit code */
 }
 
-/* "View.MemoryView":1372
+/* "View.MemoryView":1371
  * 
  * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil')
  * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
@@ -20179,7 +20186,7 @@ static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__pyx_v_da
   #endif
   __Pyx_RefNannySetupContext("refcount_objects_in_slice_with_gil", 0);
 
-  /* "View.MemoryView":1375
+  /* "View.MemoryView":1374
  *                                              Py_ssize_t *strides, int ndim,
  *                                              bint inc) with gil:
  *     refcount_objects_in_slice(data, shape, strides, ndim, inc)             # <<<<<<<<<<<<<<
@@ -20188,7 +20195,7 @@ static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__pyx_v_da
  */
   __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, __pyx_v_shape, __pyx_v_strides, __pyx_v_ndim, __pyx_v_inc);
 
-  /* "View.MemoryView":1372
+  /* "View.MemoryView":1371
  * 
  * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil')
  * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
@@ -20203,7 +20210,7 @@ static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__pyx_v_da
   #endif
 }
 
-/* "View.MemoryView":1378
+/* "View.MemoryView":1377
  * 
  * @cname('__pyx_memoryview_refcount_objects_in_slice')
  * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
@@ -20220,7 +20227,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("refcount_objects_in_slice", 0);
 
-  /* "View.MemoryView":1382
+  /* "View.MemoryView":1381
  *     cdef Py_ssize_t i
  * 
  *     for i in range(shape[0]):             # <<<<<<<<<<<<<<
@@ -20232,7 +20239,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
   for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
     __pyx_v_i = __pyx_t_3;
 
-    /* "View.MemoryView":1383
+    /* "View.MemoryView":1382
  * 
  *     for i in range(shape[0]):
  *         if ndim == 1:             # <<<<<<<<<<<<<<
@@ -20242,7 +20249,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
     __pyx_t_4 = ((__pyx_v_ndim == 1) != 0);
     if (__pyx_t_4) {
 
-      /* "View.MemoryView":1384
+      /* "View.MemoryView":1383
  *     for i in range(shape[0]):
  *         if ndim == 1:
  *             if inc:             # <<<<<<<<<<<<<<
@@ -20252,7 +20259,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
       __pyx_t_4 = (__pyx_v_inc != 0);
       if (__pyx_t_4) {
 
-        /* "View.MemoryView":1385
+        /* "View.MemoryView":1384
  *         if ndim == 1:
  *             if inc:
  *                 Py_INCREF((<PyObject **> data)[0])             # <<<<<<<<<<<<<<
@@ -20261,7 +20268,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
  */
         Py_INCREF((((PyObject **)__pyx_v_data)[0]));
 
-        /* "View.MemoryView":1384
+        /* "View.MemoryView":1383
  *     for i in range(shape[0]):
  *         if ndim == 1:
  *             if inc:             # <<<<<<<<<<<<<<
@@ -20271,7 +20278,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
         goto __pyx_L6;
       }
 
-      /* "View.MemoryView":1387
+      /* "View.MemoryView":1386
  *                 Py_INCREF((<PyObject **> data)[0])
  *             else:
  *                 Py_DECREF((<PyObject **> data)[0])             # <<<<<<<<<<<<<<
@@ -20283,7 +20290,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
       }
       __pyx_L6:;
 
-      /* "View.MemoryView":1383
+      /* "View.MemoryView":1382
  * 
  *     for i in range(shape[0]):
  *         if ndim == 1:             # <<<<<<<<<<<<<<
@@ -20293,7 +20300,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
       goto __pyx_L5;
     }
 
-    /* "View.MemoryView":1389
+    /* "View.MemoryView":1388
  *                 Py_DECREF((<PyObject **> data)[0])
  *         else:
  *             refcount_objects_in_slice(data, shape + 1, strides + 1,             # <<<<<<<<<<<<<<
@@ -20302,7 +20309,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
  */
     /*else*/ {
 
-      /* "View.MemoryView":1390
+      /* "View.MemoryView":1389
  *         else:
  *             refcount_objects_in_slice(data, shape + 1, strides + 1,
  *                                       ndim - 1, inc)             # <<<<<<<<<<<<<<
@@ -20313,7 +20320,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
     }
     __pyx_L5:;
 
-    /* "View.MemoryView":1392
+    /* "View.MemoryView":1391
  *                                       ndim - 1, inc)
  * 
  *         data += strides[0]             # <<<<<<<<<<<<<<
@@ -20323,7 +20330,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
     __pyx_v_data = (__pyx_v_data + (__pyx_v_strides[0]));
   }
 
-  /* "View.MemoryView":1378
+  /* "View.MemoryView":1377
  * 
  * @cname('__pyx_memoryview_refcount_objects_in_slice')
  * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
@@ -20335,7 +20342,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
   __Pyx_RefNannyFinishContext();
 }
 
-/* "View.MemoryView":1398
+/* "View.MemoryView":1397
  * 
  * @cname('__pyx_memoryview_slice_assign_scalar')
  * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim,             # <<<<<<<<<<<<<<
@@ -20345,7 +20352,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
 
 static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item, int __pyx_v_dtype_is_object) {
 
-  /* "View.MemoryView":1401
+  /* "View.MemoryView":1400
  *                               size_t itemsize, void *item,
  *                               bint dtype_is_object) nogil:
  *     refcount_copying(dst, dtype_is_object, ndim, False)             # <<<<<<<<<<<<<<
@@ -20354,7 +20361,7 @@ static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst
  */
   __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 0);
 
-  /* "View.MemoryView":1402
+  /* "View.MemoryView":1401
  *                               bint dtype_is_object) nogil:
  *     refcount_copying(dst, dtype_is_object, ndim, False)
  *     _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim,             # <<<<<<<<<<<<<<
@@ -20363,7 +20370,7 @@ static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst
  */
   __pyx_memoryview__slice_assign_scalar(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_itemsize, __pyx_v_item);
 
-  /* "View.MemoryView":1404
+  /* "View.MemoryView":1403
  *     _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim,
  *                          itemsize, item)
  *     refcount_copying(dst, dtype_is_object, ndim, True)             # <<<<<<<<<<<<<<
@@ -20372,7 +20379,7 @@ static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst
  */
   __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 1);
 
-  /* "View.MemoryView":1398
+  /* "View.MemoryView":1397
  * 
  * @cname('__pyx_memoryview_slice_assign_scalar')
  * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim,             # <<<<<<<<<<<<<<
@@ -20383,7 +20390,7 @@ static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst
   /* function exit code */
 }
 
-/* "View.MemoryView":1408
+/* "View.MemoryView":1407
  * 
  * @cname('__pyx_memoryview__slice_assign_scalar')
  * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
@@ -20400,7 +20407,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
   Py_ssize_t __pyx_t_3;
   Py_ssize_t __pyx_t_4;
 
-  /* "View.MemoryView":1412
+  /* "View.MemoryView":1411
  *                               size_t itemsize, void *item) nogil:
  *     cdef Py_ssize_t i
  *     cdef Py_ssize_t stride = strides[0]             # <<<<<<<<<<<<<<
@@ -20409,7 +20416,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
  */
   __pyx_v_stride = (__pyx_v_strides[0]);
 
-  /* "View.MemoryView":1413
+  /* "View.MemoryView":1412
  *     cdef Py_ssize_t i
  *     cdef Py_ssize_t stride = strides[0]
  *     cdef Py_ssize_t extent = shape[0]             # <<<<<<<<<<<<<<
@@ -20418,7 +20425,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
  */
   __pyx_v_extent = (__pyx_v_shape[0]);
 
-  /* "View.MemoryView":1415
+  /* "View.MemoryView":1414
  *     cdef Py_ssize_t extent = shape[0]
  * 
  *     if ndim == 1:             # <<<<<<<<<<<<<<
@@ -20428,7 +20435,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
   __pyx_t_1 = ((__pyx_v_ndim == 1) != 0);
   if (__pyx_t_1) {
 
-    /* "View.MemoryView":1416
+    /* "View.MemoryView":1415
  * 
  *     if ndim == 1:
  *         for i in range(extent):             # <<<<<<<<<<<<<<
@@ -20440,7 +20447,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
     for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
       __pyx_v_i = __pyx_t_4;
 
-      /* "View.MemoryView":1417
+      /* "View.MemoryView":1416
  *     if ndim == 1:
  *         for i in range(extent):
  *             memcpy(data, item, itemsize)             # <<<<<<<<<<<<<<
@@ -20449,7 +20456,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
  */
       (void)(memcpy(__pyx_v_data, __pyx_v_item, __pyx_v_itemsize));
 
-      /* "View.MemoryView":1418
+      /* "View.MemoryView":1417
  *         for i in range(extent):
  *             memcpy(data, item, itemsize)
  *             data += stride             # <<<<<<<<<<<<<<
@@ -20459,7 +20466,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
       __pyx_v_data = (__pyx_v_data + __pyx_v_stride);
     }
 
-    /* "View.MemoryView":1415
+    /* "View.MemoryView":1414
  *     cdef Py_ssize_t extent = shape[0]
  * 
  *     if ndim == 1:             # <<<<<<<<<<<<<<
@@ -20469,7 +20476,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
     goto __pyx_L3;
   }
 
-  /* "View.MemoryView":1420
+  /* "View.MemoryView":1419
  *             data += stride
  *     else:
  *         for i in range(extent):             # <<<<<<<<<<<<<<
@@ -20482,7 +20489,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
     for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
       __pyx_v_i = __pyx_t_4;
 
-      /* "View.MemoryView":1421
+      /* "View.MemoryView":1420
  *     else:
  *         for i in range(extent):
  *             _slice_assign_scalar(data, shape + 1, strides + 1,             # <<<<<<<<<<<<<<
@@ -20491,7 +20498,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
  */
       __pyx_memoryview__slice_assign_scalar(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize, __pyx_v_item);
 
-      /* "View.MemoryView":1423
+      /* "View.MemoryView":1422
  *             _slice_assign_scalar(data, shape + 1, strides + 1,
  *                                 ndim - 1, itemsize, item)
  *             data += stride             # <<<<<<<<<<<<<<
@@ -20503,7 +20510,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
   }
   __pyx_L3:;
 
-  /* "View.MemoryView":1408
+  /* "View.MemoryView":1407
  * 
  * @cname('__pyx_memoryview__slice_assign_scalar')
  * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
@@ -21028,7 +21035,12 @@ static PyTypeObject __pyx_type___pyx_array = {
   sizeof(struct __pyx_array_obj), /*tp_basicsize*/
   0, /*tp_itemsize*/
   __pyx_tp_dealloc_array, /*tp_dealloc*/
+  #if PY_VERSION_HEX < 0x030800b4
   0, /*tp_print*/
+  #endif
+  #if PY_VERSION_HEX >= 0x030800b4
+  0, /*tp_vectorcall_offset*/
+  #endif
   0, /*tp_getattr*/
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
@@ -21081,6 +21093,9 @@ static PyTypeObject __pyx_type___pyx_array = {
   #if PY_VERSION_HEX >= 0x030800b1
   0, /*tp_vectorcall*/
   #endif
+  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+  0, /*tp_print*/
+  #endif
 };
 
 static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
@@ -21139,7 +21154,12 @@ static PyTypeObject __pyx_type___pyx_MemviewEnum = {
   sizeof(struct __pyx_MemviewEnum_obj), /*tp_basicsize*/
   0, /*tp_itemsize*/
   __pyx_tp_dealloc_Enum, /*tp_dealloc*/
+  #if PY_VERSION_HEX < 0x030800b4
   0, /*tp_print*/
+  #endif
+  #if PY_VERSION_HEX >= 0x030800b4
+  0, /*tp_vectorcall_offset*/
+  #endif
   0, /*tp_getattr*/
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
@@ -21192,6 +21212,9 @@ static PyTypeObject __pyx_type___pyx_MemviewEnum = {
   #if PY_VERSION_HEX >= 0x030800b1
   0, /*tp_vectorcall*/
   #endif
+  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+  0, /*tp_print*/
+  #endif
 };
 static struct __pyx_vtabstruct_memoryview __pyx_vtable_memoryview;
 
@@ -21392,7 +21415,12 @@ static PyTypeObject __pyx_type___pyx_memoryview = {
   sizeof(struct __pyx_memoryview_obj), /*tp_basicsize*/
   0, /*tp_itemsize*/
   __pyx_tp_dealloc_memoryview, /*tp_dealloc*/
+  #if PY_VERSION_HEX < 0x030800b4
   0, /*tp_print*/
+  #endif
+  #if PY_VERSION_HEX >= 0x030800b4
+  0, /*tp_vectorcall_offset*/
+  #endif
   0, /*tp_getattr*/
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
@@ -21445,6 +21473,9 @@ static PyTypeObject __pyx_type___pyx_memoryview = {
   #if PY_VERSION_HEX >= 0x030800b1
   0, /*tp_vectorcall*/
   #endif
+  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+  0, /*tp_print*/
+  #endif
 };
 static struct __pyx_vtabstruct__memoryviewslice __pyx_vtable__memoryviewslice;
 
@@ -21522,7 +21553,12 @@ static PyTypeObject __pyx_type___pyx_memoryviewslice = {
   sizeof(struct __pyx_memoryviewslice_obj), /*tp_basicsize*/
   0, /*tp_itemsize*/
   __pyx_tp_dealloc__memoryviewslice, /*tp_dealloc*/
+  #if PY_VERSION_HEX < 0x030800b4
   0, /*tp_print*/
+  #endif
+  #if PY_VERSION_HEX >= 0x030800b4
+  0, /*tp_vectorcall_offset*/
+  #endif
   0, /*tp_getattr*/
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
@@ -21583,6 +21619,9 @@ static PyTypeObject __pyx_type___pyx_memoryviewslice = {
   #if PY_VERSION_HEX >= 0x030800b1
   0, /*tp_vectorcall*/
   #endif
+  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+  0, /*tp_print*/
+  #endif
 };
 
 static PyMethodDef __pyx_methods[] = {
@@ -24564,48 +24603,6 @@ static CYTHON_INLINE long __Pyx_div_long(long a, long b) {
     return q;
 }
 
-/* WriteUnraisableException */
-static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
-                                  CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename,
-                                  int full_traceback, CYTHON_UNUSED int nogil) {
-    PyObject *old_exc, *old_val, *old_tb;
-    PyObject *ctx;
-    __Pyx_PyThreadState_declare
-#ifdef WITH_THREAD
-    PyGILState_STATE state;
-    if (nogil)
-        state = PyGILState_Ensure();
-#ifdef _MSC_VER
-    else state = (PyGILState_STATE)-1;
-#endif
-#endif
-    __Pyx_PyThreadState_assign
-    __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
-    if (full_traceback) {
-        Py_XINCREF(old_exc);
-        Py_XINCREF(old_val);
-        Py_XINCREF(old_tb);
-        __Pyx_ErrRestore(old_exc, old_val, old_tb);
-        PyErr_PrintEx(1);
-    }
-    #if PY_MAJOR_VERSION < 3
-    ctx = PyString_FromString(name);
-    #else
-    ctx = PyUnicode_FromString(name);
-    #endif
-    __Pyx_ErrRestore(old_exc, old_val, old_tb);
-    if (!ctx) {
-        PyErr_WriteUnraisable(Py_None);
-    } else {
-        PyErr_WriteUnraisable(ctx);
-        Py_DECREF(ctx);
-    }
-#ifdef WITH_THREAD
-    if (nogil)
-        PyGILState_Release(state);
-#endif
-}
-
 /* ImportFrom */
 static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
     PyObject* value = __Pyx_PyObject_GetAttrStr(module, name);
@@ -24733,43 +24730,43 @@ static int __Pyx_setup_reduce(PyObject* type_obj) {
     PyObject *setstate = NULL;
     PyObject *setstate_cython = NULL;
 #if CYTHON_USE_PYTYPE_LOOKUP
-    if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto GOOD;
+    if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD;
 #else
-    if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto GOOD;
+    if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD;
 #endif
 #if CYTHON_USE_PYTYPE_LOOKUP
-    object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto BAD;
+    object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD;
 #else
-    object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto BAD;
+    object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD;
 #endif
-    reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto BAD;
+    reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto __PYX_BAD;
     if (reduce_ex == object_reduce_ex) {
 #if CYTHON_USE_PYTYPE_LOOKUP
-        object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto BAD;
+        object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD;
 #else
-        object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto BAD;
+        object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD;
 #endif
-        reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto BAD;
+        reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto __PYX_BAD;
         if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) {
-            reduce_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_cython); if (unlikely(!reduce_cython)) goto BAD;
-            ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto BAD;
-            ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto BAD;
+            reduce_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_cython); if (unlikely(!reduce_cython)) goto __PYX_BAD;
+            ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
+            ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
             setstate = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate);
             if (!setstate) PyErr_Clear();
             if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) {
-                setstate_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate_cython); if (unlikely(!setstate_cython)) goto BAD;
-                ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto BAD;
-                ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto BAD;
+                setstate_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate_cython); if (unlikely(!setstate_cython)) goto __PYX_BAD;
+                ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
+                ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
             }
             PyType_Modified((PyTypeObject*)type_obj);
         }
     }
-    goto GOOD;
-BAD:
+    goto __PYX_GOOD;
+__PYX_BAD:
     if (!PyErr_Occurred())
         PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name);
     ret = -1;
-GOOD:
+__PYX_GOOD:
 #if !CYTHON_USE_PYTYPE_LOOKUP
     Py_XDECREF(object_reduce);
     Py_XDECREF(object_reduce_ex);
@@ -24784,7 +24781,7 @@ static int __Pyx_setup_reduce(PyObject* type_obj) {
 
 /* CLineInTraceback */
 #ifndef CYTHON_CLINE_IN_TRACEBACK
-static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) {
+static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) {
     PyObject *use_cline;
     PyObject *ptype, *pvalue, *ptraceback;
 #if CYTHON_COMPILING_IN_CPYTHON
@@ -24888,7 +24885,7 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
     if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
         int new_max = __pyx_code_cache.max_count + 64;
         entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
-            __pyx_code_cache.entries, (size_t)new_max*sizeof(__Pyx_CodeObjectCacheEntry));
+            __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry));
         if (unlikely(!entries)) {
             return;
         }
@@ -25149,6 +25146,7 @@ static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) {
 }
 static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) {
   switch (ch) {
+    case '?': return "'bool'";
     case 'c': return "'char'";
     case 'b': return "'signed char'";
     case 'B': return "'unsigned char'";
@@ -25191,7 +25189,7 @@ static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) {
 }
 static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) {
   switch (ch) {
-    case 'c': case 'b': case 'B': case 's': case 'p': return 1;
+    case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
     case 'h': case 'H': return sizeof(short);
     case 'i': case 'I': return sizeof(int);
     case 'l': case 'L': return sizeof(long);
@@ -25275,7 +25273,7 @@ static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) {
     case 'b': case 'h': case 'i':
     case 'l': case 'q': case 's': case 'p':
         return 'I';
-    case 'B': case 'H': case 'I': case 'L': case 'Q':
+    case '?': case 'B': case 'H': case 'I': case 'L': case 'Q':
         return 'U';
     case 'f': case 'd': case 'g':
         return (is_complex ? 'C' : 'R');
@@ -25554,7 +25552,7 @@ static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const cha
           return NULL;
         }
         CYTHON_FALLTHROUGH;
-      case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I':
+      case '?': case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I':
       case 'l': case 'L': case 'q': case 'Q':
       case 'f': case 'd': case 'g':
       case 'O': case 'p':
diff --git a/pyBedGraph/util.c b/pyBedGraph/util.c
index 72d3e55..465df31 100644
--- a/pyBedGraph/util.c
+++ b/pyBedGraph/util.c
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.29.13 */
+/* Generated by Cython 0.29.16 */
 
 /* BEGIN: Cython Metadata
 {
@@ -19,8 +19,8 @@ END: Cython Metadata */
 #elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)
     #error Cython requires Python 2.6+ or Python 3.3+.
 #else
-#define CYTHON_ABI "0_29_13"
-#define CYTHON_HEX_VERSION 0x001D0DF0
+#define CYTHON_ABI "0_29_16"
+#define CYTHON_HEX_VERSION 0x001D10F0
 #define CYTHON_FUTURE_DIVISION 1
 #include <stddef.h>
 #ifndef offsetof
@@ -496,8 +496,10 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
   #define PyString_Type                PyUnicode_Type
   #define PyString_Check               PyUnicode_Check
   #define PyString_CheckExact          PyUnicode_CheckExact
+#ifndef PyObject_Unicode
   #define PyObject_Unicode             PyObject_Str
 #endif
+#endif
 #if PY_MAJOR_VERSION >= 3
   #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj)
   #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj)
@@ -1526,11 +1528,6 @@ static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
 /* None.proto */
 static CYTHON_INLINE long __Pyx_div_long(long, long);
 
-/* WriteUnraisableException.proto */
-static void __Pyx_WriteUnraisable(const char *name, int clineno,
-                                  int lineno, const char *filename,
-                                  int full_traceback, int nogil);
-
 /* ImportFrom.proto */
 static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
 
@@ -7044,10 +7041,12 @@ static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryvi
   __Pyx_memviewslice __pyx_v_src_slice;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_t_3;
+  __Pyx_memviewslice *__pyx_t_1;
+  __Pyx_memviewslice *__pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
+  int __pyx_t_5;
+  int __pyx_t_6;
   __Pyx_RefNannySetupContext("setitem_slice_assignment", 0);
 
   /* "View.MemoryView":445
@@ -7058,6 +7057,7 @@ static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryvi
  *                                  src.ndim, dst.ndim, self.dtype_is_object)
  */
   if (!(likely(((__pyx_v_src) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_src, __pyx_memoryview_type))))) __PYX_ERR(1, 445, __pyx_L1_error)
+  __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_src), (&__pyx_v_src_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 445, __pyx_L1_error)
 
   /* "View.MemoryView":446
  * 
@@ -7067,6 +7067,7 @@ static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryvi
  * 
  */
   if (!(likely(((__pyx_v_dst) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dst, __pyx_memoryview_type))))) __PYX_ERR(1, 446, __pyx_L1_error)
+  __pyx_t_2 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_dst), (&__pyx_v_dst_slice)); if (unlikely(__pyx_t_2 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 446, __pyx_L1_error)
 
   /* "View.MemoryView":447
  *         memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0],
@@ -7075,14 +7076,14 @@ static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryvi
  * 
  *     cdef setitem_slice_assign_scalar(self, memoryview dst, value):
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_src, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 447, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 447, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dst, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 447, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 447, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_src, __pyx_n_s_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 447, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 447, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_dst, __pyx_n_s_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 447, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 447, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "View.MemoryView":445
  *         cdef __Pyx_memviewslice src_slice
@@ -7091,7 +7092,7 @@ static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryvi
  *                                  get_slice_from_memview(dst, &dst_slice)[0],
  *                                  src.ndim, dst.ndim, self.dtype_is_object)
  */
-  __pyx_t_4 = __pyx_memoryview_copy_contents((__pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_src), (&__pyx_v_src_slice))[0]), (__pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_dst), (&__pyx_v_dst_slice))[0]), __pyx_t_2, __pyx_t_3, __pyx_v_self->dtype_is_object); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 445, __pyx_L1_error)
+  __pyx_t_6 = __pyx_memoryview_copy_contents((__pyx_t_1[0]), (__pyx_t_2[0]), __pyx_t_4, __pyx_t_5, __pyx_v_self->dtype_is_object); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 445, __pyx_L1_error)
 
   /* "View.MemoryView":441
  *         return obj
@@ -7105,7 +7106,7 @@ static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryvi
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assignment", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
@@ -7130,17 +7131,18 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
   __Pyx_memviewslice __pyx_v_tmp_slice;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_t_3;
+  __Pyx_memviewslice *__pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  char const *__pyx_t_5;
-  PyObject *__pyx_t_6 = NULL;
+  int __pyx_t_5;
+  char const *__pyx_t_6;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   PyObject *__pyx_t_11 = NULL;
+  PyObject *__pyx_t_12 = NULL;
   __Pyx_RefNannySetupContext("setitem_slice_assign_scalar", 0);
 
   /* "View.MemoryView":451
@@ -7159,7 +7161,8 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
  * 
  *         if <size_t>self.view.itemsize > sizeof(array):
  */
-  __pyx_v_dst_slice = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_dst, (&__pyx_v_tmp_slice));
+  __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_dst, (&__pyx_v_tmp_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 456, __pyx_L1_error)
+  __pyx_v_dst_slice = __pyx_t_1;
 
   /* "View.MemoryView":458
  *         dst_slice = get_slice_from_memview(dst, &tmp_slice)
@@ -7168,8 +7171,8 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
  *             tmp = PyMem_Malloc(self.view.itemsize)
  *             if tmp == NULL:
  */
-  __pyx_t_1 = ((((size_t)__pyx_v_self->view.itemsize) > (sizeof(__pyx_v_array))) != 0);
-  if (__pyx_t_1) {
+  __pyx_t_2 = ((((size_t)__pyx_v_self->view.itemsize) > (sizeof(__pyx_v_array))) != 0);
+  if (__pyx_t_2) {
 
     /* "View.MemoryView":459
  * 
@@ -7187,8 +7190,8 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
  *                 raise MemoryError
  *             item = tmp
  */
-    __pyx_t_1 = ((__pyx_v_tmp == NULL) != 0);
-    if (unlikely(__pyx_t_1)) {
+    __pyx_t_2 = ((__pyx_v_tmp == NULL) != 0);
+    if (unlikely(__pyx_t_2)) {
 
       /* "View.MemoryView":461
  *             tmp = PyMem_Malloc(self.view.itemsize)
@@ -7255,8 +7258,8 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
  *                 (<PyObject **> item)[0] = <PyObject *> value
  *             else:
  */
-    __pyx_t_1 = (__pyx_v_self->dtype_is_object != 0);
-    if (__pyx_t_1) {
+    __pyx_t_2 = (__pyx_v_self->dtype_is_object != 0);
+    if (__pyx_t_2) {
 
       /* "View.MemoryView":468
  *         try:
@@ -7285,9 +7288,9 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
  * 
  */
     /*else*/ {
-      __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, ((char *)__pyx_v_item), __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 470, __pyx_L6_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, ((char *)__pyx_v_item), __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 470, __pyx_L6_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     }
     __pyx_L8:;
 
@@ -7298,8 +7301,8 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
  *                 assert_direct_dimensions(self.view.suboffsets, self.view.ndim)
  *             slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize,
  */
-    __pyx_t_1 = ((__pyx_v_self->view.suboffsets != NULL) != 0);
-    if (__pyx_t_1) {
+    __pyx_t_2 = ((__pyx_v_self->view.suboffsets != NULL) != 0);
+    if (__pyx_t_2) {
 
       /* "View.MemoryView":475
  * 
@@ -7308,9 +7311,9 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
  *             slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize,
  *                                 item, self.dtype_is_object)
  */
-      __pyx_t_2 = assert_direct_dimensions(__pyx_v_self->view.suboffsets, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 475, __pyx_L6_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __pyx_t_3 = assert_direct_dimensions(__pyx_v_self->view.suboffsets, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 475, __pyx_L6_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
       /* "View.MemoryView":474
  * 
@@ -7347,32 +7350,32 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
     /*exception exit:*/{
       __Pyx_PyThreadState_declare
       __Pyx_PyThreadState_assign
-      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
-      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
-      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
-      __Pyx_XGOTREF(__pyx_t_6);
+      __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
+      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
       __Pyx_XGOTREF(__pyx_t_7);
       __Pyx_XGOTREF(__pyx_t_8);
       __Pyx_XGOTREF(__pyx_t_9);
       __Pyx_XGOTREF(__pyx_t_10);
       __Pyx_XGOTREF(__pyx_t_11);
-      __pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
+      __Pyx_XGOTREF(__pyx_t_12);
+      __pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
       {
         PyMem_Free(__pyx_v_tmp);
       }
       if (PY_MAJOR_VERSION >= 3) {
-        __Pyx_XGIVEREF(__pyx_t_9);
         __Pyx_XGIVEREF(__pyx_t_10);
         __Pyx_XGIVEREF(__pyx_t_11);
-        __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
+        __Pyx_XGIVEREF(__pyx_t_12);
+        __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
       }
-      __Pyx_XGIVEREF(__pyx_t_6);
       __Pyx_XGIVEREF(__pyx_t_7);
       __Pyx_XGIVEREF(__pyx_t_8);
-      __Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
-      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
-      __pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
+      __Pyx_XGIVEREF(__pyx_t_9);
+      __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
+      __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
+      __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
       goto __pyx_L1_error;
     }
     __pyx_L7:;
@@ -7390,7 +7393,7 @@ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memor
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assign_scalar", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
@@ -9357,7 +9360,8 @@ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16
   __Pyx_memviewslice __pyx_v_tmp;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  __Pyx_memviewslice *__pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("is_c_contig", 0);
 
   /* "View.MemoryView":622
@@ -9367,7 +9371,8 @@ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16
  *         return slice_is_contig(mslice[0], 'C', self.view.ndim)
  * 
  */
-  __pyx_v_mslice = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp));
+  __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 622, __pyx_L1_error)
+  __pyx_v_mslice = __pyx_t_1;
 
   /* "View.MemoryView":623
  *         cdef __Pyx_memviewslice tmp
@@ -9377,10 +9382,10 @@ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16
  *     def is_f_contig(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'C', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 623, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'C', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 623, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
   /* "View.MemoryView":619
@@ -9393,7 +9398,7 @@ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
   __Pyx_AddTraceback("View.MemoryView.memoryview.is_c_contig", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -9428,7 +9433,8 @@ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18
   __Pyx_memviewslice __pyx_v_tmp;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  __Pyx_memviewslice *__pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("is_f_contig", 0);
 
   /* "View.MemoryView":628
@@ -9438,7 +9444,8 @@ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18
  *         return slice_is_contig(mslice[0], 'F', self.view.ndim)
  * 
  */
-  __pyx_v_mslice = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp));
+  __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 628, __pyx_L1_error)
+  __pyx_v_mslice = __pyx_t_1;
 
   /* "View.MemoryView":629
  *         cdef __Pyx_memviewslice tmp
@@ -9448,10 +9455,10 @@ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18
  *     def copy(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'F', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 629, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'F', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 629, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
   /* "View.MemoryView":625
@@ -9464,7 +9471,7 @@ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
   __Pyx_AddTraceback("View.MemoryView.memoryview.is_f_contig", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -13018,7 +13025,7 @@ static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice __pyx_v_memviewsl
  * 
  * @cname('__pyx_memoryview_get_slice_from_memoryview')
  * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview,             # <<<<<<<<<<<<<<
- *                                                    __Pyx_memviewslice *mslice):
+ *                                                    __Pyx_memviewslice *mslice) except NULL:
  *     cdef _memoryviewslice obj
  */
 
@@ -13032,7 +13039,7 @@ static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __p
   __Pyx_RefNannySetupContext("get_slice_from_memview", 0);
 
   /* "View.MemoryView":1055
- *                                                    __Pyx_memviewslice *mslice):
+ *                                                    __Pyx_memviewslice *mslice) except NULL:
  *     cdef _memoryviewslice obj
  *     if isinstance(memview, _memoryviewslice):             # <<<<<<<<<<<<<<
  *         obj = memview
@@ -13066,7 +13073,7 @@ static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __p
     goto __pyx_L0;
 
     /* "View.MemoryView":1055
- *                                                    __Pyx_memviewslice *mslice):
+ *                                                    __Pyx_memviewslice *mslice) except NULL:
  *     cdef _memoryviewslice obj
  *     if isinstance(memview, _memoryviewslice):             # <<<<<<<<<<<<<<
  *         obj = memview
@@ -13099,15 +13106,15 @@ static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __p
  * 
  * @cname('__pyx_memoryview_get_slice_from_memoryview')
  * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview,             # <<<<<<<<<<<<<<
- *                                                    __Pyx_memviewslice *mslice):
+ *                                                    __Pyx_memviewslice *mslice) except NULL:
  *     cdef _memoryviewslice obj
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_WriteUnraisable("View.MemoryView.get_slice_from_memview", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
-  __pyx_r = 0;
+  __Pyx_AddTraceback("View.MemoryView.get_slice_from_memview", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XDECREF((PyObject *)__pyx_v_obj);
   __Pyx_RefNannyFinishContext();
@@ -13948,52 +13955,52 @@ static void copy_strided_to_strided(__Pyx_memviewslice *__pyx_v_src, __Pyx_memvi
  * @cname('__pyx_memoryview_slice_get_size')
  * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil:             # <<<<<<<<<<<<<<
  *     "Return the size of the memory occupied by the slice in number of bytes"
- *     cdef int i
+ *     cdef Py_ssize_t shape, size = src.memview.view.itemsize
  */
 
 static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__pyx_v_src, int __pyx_v_ndim) {
-  int __pyx_v_i;
+  Py_ssize_t __pyx_v_shape;
   Py_ssize_t __pyx_v_size;
   Py_ssize_t __pyx_r;
   Py_ssize_t __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_t_3;
-  int __pyx_t_4;
+  Py_ssize_t *__pyx_t_2;
+  Py_ssize_t *__pyx_t_3;
+  Py_ssize_t *__pyx_t_4;
 
-  /* "View.MemoryView":1180
+  /* "View.MemoryView":1179
+ * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil:
  *     "Return the size of the memory occupied by the slice in number of bytes"
- *     cdef int i
- *     cdef Py_ssize_t size = src.memview.view.itemsize             # <<<<<<<<<<<<<<
+ *     cdef Py_ssize_t shape, size = src.memview.view.itemsize             # <<<<<<<<<<<<<<
  * 
- *     for i in range(ndim):
+ *     for shape in src.shape[:ndim]:
  */
   __pyx_t_1 = __pyx_v_src->memview->view.itemsize;
   __pyx_v_size = __pyx_t_1;
 
-  /* "View.MemoryView":1182
- *     cdef Py_ssize_t size = src.memview.view.itemsize
+  /* "View.MemoryView":1181
+ *     cdef Py_ssize_t shape, size = src.memview.view.itemsize
  * 
- *     for i in range(ndim):             # <<<<<<<<<<<<<<
- *         size *= src.shape[i]
+ *     for shape in src.shape[:ndim]:             # <<<<<<<<<<<<<<
+ *         size *= shape
  * 
  */
-  __pyx_t_2 = __pyx_v_ndim;
-  __pyx_t_3 = __pyx_t_2;
-  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
-    __pyx_v_i = __pyx_t_4;
+  __pyx_t_3 = (__pyx_v_src->shape + __pyx_v_ndim);
+  for (__pyx_t_4 = __pyx_v_src->shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) {
+    __pyx_t_2 = __pyx_t_4;
+    __pyx_v_shape = (__pyx_t_2[0]);
 
-    /* "View.MemoryView":1183
+    /* "View.MemoryView":1182
  * 
- *     for i in range(ndim):
- *         size *= src.shape[i]             # <<<<<<<<<<<<<<
+ *     for shape in src.shape[:ndim]:
+ *         size *= shape             # <<<<<<<<<<<<<<
  * 
  *     return size
  */
-    __pyx_v_size = (__pyx_v_size * (__pyx_v_src->shape[__pyx_v_i]));
+    __pyx_v_size = (__pyx_v_size * __pyx_v_shape);
   }
 
-  /* "View.MemoryView":1185
- *         size *= src.shape[i]
+  /* "View.MemoryView":1184
+ *         size *= shape
  * 
  *     return size             # <<<<<<<<<<<<<<
  * 
@@ -14007,7 +14014,7 @@ static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__pyx_v_sr
  * @cname('__pyx_memoryview_slice_get_size')
  * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil:             # <<<<<<<<<<<<<<
  *     "Return the size of the memory occupied by the slice in number of bytes"
- *     cdef int i
+ *     cdef Py_ssize_t shape, size = src.memview.view.itemsize
  */
 
   /* function exit code */
@@ -14015,7 +14022,7 @@ static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__pyx_v_sr
   return __pyx_r;
 }
 
-/* "View.MemoryView":1188
+/* "View.MemoryView":1187
  * 
  * @cname('__pyx_fill_contig_strides_array')
  * cdef Py_ssize_t fill_contig_strides_array(             # <<<<<<<<<<<<<<
@@ -14031,7 +14038,7 @@ static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_
   int __pyx_t_3;
   int __pyx_t_4;
 
-  /* "View.MemoryView":1197
+  /* "View.MemoryView":1196
  *     cdef int idx
  * 
  *     if order == 'F':             # <<<<<<<<<<<<<<
@@ -14041,38 +14048,38 @@ static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_
   __pyx_t_1 = ((__pyx_v_order == 'F') != 0);
   if (__pyx_t_1) {
 
-    /* "View.MemoryView":1198
+    /* "View.MemoryView":1197
  * 
  *     if order == 'F':
  *         for idx in range(ndim):             # <<<<<<<<<<<<<<
  *             strides[idx] = stride
- *             stride = stride * shape[idx]
+ *             stride *= shape[idx]
  */
     __pyx_t_2 = __pyx_v_ndim;
     __pyx_t_3 = __pyx_t_2;
     for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
       __pyx_v_idx = __pyx_t_4;
 
-      /* "View.MemoryView":1199
+      /* "View.MemoryView":1198
  *     if order == 'F':
  *         for idx in range(ndim):
  *             strides[idx] = stride             # <<<<<<<<<<<<<<
- *             stride = stride * shape[idx]
+ *             stride *= shape[idx]
  *     else:
  */
       (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride;
 
-      /* "View.MemoryView":1200
+      /* "View.MemoryView":1199
  *         for idx in range(ndim):
  *             strides[idx] = stride
- *             stride = stride * shape[idx]             # <<<<<<<<<<<<<<
+ *             stride *= shape[idx]             # <<<<<<<<<<<<<<
  *     else:
  *         for idx in range(ndim - 1, -1, -1):
  */
       __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx]));
     }
 
-    /* "View.MemoryView":1197
+    /* "View.MemoryView":1196
  *     cdef int idx
  * 
  *     if order == 'F':             # <<<<<<<<<<<<<<
@@ -14082,30 +14089,30 @@ static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_
     goto __pyx_L3;
   }
 
-  /* "View.MemoryView":1202
- *             stride = stride * shape[idx]
+  /* "View.MemoryView":1201
+ *             stride *= shape[idx]
  *     else:
  *         for idx in range(ndim - 1, -1, -1):             # <<<<<<<<<<<<<<
  *             strides[idx] = stride
- *             stride = stride * shape[idx]
+ *             stride *= shape[idx]
  */
   /*else*/ {
     for (__pyx_t_2 = (__pyx_v_ndim - 1); __pyx_t_2 > -1; __pyx_t_2-=1) {
       __pyx_v_idx = __pyx_t_2;
 
-      /* "View.MemoryView":1203
+      /* "View.MemoryView":1202
  *     else:
  *         for idx in range(ndim - 1, -1, -1):
  *             strides[idx] = stride             # <<<<<<<<<<<<<<
- *             stride = stride * shape[idx]
+ *             stride *= shape[idx]
  * 
  */
       (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride;
 
-      /* "View.MemoryView":1204
+      /* "View.MemoryView":1203
  *         for idx in range(ndim - 1, -1, -1):
  *             strides[idx] = stride
- *             stride = stride * shape[idx]             # <<<<<<<<<<<<<<
+ *             stride *= shape[idx]             # <<<<<<<<<<<<<<
  * 
  *     return stride
  */
@@ -14114,8 +14121,8 @@ static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_
   }
   __pyx_L3:;
 
-  /* "View.MemoryView":1206
- *             stride = stride * shape[idx]
+  /* "View.MemoryView":1205
+ *             stride *= shape[idx]
  * 
  *     return stride             # <<<<<<<<<<<<<<
  * 
@@ -14124,7 +14131,7 @@ static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_
   __pyx_r = __pyx_v_stride;
   goto __pyx_L0;
 
-  /* "View.MemoryView":1188
+  /* "View.MemoryView":1187
  * 
  * @cname('__pyx_fill_contig_strides_array')
  * cdef Py_ssize_t fill_contig_strides_array(             # <<<<<<<<<<<<<<
@@ -14137,7 +14144,7 @@ static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_
   return __pyx_r;
 }
 
-/* "View.MemoryView":1209
+/* "View.MemoryView":1208
  * 
  * @cname('__pyx_memoryview_copy_data_to_temp')
  * cdef void *copy_data_to_temp(__Pyx_memviewslice *src,             # <<<<<<<<<<<<<<
@@ -14158,7 +14165,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   int __pyx_t_5;
   int __pyx_t_6;
 
-  /* "View.MemoryView":1220
+  /* "View.MemoryView":1219
  *     cdef void *result
  * 
  *     cdef size_t itemsize = src.memview.view.itemsize             # <<<<<<<<<<<<<<
@@ -14168,7 +14175,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   __pyx_t_1 = __pyx_v_src->memview->view.itemsize;
   __pyx_v_itemsize = __pyx_t_1;
 
-  /* "View.MemoryView":1221
+  /* "View.MemoryView":1220
  * 
  *     cdef size_t itemsize = src.memview.view.itemsize
  *     cdef size_t size = slice_get_size(src, ndim)             # <<<<<<<<<<<<<<
@@ -14177,7 +14184,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
  */
   __pyx_v_size = __pyx_memoryview_slice_get_size(__pyx_v_src, __pyx_v_ndim);
 
-  /* "View.MemoryView":1223
+  /* "View.MemoryView":1222
  *     cdef size_t size = slice_get_size(src, ndim)
  * 
  *     result = malloc(size)             # <<<<<<<<<<<<<<
@@ -14186,7 +14193,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
  */
   __pyx_v_result = malloc(__pyx_v_size);
 
-  /* "View.MemoryView":1224
+  /* "View.MemoryView":1223
  * 
  *     result = malloc(size)
  *     if not result:             # <<<<<<<<<<<<<<
@@ -14196,16 +14203,16 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   __pyx_t_2 = ((!(__pyx_v_result != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "View.MemoryView":1225
+    /* "View.MemoryView":1224
  *     result = malloc(size)
  *     if not result:
  *         _err(MemoryError, NULL)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-    __pyx_t_3 = __pyx_memoryview_err(__pyx_builtin_MemoryError, NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1225, __pyx_L1_error)
+    __pyx_t_3 = __pyx_memoryview_err(__pyx_builtin_MemoryError, NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1224, __pyx_L1_error)
 
-    /* "View.MemoryView":1224
+    /* "View.MemoryView":1223
  * 
  *     result = malloc(size)
  *     if not result:             # <<<<<<<<<<<<<<
@@ -14214,7 +14221,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
  */
   }
 
-  /* "View.MemoryView":1228
+  /* "View.MemoryView":1227
  * 
  * 
  *     tmpslice.data = <char *> result             # <<<<<<<<<<<<<<
@@ -14223,7 +14230,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
  */
   __pyx_v_tmpslice->data = ((char *)__pyx_v_result);
 
-  /* "View.MemoryView":1229
+  /* "View.MemoryView":1228
  * 
  *     tmpslice.data = <char *> result
  *     tmpslice.memview = src.memview             # <<<<<<<<<<<<<<
@@ -14233,7 +14240,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   __pyx_t_4 = __pyx_v_src->memview;
   __pyx_v_tmpslice->memview = __pyx_t_4;
 
-  /* "View.MemoryView":1230
+  /* "View.MemoryView":1229
  *     tmpslice.data = <char *> result
  *     tmpslice.memview = src.memview
  *     for i in range(ndim):             # <<<<<<<<<<<<<<
@@ -14245,7 +14252,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
     __pyx_v_i = __pyx_t_6;
 
-    /* "View.MemoryView":1231
+    /* "View.MemoryView":1230
  *     tmpslice.memview = src.memview
  *     for i in range(ndim):
  *         tmpslice.shape[i] = src.shape[i]             # <<<<<<<<<<<<<<
@@ -14254,7 +14261,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
  */
     (__pyx_v_tmpslice->shape[__pyx_v_i]) = (__pyx_v_src->shape[__pyx_v_i]);
 
-    /* "View.MemoryView":1232
+    /* "View.MemoryView":1231
  *     for i in range(ndim):
  *         tmpslice.shape[i] = src.shape[i]
  *         tmpslice.suboffsets[i] = -1             # <<<<<<<<<<<<<<
@@ -14264,7 +14271,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
     (__pyx_v_tmpslice->suboffsets[__pyx_v_i]) = -1L;
   }
 
-  /* "View.MemoryView":1234
+  /* "View.MemoryView":1233
  *         tmpslice.suboffsets[i] = -1
  * 
  *     fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize,             # <<<<<<<<<<<<<<
@@ -14273,7 +14280,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
  */
   (void)(__pyx_fill_contig_strides_array((&(__pyx_v_tmpslice->shape[0])), (&(__pyx_v_tmpslice->strides[0])), __pyx_v_itemsize, __pyx_v_ndim, __pyx_v_order));
 
-  /* "View.MemoryView":1238
+  /* "View.MemoryView":1237
  * 
  * 
  *     for i in range(ndim):             # <<<<<<<<<<<<<<
@@ -14285,7 +14292,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
     __pyx_v_i = __pyx_t_6;
 
-    /* "View.MemoryView":1239
+    /* "View.MemoryView":1238
  * 
  *     for i in range(ndim):
  *         if tmpslice.shape[i] == 1:             # <<<<<<<<<<<<<<
@@ -14295,7 +14302,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
     __pyx_t_2 = (((__pyx_v_tmpslice->shape[__pyx_v_i]) == 1) != 0);
     if (__pyx_t_2) {
 
-      /* "View.MemoryView":1240
+      /* "View.MemoryView":1239
  *     for i in range(ndim):
  *         if tmpslice.shape[i] == 1:
  *             tmpslice.strides[i] = 0             # <<<<<<<<<<<<<<
@@ -14304,7 +14311,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
  */
       (__pyx_v_tmpslice->strides[__pyx_v_i]) = 0;
 
-      /* "View.MemoryView":1239
+      /* "View.MemoryView":1238
  * 
  *     for i in range(ndim):
  *         if tmpslice.shape[i] == 1:             # <<<<<<<<<<<<<<
@@ -14314,7 +14321,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
     }
   }
 
-  /* "View.MemoryView":1242
+  /* "View.MemoryView":1241
  *             tmpslice.strides[i] = 0
  * 
  *     if slice_is_contig(src[0], order, ndim):             # <<<<<<<<<<<<<<
@@ -14324,7 +14331,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   __pyx_t_2 = (__pyx_memviewslice_is_contig((__pyx_v_src[0]), __pyx_v_order, __pyx_v_ndim) != 0);
   if (__pyx_t_2) {
 
-    /* "View.MemoryView":1243
+    /* "View.MemoryView":1242
  * 
  *     if slice_is_contig(src[0], order, ndim):
  *         memcpy(result, src.data, size)             # <<<<<<<<<<<<<<
@@ -14333,7 +14340,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
  */
     (void)(memcpy(__pyx_v_result, __pyx_v_src->data, __pyx_v_size));
 
-    /* "View.MemoryView":1242
+    /* "View.MemoryView":1241
  *             tmpslice.strides[i] = 0
  * 
  *     if slice_is_contig(src[0], order, ndim):             # <<<<<<<<<<<<<<
@@ -14343,7 +14350,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
     goto __pyx_L9;
   }
 
-  /* "View.MemoryView":1245
+  /* "View.MemoryView":1244
  *         memcpy(result, src.data, size)
  *     else:
  *         copy_strided_to_strided(src, tmpslice, ndim, itemsize)             # <<<<<<<<<<<<<<
@@ -14355,7 +14362,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   }
   __pyx_L9:;
 
-  /* "View.MemoryView":1247
+  /* "View.MemoryView":1246
  *         copy_strided_to_strided(src, tmpslice, ndim, itemsize)
  * 
  *     return result             # <<<<<<<<<<<<<<
@@ -14365,7 +14372,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "View.MemoryView":1209
+  /* "View.MemoryView":1208
  * 
  * @cname('__pyx_memoryview_copy_data_to_temp')
  * cdef void *copy_data_to_temp(__Pyx_memviewslice *src,             # <<<<<<<<<<<<<<
@@ -14389,7 +14396,7 @@ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src,
   return __pyx_r;
 }
 
-/* "View.MemoryView":1252
+/* "View.MemoryView":1251
  * 
  * @cname('__pyx_memoryview_err_extents')
  * cdef int _err_extents(int i, Py_ssize_t extent1,             # <<<<<<<<<<<<<<
@@ -14409,20 +14416,20 @@ static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_v_extent
   #endif
   __Pyx_RefNannySetupContext("_err_extents", 0);
 
-  /* "View.MemoryView":1255
+  /* "View.MemoryView":1254
  *                              Py_ssize_t extent2) except -1 with gil:
  *     raise ValueError("got differing extents in dimension %d (got %d and %d)" %
  *                                                         (i, extent1, extent2))             # <<<<<<<<<<<<<<
  * 
  * @cname('__pyx_memoryview_err_dim')
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1255, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1254, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_extent1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1255, __pyx_L1_error)
+  __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_extent1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1254, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_extent2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1255, __pyx_L1_error)
+  __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_extent2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1254, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1255, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1254, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
@@ -14434,24 +14441,24 @@ static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_v_extent
   __pyx_t_2 = 0;
   __pyx_t_3 = 0;
 
-  /* "View.MemoryView":1254
+  /* "View.MemoryView":1253
  * cdef int _err_extents(int i, Py_ssize_t extent1,
  *                              Py_ssize_t extent2) except -1 with gil:
  *     raise ValueError("got differing extents in dimension %d (got %d and %d)" %             # <<<<<<<<<<<<<<
  *                                                         (i, extent1, extent2))
  * 
  */
-  __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1254, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1253, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1254, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1253, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_Raise(__pyx_t_4, 0, 0, 0);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __PYX_ERR(1, 1254, __pyx_L1_error)
+  __PYX_ERR(1, 1253, __pyx_L1_error)
 
-  /* "View.MemoryView":1252
+  /* "View.MemoryView":1251
  * 
  * @cname('__pyx_memoryview_err_extents')
  * cdef int _err_extents(int i, Py_ssize_t extent1,             # <<<<<<<<<<<<<<
@@ -14474,7 +14481,7 @@ static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_v_extent
   return __pyx_r;
 }
 
-/* "View.MemoryView":1258
+/* "View.MemoryView":1257
  * 
  * @cname('__pyx_memoryview_err_dim')
  * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil:             # <<<<<<<<<<<<<<
@@ -14495,18 +14502,18 @@ static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, char *__pyx_v_msg,
   __Pyx_RefNannySetupContext("_err_dim", 0);
   __Pyx_INCREF(__pyx_v_error);
 
-  /* "View.MemoryView":1259
+  /* "View.MemoryView":1258
  * @cname('__pyx_memoryview_err_dim')
  * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil:
  *     raise error(msg.decode('ascii') % dim)             # <<<<<<<<<<<<<<
  * 
  * @cname('__pyx_memoryview_err')
  */
-  __pyx_t_2 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1259, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1258, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1259, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1258, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyUnicode_Format(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1259, __pyx_L1_error)
+  __pyx_t_4 = PyUnicode_Format(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1258, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -14524,14 +14531,14 @@ static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, char *__pyx_v_msg,
   __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
   __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1259, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1258, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __PYX_ERR(1, 1259, __pyx_L1_error)
+  __PYX_ERR(1, 1258, __pyx_L1_error)
 
-  /* "View.MemoryView":1258
+  /* "View.MemoryView":1257
  * 
  * @cname('__pyx_memoryview_err_dim')
  * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil:             # <<<<<<<<<<<<<<
@@ -14555,7 +14562,7 @@ static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, char *__pyx_v_msg,
   return __pyx_r;
 }
 
-/* "View.MemoryView":1262
+/* "View.MemoryView":1261
  * 
  * @cname('__pyx_memoryview_err')
  * cdef int _err(object error, char *msg) except -1 with gil:             # <<<<<<<<<<<<<<
@@ -14577,7 +14584,7 @@ static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) {
   __Pyx_RefNannySetupContext("_err", 0);
   __Pyx_INCREF(__pyx_v_error);
 
-  /* "View.MemoryView":1263
+  /* "View.MemoryView":1262
  * @cname('__pyx_memoryview_err')
  * cdef int _err(object error, char *msg) except -1 with gil:
  *     if msg != NULL:             # <<<<<<<<<<<<<<
@@ -14587,14 +14594,14 @@ static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) {
   __pyx_t_1 = ((__pyx_v_msg != NULL) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "View.MemoryView":1264
+    /* "View.MemoryView":1263
  * cdef int _err(object error, char *msg) except -1 with gil:
  *     if msg != NULL:
  *         raise error(msg.decode('ascii'))             # <<<<<<<<<<<<<<
  *     else:
  *         raise error
  */
-    __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1264, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1263, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_error);
     __pyx_t_4 = __pyx_v_error; __pyx_t_5 = NULL;
@@ -14610,14 +14617,14 @@ static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) {
     __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3);
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1264, __pyx_L1_error)
+    if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1263, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __PYX_ERR(1, 1264, __pyx_L1_error)
+    __PYX_ERR(1, 1263, __pyx_L1_error)
 
-    /* "View.MemoryView":1263
+    /* "View.MemoryView":1262
  * @cname('__pyx_memoryview_err')
  * cdef int _err(object error, char *msg) except -1 with gil:
  *     if msg != NULL:             # <<<<<<<<<<<<<<
@@ -14626,7 +14633,7 @@ static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) {
  */
   }
 
-  /* "View.MemoryView":1266
+  /* "View.MemoryView":1265
  *         raise error(msg.decode('ascii'))
  *     else:
  *         raise error             # <<<<<<<<<<<<<<
@@ -14635,10 +14642,10 @@ static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) {
  */
   /*else*/ {
     __Pyx_Raise(__pyx_v_error, 0, 0, 0);
-    __PYX_ERR(1, 1266, __pyx_L1_error)
+    __PYX_ERR(1, 1265, __pyx_L1_error)
   }
 
-  /* "View.MemoryView":1262
+  /* "View.MemoryView":1261
  * 
  * @cname('__pyx_memoryview_err')
  * cdef int _err(object error, char *msg) except -1 with gil:             # <<<<<<<<<<<<<<
@@ -14662,7 +14669,7 @@ static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) {
   return __pyx_r;
 }
 
-/* "View.MemoryView":1269
+/* "View.MemoryView":1268
  * 
  * @cname('__pyx_memoryview_copy_contents')
  * cdef int memoryview_copy_contents(__Pyx_memviewslice src,             # <<<<<<<<<<<<<<
@@ -14689,7 +14696,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   void *__pyx_t_7;
   int __pyx_t_8;
 
-  /* "View.MemoryView":1277
+  /* "View.MemoryView":1276
  *     Check for overlapping memory and verify the shapes.
  *     """
  *     cdef void *tmpdata = NULL             # <<<<<<<<<<<<<<
@@ -14698,7 +14705,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   __pyx_v_tmpdata = NULL;
 
-  /* "View.MemoryView":1278
+  /* "View.MemoryView":1277
  *     """
  *     cdef void *tmpdata = NULL
  *     cdef size_t itemsize = src.memview.view.itemsize             # <<<<<<<<<<<<<<
@@ -14708,7 +14715,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   __pyx_t_1 = __pyx_v_src.memview->view.itemsize;
   __pyx_v_itemsize = __pyx_t_1;
 
-  /* "View.MemoryView":1280
+  /* "View.MemoryView":1279
  *     cdef size_t itemsize = src.memview.view.itemsize
  *     cdef int i
  *     cdef char order = get_best_order(&src, src_ndim)             # <<<<<<<<<<<<<<
@@ -14717,7 +14724,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_src), __pyx_v_src_ndim);
 
-  /* "View.MemoryView":1281
+  /* "View.MemoryView":1280
  *     cdef int i
  *     cdef char order = get_best_order(&src, src_ndim)
  *     cdef bint broadcasting = False             # <<<<<<<<<<<<<<
@@ -14726,7 +14733,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   __pyx_v_broadcasting = 0;
 
-  /* "View.MemoryView":1282
+  /* "View.MemoryView":1281
  *     cdef char order = get_best_order(&src, src_ndim)
  *     cdef bint broadcasting = False
  *     cdef bint direct_copy = False             # <<<<<<<<<<<<<<
@@ -14735,7 +14742,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   __pyx_v_direct_copy = 0;
 
-  /* "View.MemoryView":1285
+  /* "View.MemoryView":1284
  *     cdef __Pyx_memviewslice tmp
  * 
  *     if src_ndim < dst_ndim:             # <<<<<<<<<<<<<<
@@ -14745,7 +14752,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   __pyx_t_2 = ((__pyx_v_src_ndim < __pyx_v_dst_ndim) != 0);
   if (__pyx_t_2) {
 
-    /* "View.MemoryView":1286
+    /* "View.MemoryView":1285
  * 
  *     if src_ndim < dst_ndim:
  *         broadcast_leading(&src, src_ndim, dst_ndim)             # <<<<<<<<<<<<<<
@@ -14754,7 +14761,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
     __pyx_memoryview_broadcast_leading((&__pyx_v_src), __pyx_v_src_ndim, __pyx_v_dst_ndim);
 
-    /* "View.MemoryView":1285
+    /* "View.MemoryView":1284
  *     cdef __Pyx_memviewslice tmp
  * 
  *     if src_ndim < dst_ndim:             # <<<<<<<<<<<<<<
@@ -14764,7 +14771,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     goto __pyx_L3;
   }
 
-  /* "View.MemoryView":1287
+  /* "View.MemoryView":1286
  *     if src_ndim < dst_ndim:
  *         broadcast_leading(&src, src_ndim, dst_ndim)
  *     elif dst_ndim < src_ndim:             # <<<<<<<<<<<<<<
@@ -14774,7 +14781,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   __pyx_t_2 = ((__pyx_v_dst_ndim < __pyx_v_src_ndim) != 0);
   if (__pyx_t_2) {
 
-    /* "View.MemoryView":1288
+    /* "View.MemoryView":1287
  *         broadcast_leading(&src, src_ndim, dst_ndim)
  *     elif dst_ndim < src_ndim:
  *         broadcast_leading(&dst, dst_ndim, src_ndim)             # <<<<<<<<<<<<<<
@@ -14783,7 +14790,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
     __pyx_memoryview_broadcast_leading((&__pyx_v_dst), __pyx_v_dst_ndim, __pyx_v_src_ndim);
 
-    /* "View.MemoryView":1287
+    /* "View.MemoryView":1286
  *     if src_ndim < dst_ndim:
  *         broadcast_leading(&src, src_ndim, dst_ndim)
  *     elif dst_ndim < src_ndim:             # <<<<<<<<<<<<<<
@@ -14793,7 +14800,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   }
   __pyx_L3:;
 
-  /* "View.MemoryView":1290
+  /* "View.MemoryView":1289
  *         broadcast_leading(&dst, dst_ndim, src_ndim)
  * 
  *     cdef int ndim = max(src_ndim, dst_ndim)             # <<<<<<<<<<<<<<
@@ -14809,7 +14816,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   }
   __pyx_v_ndim = __pyx_t_5;
 
-  /* "View.MemoryView":1292
+  /* "View.MemoryView":1291
  *     cdef int ndim = max(src_ndim, dst_ndim)
  * 
  *     for i in range(ndim):             # <<<<<<<<<<<<<<
@@ -14821,7 +14828,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
     __pyx_v_i = __pyx_t_4;
 
-    /* "View.MemoryView":1293
+    /* "View.MemoryView":1292
  * 
  *     for i in range(ndim):
  *         if src.shape[i] != dst.shape[i]:             # <<<<<<<<<<<<<<
@@ -14831,7 +14838,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) != (__pyx_v_dst.shape[__pyx_v_i])) != 0);
     if (__pyx_t_2) {
 
-      /* "View.MemoryView":1294
+      /* "View.MemoryView":1293
  *     for i in range(ndim):
  *         if src.shape[i] != dst.shape[i]:
  *             if src.shape[i] == 1:             # <<<<<<<<<<<<<<
@@ -14841,7 +14848,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
       __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) == 1) != 0);
       if (__pyx_t_2) {
 
-        /* "View.MemoryView":1295
+        /* "View.MemoryView":1294
  *         if src.shape[i] != dst.shape[i]:
  *             if src.shape[i] == 1:
  *                 broadcasting = True             # <<<<<<<<<<<<<<
@@ -14850,7 +14857,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
         __pyx_v_broadcasting = 1;
 
-        /* "View.MemoryView":1296
+        /* "View.MemoryView":1295
  *             if src.shape[i] == 1:
  *                 broadcasting = True
  *                 src.strides[i] = 0             # <<<<<<<<<<<<<<
@@ -14859,7 +14866,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
         (__pyx_v_src.strides[__pyx_v_i]) = 0;
 
-        /* "View.MemoryView":1294
+        /* "View.MemoryView":1293
  *     for i in range(ndim):
  *         if src.shape[i] != dst.shape[i]:
  *             if src.shape[i] == 1:             # <<<<<<<<<<<<<<
@@ -14869,7 +14876,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
         goto __pyx_L7;
       }
 
-      /* "View.MemoryView":1298
+      /* "View.MemoryView":1297
  *                 src.strides[i] = 0
  *             else:
  *                 _err_extents(i, dst.shape[i], src.shape[i])             # <<<<<<<<<<<<<<
@@ -14877,11 +14884,11 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  *         if src.suboffsets[i] >= 0:
  */
       /*else*/ {
-        __pyx_t_6 = __pyx_memoryview_err_extents(__pyx_v_i, (__pyx_v_dst.shape[__pyx_v_i]), (__pyx_v_src.shape[__pyx_v_i])); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1298, __pyx_L1_error)
+        __pyx_t_6 = __pyx_memoryview_err_extents(__pyx_v_i, (__pyx_v_dst.shape[__pyx_v_i]), (__pyx_v_src.shape[__pyx_v_i])); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1297, __pyx_L1_error)
       }
       __pyx_L7:;
 
-      /* "View.MemoryView":1293
+      /* "View.MemoryView":1292
  * 
  *     for i in range(ndim):
  *         if src.shape[i] != dst.shape[i]:             # <<<<<<<<<<<<<<
@@ -14890,7 +14897,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
     }
 
-    /* "View.MemoryView":1300
+    /* "View.MemoryView":1299
  *                 _err_extents(i, dst.shape[i], src.shape[i])
  * 
  *         if src.suboffsets[i] >= 0:             # <<<<<<<<<<<<<<
@@ -14900,16 +14907,16 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     __pyx_t_2 = (((__pyx_v_src.suboffsets[__pyx_v_i]) >= 0) != 0);
     if (__pyx_t_2) {
 
-      /* "View.MemoryView":1301
+      /* "View.MemoryView":1300
  * 
  *         if src.suboffsets[i] >= 0:
  *             _err_dim(ValueError, "Dimension %d is not direct", i)             # <<<<<<<<<<<<<<
  * 
  *     if slices_overlap(&src, &dst, ndim, itemsize):
  */
-      __pyx_t_6 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Dimension %d is not direct"), __pyx_v_i); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1301, __pyx_L1_error)
+      __pyx_t_6 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Dimension %d is not direct"), __pyx_v_i); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1300, __pyx_L1_error)
 
-      /* "View.MemoryView":1300
+      /* "View.MemoryView":1299
  *                 _err_extents(i, dst.shape[i], src.shape[i])
  * 
  *         if src.suboffsets[i] >= 0:             # <<<<<<<<<<<<<<
@@ -14919,7 +14926,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     }
   }
 
-  /* "View.MemoryView":1303
+  /* "View.MemoryView":1302
  *             _err_dim(ValueError, "Dimension %d is not direct", i)
  * 
  *     if slices_overlap(&src, &dst, ndim, itemsize):             # <<<<<<<<<<<<<<
@@ -14929,7 +14936,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   __pyx_t_2 = (__pyx_slices_overlap((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize) != 0);
   if (__pyx_t_2) {
 
-    /* "View.MemoryView":1305
+    /* "View.MemoryView":1304
  *     if slices_overlap(&src, &dst, ndim, itemsize):
  * 
  *         if not slice_is_contig(src, order, ndim):             # <<<<<<<<<<<<<<
@@ -14939,7 +14946,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     __pyx_t_2 = ((!(__pyx_memviewslice_is_contig(__pyx_v_src, __pyx_v_order, __pyx_v_ndim) != 0)) != 0);
     if (__pyx_t_2) {
 
-      /* "View.MemoryView":1306
+      /* "View.MemoryView":1305
  * 
  *         if not slice_is_contig(src, order, ndim):
  *             order = get_best_order(&dst, ndim)             # <<<<<<<<<<<<<<
@@ -14948,7 +14955,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
       __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim);
 
-      /* "View.MemoryView":1305
+      /* "View.MemoryView":1304
  *     if slices_overlap(&src, &dst, ndim, itemsize):
  * 
  *         if not slice_is_contig(src, order, ndim):             # <<<<<<<<<<<<<<
@@ -14957,17 +14964,17 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
     }
 
-    /* "View.MemoryView":1308
+    /* "View.MemoryView":1307
  *             order = get_best_order(&dst, ndim)
  * 
  *         tmpdata = copy_data_to_temp(&src, &tmp, order, ndim)             # <<<<<<<<<<<<<<
  *         src = tmp
  * 
  */
-    __pyx_t_7 = __pyx_memoryview_copy_data_to_temp((&__pyx_v_src), (&__pyx_v_tmp), __pyx_v_order, __pyx_v_ndim); if (unlikely(__pyx_t_7 == ((void *)NULL))) __PYX_ERR(1, 1308, __pyx_L1_error)
+    __pyx_t_7 = __pyx_memoryview_copy_data_to_temp((&__pyx_v_src), (&__pyx_v_tmp), __pyx_v_order, __pyx_v_ndim); if (unlikely(__pyx_t_7 == ((void *)NULL))) __PYX_ERR(1, 1307, __pyx_L1_error)
     __pyx_v_tmpdata = __pyx_t_7;
 
-    /* "View.MemoryView":1309
+    /* "View.MemoryView":1308
  * 
  *         tmpdata = copy_data_to_temp(&src, &tmp, order, ndim)
  *         src = tmp             # <<<<<<<<<<<<<<
@@ -14976,7 +14983,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
     __pyx_v_src = __pyx_v_tmp;
 
-    /* "View.MemoryView":1303
+    /* "View.MemoryView":1302
  *             _err_dim(ValueError, "Dimension %d is not direct", i)
  * 
  *     if slices_overlap(&src, &dst, ndim, itemsize):             # <<<<<<<<<<<<<<
@@ -14985,7 +14992,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   }
 
-  /* "View.MemoryView":1311
+  /* "View.MemoryView":1310
  *         src = tmp
  * 
  *     if not broadcasting:             # <<<<<<<<<<<<<<
@@ -14995,7 +15002,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   __pyx_t_2 = ((!(__pyx_v_broadcasting != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "View.MemoryView":1314
+    /* "View.MemoryView":1313
  * 
  * 
  *         if slice_is_contig(src, 'C', ndim):             # <<<<<<<<<<<<<<
@@ -15005,7 +15012,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'C', __pyx_v_ndim) != 0);
     if (__pyx_t_2) {
 
-      /* "View.MemoryView":1315
+      /* "View.MemoryView":1314
  * 
  *         if slice_is_contig(src, 'C', ndim):
  *             direct_copy = slice_is_contig(dst, 'C', ndim)             # <<<<<<<<<<<<<<
@@ -15014,7 +15021,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
       __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'C', __pyx_v_ndim);
 
-      /* "View.MemoryView":1314
+      /* "View.MemoryView":1313
  * 
  * 
  *         if slice_is_contig(src, 'C', ndim):             # <<<<<<<<<<<<<<
@@ -15024,7 +15031,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
       goto __pyx_L12;
     }
 
-    /* "View.MemoryView":1316
+    /* "View.MemoryView":1315
  *         if slice_is_contig(src, 'C', ndim):
  *             direct_copy = slice_is_contig(dst, 'C', ndim)
  *         elif slice_is_contig(src, 'F', ndim):             # <<<<<<<<<<<<<<
@@ -15034,7 +15041,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'F', __pyx_v_ndim) != 0);
     if (__pyx_t_2) {
 
-      /* "View.MemoryView":1317
+      /* "View.MemoryView":1316
  *             direct_copy = slice_is_contig(dst, 'C', ndim)
  *         elif slice_is_contig(src, 'F', ndim):
  *             direct_copy = slice_is_contig(dst, 'F', ndim)             # <<<<<<<<<<<<<<
@@ -15043,7 +15050,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
       __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'F', __pyx_v_ndim);
 
-      /* "View.MemoryView":1316
+      /* "View.MemoryView":1315
  *         if slice_is_contig(src, 'C', ndim):
  *             direct_copy = slice_is_contig(dst, 'C', ndim)
  *         elif slice_is_contig(src, 'F', ndim):             # <<<<<<<<<<<<<<
@@ -15053,7 +15060,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     }
     __pyx_L12:;
 
-    /* "View.MemoryView":1319
+    /* "View.MemoryView":1318
  *             direct_copy = slice_is_contig(dst, 'F', ndim)
  * 
  *         if direct_copy:             # <<<<<<<<<<<<<<
@@ -15063,7 +15070,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
     __pyx_t_2 = (__pyx_v_direct_copy != 0);
     if (__pyx_t_2) {
 
-      /* "View.MemoryView":1321
+      /* "View.MemoryView":1320
  *         if direct_copy:
  * 
  *             refcount_copying(&dst, dtype_is_object, ndim, False)             # <<<<<<<<<<<<<<
@@ -15072,7 +15079,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
       __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0);
 
-      /* "View.MemoryView":1322
+      /* "View.MemoryView":1321
  * 
  *             refcount_copying(&dst, dtype_is_object, ndim, False)
  *             memcpy(dst.data, src.data, slice_get_size(&src, ndim))             # <<<<<<<<<<<<<<
@@ -15081,7 +15088,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
       (void)(memcpy(__pyx_v_dst.data, __pyx_v_src.data, __pyx_memoryview_slice_get_size((&__pyx_v_src), __pyx_v_ndim)));
 
-      /* "View.MemoryView":1323
+      /* "View.MemoryView":1322
  *             refcount_copying(&dst, dtype_is_object, ndim, False)
  *             memcpy(dst.data, src.data, slice_get_size(&src, ndim))
  *             refcount_copying(&dst, dtype_is_object, ndim, True)             # <<<<<<<<<<<<<<
@@ -15090,7 +15097,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
       __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1);
 
-      /* "View.MemoryView":1324
+      /* "View.MemoryView":1323
  *             memcpy(dst.data, src.data, slice_get_size(&src, ndim))
  *             refcount_copying(&dst, dtype_is_object, ndim, True)
  *             free(tmpdata)             # <<<<<<<<<<<<<<
@@ -15099,7 +15106,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
       free(__pyx_v_tmpdata);
 
-      /* "View.MemoryView":1325
+      /* "View.MemoryView":1324
  *             refcount_copying(&dst, dtype_is_object, ndim, True)
  *             free(tmpdata)
  *             return 0             # <<<<<<<<<<<<<<
@@ -15109,7 +15116,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
       __pyx_r = 0;
       goto __pyx_L0;
 
-      /* "View.MemoryView":1319
+      /* "View.MemoryView":1318
  *             direct_copy = slice_is_contig(dst, 'F', ndim)
  * 
  *         if direct_copy:             # <<<<<<<<<<<<<<
@@ -15118,7 +15125,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
     }
 
-    /* "View.MemoryView":1311
+    /* "View.MemoryView":1310
  *         src = tmp
  * 
  *     if not broadcasting:             # <<<<<<<<<<<<<<
@@ -15127,7 +15134,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   }
 
-  /* "View.MemoryView":1327
+  /* "View.MemoryView":1326
  *             return 0
  * 
  *     if order == 'F' == get_best_order(&dst, ndim):             # <<<<<<<<<<<<<<
@@ -15141,25 +15148,25 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   __pyx_t_8 = (__pyx_t_2 != 0);
   if (__pyx_t_8) {
 
-    /* "View.MemoryView":1330
+    /* "View.MemoryView":1329
  * 
  * 
  *         transpose_memslice(&src)             # <<<<<<<<<<<<<<
  *         transpose_memslice(&dst)
  * 
  */
-    __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_src)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1330, __pyx_L1_error)
+    __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_src)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1329, __pyx_L1_error)
 
-    /* "View.MemoryView":1331
+    /* "View.MemoryView":1330
  * 
  *         transpose_memslice(&src)
  *         transpose_memslice(&dst)             # <<<<<<<<<<<<<<
  * 
  *     refcount_copying(&dst, dtype_is_object, ndim, False)
  */
-    __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_dst)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1331, __pyx_L1_error)
+    __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_dst)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1330, __pyx_L1_error)
 
-    /* "View.MemoryView":1327
+    /* "View.MemoryView":1326
  *             return 0
  * 
  *     if order == 'F' == get_best_order(&dst, ndim):             # <<<<<<<<<<<<<<
@@ -15168,7 +15175,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   }
 
-  /* "View.MemoryView":1333
+  /* "View.MemoryView":1332
  *         transpose_memslice(&dst)
  * 
  *     refcount_copying(&dst, dtype_is_object, ndim, False)             # <<<<<<<<<<<<<<
@@ -15177,7 +15184,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0);
 
-  /* "View.MemoryView":1334
+  /* "View.MemoryView":1333
  * 
  *     refcount_copying(&dst, dtype_is_object, ndim, False)
  *     copy_strided_to_strided(&src, &dst, ndim, itemsize)             # <<<<<<<<<<<<<<
@@ -15186,7 +15193,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   copy_strided_to_strided((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize);
 
-  /* "View.MemoryView":1335
+  /* "View.MemoryView":1334
  *     refcount_copying(&dst, dtype_is_object, ndim, False)
  *     copy_strided_to_strided(&src, &dst, ndim, itemsize)
  *     refcount_copying(&dst, dtype_is_object, ndim, True)             # <<<<<<<<<<<<<<
@@ -15195,7 +15202,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1);
 
-  /* "View.MemoryView":1337
+  /* "View.MemoryView":1336
  *     refcount_copying(&dst, dtype_is_object, ndim, True)
  * 
  *     free(tmpdata)             # <<<<<<<<<<<<<<
@@ -15204,7 +15211,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
  */
   free(__pyx_v_tmpdata);
 
-  /* "View.MemoryView":1338
+  /* "View.MemoryView":1337
  * 
  *     free(tmpdata)
  *     return 0             # <<<<<<<<<<<<<<
@@ -15214,7 +15221,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "View.MemoryView":1269
+  /* "View.MemoryView":1268
  * 
  * @cname('__pyx_memoryview_copy_contents')
  * cdef int memoryview_copy_contents(__Pyx_memviewslice src,             # <<<<<<<<<<<<<<
@@ -15238,7 +15245,7 @@ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_
   return __pyx_r;
 }
 
-/* "View.MemoryView":1341
+/* "View.MemoryView":1340
  * 
  * @cname('__pyx_memoryview_broadcast_leading')
  * cdef void broadcast_leading(__Pyx_memviewslice *mslice,             # <<<<<<<<<<<<<<
@@ -15253,7 +15260,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
   int __pyx_t_2;
   int __pyx_t_3;
 
-  /* "View.MemoryView":1345
+  /* "View.MemoryView":1344
  *                             int ndim_other) nogil:
  *     cdef int i
  *     cdef int offset = ndim_other - ndim             # <<<<<<<<<<<<<<
@@ -15262,7 +15269,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
  */
   __pyx_v_offset = (__pyx_v_ndim_other - __pyx_v_ndim);
 
-  /* "View.MemoryView":1347
+  /* "View.MemoryView":1346
  *     cdef int offset = ndim_other - ndim
  * 
  *     for i in range(ndim - 1, -1, -1):             # <<<<<<<<<<<<<<
@@ -15272,7 +15279,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
   for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) {
     __pyx_v_i = __pyx_t_1;
 
-    /* "View.MemoryView":1348
+    /* "View.MemoryView":1347
  * 
  *     for i in range(ndim - 1, -1, -1):
  *         mslice.shape[i + offset] = mslice.shape[i]             # <<<<<<<<<<<<<<
@@ -15281,7 +15288,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
  */
     (__pyx_v_mslice->shape[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->shape[__pyx_v_i]);
 
-    /* "View.MemoryView":1349
+    /* "View.MemoryView":1348
  *     for i in range(ndim - 1, -1, -1):
  *         mslice.shape[i + offset] = mslice.shape[i]
  *         mslice.strides[i + offset] = mslice.strides[i]             # <<<<<<<<<<<<<<
@@ -15290,7 +15297,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
  */
     (__pyx_v_mslice->strides[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->strides[__pyx_v_i]);
 
-    /* "View.MemoryView":1350
+    /* "View.MemoryView":1349
  *         mslice.shape[i + offset] = mslice.shape[i]
  *         mslice.strides[i + offset] = mslice.strides[i]
  *         mslice.suboffsets[i + offset] = mslice.suboffsets[i]             # <<<<<<<<<<<<<<
@@ -15300,7 +15307,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
     (__pyx_v_mslice->suboffsets[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->suboffsets[__pyx_v_i]);
   }
 
-  /* "View.MemoryView":1352
+  /* "View.MemoryView":1351
  *         mslice.suboffsets[i + offset] = mslice.suboffsets[i]
  * 
  *     for i in range(offset):             # <<<<<<<<<<<<<<
@@ -15312,7 +15319,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
   for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
     __pyx_v_i = __pyx_t_3;
 
-    /* "View.MemoryView":1353
+    /* "View.MemoryView":1352
  * 
  *     for i in range(offset):
  *         mslice.shape[i] = 1             # <<<<<<<<<<<<<<
@@ -15321,7 +15328,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
  */
     (__pyx_v_mslice->shape[__pyx_v_i]) = 1;
 
-    /* "View.MemoryView":1354
+    /* "View.MemoryView":1353
  *     for i in range(offset):
  *         mslice.shape[i] = 1
  *         mslice.strides[i] = mslice.strides[0]             # <<<<<<<<<<<<<<
@@ -15330,7 +15337,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
  */
     (__pyx_v_mslice->strides[__pyx_v_i]) = (__pyx_v_mslice->strides[0]);
 
-    /* "View.MemoryView":1355
+    /* "View.MemoryView":1354
  *         mslice.shape[i] = 1
  *         mslice.strides[i] = mslice.strides[0]
  *         mslice.suboffsets[i] = -1             # <<<<<<<<<<<<<<
@@ -15340,7 +15347,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
     (__pyx_v_mslice->suboffsets[__pyx_v_i]) = -1L;
   }
 
-  /* "View.MemoryView":1341
+  /* "View.MemoryView":1340
  * 
  * @cname('__pyx_memoryview_broadcast_leading')
  * cdef void broadcast_leading(__Pyx_memviewslice *mslice,             # <<<<<<<<<<<<<<
@@ -15351,7 +15358,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
   /* function exit code */
 }
 
-/* "View.MemoryView":1363
+/* "View.MemoryView":1362
  * 
  * @cname('__pyx_memoryview_refcount_copying')
  * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object,             # <<<<<<<<<<<<<<
@@ -15362,7 +15369,7 @@ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslic
 static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_dtype_is_object, int __pyx_v_ndim, int __pyx_v_inc) {
   int __pyx_t_1;
 
-  /* "View.MemoryView":1367
+  /* "View.MemoryView":1366
  * 
  * 
  *     if dtype_is_object:             # <<<<<<<<<<<<<<
@@ -15372,7 +15379,7 @@ static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, i
   __pyx_t_1 = (__pyx_v_dtype_is_object != 0);
   if (__pyx_t_1) {
 
-    /* "View.MemoryView":1368
+    /* "View.MemoryView":1367
  * 
  *     if dtype_is_object:
  *         refcount_objects_in_slice_with_gil(dst.data, dst.shape,             # <<<<<<<<<<<<<<
@@ -15381,7 +15388,7 @@ static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, i
  */
     __pyx_memoryview_refcount_objects_in_slice_with_gil(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_inc);
 
-    /* "View.MemoryView":1367
+    /* "View.MemoryView":1366
  * 
  * 
  *     if dtype_is_object:             # <<<<<<<<<<<<<<
@@ -15390,7 +15397,7 @@ static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, i
  */
   }
 
-  /* "View.MemoryView":1363
+  /* "View.MemoryView":1362
  * 
  * @cname('__pyx_memoryview_refcount_copying')
  * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object,             # <<<<<<<<<<<<<<
@@ -15401,7 +15408,7 @@ static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, i
   /* function exit code */
 }
 
-/* "View.MemoryView":1372
+/* "View.MemoryView":1371
  * 
  * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil')
  * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
@@ -15416,7 +15423,7 @@ static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__pyx_v_da
   #endif
   __Pyx_RefNannySetupContext("refcount_objects_in_slice_with_gil", 0);
 
-  /* "View.MemoryView":1375
+  /* "View.MemoryView":1374
  *                                              Py_ssize_t *strides, int ndim,
  *                                              bint inc) with gil:
  *     refcount_objects_in_slice(data, shape, strides, ndim, inc)             # <<<<<<<<<<<<<<
@@ -15425,7 +15432,7 @@ static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__pyx_v_da
  */
   __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, __pyx_v_shape, __pyx_v_strides, __pyx_v_ndim, __pyx_v_inc);
 
-  /* "View.MemoryView":1372
+  /* "View.MemoryView":1371
  * 
  * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil')
  * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
@@ -15440,7 +15447,7 @@ static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__pyx_v_da
   #endif
 }
 
-/* "View.MemoryView":1378
+/* "View.MemoryView":1377
  * 
  * @cname('__pyx_memoryview_refcount_objects_in_slice')
  * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
@@ -15457,7 +15464,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("refcount_objects_in_slice", 0);
 
-  /* "View.MemoryView":1382
+  /* "View.MemoryView":1381
  *     cdef Py_ssize_t i
  * 
  *     for i in range(shape[0]):             # <<<<<<<<<<<<<<
@@ -15469,7 +15476,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
   for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
     __pyx_v_i = __pyx_t_3;
 
-    /* "View.MemoryView":1383
+    /* "View.MemoryView":1382
  * 
  *     for i in range(shape[0]):
  *         if ndim == 1:             # <<<<<<<<<<<<<<
@@ -15479,7 +15486,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
     __pyx_t_4 = ((__pyx_v_ndim == 1) != 0);
     if (__pyx_t_4) {
 
-      /* "View.MemoryView":1384
+      /* "View.MemoryView":1383
  *     for i in range(shape[0]):
  *         if ndim == 1:
  *             if inc:             # <<<<<<<<<<<<<<
@@ -15489,7 +15496,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
       __pyx_t_4 = (__pyx_v_inc != 0);
       if (__pyx_t_4) {
 
-        /* "View.MemoryView":1385
+        /* "View.MemoryView":1384
  *         if ndim == 1:
  *             if inc:
  *                 Py_INCREF((<PyObject **> data)[0])             # <<<<<<<<<<<<<<
@@ -15498,7 +15505,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
  */
         Py_INCREF((((PyObject **)__pyx_v_data)[0]));
 
-        /* "View.MemoryView":1384
+        /* "View.MemoryView":1383
  *     for i in range(shape[0]):
  *         if ndim == 1:
  *             if inc:             # <<<<<<<<<<<<<<
@@ -15508,7 +15515,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
         goto __pyx_L6;
       }
 
-      /* "View.MemoryView":1387
+      /* "View.MemoryView":1386
  *                 Py_INCREF((<PyObject **> data)[0])
  *             else:
  *                 Py_DECREF((<PyObject **> data)[0])             # <<<<<<<<<<<<<<
@@ -15520,7 +15527,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
       }
       __pyx_L6:;
 
-      /* "View.MemoryView":1383
+      /* "View.MemoryView":1382
  * 
  *     for i in range(shape[0]):
  *         if ndim == 1:             # <<<<<<<<<<<<<<
@@ -15530,7 +15537,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
       goto __pyx_L5;
     }
 
-    /* "View.MemoryView":1389
+    /* "View.MemoryView":1388
  *                 Py_DECREF((<PyObject **> data)[0])
  *         else:
  *             refcount_objects_in_slice(data, shape + 1, strides + 1,             # <<<<<<<<<<<<<<
@@ -15539,7 +15546,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
  */
     /*else*/ {
 
-      /* "View.MemoryView":1390
+      /* "View.MemoryView":1389
  *         else:
  *             refcount_objects_in_slice(data, shape + 1, strides + 1,
  *                                       ndim - 1, inc)             # <<<<<<<<<<<<<<
@@ -15550,7 +15557,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
     }
     __pyx_L5:;
 
-    /* "View.MemoryView":1392
+    /* "View.MemoryView":1391
  *                                       ndim - 1, inc)
  * 
  *         data += strides[0]             # <<<<<<<<<<<<<<
@@ -15560,7 +15567,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
     __pyx_v_data = (__pyx_v_data + (__pyx_v_strides[0]));
   }
 
-  /* "View.MemoryView":1378
+  /* "View.MemoryView":1377
  * 
  * @cname('__pyx_memoryview_refcount_objects_in_slice')
  * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
@@ -15572,7 +15579,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
   __Pyx_RefNannyFinishContext();
 }
 
-/* "View.MemoryView":1398
+/* "View.MemoryView":1397
  * 
  * @cname('__pyx_memoryview_slice_assign_scalar')
  * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim,             # <<<<<<<<<<<<<<
@@ -15582,7 +15589,7 @@ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ss
 
 static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item, int __pyx_v_dtype_is_object) {
 
-  /* "View.MemoryView":1401
+  /* "View.MemoryView":1400
  *                               size_t itemsize, void *item,
  *                               bint dtype_is_object) nogil:
  *     refcount_copying(dst, dtype_is_object, ndim, False)             # <<<<<<<<<<<<<<
@@ -15591,7 +15598,7 @@ static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst
  */
   __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 0);
 
-  /* "View.MemoryView":1402
+  /* "View.MemoryView":1401
  *                               bint dtype_is_object) nogil:
  *     refcount_copying(dst, dtype_is_object, ndim, False)
  *     _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim,             # <<<<<<<<<<<<<<
@@ -15600,7 +15607,7 @@ static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst
  */
   __pyx_memoryview__slice_assign_scalar(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_itemsize, __pyx_v_item);
 
-  /* "View.MemoryView":1404
+  /* "View.MemoryView":1403
  *     _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim,
  *                          itemsize, item)
  *     refcount_copying(dst, dtype_is_object, ndim, True)             # <<<<<<<<<<<<<<
@@ -15609,7 +15616,7 @@ static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst
  */
   __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 1);
 
-  /* "View.MemoryView":1398
+  /* "View.MemoryView":1397
  * 
  * @cname('__pyx_memoryview_slice_assign_scalar')
  * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim,             # <<<<<<<<<<<<<<
@@ -15620,7 +15627,7 @@ static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst
   /* function exit code */
 }
 
-/* "View.MemoryView":1408
+/* "View.MemoryView":1407
  * 
  * @cname('__pyx_memoryview__slice_assign_scalar')
  * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
@@ -15637,7 +15644,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
   Py_ssize_t __pyx_t_3;
   Py_ssize_t __pyx_t_4;
 
-  /* "View.MemoryView":1412
+  /* "View.MemoryView":1411
  *                               size_t itemsize, void *item) nogil:
  *     cdef Py_ssize_t i
  *     cdef Py_ssize_t stride = strides[0]             # <<<<<<<<<<<<<<
@@ -15646,7 +15653,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
  */
   __pyx_v_stride = (__pyx_v_strides[0]);
 
-  /* "View.MemoryView":1413
+  /* "View.MemoryView":1412
  *     cdef Py_ssize_t i
  *     cdef Py_ssize_t stride = strides[0]
  *     cdef Py_ssize_t extent = shape[0]             # <<<<<<<<<<<<<<
@@ -15655,7 +15662,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
  */
   __pyx_v_extent = (__pyx_v_shape[0]);
 
-  /* "View.MemoryView":1415
+  /* "View.MemoryView":1414
  *     cdef Py_ssize_t extent = shape[0]
  * 
  *     if ndim == 1:             # <<<<<<<<<<<<<<
@@ -15665,7 +15672,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
   __pyx_t_1 = ((__pyx_v_ndim == 1) != 0);
   if (__pyx_t_1) {
 
-    /* "View.MemoryView":1416
+    /* "View.MemoryView":1415
  * 
  *     if ndim == 1:
  *         for i in range(extent):             # <<<<<<<<<<<<<<
@@ -15677,7 +15684,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
     for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
       __pyx_v_i = __pyx_t_4;
 
-      /* "View.MemoryView":1417
+      /* "View.MemoryView":1416
  *     if ndim == 1:
  *         for i in range(extent):
  *             memcpy(data, item, itemsize)             # <<<<<<<<<<<<<<
@@ -15686,7 +15693,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
  */
       (void)(memcpy(__pyx_v_data, __pyx_v_item, __pyx_v_itemsize));
 
-      /* "View.MemoryView":1418
+      /* "View.MemoryView":1417
  *         for i in range(extent):
  *             memcpy(data, item, itemsize)
  *             data += stride             # <<<<<<<<<<<<<<
@@ -15696,7 +15703,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
       __pyx_v_data = (__pyx_v_data + __pyx_v_stride);
     }
 
-    /* "View.MemoryView":1415
+    /* "View.MemoryView":1414
  *     cdef Py_ssize_t extent = shape[0]
  * 
  *     if ndim == 1:             # <<<<<<<<<<<<<<
@@ -15706,7 +15713,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
     goto __pyx_L3;
   }
 
-  /* "View.MemoryView":1420
+  /* "View.MemoryView":1419
  *             data += stride
  *     else:
  *         for i in range(extent):             # <<<<<<<<<<<<<<
@@ -15719,7 +15726,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
     for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
       __pyx_v_i = __pyx_t_4;
 
-      /* "View.MemoryView":1421
+      /* "View.MemoryView":1420
  *     else:
  *         for i in range(extent):
  *             _slice_assign_scalar(data, shape + 1, strides + 1,             # <<<<<<<<<<<<<<
@@ -15728,7 +15735,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
  */
       __pyx_memoryview__slice_assign_scalar(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize, __pyx_v_item);
 
-      /* "View.MemoryView":1423
+      /* "View.MemoryView":1422
  *             _slice_assign_scalar(data, shape + 1, strides + 1,
  *                                 ndim - 1, itemsize, item)
  *             data += stride             # <<<<<<<<<<<<<<
@@ -15740,7 +15747,7 @@ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t
   }
   __pyx_L3:;
 
-  /* "View.MemoryView":1408
+  /* "View.MemoryView":1407
  * 
  * @cname('__pyx_memoryview__slice_assign_scalar')
  * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
@@ -16265,7 +16272,12 @@ static PyTypeObject __pyx_type___pyx_array = {
   sizeof(struct __pyx_array_obj), /*tp_basicsize*/
   0, /*tp_itemsize*/
   __pyx_tp_dealloc_array, /*tp_dealloc*/
+  #if PY_VERSION_HEX < 0x030800b4
   0, /*tp_print*/
+  #endif
+  #if PY_VERSION_HEX >= 0x030800b4
+  0, /*tp_vectorcall_offset*/
+  #endif
   0, /*tp_getattr*/
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
@@ -16318,6 +16330,9 @@ static PyTypeObject __pyx_type___pyx_array = {
   #if PY_VERSION_HEX >= 0x030800b1
   0, /*tp_vectorcall*/
   #endif
+  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+  0, /*tp_print*/
+  #endif
 };
 
 static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
@@ -16376,7 +16391,12 @@ static PyTypeObject __pyx_type___pyx_MemviewEnum = {
   sizeof(struct __pyx_MemviewEnum_obj), /*tp_basicsize*/
   0, /*tp_itemsize*/
   __pyx_tp_dealloc_Enum, /*tp_dealloc*/
+  #if PY_VERSION_HEX < 0x030800b4
   0, /*tp_print*/
+  #endif
+  #if PY_VERSION_HEX >= 0x030800b4
+  0, /*tp_vectorcall_offset*/
+  #endif
   0, /*tp_getattr*/
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
@@ -16429,6 +16449,9 @@ static PyTypeObject __pyx_type___pyx_MemviewEnum = {
   #if PY_VERSION_HEX >= 0x030800b1
   0, /*tp_vectorcall*/
   #endif
+  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+  0, /*tp_print*/
+  #endif
 };
 static struct __pyx_vtabstruct_memoryview __pyx_vtable_memoryview;
 
@@ -16629,7 +16652,12 @@ static PyTypeObject __pyx_type___pyx_memoryview = {
   sizeof(struct __pyx_memoryview_obj), /*tp_basicsize*/
   0, /*tp_itemsize*/
   __pyx_tp_dealloc_memoryview, /*tp_dealloc*/
+  #if PY_VERSION_HEX < 0x030800b4
   0, /*tp_print*/
+  #endif
+  #if PY_VERSION_HEX >= 0x030800b4
+  0, /*tp_vectorcall_offset*/
+  #endif
   0, /*tp_getattr*/
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
@@ -16682,6 +16710,9 @@ static PyTypeObject __pyx_type___pyx_memoryview = {
   #if PY_VERSION_HEX >= 0x030800b1
   0, /*tp_vectorcall*/
   #endif
+  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+  0, /*tp_print*/
+  #endif
 };
 static struct __pyx_vtabstruct__memoryviewslice __pyx_vtable__memoryviewslice;
 
@@ -16759,7 +16790,12 @@ static PyTypeObject __pyx_type___pyx_memoryviewslice = {
   sizeof(struct __pyx_memoryviewslice_obj), /*tp_basicsize*/
   0, /*tp_itemsize*/
   __pyx_tp_dealloc__memoryviewslice, /*tp_dealloc*/
+  #if PY_VERSION_HEX < 0x030800b4
   0, /*tp_print*/
+  #endif
+  #if PY_VERSION_HEX >= 0x030800b4
+  0, /*tp_vectorcall_offset*/
+  #endif
   0, /*tp_getattr*/
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
@@ -16820,6 +16856,9 @@ static PyTypeObject __pyx_type___pyx_memoryviewslice = {
   #if PY_VERSION_HEX >= 0x030800b1
   0, /*tp_vectorcall*/
   #endif
+  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+  0, /*tp_print*/
+  #endif
 };
 
 static PyMethodDef __pyx_methods[] = {
@@ -19515,48 +19554,6 @@ static CYTHON_INLINE long __Pyx_div_long(long a, long b) {
     return q;
 }
 
-/* WriteUnraisableException */
-static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
-                                  CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename,
-                                  int full_traceback, CYTHON_UNUSED int nogil) {
-    PyObject *old_exc, *old_val, *old_tb;
-    PyObject *ctx;
-    __Pyx_PyThreadState_declare
-#ifdef WITH_THREAD
-    PyGILState_STATE state;
-    if (nogil)
-        state = PyGILState_Ensure();
-#ifdef _MSC_VER
-    else state = (PyGILState_STATE)-1;
-#endif
-#endif
-    __Pyx_PyThreadState_assign
-    __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
-    if (full_traceback) {
-        Py_XINCREF(old_exc);
-        Py_XINCREF(old_val);
-        Py_XINCREF(old_tb);
-        __Pyx_ErrRestore(old_exc, old_val, old_tb);
-        PyErr_PrintEx(1);
-    }
-    #if PY_MAJOR_VERSION < 3
-    ctx = PyString_FromString(name);
-    #else
-    ctx = PyUnicode_FromString(name);
-    #endif
-    __Pyx_ErrRestore(old_exc, old_val, old_tb);
-    if (!ctx) {
-        PyErr_WriteUnraisable(Py_None);
-    } else {
-        PyErr_WriteUnraisable(ctx);
-        Py_DECREF(ctx);
-    }
-#ifdef WITH_THREAD
-    if (nogil)
-        PyGILState_Release(state);
-#endif
-}
-
 /* ImportFrom */
 static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
     PyObject* value = __Pyx_PyObject_GetAttrStr(module, name);
@@ -19684,43 +19681,43 @@ static int __Pyx_setup_reduce(PyObject* type_obj) {
     PyObject *setstate = NULL;
     PyObject *setstate_cython = NULL;
 #if CYTHON_USE_PYTYPE_LOOKUP
-    if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto GOOD;
+    if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD;
 #else
-    if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto GOOD;
+    if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD;
 #endif
 #if CYTHON_USE_PYTYPE_LOOKUP
-    object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto BAD;
+    object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD;
 #else
-    object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto BAD;
+    object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD;
 #endif
-    reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto BAD;
+    reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto __PYX_BAD;
     if (reduce_ex == object_reduce_ex) {
 #if CYTHON_USE_PYTYPE_LOOKUP
-        object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto BAD;
+        object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD;
 #else
-        object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto BAD;
+        object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD;
 #endif
-        reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto BAD;
+        reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto __PYX_BAD;
         if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) {
-            reduce_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_cython); if (unlikely(!reduce_cython)) goto BAD;
-            ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto BAD;
-            ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto BAD;
+            reduce_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_cython); if (unlikely(!reduce_cython)) goto __PYX_BAD;
+            ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
+            ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
             setstate = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate);
             if (!setstate) PyErr_Clear();
             if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) {
-                setstate_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate_cython); if (unlikely(!setstate_cython)) goto BAD;
-                ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto BAD;
-                ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto BAD;
+                setstate_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate_cython); if (unlikely(!setstate_cython)) goto __PYX_BAD;
+                ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
+                ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
             }
             PyType_Modified((PyTypeObject*)type_obj);
         }
     }
-    goto GOOD;
-BAD:
+    goto __PYX_GOOD;
+__PYX_BAD:
     if (!PyErr_Occurred())
         PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name);
     ret = -1;
-GOOD:
+__PYX_GOOD:
 #if !CYTHON_USE_PYTYPE_LOOKUP
     Py_XDECREF(object_reduce);
     Py_XDECREF(object_reduce_ex);
@@ -19735,7 +19732,7 @@ static int __Pyx_setup_reduce(PyObject* type_obj) {
 
 /* CLineInTraceback */
 #ifndef CYTHON_CLINE_IN_TRACEBACK
-static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) {
+static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) {
     PyObject *use_cline;
     PyObject *ptype, *pvalue, *ptraceback;
 #if CYTHON_COMPILING_IN_CPYTHON
@@ -19839,7 +19836,7 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
     if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
         int new_max = __pyx_code_cache.max_count + 64;
         entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
-            __pyx_code_cache.entries, (size_t)new_max*sizeof(__Pyx_CodeObjectCacheEntry));
+            __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry));
         if (unlikely(!entries)) {
             return;
         }
@@ -20100,6 +20097,7 @@ static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) {
 }
 static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) {
   switch (ch) {
+    case '?': return "'bool'";
     case 'c': return "'char'";
     case 'b': return "'signed char'";
     case 'B': return "'unsigned char'";
@@ -20142,7 +20140,7 @@ static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) {
 }
 static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) {
   switch (ch) {
-    case 'c': case 'b': case 'B': case 's': case 'p': return 1;
+    case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
     case 'h': case 'H': return sizeof(short);
     case 'i': case 'I': return sizeof(int);
     case 'l': case 'L': return sizeof(long);
@@ -20226,7 +20224,7 @@ static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) {
     case 'b': case 'h': case 'i':
     case 'l': case 'q': case 's': case 'p':
         return 'I';
-    case 'B': case 'H': case 'I': case 'L': case 'Q':
+    case '?': case 'B': case 'H': case 'I': case 'L': case 'Q':
         return 'U';
     case 'f': case 'd': case 'g':
         return (is_complex ? 'C' : 'R');
@@ -20505,7 +20503,7 @@ static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const cha
           return NULL;
         }
         CYTHON_FALLTHROUGH;
-      case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I':
+      case '?': case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I':
       case 'l': case 'L': case 'q': case 'Q':
       case 'f': case 'd': case 'g':
       case 'O': case 'p':
diff --git a/setup.py b/setup.py
index 7bd4cd2..de15dba 100644
--- a/setup.py
+++ b/setup.py
@@ -21,7 +21,7 @@
     extensions = cythonize(extensions, language_level=3)
 
 NAME = 'pyBedGraph'
-VERSION = '0.5.42'
+VERSION = '0.5.43'
 
 setuptools.setup(
 


Test patch:
diff --git a/test/extensive_test.py b/test/extensive_test.py
index d3ec0bf..80667f3 100644
--- a/test/extensive_test.py
+++ b/test/extensive_test.py
@@ -31,7 +31,7 @@
     }
 
     for chrom in avg_interval_sizes:
-        assert abs(bedGraph.chromosome_map[chrom].avg_interval_size - avg_interval_sizes[chrom]) < 0.00001
+        assert abs(bedGraph.chromosome_map[chrom].avg_interval_size - avg_interval_sizes[chrom]) < 0.0001
 
 test_intervals = [
     ['chr1', 0, 3000000],
@@ -42,27 +42,32 @@
 correct = [0.0, 0.2783213414900005, 0.37037220081612465, 0.733430027961731]
 result = bedGraph.stats('mean', test_intervals)
 for i in range(len(result)):
-    assert abs(result[i] - correct[i]) < 0.00001
+    assert abs(result[i] - correct[i]) < 0.0001
 
 correct = [0, 0.27832134, 0.3703722, 0.61754806]
 result = bedGraph.stats('approx_mean', test_intervals)
 for i in range(len(result)):
-    assert abs(result[i] - correct[i]) < 0.00001
+    assert abs(result[i] - correct[i]) < 0.0001
 
 correct = [0.0, 4.400169849395752, 5.133600234985352, 0.733430027961731]
 result = bedGraph.stats('max', test_intervals)
 for i in range(len(result)):
-    assert abs(result[i] - correct[i]) < 0.00001
+    assert abs(result[i] - correct[i]) < 0.0001
 
 correct = [0.0, 0.0, 0.0, 0.733430027961731]
 result = bedGraph.stats('min', test_intervals)
 for i in range(len(result)):
-    assert abs(result[i] - correct[i]) < 0.00001
+    assert abs(result[i] - correct[i]) < 0.0001
 
 correct = [0.0, 0.5458894746933545, 0.645887192684785, 0.0]
 result = bedGraph.stats('std', test_intervals)
 for i in range(len(result)):
-    assert abs(result[i] - correct[i]) < 0.00001
+    assert abs(result[i] - correct[i]) < 0.0001
+
+correct = [0.0, 27832.1338, 37037.21976, 66.0087]
+result = bedGraph.stats('sum', test_intervals)
+for i in range(len(result)):
+    assert abs(result[i] - correct[i]) < 0.0001
 
 test_intervals = [
     ['chr4', 0, 50000],
@@ -73,27 +78,32 @@
 correct = [0.0, 0.16491732227414846, 0.028100075026154518, 0.4027400016784668]
 result = bedGraph.stats('mean', test_intervals)
 for i in range(len(result)):
-    assert abs(result[i] - correct[i]) < 0.00001
+    assert abs(result[i] - correct[i]) < 0.0001
 
 correct = [0, 0.16491732, 0.02810007, 0.213423]
 result = bedGraph.stats('approx_mean', test_intervals)
 for i in range(len(result)):
-    assert abs(result[i] - correct[i]) < 0.00001
+    assert abs(result[i] - correct[i]) < 0.0001
 
 correct = [0.0, 2.8125500679016113, 2.200079917907715, 0.4027400016784668]
 result = bedGraph.stats('max', test_intervals)
 for i in range(len(result)):
-    assert abs(result[i] - correct[i]) < 0.00001
+    assert abs(result[i] - correct[i]) < 0.0001
 
 correct = [0.0, 0.0, 0.0, 0.4027400016784668]
 result = bedGraph.stats('min', test_intervals)
 for i in range(len(result)):
-    assert abs(result[i] - correct[i]) < 0.00001
+    assert abs(result[i] - correct[i]) < 0.0001
 
 correct = [0.0, 0.3551471309944084, 0.15098161797799015, 0.0]
 result = bedGraph.stats('std', test_intervals)
 for i in range(len(result)):
-    assert abs(result[i] - correct[i]) < 0.00001
+    assert abs(result[i] - correct[i]) < 0.0001
+
+correct = [0.0, 16491.7322, 2810.00742, 7.24932]
+result = bedGraph.stats('sum', test_intervals)
+for i in range(len(result)):
+    assert abs(result[i] - correct[i]) < 0.0001
 
 print("Passed all bedgraph tests!")
 
@@ -115,7 +125,7 @@
     }
 
     for chrom in avg_interval_sizes:
-        assert abs(bedGraph.chromosome_map[chrom].avg_interval_size - avg_interval_sizes[chrom]) < 0.00001
+        assert abs(bedGraph.chromosome_map[chrom].avg_interval_size - avg_interval_sizes[chrom]) < 0.0001
 
 test_intervals = [
     ['chr1', 0, 3000000],
@@ -126,27 +136,33 @@
 correct = [0.0, 0.2783213414900005, 0.37037220081612465, 0.733430027961731]
 result = bedGraph.stats('mean', test_intervals)
 for i in range(len(result)):
-    assert abs(result[i] - correct[i]) < 0.00001
+    assert abs(result[i] - correct[i]) < 0.0001
 
 correct = [0, 0.27832134, 0.3703722, 0.61754806]
 result = bedGraph.stats('approx_mean', test_intervals)
 for i in range(len(result)):
-    assert abs(result[i] - correct[i]) < 0.00001
+    assert abs(result[i] - correct[i]) < 0.0001
 
 correct = [0.0, 4.400169849395752, 5.133600234985352, 0.733430027961731]
 result = bedGraph.stats('max', test_intervals)
 for i in range(len(result)):
-    assert abs(result[i] - correct[i]) < 0.00001
+    assert abs(result[i] - correct[i]) < 0.0001
 
 correct = [0.0, 0.0, 0.0, 0.733430027961731]
 result = bedGraph.stats('min', test_intervals)
 for i in range(len(result)):
-    assert abs(result[i] - correct[i]) < 0.00001
+    assert abs(result[i] - correct[i]) < 0.0001
 
 correct = [0.0, 0.5458894746933545, 0.645887192684785, 0.0]
 result = bedGraph.stats('std', test_intervals)
 for i in range(len(result)):
-    assert abs(result[i] - correct[i]) < 0.00001
+    assert abs(result[i] - correct[i]) < 0.0001
+
+# LOWERED STANDARD FOR ROUNDING PROBLEMS
+correct = [0.0, 27832.1338, 37037.21976, 66.0087]
+result = bedGraph.stats('sum', test_intervals)
+for i in range(len(result)):
+    assert abs(result[i] - correct[i]) < 0.1
 
 test_intervals = [
     ['chr4', 0, 50000],
@@ -157,27 +173,32 @@
 correct = [0.0, 0.16491732227414846, 0.028100075026154518, 0.4027400016784668]
 result = bedGraph.stats('mean', test_intervals)
 for i in range(len(result)):
-    assert abs(result[i] - correct[i]) < 0.00001
+    assert abs(result[i] - correct[i]) < 0.0001
 
 correct = [0, 0.16491732, 0.02810007, 0.213423]
 result = bedGraph.stats('approx_mean', test_intervals)
 for i in range(len(result)):
-    assert abs(result[i] - correct[i]) < 0.00001
+    assert abs(result[i] - correct[i]) < 0.0001
 
 correct = [0.0, 2.8125500679016113, 2.200079917907715, 0.4027400016784668]
 result = bedGraph.stats('max', test_intervals)
 for i in range(len(result)):
-    assert abs(result[i] - correct[i]) < 0.00001
+    assert abs(result[i] - correct[i]) < 0.0001
 
 correct = [0.0, 0.0, 0.0, 0.4027400016784668]
 result = bedGraph.stats('min', test_intervals)
 for i in range(len(result)):
-    assert abs(result[i] - correct[i]) < 0.00001
+    assert abs(result[i] - correct[i]) < 0.0001
 
 correct = [0.0, 0.3551471309944084, 0.15098161797799015, 0.0]
 result = bedGraph.stats('std', test_intervals)
 for i in range(len(result)):
-    assert abs(result[i] - correct[i]) < 0.00001
+    assert abs(result[i] - correct[i]) < 0.0001
+
+correct = [0.0, 16491.7322, 2810.00742, 7.24932]
+result = bedGraph.stats('sum', test_intervals)
+for i in range(len(result)):
+    assert abs(result[i] - correct[i]) < 0.0001
 
 print("Passed all bigwig tests!")
 print("Passed all extensive tests!")
diff --git a/test/test.py b/test/test.py
index 7333bc0..82cf7c3 100644
--- a/test/test.py
+++ b/test/test.py
@@ -84,6 +84,11 @@
 for i in range(len(result)):
     assert abs(result[i] - correct[i]) < 0.00001
 
+correct = [0, 0.9, 0.1, 0, 4.1, 6.5]
+result = bedGraph.stats('sum', test_intervals)
+for i in range(len(result)):
+    assert abs(result[i] - correct[i]) < 0.00001
+
 correct = [0, 0.3, 0.025, 0, 0.82, 13/60]
 result = inclusive_bedGraph.stats('mean', test_intervals)
 for i in range(len(result)):
@@ -114,4 +119,9 @@
 for i in range(len(result)):
     assert abs(result[i] - correct[i]) < 0.00001
 
+correct = [0, 0.9, 0.1, 0, 4.1, 6.5]
+result = inclusive_bedGraph.stats('sum', test_intervals)
+for i in range(len(result)):
+    assert abs(result[i] - correct[i]) < 0.00001
+
 print("Passed all simple tests!")