/**
         * Resets the wave to it's original state
         */
        public Resolution Clear()
        {
            wave = new Wave(frequencies.Length, indexCount);

            if (backtrack)
            {
                backtrackItems        = new Deque <IndexPatternItem>();
                backtrackItemsLengths = new Deque <int>();
                backtrackItemsLengths.Push(0);
                prevChoices = new Deque <IndexPatternItem>();
            }

            status = Resolution.Undecided;
            contradictionReason  = null;
            contradictionSource  = null;
            this.trackers        = new List <ITracker>();
            this.choiceObservers = new List <IChoiceObserver>();
            indexPicker.Init(this);
            patternPicker.Init(this);
            backtrackPolicy?.Init(this);

            patternModelConstraint.Clear();

            if (status == Resolution.Contradiction)
            {
                return(status);
            }

            InitConstraints();

            return(status);
        }