Beispiel #1
0
    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")
Beispiel #2
0
    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")
Beispiel #3
0
    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
Beispiel #4
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)
        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)
Beispiel #5
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