def test_profile_df(self): def simple(): def simple2(): df = pandas.DataFrame([{ "A": "x", "AA": "xx", "AAA": "xxx" }, { "AA": "xxxxxxx", "AAA": "xxx" }]) return df2rst(df) return simple2() rootrem = os.path.normpath( os.path.abspath(os.path.join(os.path.dirname(rootfile), '..'))) ps, df = profile(simple, rootrem=rootrem, as_df=True) # pylint: disable=W0632 self.assertIsInstance(df, pandas.DataFrame) self.assertEqual(df.loc[0, 'namefct'].split('-')[-1], 'simple') self.assertNotEmpty(ps) df = profile2df(ps, False) self.assertIsInstance(df, list) self.assertIsInstance(df[0], dict) df = profile2df(ps, True) self.assertIsInstance(df, pandas.DataFrame)
def test_profile_graph(self): calls = [0] def f0(t): calls[0] += 1 time.sleep(t) def f1(t): calls[0] += 1 time.sleep(t) def f2(): calls[0] += 1 f1(0.1) f1(0.01) def f3(): calls[0] += 1 f0(0.2) f1(0.5) def f4(): calls[0] += 1 f2() f3() ps = profile(f4)[0] # pylint: disable=W0632 profile2df(ps, verbose=False, clean_text=lambda x: x.split('/')[-1]) root, nodes = profile2graph(ps, clean_text=lambda x: x.split('/')[-1]) self.assertEqual(len(nodes), 6) self.assertIsInstance(nodes, dict) self.assertIsInstance(root, ProfileNode) self.assertIn("(", str(root)) dicts = root.as_dict() self.assertEqual(10, len(dicts)) text = root.to_text() self.assertIn("1 1", text) self.assertIn(' f1', text) text = root.to_text(fct_width=20) self.assertIn('...', text) root.to_text(sort_key=SortKey.CUMULATIVE) root.to_text(sort_key=SortKey.TIME) self.assertRaise(lambda: root.to_text(sort_key=SortKey.NAME), NotImplementedError) js = root.to_json(indent=2) self.assertIn('"details"', js) js = root.to_json(as_str=False) self.assertIsInstance(js, dict)
def test_profile_df_verbose(self): calls = [0] def f0(t): calls[0] += 1 time.sleep(t) def f1(t): calls[0] += 1 time.sleep(t) def f2(): calls[0] += 1 f1(0.1) f1(0.01) def f3(): calls[0] += 1 f0(0.2) f1(0.5) def f4(): calls[0] += 1 f2() f3() ps = profile(f4)[0] # pylint: disable=W0632 df = self.capture(lambda: profile2df(ps, verbose=True, fLOG=print))[0] dfi = df.set_index('fct') self.assertEqual(dfi.loc['f4', 'ncalls1'], 1) self.assertEqual(dfi.loc['f4', 'ncalls2'], 1)
def test_profile_graph_recursive1(self): def f0(t): if t < 0.1: time.sleep(t) else: f0(t - 0.1) def f4(): f0(0.15) ps = profile(f4)[0] # pylint: disable=W0632 profile2df(ps, verbose=False, clean_text=lambda x: x.split('/')[-1]) root, nodes = profile2graph(ps, clean_text=lambda x: x.split('/')[-1]) self.assertEqual(len(nodes), 3) text = root.to_text() self.assertIn(" f0", text) js = root.to_json(indent=2) self.assertIn('"details"', js)