/// <summary> /// Constructs a partial constraint checker for the given /// </summary> /// <param name="dimensionValues"></param> /// <param name="constraints"></param> public PartialVectorConstraintChecker(ReadOnlyCollection<DimensionWithValues> dimensionValues, IEnumerable<IConstraint> constraints) { _dimensionValues = dimensionValues; List<PossiblyExtendedConstraint> extendedConstraints = new List<PossiblyExtendedConstraint>(); foreach (IConstraint constraint in constraints) { PossiblyExtendedConstraint extendedConstraint; if (constraint.RequiredDimensions.SelectMany(d => ExpandOuterMatrixDimensionIfNeeded(d, dimensionValues)).Count() > _maxDimensionCountToExtend) { extendedConstraint = new NonExtendedConstraint(GetDimensionIndexes(constraint, dimensionValues), constraint, dimensionValues); } else { extendedConstraint = ExtendConstraint(constraint, dimensionValues); } extendedConstraints.Add(extendedConstraint); } // Possible optimization: Discover implied constraints among the actually extended constraints and add them. _extendedConstraints = extendedConstraints.AsReadOnly(); }
/// <summary> /// Constructs a partial constraint checker for the given /// </summary> /// <param name="dimensionValues"></param> /// <param name="constraints"></param> public PartialVectorConstraintChecker(ReadOnlyCollection <DimensionWithValues> dimensionValues, IEnumerable <IConstraint> constraints) { _dimensionValues = dimensionValues; List <PossiblyExtendedConstraint> extendedConstraints = new List <PossiblyExtendedConstraint>(); foreach (IConstraint constraint in constraints) { PossiblyExtendedConstraint extendedConstraint; if (constraint.RequiredDimensions.SelectMany(d => ExpandOuterMatrixDimensionIfNeeded(d, dimensionValues)).Count() > _maxDimensionCountToExtend) { extendedConstraint = new NonExtendedConstraint(GetDimensionIndexes(constraint, dimensionValues), constraint, dimensionValues); } else { extendedConstraint = ExtendConstraint(constraint, dimensionValues); } extendedConstraints.Add(extendedConstraint); } // Possible optimization: Discover implied constraints among the actually extended constraints and add them. _extendedConstraints = extendedConstraints.AsReadOnly(); }