# Path: striatum/rewardplot.py
# def calculate_cum_reward(policy):
# def calculate_avg_reward(policy):
# def plot_avg_reward(policy):
# def plot_avg_regret(policy):
# 
# Path: striatum/storage/recommendation.py
# class Recommendation(object):
#     """The object to store a recommendation.
# 
#     Parameters
#     ----------
#     action : Action
#     estimated_reward: float
#     uncertainty: float
#     score: float
#     """
# 
#     def __init__(self, action, estimated_reward, uncertainty, score,
#                  reward=None):
#         self.action = action
#         self.estimated_reward = estimated_reward
#         self.uncertainty = uncertainty
#         self.score = score
#         self.reward = reward


from abc import abstractmethod
from striatum import rewardplot as rplt
from ..storage import Recommendation
class BaseBandit(object):
    r"""Bandit algorithm

    Parameters
    ----------
    history_storage : HistoryStorage object
        The HistoryStorage object to store history context, actions and rewards.

    model_storage : ModelStorage object
        The ModelStorage object to store model parameters.

    action_storage : ActionStorage object
        The ActionStorage object to store actions.

    recommendation_cls : class (default: None)
        The class used to initiate the recommendations. If None, then use
        default Recommendation class.

    Attributes
    ----------
    history_storage : HistoryStorage object
        The HistoryStorage object to store history context, actions and rewards.
    """

    def __init__(self, history_storage, model_storage, action_storage,
                 recommendation_cls=None):
        self._history_storage = history_storage
        self._model_storage = model_storage
        self._action_storage = action_storage
        if recommendation_cls is None:

# Path: striatum/rewardplot.py
# def calculate_cum_reward(policy):
# def calculate_avg_reward(policy):
# def plot_avg_reward(policy):
# def plot_avg_regret(policy):
# 
# Path: striatum/storage/recommendation.py
# class Recommendation(object):
#     """The object to store a recommendation.
# 
#     Parameters
#     ----------
#     action : Action
#     estimated_reward: float
#     uncertainty: float
#     score: float
#     """
# 
#     def __init__(self, action, estimated_reward, uncertainty, score,
#                  reward=None):
#         self.action = action
#         self.estimated_reward = estimated_reward
#         self.uncertainty = uncertainty
#         self.score = score
#         self.reward = reward


# Path: striatum/bandit/bandit.py
from abc import abstractmethod
from striatum import rewardplot as rplt
from ..storage import Recommendation

class BaseBandit(object):
    r"""Bandit algorithm

    Parameters
    ----------
    history_storage : HistoryStorage object
        The HistoryStorage object to store history context, actions and rewards.

    model_storage : ModelStorage object
        The ModelStorage object to store model parameters.

    action_storage : ActionStorage object
        The ActionStorage object to store actions.

    recommendation_cls : class (default: None)
        The class used to initiate the recommendations. If None, then use
        default Recommendation class.

    Attributes
    ----------
    history_storage : HistoryStorage object
        The HistoryStorage object to store history context, actions and rewards.
    """

    def __init__(self, history_storage, model_storage, action_storage,
                 recommendation_cls=None):
        self._history_storage = history_storage
        self._model_storage = model_storage
        self._action_storage = action_storage
        if recommendation_cls is None:

            self._recommendation_cls = Recommendation