Open percyfal opened 1 week ago
The function sgkit.window_by_position fails if the input dataset has contigs that lack variant sites, throwing an IndexError.
sgkit.window_by_position
IndexError
This will often be the case for fragmented references with many contigs. I provide a minimum working example for reference.
Thanks for the bug report @percyfal
The function
sgkit.window_by_position
fails if the input dataset has contigs that lack variant sites, throwing anIndexError
.Traceback
```python IndexError Traceback (most recent call last) Cell In[36], line 1 ----> 1 ds = sgkit.window_by_position(ds, size=10) File ~/dev/sgkit-dev/sgkit/sgkit/window.py:218, in window_by_position(ds, size, step, offset, variant_contig, variant_position, window_start_position, merge) 214 positions = ds[variant_position].values 215 window_start_positions = ( 216 ds[window_start_position].values if window_start_position is not None else None 217 ) --> 218 return _window_per_contig( 219 ds, 220 variant_contig, 221 merge, 222 _get_windows_by_position, 223 size, 224 step, 225 offset, 226 positions, 227 window_start_positions, 228 ) File ~/dev/sgkit-dev/sgkit/sgkit/window.py:320, in _window_per_contig(ds, variant_contig, merge, windowing_fn, *args, **kwargs) 318 contig_window_stops = [] 319 for i, contig in enumerate(get_contigs(ds)): --> 320 starts, stops = windowing_fn( 321 contig, contig_bounds[i], contig_bounds[i + 1], *args, **kwargs 322 ) 323 contig_window_starts.append(starts) 324 contig_window_stops.append(stops) File ~/dev/sgkit-dev/sgkit/sgkit/window.py:429, in _get_windows_by_position(contig, start, stop, size, step, offset, positions, window_start_positions) 426 contig_pos = positions[start:stop] 427 if window_start_positions is None: 428 # TODO: position is 1-based (or use offset?) --> 429 pos_starts = np.arange(offset, contig_pos[-1] + offset, step=step) 430 window_starts = np.searchsorted(contig_pos, pos_starts) + start 431 window_stops = np.searchsorted(contig_pos, pos_starts + size) + start IndexError: index -1 is out of bounds for axis 0 with size 0 ```This will often be the case for fragmented references with many contigs. I provide a minimum working example for reference.
Minimum working example
The VCF below is a modified version of the file `sgkit/tests/data/sample.vcf` where I added the `contig` key to the header: ``` ##fileformat=VCFv4.0 ##fileDate=20090805 ##source=myImputationProgramV3.1 ##reference=1000GenomesPilot-NCBI36 ##phasing=partial ##contig=