import os
import numpy as np
import pandas as pd
import pandas.util.testing as pdt
import pytest
[docs]class TestExonJunctionAdjacencies(object):
@pytest.fixture
[docs] def snap25_exon(self, db, snap25_exon_id):
return db[snap25_exon_id]
@pytest.fixture
[docs] def adjacencies(self, junction_metadata, db):
from outrigger.index.adjacencies import ExonJunctionAdjacencies
return ExonJunctionAdjacencies(junction_metadata, db)
@pytest.fixture
[docs] def adjacent_in_genome_template(self, tasic2016_intermediate):
return os.path.join(
tasic2016_intermediate,
'junctions_genome_adjacent_to_exon_{}stream.csv')
@pytest.fixture
[docs] def adjacent_in_genome_upstream(self, adjacent_in_genome_template):
return pd.read_csv(adjacent_in_genome_template.format('up'),
squeeze=True, index_col=0)
@pytest.fixture
[docs] def adjacent_in_genome_downstream(self, adjacent_in_genome_template):
return pd.read_csv(adjacent_in_genome_template.format('down'),
squeeze=True, index_col=0)
@pytest.fixture
[docs] def adjacent_in_genome(self, adjacent_in_genome_upstream,
adjacent_in_genome_downstream):
"""Dict of upstream and downstream boolean junctions"""
return {'upstream': adjacent_in_genome_upstream,
'downstream': adjacent_in_genome_downstream}
[docs] def test___init(self, junction_metadata, db):
from outrigger.index.adjacencies import ExonJunctionAdjacencies
from outrigger.common import (JUNCTION_ID, EXON_START, EXON_STOP,
CHROM, STRAND)
adjacencies = ExonJunctionAdjacencies(junction_metadata, db)
true_metadata = junction_metadata.copy()
true_metadata = true_metadata.set_index(JUNCTION_ID)
true_metadata = true_metadata.sort_index()
pdt.assert_frame_equal(adjacencies.metadata, true_metadata)
assert adjacencies.junction_id == JUNCTION_ID
assert adjacencies.exon_start == EXON_START
assert adjacencies.exon_stop == EXON_STOP
assert adjacencies.chrom == CHROM
assert adjacencies.strand == STRAND
assert adjacencies.db == db
@pytest.mark.xfail
[docs] def test___init_missing_required_column(self, junction_metadata, db):
from outrigger.index.adjacencies import ExonJunctionAdjacencies
from outrigger.common import JUNCTION_ID
test_metadata = junction_metadata.copy()
test_metadata = test_metadata.drop(JUNCTION_ID, axis=1)
ExonJunctionAdjacencies(test_metadata, db)
[docs] def test__junctions_genome_adjacent_to_exon(self, adjacencies, snap25_exon,
adjacent_in_genome):
true = adjacent_in_genome
test = adjacencies._junctions_genome_adjacent_to_exon(snap25_exon)
pdt.assert_dict_equal(test, true)
[docs] def test__to_stranded_transcript_adjacency(self, adjacencies, strand,
adjacent_in_genome):
true = adjacent_in_genome.copy()
test = adjacencies._to_stranded_transcript_adjacency(
adjacent_in_genome, strand)
if strand == '-':
pdt.assert_series_equal(test['upstream'],
true['downstream'])
pdt.assert_series_equal(test['downstream'],
true['upstream'])
elif strand == '+':
pdt.assert_series_equal(test['upstream'],
true['upstream'])
pdt.assert_series_equal(test['downstream'],
true['downstream'])
[docs] def test__single_junction_exon_triple(self, adjacencies,
snap25_exon_id,
tasic2016_intermediate,
adjacent_in_genome_upstream):
test = adjacencies._single_junction_exon_triple(
adjacent_in_genome_upstream, 'downstream', snap25_exon_id)
test = test.sort_values('junction')
test.index = np.arange(0, test.shape[0])
csv = os.path.join(tasic2016_intermediate,
'single_junction_exon_triple.csv')
true = pd.read_csv(csv)
true = true.sort_values('junction')
true.index = np.arange(0, true.shape[0])
pdt.assert_frame_equal(test, true)
[docs] def test__adjacent_junctions_single_exon(self, adjacencies, snap25_exon,
tasic2016_intermediate):
test = adjacencies.junctions_adjacent_to_this_exon(snap25_exon)
test = test.sort_values('junction')
test.index = np.arange(test.shape[0])
csv = os.path.join(tasic2016_intermediate,
'adjacent_junctions_single_exon.csv')
true = pd.read_csv(csv)
true = true.sort_values('junction')
true.index = np.arange(true.shape[0])
pdt.assert_frame_equal(test, true)
[docs] def test_neighboring_exons(self, adjacencies, tasic2016_intermediate):
test = adjacencies.upstream_downstream_exons()
test = test.sort_values(['junction', 'exon'])
test.index = np.arange(test.shape[0])
csv = os.path.join(tasic2016_intermediate,
'neighboring_exons.csv')
true = pd.read_csv(csv)
true = true.sort_values(['junction', 'exon'])
true.index = np.arange(true.shape[0])
pdt.assert_frame_equal(test, true)