#parse("relnotes.vm")
#stdHeader("0.9", 13)

  * Clean up documentation, warnings, and documenting annotations in
    several places. Also made many style fixes.

  * Fix the <<<ItemScorer>>> inheritance hierarchy by making
    <<<AbstractItemScorer>>> implement <<<ItemScorer>>> rather than
    <<<RatingPredictor>>>, and make subclasses implement
    <<<RatingPredictor>>> directly.
  
  * Revise <<<SparseVector>>> definition and implementations to have a
    well-defined notion of "key domain" and "key set", where the key set
    is the set of keys with values drawn from the key domain. This allows
    <<<MutableSparseVector>>>s to be used to build up vectors in a well-defined
    fashion without using NaN. With this update, the <<<keySet>>> method will
    only return defined keys (use <<<keyDomain>>> to access the key domain), and
    NaN will only show up due to mathematical error, never due to temporary slots
    being unfilled.
    
  * Updated versions of several dependencies.

  * <<<EventCollectionDAO>>> factory updates - add <<<wrap>>> methods that wrap other
    DAO factories in immediate or soft event collection DAO factories, making it easier
    to use <<<EventCollectionDAO>>> for a cache of disk-backed DAOs.  Also made the
    <<<SoftFactory>>> take a <<<Supplier>>> rather than <<<Provider>>>.

  []

* Evaluation runner

   * Output separate data set and segment number fields.
   
   * Support fractional (e.g. 20%) holdouts in addition to remove-K.
   
   * Reinstate per-user MAE (MAE.ByUser).

   * Use <<<.eval-cache>>> as default cache directory.

   * Add evaluation listener framework for future evaluation monitor
     consoles.
   
   * Renamed profile for running the evaluation demo - it is now activated with
     <<<demo>>> (rather than <<<smoketest>>>).

   * Rearrange evaluator code to the crossfolding logic is in its own package.
   
   []

* Cleanup

   Several unused classes have been removed:

   * <<<IndexedItemScore>>>
   
   * <<<IntSortedArraySet>>>

   []
