#ifndef _RISK_H_
#define _RISK_H_

#include <vector>
#include "sparse_vector.h"
class EvaluationMetric;

namespace training {
  class CandidateSet;

  class CandidateSetRisk {
   public:
    explicit CandidateSetRisk(const CandidateSet& cs, const EvaluationMetric& metric) :
       cands_(cs),
       metric_(metric) {}
    // compute the risk (expected loss) of a CandidateSet
    // (optional) the gradient of the risk with respect to params
    double operator()(const std::vector<double>& params,
                      SparseVector<double>* g = NULL) const;
   private:
    const CandidateSet& cands_;
    const EvaluationMetric& metric_;
  };
};

#endif