Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
that share the same bin. A `Chunk` object in the context of
this function is a `namedtuple` that contains the virtual offsets
for the beginning and end of each of these chunks.
Note: a special case of a chunk is in any Bin labeled as 37450.
These bins always contain 2 chunks that provide the statistics
of the number of reads that are unmapped to that reference.
Args:
n_chunks (int): number of chunks to be unpacked from stream
Returns:
chunks (list): a list of Chunk objects with the attributes of
chunks[i] are .voffset_beg and voffset_end
"""
chunks = [bai.Chunk(self._io) for chunk in range(n_chunks)]
return chunks
n_int (int): number of bins to be unpacked from stream
Returns:
bins (None | dict): None if just indexing the index file or a dictionary
of `bin_id: chunks` pairs
Raises:
AssertionError (Exception): if bin 37450 does not contain 2 chunks exactly
"""
bins = None if idx else {}
for b in range(n_bins):
bin_id, loffset, n_chunks = unpack_bid_loffset_nchunk(self._io.read(16))
if idx:
if bin_id == self._UNMAP_BIN:
assert n_chunks == 2, 'Bin 3740 is supposed to have 2 chunks. This has {}'.format(n_chunks)
unmapped = bai.Unmapped(*unpack_unmapped(self._io.read(32)))
self.unmapped[ref_id] = unmapped
else:
if not n_chunks == 0:
self._io.seek(16 * n_chunks, 1)
else:
chunks = self.get_chunks(n_chunks)
bins[bin_id] = CsiBin(loffset, chunks)
else:
return bins
if _PY_VERSION[0] == 2:
from io import open
else:
from functools import lru_cache
import bamnostic
from bamnostic import bai
from bamnostic.utils import *
def format_warnings(message, category, filename, lineno, file=None, line=None):
return ' {}:{}: {}:{}'.format(filename, lineno, category.__name__, message)
warnings.formatwarning = bai.format_warnings
# Helper compiled structs
unpack_chunk = bai.unpack_chunk
unpack_bid_loffset_nchunk = struct.Struct('
import bamnostic
from bamnostic import bai
from bamnostic.utils import *
def format_warnings(message, category, filename, lineno, file=None, line=None):
return ' {}:{}: {}:{}'.format(filename, lineno, category.__name__, message)
warnings.formatwarning = bai.format_warnings
# Helper compiled structs
unpack_chunk = bai.unpack_chunk
unpack_bid_loffset_nchunk = struct.Struct('