code: def not_implemented(self, func_name):
          '''
          log access to unimplemented method and raise error
  
          :param func_name: name of unimplemented function.
          :raise: NotImplementedError detailing the function the is not implemented.
          '''
          msg = '%s is not overridden by %s' % (func_name, type(self).__name__)
          self.logger.error(msg)
          raise NotImplementedError(msgf not_implemented(self, func_name):
          '''
          log access to unimplemented method and raise error
  
          :param func_name: name of unimplemented function.
          :raise: NotImplementedError detailing the function the is not implemented.
          '''
          msg = '%s is not overridden by %s' % (func_name, type(self).__name__)
          self.logger.error(msg)
          raise NotImplementedError(msg)
docs: log access to unimplemented method and raise error
  
          :param func_name: name of unimplemented function.
          :raise: NotImplementedError detailing the function the is not implemented.