public void DifferenceOperatorForNulls()
        {
            DivikResult r1 = null;
            DivikResult r2 = null;

            Assert.False(condition: r1 != r2, message: "Nulls indicated as unequal");
        }
        /// <summary>
        ///     Performs DiviK clustering on the specified data.
        /// </summary>
        /// <param name="dataset">Input dataset.</param>
        /// <param name="options">Configuration.</param>
        /// <returns>Segmentation result.</returns>
        /// <exception cref="System.ObjectDisposedException">thrown if this object has been disposed.</exception>
        public DivikResult Divik(IDataset dataset, DivikOptions options)
        {
            // This is needed to not to make MCR go wild
            const int numberOfOutputArgs = 2;
            var       coordinates        = dataset.GetRawSpacialCoordinates(is2D: true);
            var       coords             = new double[coordinates.GetLength(dimension: 0), coordinates.GetLength(dimension: 1)];

            for (var i = 0; i < coordinates.GetLength(dimension: 0); ++i)
            {
                for (var j = 0; j < coordinates.GetLength(dimension: 1); ++j)
                {
                    coords[i, j] = coordinates[i, j];
                }
            }

            var varargin          = options.ToVarargin();
            var matlabDivikResult = _segmentation.divik(
                numberOfOutputArgs,
                dataset.GetRawIntensities(),
                coordinates,
                varargin);

            // matlabResult[0] is equal to the "partition" field in matlabResult[1], that's why we only use matlabResult[1]
            // Besides it helps to create recursive single constructor for DivikResult
            var result = new DivikResult(matlabResult: matlabDivikResult[Segmentation.DivikStructureLocation]);

            return(result);
        }
        public void EqualityOperatorForNulls()
        {
            DivikResult r1 = null;
            DivikResult r2 = null;

            Assert.True(condition: r1 == r2, message: "Nulls not indicated as equal");
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="DivikResultSummary"/> class.
        /// </summary>
        /// <param name="tree">The result tree.</param>
        public DivikResultSummary(DivikResult tree)
        {
            Depth = tree.Depth();
            var counts = Partition.GetClusterSizes(tree.Merged).Values;

            NumberOfClusters = (uint)counts.Count;
            var numberOfObservations = tree.Merged.Length;

            ClusterSizeMean     = (double)numberOfObservations / NumberOfClusters;
            ClusterSizeVariance = counts
                                  .Select(count => Math.Pow(count - ClusterSizeMean, 2))
                                  .Sum() / NumberOfClusters;
            SizeReduction = 1.0 - (double)NumberOfClusters / numberOfObservations;
        }
        public void SetUpFixture()
        {
            var dataset = new BasicTextDataset(_testFilePath);
            var options = DivikOptions.ForLevels(levels: 1);

            options.MaxK                             = 2;
            options.Caching                          = false;
            options.PlottingPartitions               = false;
            options.PlottingDecomposition            = false;
            options.PlottingDecompositionRecursively = false;
            options.PlottingRecursively              = false;
            options.UsingAmplitudeFiltration         = false;
            _segmentation                            = new Segmentation();
            _result = _segmentation.Divik(dataset, options);
        }
        public void InequalityOperatorAgainstNull()
        {
            DivikResult r1 = null;

            Assert.True(condition: r1 != _result, message: "null not indicated unequal to instance");
        }
        public void EqualityOperatorAgainstNull()
        {
            DivikResult r1 = null;

            Assert.False(condition: r1 == _result, message: "null indicated equal to instance");
        }