private double GetCoefficient()
 {
     return(CoefficientsLine
            .Skip(myCoefSublineStart)
            .OrderBy(_ => Math.Abs(_.Value))
            .Sum(_ => _.Value));
 }
        internal override EquationParserState HandleClosingBracketOverride(Bracket bracket, int charIndex)
        {
            var bracketYieldsConstants = CoefficientsLine
                                         .Skip(bracket.CoefficientOrder)
                                         .All(_ => _.Type == CoefficientType.Constant);

            return(bracketYieldsConstants
        ? new CoefficientYieldedFromBracketState(VariableAggregator, BracketsLine, CoefficientsLine, bracket.CoefficientOrder)
        : (EquationParserState) new AwaitSummandState(VariableAggregator, BracketsLine, CoefficientsLine));
        }
        internal override EquationParserState HandleClosingBracketOverride(Bracket bracket, int charIndex)
        {
            // fixing variable coefficient, because it is not added yet
            myCoefficient *= bracket.BracketMultiplier;
            AddVariable();

            var bracketYieldsConstants = CoefficientsLine
                                         .Skip(bracket.CoefficientOrder)
                                         .All(_ => _.Type == CoefficientType.Constant);

            return(bracketYieldsConstants
        ? (EquationParserState) new CoefficientYieldedFromBracketState(VariableAggregator, BracketsLine, CoefficientsLine, bracket.CoefficientOrder)
        : new AwaitSummandState(VariableAggregator, BracketsLine, CoefficientsLine));
        }
        private void FixCoefficients()
        {
            // all zero ranked coefficients after opening bracket should be removed now
            for (var i = CoefficientsLine.Count - 1; i >= myCoefSublineStart; i--)
            {
                var coefficient = CoefficientsLine[i];

                // OPTIMIZATION:
                // we just make the value of coefficients equal to 0
                // it will automatically fix variable with zero rank
                //
                // no need in this:
                // var zeroRankVariable = VariableAggregator[...];
                // zeroRankVariable.Coefficients.Remove(coefficient);
                coefficient.Value = 0.0;

                CoefficientsLine.RemoveAt(i);
            }
        }