public virtual void TestBackwardsCompatibility()
        {
            RVFDataset <string, string> dataset = new WeightedRVFDataset <string, string>();
            RVFDatum <string, string>   datum1  = NewRVFDatum(null, "a", "b", "a");

            dataset.Add(datum1);
            RVFDatum <string, string> datum2 = NewRVFDatum(null, "a", "b", "a");

            dataset.Add(datum2);
            NUnit.Framework.Assert.AreEqual(1.0f, ((WeightedRVFDataset <string, string>)dataset).GetWeights()[0], 1e-10);
            NUnit.Framework.Assert.AreEqual(1.0f, ((WeightedRVFDataset <string, string>)dataset).GetWeights()[1], 1e-10);
        }
        public virtual void TestWeightingWorks()
        {
            WeightedRVFDataset <string, string> dataset = new WeightedRVFDataset <string, string>();
            RVFDatum <string, string>           datum1  = NewRVFDatum(null, "a", "b", "a");

            dataset.Add(datum1, 42.0f);
            RVFDatum <string, string> datum2 = NewRVFDatum(null, "a", "b", "a");

            dataset.Add(datum2, 7.3f);
            NUnit.Framework.Assert.AreEqual(42.0f, dataset.GetWeights()[0], 1e-10);
            NUnit.Framework.Assert.AreEqual(7.3f, dataset.GetWeights()[1], 1e-10);
        }
        public override Pair <GeneralDataset <L, F>, GeneralDataset <L, F> > Split(int start, int end)
        {
            int devSize   = end - start;
            int trainSize = Size() - devSize;

            int[][]    devData     = new int[devSize][];
            double[][] devValues   = new double[devSize][];
            int[]      devLabels   = new int[devSize];
            int[][]    trainData   = new int[trainSize][];
            double[][] trainValues = new double[trainSize][];
            int[]      trainLabels = new int[trainSize];
            lock (typeof(Runtime))
            {
                System.Array.Copy(data, start, devData, 0, devSize);
                System.Array.Copy(values, start, devValues, 0, devSize);
                System.Array.Copy(labels, start, devLabels, 0, devSize);
                System.Array.Copy(data, 0, trainData, 0, start);
                System.Array.Copy(data, end, trainData, start, Size() - end);
                System.Array.Copy(values, 0, trainValues, 0, start);
                System.Array.Copy(values, end, trainValues, start, Size() - end);
                System.Array.Copy(labels, 0, trainLabels, 0, start);
                System.Array.Copy(labels, end, trainLabels, start, Size() - end);
            }
            if (this is WeightedRVFDataset <object, object> )
            {
                float[] trainWeights        = new float[trainSize];
                float[] devWeights          = new float[devSize];
                WeightedRVFDataset <L, F> w = (WeightedRVFDataset <L, F>) this;
                lock (typeof(Runtime))
                {
                    System.Array.Copy(w.weights, start, devWeights, 0, devSize);
                    System.Array.Copy(w.weights, 0, trainWeights, 0, start);
                    System.Array.Copy(w.weights, end, trainWeights, start, Size() - end);
                }
                WeightedRVFDataset <L, F> dev   = new WeightedRVFDataset <L, F>(labelIndex, devLabels, featureIndex, devData, devValues, devWeights);
                WeightedRVFDataset <L, F> train = new WeightedRVFDataset <L, F>(labelIndex, trainLabels, featureIndex, trainData, trainValues, trainWeights);
                return(new Pair <GeneralDataset <L, F>, GeneralDataset <L, F> >(train, dev));
            }
            else
            {
                GeneralDataset <L, F> dev   = new Edu.Stanford.Nlp.Classify.RVFDataset <L, F>(labelIndex, devLabels, featureIndex, devData, devValues);
                GeneralDataset <L, F> train = new Edu.Stanford.Nlp.Classify.RVFDataset <L, F>(labelIndex, trainLabels, featureIndex, trainData, trainValues);
                return(new Pair <GeneralDataset <L, F>, GeneralDataset <L, F> >(train, dev));
            }
        }