Belle II Software  release-08-01-10
test_IPythonHandler.py
1 
8 import os
9 from unittest import TestCase, main
10 
11 from hep_ipython_tools.calculation_process import CalculationProcess
12 from hep_ipython_tools.calculation import Calculation
13 from hep_ipython_tools.calculation_queue import CalculationQueue
14 from hep_ipython_tools.information import EnvironmentInformation
15 from hep_ipython_tools.ipython_handler import IPythonHandler
16 from hep_ipython_tools.tests.fixtures import MockQueue
17 
18 # @cond internal_test
19 
20 
21 class DeriviedCalculationProcess(CalculationProcess):
22 
23  def __init__(self, result_queue, log_file_name, parameters, some_variable, other_variable):
24  CalculationProcess.__init__(self, result_queue, log_file_name, parameters)
25 
26  self.some_variable = some_variable
27  self.other_variable = other_variable
28 
29  def start_process(self):
30  pass
31 
32 
33 class DerivedCalculation(Calculation):
34 
35  def __init__(self):
36  Calculation.__init__(self)
37  self._calculation_process_type = DeriviedCalculationProcess
38 
39 
40 class DerivedIPythonHandler(IPythonHandler):
41 
42  def __init__(self):
43  IPythonHandler.__init__(self)
44 
45  self._calculation_type = DerivedCalculation
46 
47 
48 class TestIPythonHandler(TestCase):
49 
50  def test_default(self):
51  handler = IPythonHandler()
52 
53  self.assertEqual(handler.log_files, [])
54  self.assertEqual(handler._calculation_type, Calculation)
55  self.assertIsInstance(handler.information, EnvironmentInformation)
56 
57  def test_create_queue(self):
58  queue = DerivedIPythonHandler.create_queue()
59 
60  self.assertIsInstance(queue, CalculationQueue)
61 
62  self.assertEqual(queue.get_keys(), [])
63  self.assertEqual(queue.results, {})
64 
65  def test_next_log_file(self):
66 
67  handler = DerivedIPythonHandler()
68 
69  self.assertEqual(handler.log_files, [])
70 
71  next_log_file = handler.next_log_file_name()
72 
73  try:
74  self.assertEqual(len(handler.log_files), 1)
75  self.assertEqual(handler.log_files[0][1], next_log_file)
76 
77  finally:
78  os.unlink(next_log_file)
79 
80  def test_many_next_log_files(self):
81  handler = DerivedIPythonHandler()
82 
83  self.assertEqual(handler.log_files, [])
84 
85  next_log_files = [handler.next_log_file_name() for _ in range(200)]
86 
87  try:
88  self.assertEqual(len(handler.log_files), 20)
89 
90  names = [log_file[1] for log_file in handler.log_files]
91  self.assertEqual(names, next_log_files[-20:])
92 
93  for closed_log_file in next_log_files[:-20]:
94  self.assertFalse(os.path.exists(closed_log_file))
95 
96  finally:
97  for log_file_name in next_log_files:
98  if os.path.exists(log_file_name):
99  os.unlink(log_file_name)
100 
101  def test_many_log_files_closed(self):
102  handler = DerivedIPythonHandler()
103 
104  self.assertEqual(handler.log_files, [])
105 
106  next_log_files = [handler.next_log_file_name() for _ in range(100)]
107 
108  for log_file_name in next_log_files:
109  if os.path.exists(log_file_name):
110  os.unlink(log_file_name)
111 
112  next_log_files = [handler.next_log_file_name() for _ in range(100)]
113 
114  try:
115  self.assertEqual(len(handler.log_files), 20)
116 
117  names = [log_file[1] for log_file in handler.log_files]
118  self.assertEqual(names, next_log_files[-20:])
119 
120  for closed_log_file in next_log_files[:-20]:
121  self.assertFalse(os.path.exists(closed_log_file))
122 
123  finally:
124  for log_file_name in next_log_files:
125  if os.path.exists(log_file_name):
126  os.unlink(log_file_name)
127 
128  def test_process_result_queue(self):
129  handler = DerivedIPythonHandler()
130 
131  queue = CalculationQueue()
132  queue.queue = MockQueue()
133 
134  queue.put("TestItem", "TestValue")
135 
136  calculation = handler.process(queue, some_variable=42, other_variable=21)
137 
138  self.assertEqual(len(calculation.process_list), 1)
139 
140  added_calculation = calculation.process_list[0]
141 
142  self.assertEqual(added_calculation.log_file_name, handler.log_files[0][1])
143  self.assertEqual(added_calculation.result_queue, queue)
144  self.assertEqual(added_calculation.result_queue.get_keys(), ["TestItem"])
145  self.assertEqual(added_calculation.result_queue.get("TestItem"), "TestValue")
146  self.assertEqual(added_calculation.parameters, None)
147  self.assertEqual(added_calculation.some_variable, 42)
148  self.assertEqual(added_calculation.other_variable, 21)
149 
150  self.assertEqual(calculation.get_keys(), ["TestItem"])
151  self.assertEqual(calculation.get("TestItem"), "TestValue")
152  self.assertEqual(calculation.get_parameters(), None)
153 
154  def test_process_no_result_queue(self):
155  handler = DerivedIPythonHandler()
156 
157  calculation = handler.process(some_variable=42, other_variable=21)
158 
159  self.assertEqual(len(calculation.process_list), 1)
160 
161  added_calculation = calculation.process_list[0]
162 
163  result_queue = added_calculation.result_queue
164 
165  self.assertIsInstance(result_queue, CalculationQueue)
166 
167  def test_parameter_space_no_queue(self):
168  handler = DerivedIPythonHandler()
169 
170  def creator_function(some_variable, other_variable):
171  return dict(some_variable=some_variable + 1, other_variable=other_variable + "c")
172 
173  calculations = handler.process_parameter_space(creator_function,
174  some_variable=[1, 2], other_variable=["a", "b"])
175 
176  self.assertEqual(len(calculations.process_list), 4)
177 
178  parameters = calculations.get_parameters()
179 
180  self.assertIn({"some_variable": 1, "other_variable": "a"}, parameters)
181  self.assertIn({"some_variable": 1, "other_variable": "b"}, parameters)
182  self.assertIn({"some_variable": 2, "other_variable": "a"}, parameters)
183  self.assertIn({"some_variable": 2, "other_variable": "b"}, parameters)
184 
185  def assert_is_in_processes(some_variable, other_variable):
186  for process in calculations.process_list:
187  if process.some_variable == some_variable and process.other_variable == other_variable:
188  return True
189 
190  self.fail()
191 
192  assert_is_in_processes(2, "ac")
193  assert_is_in_processes(3, "ac")
194  assert_is_in_processes(2, "bc")
195  assert_is_in_processes(3, "bc")
196 
197 
198 if __name__ == "__main__":
199  main()
200 # @endcond
Definition: main.py:1