/// <summary>Duplicates this factor.</summary>
 /// <returns>a copy of the factor</returns>
 public virtual GraphicalModel.Factor CloneFactor()
 {
     GraphicalModel.Factor clone = new GraphicalModel.Factor();
     clone.neigborIndices = neigborIndices.MemberwiseClone();
     clone.featuresTable  = featuresTable.CloneTable();
     clone.metaData.PutAll(metaData);
     return(clone);
 }
        public virtual void TestCloneTable(ConcatVector[][][] factor3)
        {
            ConcatVectorTable concatVectorTable = ConvertArrayToVectorTable((ConcatVector[][][])factor3);
            ConcatVectorTable cloned            = concatVectorTable.CloneTable();

            for (int i = 0; i < factor3.Length; i++)
            {
                for (int j = 0; j < factor3[0].Length; j++)
                {
                    for (int k = 0; k < factor3[0][0].Length; k++)
                    {
                        NUnit.Framework.Assert.IsTrue(factor3[i][j][k].ValueEquals(cloned.GetAssignmentValue(new int[] { i, j, k }).Get(), 1.0e-5));
                    }
                }
            }
            NUnit.Framework.Assert.IsTrue(concatVectorTable.ValueEquals(cloned, 1.0e-5));
        }