OSDN Git Service

File system path for statndalone version
[minimpy2/mp2.git] / run_test.py
1 from statistics import NormalDist
2 import sys
3
4
5 class RunTest:
6     def __init__(self, sequence, v1, v2):
7         #sequence = [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1]
8         self.sequence = sequence
9         self.v1, self.v2 = v1, v2
10
11     def get_p(self):
12         n1 = self.sequence.count(self.v1)
13         n2 = self.sequence.count(self.v2)
14         if n1 == 0 or n2 == 0:
15             return None, None
16         r_bar = 1.0 + (2.0 * n1 * n2) / (n1 + n2)
17         sd = (2 * n1 * n2 * (2 * n1 * n2 - n1 -n2)) / (((n1 + n2) ** 2) * (n1 + n2 - 1))
18         r = self.get_runs()
19         z = (r - r_bar) / sd
20         p = 2 * (1 - NormalDist().cdf(z))
21         if p > 1.0:
22             p = 1.0
23         return z, p
24
25     def get_runs(self):
26         prev_value = None
27         i = 0
28         runs = 0
29         while i < len(self.sequence):
30             cur_vale = self.sequence[i]
31             if prev_value != cur_vale:
32                 runs += 1
33             i += 1
34             prev_value = cur_vale
35         return runs
36
37
38 def get_random_sequence(min, max, random):
39     mn = 10**min
40     mx = 10**max
41     n = random.randint(mn, mx)
42     return bin(n)[2:]