root/galaxy-central/eggs/bx_python-0.5.0_dev_f74aec067563-py2.6-macosx-10.6-universal-ucs2.egg/bx/intervals/intersection_tests.py @ 3

リビジョン 3, 6.3 KB (コミッタ: kohda, 14 年 前)

Install Unix tools  http://hannonlab.cshl.edu/galaxy_unix_tools/galaxy.html

行番号 
1import sys, os
2import unittest
3try:
4    sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
5except:
6    sys.path.insert(0, os.path.dirname(os.path.abspath(".")))
7
8from bx.intervals.intersection import Interval
9from bx.intervals.intersection import IntervalNode
10from bx.intervals.intersection import IntervalTree
11
12class NeighborTestCase(unittest.TestCase):
13
14    def setUp(self):
15        iv = IntervalNode( 50, 59, Interval(50, 59))
16        for i in range(0, 110, 10):
17            if i == 50: continue
18            f = Interval(i, i + 9)
19            iv = iv.insert( f.start, f.end, f)
20        self.intervals = iv
21
22    def test_left(self):
23        iv = self.intervals
24        self.assertEqual(str(iv.left(60, n=2)), str([Interval(50, 59), Interval(40, 49)]))
25
26        for i in range(10, 100, 10):
27            r = iv.left(i, max_dist=10, n=1)
28            self.assertEqual(r[0].end,  i - 1)
29
30    def test_toomany(self):
31        iv = self.intervals
32        self.assertEqual(len(iv.left(60, n=200)) , 6)
33
34
35    def test_right(self):
36        iv = self.intervals
37        self.assertEqual(str(iv.left(60, n=2)), str([Interval(50, 59), Interval(40, 49)]))
38
39        def get_right_start(b10):
40            r = iv.right(b10+1, n=1)
41            assert len(r) == 1
42            return r[0].start
43       
44        for i in range(10, 100, 10):
45            self.assertEqual(get_right_start(i), i + 10)
46
47        for i in range(0, 100, 10):
48            r = iv.right(i-1, max_dist=10, n=1)
49            print r
50            self.assertEqual(r[0].start, i)
51
52class UpDownStreamTestCase(unittest.TestCase):
53
54    def setUp(self):
55        iv = IntervalTree()
56        iv.add_interval(Interval(50, 59))
57        for i in range(0, 110, 10):
58            if i == 50: continue
59            f = Interval(i, i + 9)
60            iv.add_interval(f)
61        self.intervals = iv
62
63
64    def test_upstream(self):
65        iv = self.intervals
66        upstreams = iv.upstream_of_interval(Interval(59, 60), num_intervals=200)
67        for u in upstreams:
68            self.assertTrue(u.end < 59)
69   
70        upstreams = iv.upstream_of_interval(Interval(60, 70, strand=-1),
71                num_intervals=200)
72        for u in upstreams:
73            self.assertTrue(u.start > 70)
74   
75   
76        upstreams = iv.upstream_of_interval(Interval(58, 58, strand=-1),
77                num_intervals=200)
78        for u in upstreams:
79            self.assertTrue(u.start > 59)
80   
81   
82    def test_downstream(self):
83        iv = self.intervals
84        downstreams = iv.downstream_of_interval(Interval(59, 60),
85                num_intervals=200)
86        for d in downstreams:
87            self.assertTrue(d.start > 60)
88   
89        downstreams = iv.downstream_of_interval(Interval(59, 60, strand=-1),
90                num_intervals=200)
91        for d in downstreams:
92            self.assertTrue(d.start < 59)
93       
94
95    def test_n(self):
96        iv = self.intervals
97        for i in range(0, 90, 10):
98            r = iv.after(i, max_dist=20, num_intervals=2)
99            self.assertEqual(r[0].start, i + 10)
100            self.assertEqual(r[1].start, i + 20)
101
102            r = iv.after_interval(Interval(i, i), max_dist=20, num_intervals=2)
103            self.assertEqual(r[0].start, i + 10)
104            self.assertEqual(r[1].start, i + 20)
105
106
107class LotsaTestCase(unittest.TestCase):
108    """ put lotsa data in the tree and make sure it works"""
109    def setUp(self):
110        iv = IntervalNode(1, 2, Interval(1, 2))
111        self.max = 1000000
112        for i in range(0, self.max, 10):
113            f = Interval(i, i)
114            iv = iv.insert(f.start, f.end, f)
115
116        for i in range(600):
117            iv = iv.insert( 0, 1, Interval(0, 1) )
118        self.intervals = iv
119
120
121
122    def test_count(self):
123        iv = self.intervals
124       
125        r = iv.right(1, n=33)
126        self.assertEqual(len(r), 33)
127
128        l = iv.left(1, n=33)
129        self.assertEqual(len(l), 1)
130
131        u = iv.right(1, n=9999)
132        self.assertEqual(len(u), 250)
133
134        # now increase max_dist
135        u = iv.right(1, n=9999, max_dist=99999)
136        self.assertEqual(len(u), 9999)
137
138
139    def test_max_dist(self):
140        iv = self.intervals
141        r = iv.right(1, max_dist=0, n=10)
142        self.assertEqual(len(r), 0)
143
144        for n, d in enumerate(range(10, 1000, 10)):
145            r = iv.right(1, max_dist=d, n=10000)
146            self.assertEqual(len(r), n + 1)
147
148    def test_find(self):
149        iv = self.intervals
150        random =  __import__("random")
151        for t in range(25):
152            start = random.randint(0, self.max - 10000)
153            end  = start + random.randint(100, 10000)
154
155            results = iv.find(start, end)
156            for feat in results:
157                self.assertTrue(
158                        (feat.end >= start and feat.end <= end)
159                            or
160                        (feat.start <= end and feat.start >= start)
161                        )
162
163
164class IntervalTreeTest(unittest.TestCase):
165    def setUp(self):
166
167        iv = IntervalTree()
168        n = 0
169        for i in range(1, 1000, 80):
170            iv.insert(i, i + 10, dict(value=i*i))
171            # add is synonym for insert.
172            iv.add(i + 20, i + 30, dict(astr=str(i*i)))
173
174            # or insert/add an interval object with start, end attrs.
175            iv.insert_interval(Interval(i + 40, i + 50,
176                value=dict(astr=str(i*i))))
177            iv.add_interval(Interval(i + 60, i + 70,
178                value=dict(astr=str(i*i))))
179
180            n += 4
181        self.intervals = self.iv = iv
182        self.nintervals = n
183
184   
185    def test_find(self):
186
187        r = self.iv.find(100, 200)
188        self.assertEqual(len(r), 5)
189
190    def test_traverse(self):
191        a = []
192        fn = a.append
193
194        self.iv.traverse(fn)
195        self.assertEqual(len(a), self.nintervals)
196   
197    def test_empty(self):
198        iv = IntervalTree()
199        self.assertEqual([], iv.find(100, 300))
200        self.assertEqual([], iv.after(100))
201        self.assertEqual([], iv.before(100))
202        self.assertEqual([], iv.after_interval(100))
203        self.assertEqual([], iv.before_interval(100))
204        self.assertEqual([], iv.upstream_of_interval(100))
205        self.assertEqual([], iv.downstream_of_interval(100))
206        self.assertEqual(None, iv.traverse(lambda x: x.append(1)))
207
208    def test_public_interval(self):
209
210        fn = lambda ival: self.assert_(ival.interval)
211        self.iv.traverse(fn)
212
213if __name__ == "__main__":
214
215    unittest.main()
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。