async def test_var_var(self): a = var(2) b = var(5) res = my_sum(a=a, b=b) await wait_for_var(res) self.assertIsInstance(res, Wrapped) self.assertEqual(unwrap(res), 7)
async def test_exception_propagation(self): a = var(None) b = var() res = my_sum(a=a, b=b) await wait_for_var(res) self.assertIsNotNone(unwrap_exception(res)) with self.assertRaisesRegex(Exception, r'.*b.*'): unwrap(res)
async def test_var_changes(self): a = var(2) b = var(5) res = await async_sum(a=a, b=b) a.set(6) await wait_for_var(res) self.assertEqual(11, unwrap(res)) # 6+5 b.set(3) await wait_for_var(res) self.assertEqual(9, unwrap(res)) # 6+3
async def test_var_changes(self): a = var(2) b = var(5) res = my_sum(a=a, b=b) a @= 6 await wait_for_var(res) self.assertEqual(unwrap(res), 11) # 6+5 b @= 3 await wait_for_var(res) self.assertEqual(unwrap(res), 9) # 6+3
async def test_vars(self): global called_times called_times = 0 a = var(None) res = inc_called_times(a) await wait_for_var(res) unwrap(res) self.assertEqual(1, called_times) a @= 55 await wait_for_var(res) await asyncio.sleep(0.1) unwrap(res) self.assertEqual(2, called_times) some_observable.__notifier__.notify_observers() await wait_for_var(res) await asyncio.sleep(1) unwrap(res) self.assertEqual(3, called_times) some_observable.__notifier__.notify_observers() await wait_for_var(res) await asyncio.sleep(1) unwrap(res) self.assertEqual(4, called_times)
async def setUp(self): global called_times2 global some_observable self.var1 = var() some_observable @= 3 await wait_for_var() called_times2 = 0
async def test_1(self): global some_observable a = var(5) b = var(3) res = pass_args(a, b) self.assertTrue(isinstance(res, Wrapped)) await wait_for_var(res) self.assertEqual(8, unwrap(res)) self.assertEqual(1, called_times2) a @= 10 await wait_for_var(res) self.assertEqual(8, unwrap(res)) self.assertEqual(1, called_times2) b @= 100 await wait_for_var(res) self.assertEqual(110, unwrap(res)) self.assertEqual(2, called_times2)
async def test_exception_propagation(self): b = var() res = await async_sum_with_yield(2, b=b) # type: Wrapped await wait_for_var(res) self.assertEqual(inside, 0) self.assertIsNotNone(unwrap_exception(res)) with self.assertRaisesRegex(Exception, r'.*b.*'): unwrap(res) b @= 5 await wait_for_var(res)
async def test_a(self): b = var(5) res = await async_sum_with_yield(2, b=b) self.assertIsInstance(res, Wrapped) self.assertEqual(unwrap(res), 7) self.assertEqual(inside, 1) b @= 1 await wait_for_var(res) self.assertEqual(unwrap(res), 3) self.assertEqual(inside, 1) del res await asyncio.sleep((0.1))
async def test_exception_propagation(self): b = var() res = sum_with_yield(2, b=b) self.assertIsInstance(res, Wrapped) await wait_for_var(res) gc.collect() self.assertIsNotNone(unwrap_exception(res)) self.assertEqual(0, inside) with self.assertRaisesRegex(Exception, r'.*b.*'): unwrap(res) b.set(5) await wait_for_var(res) await asyncio.sleep(0.1) gc.collect() self.assertIsNone(unwrap_exception(res)) self.assertEqual(7, unwrap(res)) self.assertEqual(1, inside)
async def test_iterable(self): global called_times2 called_times2 = 0 a = var(55) res = inc_called_times2(a, ignored_arg=[self.observable1, self.observable2]) await wait_for_var(res) self.assertEqual(55, res) self.assertEqual(1, called_times2) self.observable1.__notifier__.notify_observers() await wait_for_var(res) self.assertEqual(55, res) self.assertEqual(2, called_times2) self.observable2.__notifier__.notify_observers() await wait_for_var(res) self.assertEqual(55, res) self.assertEqual(3, called_times2)
def synced_vlines(axes: Union[str, Sequence[str]], x_var=var(), link_x_axes=True): def vline_and_click(axes): fig = unwrap(axes).figure def onclick(event): if event.dblclick: x_var.set(int(event.xdata)) @reactive_finalizable def add_onclick(): cid = fig.canvas.mpl_connect('button_press_event', onclick) yield fig.canvas.mpl_disconnect(cid) vline = volatile(axes.axvline(x_var, color="green")) onclick_holder = volatile(add_onclick()) return vline, onclick_holder link_mpl_axes(axes, 'x') return [vline_and_click(vis.axes(a)) for a in axes]
async def test_a(self): b = var(5) res = sum_with_yield(2, b=b) self.assertIsInstance(res, Wrapped) self.assertEqual(unwrap(res), 7) gc.collect() self.assertEqual(inside, 1) b.set(1) print("w1") await wait_for_var(res) self.assertEqual(unwrap(res), 3) self.assertEqual(inside, 1) # await res.dispose() del b gc.collect() # weak_res = weakref.ref(res) # print(gc.get_referrers(res)) del res gc.collect() await wait_for_var() await asyncio.sleep(0.5) self.assertEqual(inside, 0) print("finished)")
async def test_var_val_keyword(self): a = var(2) res = await async_sum(a=a, b=5) self.assertIsInstance(res, Wrapped) self.assertEqual(unwrap(res), 7)
async def test_var_val_positional(self): a = var(2) res = my_sum(a, 5) await wait_for_var(res) self.assertIsInstance(res, Wrapped) self.assertEqual(unwrap(res), 7)
async def setUp(self): self.observable1 = var() self.observable2 = var()
# async def test_vars(self): # a = var(None) # b = var(None) # res = none_proof_sum(a, b) # await wait_for_var(res) # self.assertIsNone(raw(res)) # b.set(2) # await wait_for_var(res) # self.assertIsNone(raw(res)) # a.set(3) # await wait_for_var(res) # self.assertEqual(raw(res), 5) called_times = 0 some_observable = var() some_observable2 = var() @reactive(other_deps=[some_observable]) def inc_called_times(a): global called_times called_times += 1 return a class OtherDeps(asynctest.TestCase): async def test_vars(self): global called_times called_times = 0 a = var(None)