/// <summary>
        /// Adds the values of the fact fields in the two rows specified
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        public virtual object[] MergeFacts(object[] x, object[] y)
        {
            foreach (var f in Schema.Facts)
            {
                if (!Adders.ContainsKey(f.Value.ValueType))
                {
                    throw new InvalidOperationException(string.Format("Facts of type {0} are not supported", f.Value.ValueType));
                }
                var ix = f.Index;
                x[ix] = Adders[f.Value.ValueType](x[ix], y[ix]);
            }

            return(x);
        }