def _trim_state_df(self, state_df): if state_df.empty: return state_df return df_squash(state_df, self.start_time, state_df.index[-1] + state_df['delta'].iloc[-1], "delta")
def _trim_state_df(self, state_df): if state_df.empty: return state_df return df_squash(state_df, self.start_time, state_df.index[-1] + state_df.delta.values[-1], "delta")
def _max_idle_time(self, start, end, cpus): """ :returns: The maximum idle time of 'cpus' in the [start, end] interval """ max_time = 0 max_cpu = 0 for cpu in cpus: busy_df = self._get_active_df(cpu) busy_df = df_squash(busy_df, start, end) busy_df = busy_df[busy_df.state == 0] if busy_df.empty: continue local_max = busy_df.delta.max() if local_max > max_time: max_time = local_max max_cpu = cpu return max_time, max_cpu
def test_squash_df(self): """ TestTrace: df_squash() behaves as expected """ index = [float(i) for i in range(15, 20)] data = [(1, i % 2) for i in range(15, 20)] df = pd.DataFrame(index=index, data=data, columns=['delta', 'state']) ## Test "standard" slice: # The df here should be: # Time delta state # 16.5 .5 0 # 17 .5 1 df1 = df_squash( df, 16.5, 17.5, ) head = df1.head(1) tail = df1.tail(1) self.assertEqual(len(df1.index), 2) self.assertEqual(df1.index.tolist(), [16.5, 17]) self.assertAlmostEqual(head['delta'].values[0], 0.5) self.assertAlmostEqual(tail['delta'].values[0], 0.5) self.assertEqual(head['state'].values[0], 0) self.assertEqual(tail['state'].values[0], 1) ## Test slice where no event exists in the interval # The df here should be: # Time delta state # 16.2 .6 0 df2 = df_squash(df, 16.2, 16.8) self.assertEqual(len(df2.index), 1) self.assertEqual(df2.index[0], 16.2) self.assertAlmostEqual(df2['delta'].values[0], 0.6) self.assertEqual(df2['state'].values[0], 0) ## Test slice that matches an event's index # The df here should be: # Time delta state # 16 1 0 df3 = df_squash(df, 16, 17) self.assertEqual(len(df3.index), 1) self.assertEqual(df3.index[0], 16) self.assertAlmostEqual(df3['delta'].values[0], 1) self.assertEqual(df3['state'].values[0], 0) ## Test slice past last event # The df here should be: # Time delta state # 19.5 .5 1 df4 = df_squash(df, 19.5, 22) self.assertEqual(len(df4.index), 1) self.assertEqual(df4.index[0], 19.5) self.assertAlmostEqual(df4['delta'].values[0], 0.5) self.assertEqual(df4['state'].values[0], 1) ## Test slice where there's no past event df5 = df_squash(df, 10, 30) self.assertEqual(len(df5.index), 5) ## Test slice where that should contain nothing df6 = df_squash(df, 8, 9) self.assertEqual(len(df6.index), 0)
def test_squash_df(self): """ TestTrace: df_squash() behaves as expected """ index = [float(i) for i in range(15, 20)] data = [(1, i % 2) for i in range(15, 20)] df = pd.DataFrame(index=index, data=data, columns=['delta', 'state']) # Test "standard" slice: # The df here should be: # Time delta state # 16.5 .5 0 # 17 .5 1 df1 = df_squash( df, 16.5, 17.5, ) head = df1.head(1) tail = df1.tail(1) assert len(df1.index) == 2 assert df1.index.tolist() == [16.5, 17] assert head['delta'].values[0] == pytest.approx(0.5) assert tail['delta'].values[0] == pytest.approx(0.5) assert head['state'].values[0] == 0 assert tail['state'].values[0] == 1 # Test slice where no event exists in the interval # The df here should be: # Time delta state # 16.2 .6 0 df2 = df_squash(df, 16.2, 16.8) assert len(df2.index) == 1 assert df2.index[0] == 16.2 assert df2['delta'].values[0] == pytest.approx(0.6) assert df2['state'].values[0] == 0 # Test slice that matches an event's index # The df here should be: # Time delta state # 16 1 0 df3 = df_squash(df, 16, 17) assert len(df3.index) == 1 assert df3.index[0] == 16 assert df3['delta'].values[0] == pytest.approx(1) assert df3['state'].values[0] == 0 # Test slice past last event # The df here should be: # Time delta state # 19.5 .5 1 df4 = df_squash(df, 19.5, 22) assert len(df4.index) == 1 assert df4.index[0] == 19.5 assert df4['delta'].values[0] == pytest.approx(0.5) assert df4['state'].values[0] == 1 # Test slice where there's no past event df5 = df_squash(df, 10, 30) assert len(df5.index) == 5 # Test slice where that should contain nothing df6 = df_squash(df, 8, 9) assert len(df6.index) == 0