def test_iterate_bed_reader(self, bed_filename): bed_path = test_utils.genomics_core_testdata(bed_filename) expected = [('chr1', 10, 20), ('chr1', 100, 200)] with bed.BedReader(bed_path) as reader: records = list(reader.iterate()) self.assertLen(records, 2) self.assertEqual([(r.reference_name, r.start, r.end) for r in records], expected)
def test_roundtrip_writer(self, filename): output_path = test_utils.test_tmpfile(filename) with bed.BedWriter(output_path, header=bed_pb2.BedHeader(num_fields=5)) as writer: for record in self.records: writer.write(record) with bed.BedReader(output_path) as reader: v2_records = list(reader.iterate()) self.assertEqual(self.records, v2_records)
def test_roundtrip_num_fields(self, num_fields): all_num_fields_in_file = [ n for n in _VALID_NUM_BED_FIELDS if n >= num_fields ] for num_fields_in_file in all_num_fields_in_file: lines = ['\t'.join(line[:num_fields_in_file]) for line in self.tokens] contents = '{}\n'.format('\n'.join(lines)) input_path = test_utils.test_tmpfile('test_field.bed', contents=contents) with bed.BedReader(input_path, num_fields=num_fields) as reader: records = list(reader.iterate()) output_path = test_utils.test_tmpfile('test_field2.bed') with bed.BedWriter(output_path, header=reader.header) as writer: for record in records: writer.write(record) with bed.BedReader(output_path) as reader2: v2_records = list(reader2.iterate()) self.assertLen(records, 3) self.assertEqual(records, v2_records)
def bed_parser(filename): """Parses Range objects from a BED-formatted file object. See http://bedtools.readthedocs.org/en/latest/content/general-usage.html for more information on the BED format. Args: filename: file name of a BED-formatted file. Yields: nucleus.genomics.v1.Range protobuf objects. """ with bed.BedReader(filename) as fin: for r in fin.iterate(): yield make_range(r.reference_name, r.start, r.end)
def test_invalid_num_fields(self, invalid_num_fields): bed_path = test_utils.genomics_core_testdata('test_regions.bed') with self.assertRaisesRegexp(ValueError, 'Invalid requested number of fie'): reader = bed.BedReader(bed_path, num_fields=invalid_num_fields)
def test_native_bed_header(self, bed_filename): bed_path = test_utils.genomics_core_testdata(bed_filename) with bed.BedReader(bed_path) as reader: self.assertEqual(reader.header.num_fields, 12) with bed.NativeBedReader(bed_path) as native_reader: self.assertEqual(native_reader.header.num_fields, 12)