Exemplo n.º 1
0
    def test_vector_aggfunc_multiple_trigger(self):
        """TestAggregator: multi trigger vector aggfunc"""
        def aggfunc(series):
            return series.cumsum()

        filters = {"result": "fire"}

        event_class = self._trace.aim_and_fire
        value = 1
        pivot = "identifier"

        trigger_fire = Trigger(self._trace, event_class, filters, value, pivot)

        filters = {"result": "blank"}
        value = -1
        trigger_blank = Trigger(self._trace, event_class, filters, value,
                                pivot)

        aggregator = MultiTriggerAggregator([trigger_fire, trigger_blank],
                                            self.topology,
                                            aggfunc=aggfunc)

        # There are three "fire" in total
        # The all level in topology looks like
        # [[0, 1]]
        result = aggregator.aggregate(level="all")
        expected_result = pd.Series([1.0, 0.0, 1.0, 0.0, 1.0, 0.0],
                                    index=pd.Index(
                                        [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]))
        assert_series_equal(result[0], expected_result)
Exemplo n.º 2
0
    def test_default_aggfunc_multiple_trigger(self):
        """MultiTriggerAggregator with the default aggfunc"""

        trigger_fire = Trigger(self._trace,
                               self._trace.aim_and_fire,
                               filters={"result": "fire"},
                               pivot="identifier",
                               value=1)

        trigger_blank = Trigger(self._trace,
                                self._trace.aim_and_fire,
                                filters={"result": "blank"},
                                pivot="identifier",
                                value=2)

        aggregator = MultiTriggerAggregator([trigger_fire, trigger_blank],
                                            self.topology)

        results = aggregator.aggregate(level="cpu")
        expected_results = [
            pd.Series([1., 2., 1., 0., 0., 0.],
                      index=[0.1, 0.2, 0.3, 0.4, 0.5, 0.6]),
            pd.Series([0., 0., 0., 2., 1., 2.],
                      index=[0.1, 0.2, 0.3, 0.4, 0.5, 0.6]),
        ]

        self.assertEqual(len(results), len(expected_results))
        for result, expected in zip(results, expected_results):
            assert_series_equal(result, expected)
Exemplo n.º 3
0
    def test_vector_aggfunc_single_trigger(self):
        """TestAggregator: 1 trigger vector aggfunc"""

        def aggfunc(series):
            return series.cumsum()

        filters = {
            "result": "fire"
        }

        event_class = self._trace.aim_and_fire
        value = 1
        pivot = "identifier"

        trigger = Trigger(self._trace, event_class, filters, value, pivot)

        aggregator = MultiTriggerAggregator([trigger],
                        self.topology,
                        aggfunc=aggfunc)

        # There are three "fire" in total
        # The all level in topology looks like
        # [[0, 1]]
        result = aggregator.aggregate(level="all")
        expected_result = pd.Series([1.0, 1.0, 2.0, 2.0, 3.0, 3.0],
                                      index=pd.Index([0.1, 0.2, 0.3, 0.4, 0.5, 0.6])
                          )
        assert_series_equal(result[0], expected_result)
Exemplo n.º 4
0
    def test_scalar_aggfunc_single_trigger(self):
        """TestAggregator: 1 trigger scalar aggfunc"""
        def aggfunc(series):
            return series.sum()

        filters = {"result": "fire"}

        event_class = self._trace.aim_and_fire
        value = 1
        pivot = "identifier"

        trigger = Trigger(self._trace, event_class, filters, value, pivot)

        aggregator = MultiTriggerAggregator([trigger],
                                            self.topology,
                                            aggfunc=aggfunc)

        # There are three "fire" in total
        # The all level in topology looks like
        # [[0, 1]]
        result = aggregator.aggregate(level="all")
        self.assertEqual(result, [3.0])

        # There are two "fire" on the first node group and a
        # a single "fire" on the second node group at the cluster
        # level which looks like
        # [[0], [1]]
        result = aggregator.aggregate(level="cluster")
        self.assertEqual(result, [2.0, 1.0])
Exemplo n.º 5
0
    def test_default_aggfunc_multiple_trigger(self):
        """MultiTriggerAggregator with the default aggfunc"""

        trigger_fire = Trigger(self._trace, self._trace.aim_and_fire,
                          filters={"result": "fire"},
                          pivot="identifier", value=1)

        trigger_blank = Trigger(self._trace, self._trace.aim_and_fire,
                          filters={"result": "blank"},
                          pivot="identifier", value=2)

        aggregator = MultiTriggerAggregator([trigger_fire, trigger_blank],
                                            self.topology)

        results = aggregator.aggregate(level="cpu")
        expected_results = [
            pd.Series([1., 2., 1., 0., 0., 0.],
                      index=[0.1, 0.2, 0.3, 0.4, 0.5, 0.6]),
            pd.Series([0., 0., 0., 2., 1., 2.],
                      index=[0.1, 0.2, 0.3, 0.4, 0.5, 0.6]),
            ]

        self.assertEquals(len(results), len(expected_results))
        for result, expected in zip(results, expected_results):
            assert_series_equal(result, expected)
    def _generate_matrix(self, run, reference_run, aggfunc):
        """Generate the Correlation Matrix"""

        reference_aggs = []
        aggs = []

        for idx in range(self._dimension):

            reference_aggs.append(
                MultiTriggerAggregator(
                    sched_funcs.sched_triggers(reference_run,
                                               self._reference_pids[idx],
                                               trappy.sched.SchedSwitch),
                    self._topology, aggfunc))

            aggs.append(
                MultiTriggerAggregator(
                    sched_funcs.sched_triggers(run, self._pids[idx],
                                               trappy.sched.SchedSwitch),
                    self._topology, aggfunc))

        agg_pair_gen = ((r_agg, agg) for r_agg in reference_aggs
                        for agg in aggs)

        # pylint fails to recognize numpy members.
        # pylint: disable=no-member
        matrix = np.zeros((self._dimension, self._dimension))
        # pylint: enable=no-member

        for (ref_result, test_result) in agg_pair_gen:
            i = reference_aggs.index(ref_result)
            j = aggs.index(test_result)
            corr = Correlator(ref_result,
                              test_result,
                              corrfunc=sched_funcs.binary_correlate,
                              filter_gaps=True)
            _, total = corr.correlate(level="cluster")

            matrix[i][j] = total

        return matrix
Exemplo n.º 7
0
    def _aggregator(self, aggfunc):
        """
        Returns an aggregator corresponding to the
        aggfunc, the aggregators are memoized for performance

        Args:
            aggfunc (function(pandas.Series)): Function parameter that
            accepts a pandas.Series object and returns a vector/scalar result
        """

        if aggfunc not in self._aggs.keys():
            self._aggs[aggfunc] = MultiTriggerAggregator(
                self._triggers, self._topology, aggfunc)
        return self._aggs[aggfunc]
Exemplo n.º 8
0
    def test_scalar_aggfunc_single_trigger(self):
        """TestAggregator: 1 trigger scalar aggfunc"""

        def aggfunc(series):
            return series.sum()

        filters = {
            "result": "fire"
        }

        event_class = self._trace.aim_and_fire
        value = 1
        pivot = "identifier"

        trigger = Trigger(self._trace,
                          event_class,
                          filters,
                          value,
                          pivot)

        aggregator = MultiTriggerAggregator([trigger],
                        self.topology,
                        aggfunc=aggfunc)

        # There are three "fire" in total
        # The all level in topology looks like
        # [[0, 1]]
        result = aggregator.aggregate(level="all")
        self.assertEqual(result, [3.0])

        # There are two "fire" on the first node group and a
        # a single "fire" on the second node group at the cluster
        # level which looks like
        # [[0], [1]]
        result = aggregator.aggregate(level="cluster")
        self.assertEqual(result, [2.0, 1.0])
    def _aggregator(self, aggfunc):
        """
        Return an aggregator corresponding to the
        aggfunc, the aggregators are memoized for performance

        :param aggfunc: Function parameter that
            accepts a :mod:`pandas.Series` object and
            returns a vector/scalar

        :type: function(:mod:`pandas.Series`)
        """

        if aggfunc not in self._aggs.keys():
            self._aggs[aggfunc] = MultiTriggerAggregator(self._triggers,
                                                         self._topology,
                                                         aggfunc)
        return self._aggs[aggfunc]