text: # Copyright (C) 2019 SAMSUNG SDS <Team.SAIDA@gmail.com>
  #
  # This code is distribued under the terms and conditions from the MIT License (MIT).
  #
  # Authors : Uk Jo, Iljoo Yoon, Hyunjae Lee, Daehun Jun
  
  class Policy(object):
      """Abstract base class for all implemented policies.
  
      Each policy helps with selection of action to take on an environment.
  
      Do not use this abstract base class directly but instead use one of the concrete policies implemented.
      To implement your own policy, you have to implement the following methods:
  
      - `select_action`
  
      # Arguments
          agent (rl.core.Agent): Agent used
      """
      def _set_agent(self, agent):
          self.agent = agent
  
      @property
      def metrics_names(self):
          return []
  
      @property
      def metrics(self):
          return []
  
      def select_action(self, **kwargs):
          raise NotImplementedError()
  
      def reset_states(self):
          return []
  
      def on_episode_end(self, episode, logs={}):
          pass
  
      def get_config(self):
          """Return configuration of the policy
  
          # Returns
              Configuration as dict
          """
          return {}
  
  