Source code for bart.common.Analyzer

#    Copyright 2015-2016 ARM Limited
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

"""Allow the user to assert various conditions
based on the grammar defined in trappy.stats.grammar. The class is
also intended to have aggregator based functionality. This is not
implemented yet.
"""

from trappy.stats.grammar import Parser
import warnings
import numpy as np
import pandas as pd

# pylint: disable=invalid-name


[docs]class Analyzer(object): """ :param data: TRAPpy FTrace Object :type data: :mod:`trappy.ftrace.FTrace` :param config: A dictionary of variables, classes and functions that can be used in the statements :type config: dict """ def __init__(self, data, config, **kwargs): self._parser = Parser(data, config, **kwargs)
[docs] def assertStatement(self, statement, select=None): """Solve the statement for a boolean result :param statement: A string representing a valid :mod:`trappy.stats.grammar` statement :type statement: str :param select: If the result represents a boolean mask and the data was derived from a TRAPpy event with a pivot value. The :code:`select` can be used to select a particular pivot value :type select: :mod:`pandas.DataFrame` column """ result = self.getStatement(statement, select=select) if isinstance(result, pd.DataFrame): result = result.all().all() elif not(isinstance(result, bool) or isinstance(result, np.bool_)): # pylint: disable=no-member warnings.warn("solution of {} is not boolean".format(statement)) return result
[docs] def getStatement(self, statement, reference=False, select=None): """Evaluate the statement""" result = self._parser.solve(statement) # pylint: disable=no-member if np.isscalar(result): return result # pylint: enable=no-member if select is not None and len(result): result = result[select] if reference: result = self._parser.ref(result) return result