Esempio n. 1
0
        public void Write(BinaryWriter writer)
        {
            writer.Write(Encoding.ASCII.GetBytes("ID3"));

            writer.Write(majorVersion);
            writer.Write(minorVersion);

            writer.Write(BitField.FromBits(Enumerables.Create(unsynchronisation, extendedHeader, experimental, false, false, false, false, false)).Bytes.Single());

            BitField dataLength = BitField.FromValue(DataLength, 28);

            dataLength = BitField.FromBits
                         (
                Enumerables.Concatenate
                (
                    Enumerables.Create(false),
                    dataLength[0, 7].Bits,
                    Enumerables.Create(false),
                    dataLength[7, 14].Bits,
                    Enumerables.Create(false),
                    dataLength[14, 21].Bits,
                    Enumerables.Create(false),
                    dataLength[21, 28].Bits
                )
                         );
            writer.Write(dataLength.Bytes.ToArray());

            foreach (ID3v2Frame frame in frames)
            {
                frame.Write(writer);
            }
        }
Esempio n. 2
0
        public static ValueTerm IntegrateTrapezoid(FunctionTerm function, OrderedRange <double> bounds, int segmentCount)
        {
            if (segmentCount < 1)
            {
                throw new ArgumentOutOfRangeException("segmentCount");
            }

            ValueTerm segmentWidth = Terms.Constant(bounds.Length() / segmentCount);

            IEnumerable <ValueTerm> values =
                (
                    from segmentPosition in Scalars.GetIntermediateValuesSymmetric(bounds.Start, bounds.End, segmentCount)
                    select function.Apply(Terms.Constant(segmentPosition))
                )
                .ToArray();

            return(Terms.Product
                   (
                       segmentWidth,
                       Terms.Sum
                       (
                           Enumerables.Concatenate
                           (
                               Enumerables.Create(Terms.Product(Terms.Constant(0.5), values.First())),
                               values.Skip(1).SkipLast(1),
                               Enumerables.Create(Terms.Product(Terms.Constant(0.5), values.Last()))
                           )
                       )
                   ));
        }
Esempio n. 3
0
        // polynomial
        public static FunctionTerm Polynomial(int dimension, int degree)
        {
            if (dimension < 0)
            {
                throw new ArgumentOutOfRangeException("dimension");
            }
            if (degree < 0)
            {
                throw new ArgumentOutOfRangeException("degree");
            }

            Variable variable = new Variable(1, "x");
            IEnumerable <Variable> coefficients =
                (
                    from index in Enumerable.Range(0, degree)
                    select new Variable(dimension, string.Format("c{0}", index))
                )
                .ToArray();

            return(Sum
                   (
                       from index in Enumerable.Range(0, degree)
                       let power = Exponentiation(variable, Constant(index))
                                   let parameter = coefficients.ElementAt(index)
                                                   select Scaling(power, parameter)
                   )
                   .Abstract(Enumerables.Concatenate(Enumerables.Create(variable), coefficients)));
        }
Esempio n. 4
0
        void RebuildSegmentComponents()
        {
            IEnumerable <PositionedControlComponent> orderedSpecificationComponents =
                (
                    from specificationComponent in SpecificationComponents
                    orderby specificationComponent.Position ascending
                    select specificationComponent
                )
                .ToArray();

            segmentComponents.Clear();

            IEnumerable <PositionedControlComponent> segmentDelimitingComponents = Enumerables.Concatenate
                                                                                   (
                Enumerables.Create(curveStartComponent),
                orderedSpecificationComponents,
                Enumerables.Create(curveEndComponent)
                                                                                   );

            foreach (Tuple <PositionedControlComponent, PositionedControlComponent> segmentDelimitingComponentRange in segmentDelimitingComponents.GetRanges())
            {
                SegmentComponent segmentComponent = new SegmentComponent(this, this, segmentDelimitingComponentRange.Item1, segmentDelimitingComponentRange.Item2);

                segmentComponent.InsertLength         += InsertLength;
                segmentComponent.SpecificationChanged += SpecificationChanged;
                segmentComponent.AddSpecification     += AddSpecification;
                segmentComponent.SelectionChanged     += SelectionChanged;

                segmentComponents.Add(segmentComponent);
            }
        }
Esempio n. 5
0
        public static FunctionTerm Polynomial(IEnumerable <FunctionTerm> basis, int dimension)
        {
            if (basis == null)
            {
                throw new ArgumentNullException("basis");
            }
            if (dimension < 0)
            {
                throw new ArgumentOutOfRangeException("dimension");
            }

            ValueTerm variable = Variable("x");
            IEnumerable <ValueTerm> coefficients =
                (
                    from index in Enumerable.Range(0, basis.Count())
                    select Variable(string.Format("c_{0}", index), dimension)
                )
                .ToArray();
            IEnumerable <ValueTerm> parameters = Enumerables.Concatenate(Enumerables.Create(variable), coefficients);

            if (!basis.Any())
            {
                return(Constant(Enumerable.Repeat(0.0, dimension)).Abstract(parameters));
            }

            IEnumerable <ValueTerm> basisValues = basis.Select(basisFunction => basisFunction.Apply(variable));

            return(Sum(Enumerable.Zip(basisValues, coefficients, Scaling)).Abstract(parameters));
        }
Esempio n. 6
0
        public virtual void Write(BinaryWriter writer)
        {
            BitField header = BitField.FromBits
                              (
                Enumerables.Concatenate
                (
                    BitField.FromValue(0x07FF, 11).Bits,
                    BitField.FromValue((int)version, 2).Bits,
                    BitField.FromValue((int)layer, 2).Bits,
                    Enumerables.Create(!hasErrorProtection),
                    BitField.FromValue(bitRateID, 4).Bits,
                    BitField.FromValue(sampleRateID, 2).Bits,
                    Enumerables.Create(hasPadding),
                    Enumerables.Create(privateBit),
                    BitField.FromValue((int)channelMode, 2).Bits,
                    BitField.FromValue((int)joinID, 2).Bits,
                    Enumerables.Create(isCopyrighted),
                    Enumerables.Create(isOriginal),
                    BitField.FromValue((int)emphasis, 2).Bits
                )
                              );

            writer.Write(header.Bytes.ToArray());

            if (hasErrorProtection)
            {
                writer.Write(checksum);
            }
        }
Esempio n. 7
0
        public IEnumerable <XElement> GetSvgPaths()
        {
            Kurve.Curves.Curve curve = optimizer.GetCurve(specification);

            IEnumerable <string> curveCommands = Enumerables.Concatenate
                                                 (
                Enumerables.Create(Svg.MoveTo(curve.GetPoint(0))),
                from positions in Scalars.GetIntermediateValuesSymmetric(0, 1, SegmentCount + 1).GetRanges()
                let controlPoint1 = curve.GetPoint(positions.Item1) + (1.0 / (3 * SegmentCount)) * curve.GetVelocity(positions.Item1)
                                    let controlPoint2 = curve.GetPoint(positions.Item2) - (1.0 / (3 * SegmentCount)) * curve.GetVelocity(positions.Item2)
                                                        let point2 = curve.GetPoint(positions.Item2)
                                                                     select Svg.CurveTo(controlPoint1, controlPoint2, point2)
                                                 );

            yield return(Svg.PathShape(curveCommands, null, Colors.Black, 2));

            IEnumerable <string> curvatureMarkersCommands =
                (
                    from positions in Scalars.GetIntermediateValuesSymmetric(0, 1, SegmentCount + 1).GetRanges()
                    let position = Enumerables.Average(positions.Item1, positions.Item2)
                                   let curvatureVector = CurvatureMarkersFactor * curve.GetCurvature(position) * curve.GetNormalVector(position)
                                                         select Svg.Line(curve.GetPoint(position), curve.GetPoint(position) + curvatureVector)
                );

            yield return(Svg.PathShape(curvatureMarkersCommands, null, Colors.Blue, 0.5));

            foreach (PointCurveSpecification pointCurveSpecification in specification.BasicSpecification.CurveSpecifications.OfType <PointCurveSpecification>())
            {
                Vector2Double point = curve.GetPoint(pointCurveSpecification.Position);

                yield return(Svg.CircleShape(point, 10, Colors.Red, null, 0));
            }
            foreach (DirectionCurveSpecification directionCurveSpecification in specification.BasicSpecification.CurveSpecifications.OfType <DirectionCurveSpecification>())
            {
                Vector2Double directionVector = curve.GetDirectionVector(directionCurveSpecification.Position);
                Vector2Double start           = curve.GetPoint(directionCurveSpecification.Position) - 1000 * directionVector;
                Vector2Double end             = curve.GetPoint(directionCurveSpecification.Position) + 1000 * directionVector;

                yield return(Svg.LineShape(start, end, null, Colors.Green, 2));
            }
            foreach (CurvatureCurveSpecification curvatureCurveSpecification in specification.BasicSpecification.CurveSpecifications.OfType <CurvatureCurveSpecification>())
            {
                if (curvatureCurveSpecification.Curvature == 0)
                {
                    Vector2Double directionVector = curve.GetDirectionVector(curvatureCurveSpecification.Position);
                    Vector2Double start           = curve.GetPoint(curvatureCurveSpecification.Position) - 1000 * directionVector;
                    Vector2Double end             = curve.GetPoint(curvatureCurveSpecification.Position) + 1000 * directionVector;

                    yield return(Svg.LineShape(start, end, null, Colors.Blue, 2));
                }
                else
                {
                    Vector2Double center = curve.GetPoint(curvatureCurveSpecification.Position) - (1.0 / curvatureCurveSpecification.Curvature) * curve.GetNormalVector(curvatureCurveSpecification.Position);
                    double        radius = 1.0 / curvatureCurveSpecification.Curvature.Absolute();

                    yield return(Svg.CircleShape(center, radius, null, Colors.Blue, 2));
                }
            }
        }
Esempio n. 8
0
 public static IConstraint <ValueTerm> CreateEmpty()
 {
     return(new ExplicitConstraint <ValueTerm>
            (
                Term.Vector(),
                Enumerables.Create <OrderedRange <double> >()
            ));
 }
Esempio n. 9
0
        public virtual void Write(BinaryWriter writer)
        {
            writer.Write(Encoding.ASCII.GetBytes(identifier));

            writer.Write(Binary.SwitchEndianness(DataLength));

            writer.Write(BitField.FromBits(Enumerables.Create(!tagAlterPreservation, !fileAlterPreservation, readOnly, false, false, false, false, false)).Bytes.Single());
            writer.Write(BitField.FromBits(Enumerables.Create(compression, encryption, groupingIdentity, false, false, false, false, false)).Bytes.Single());
        }
Esempio n. 10
0
 public static IEnumerable <double> ToWaveletData(WaveletCollection waveletCollection)
 {
     return(Enumerables.Concatenate
            (
                Enumerables.Create(waveletCollection.smoothingCoefficient),
                from level in waveletCollection.decomposition
                from item in level
                select item
            )
            .ToArray());
 }
Esempio n. 11
0
        public override void MouseMove(Vector2Double mousePosition)
        {
            base.MouseMove(mousePosition);

            if (IsDragging)
            {
                foreach (SpecificationComponent component in Enumerables.Create(leftComponent, rightComponent).OfType <SpecificationComponent>())
                {
                    component.Point += DragVector * SlowDownFactor;
                }

                OnSpecificationChanged();
            }
        }
Esempio n. 12
0
        void AddCurve()
        {
            BasicSpecification basicSpecification = new BasicSpecification
                                                    (
                100,
                1,
                new PolynomialFunctionTermCurveTemplate(10),
                Enumerables.Create
                (
                    new PointCurveSpecification(0.0, new Vector2Double(300, 300)),
                    new PointCurveSpecification(1.0, new Vector2Double(400, 300))
                )
                                                    );

            AddCurve(new CurveComponent(this, optimizationWorker, new Specification(basicSpecification)));
        }
Esempio n. 13
0
            public override T Rewrite <T>(T term)
            {
                if (!(term is Application))
                {
                    return(null);
                }

                Application application = (Application)(BaseTerm)term;

                if (!(application.Function is Product))
                {
                    return(null);
                }

                if (!(application.Parameter is Vector))
                {
                    return(null);
                }

                Vector vector = (Vector)application.Parameter;

                if (vector.Terms.Count() != 2)
                {
                    return(null);
                }

                ValueTerm parameter0 = vector.Terms.ElementAt(0);
                ValueTerm parameter1 = vector.Terms.ElementAt(1);

                if (parameter0 is Application && ((Application)parameter0).Function is Product)
                {
                    return(null);
                }

                if (!ShouldSwap(parameter0, parameter1))
                {
                    return(null);
                }

                return((T)(BaseTerm) new Application(new Product(), new Vector(Enumerables.Create(parameter1, parameter0))));
            }
Esempio n. 14
0
        public override FunctionTerm Substitute(Variable variable, ValueTerm substitute)
        {
            if (variables.Contains(variable))
            {
                return(this);
            }

            IEnumerable <Variable> newVariables = FindUnusedVariables
                                                  (
                variables,
                Enumerables.Concatenate
                (
                    GetFreeVariables(),
                    Enumerables.Create(variable),
                    substitute.GetFreeVariables()
                )
                                                  );
            ValueTerm newTerm = term.Substitute(variables, newVariables);

            return(new Abstraction(newVariables, newTerm.Substitute(variable, substitute)));
        }
Esempio n. 15
0
        public override Syntax GetApplicationSyntax(Application application)
        {
            IEnumerable <ValueTerm> parameters = application.Parameter is Vector ? ((Vector)application.Parameter).Terms : Enumerables.Create(application.Parameter);

            string parameter0Text = parameters.ElementAt(0).ToString();
            string parameter1Text = parameters.ElementAt(1).ToString();

            if (!parameter1Text.IsSubSuperScriptCompatible())
            {
                return(base.GetApplicationSyntax(application));
            }

            return(new BasicSyntax(string.Format("{0}{1}", parameter0Text, parameter1Text.ToSuperscript())));
        }
Esempio n. 16
0
        void AddSpecification(double position)
        {
            SpecificationComponent pointSpecificationComponent = new SpecificationComponent(this, this, position, Enumerables.Create <CurveSpecification>());

            AddSpecificationComponent(pointSpecificationComponent);
        }
Esempio n. 17
0
 public BasicSpecification() : this(1, 1, new PolynomialFunctionTermCurveTemplate(2), Enumerables.Create <CurveSpecification>())
 {
 }
Esempio n. 18
0
            public override T Rewrite <T>(T term)
            {
                if (!(term is Application))
                {
                    return(null);
                }

                Application application0 = (Application)(BaseTerm)term;

                if (!(application0.Function is Product))
                {
                    return(null);
                }

                if (!(application0.Parameter is Vector))
                {
                    return(null);
                }

                Vector vector0 = (Vector)application0.Parameter;

                if (vector0.Terms.Count() != 2)
                {
                    return(null);
                }

                ValueTerm parameter00 = vector0.Terms.ElementAt(0);
                ValueTerm parameter01 = vector0.Terms.ElementAt(1);

                if (!(parameter00 is Application))
                {
                    return(null);
                }

                Application application00 = (Application)parameter00;

                if (!(application00.Function is Product))
                {
                    return(null);
                }

                if (!(application00.Parameter is Vector))
                {
                    return(null);
                }

                Vector vector00 = (Vector)application00.Parameter;

                if (vector00.Terms.Count() != 2)
                {
                    return(null);
                }

                ValueTerm parameter000 = vector00.Terms.ElementAt(0);
                ValueTerm parameter001 = vector00.Terms.ElementAt(1);

                // ((parameter000 . parameter001) . parameter01)

                if (!ShouldSwap(parameter001, parameter01))
                {
                    return(null);
                }

                return((T)(BaseTerm) new Application(new Product(), new Vector(Enumerables.Create(new Application(new Product(), new Vector(Enumerables.Create(parameter000, parameter01))), parameter001))));
            }
Esempio n. 19
0
        static IEnumerable <Assignment> GetEquations(ValueTerm pattern, ValueTerm term)
        {
            if (pattern is BasicValueTerm)
            {
                if (!(term is BasicValueTerm))
                {
                    return(null);
                }

                BasicValueTerm patternBasicValueTerm = (BasicValueTerm)pattern;
                BasicValueTerm termBasicValueTerm    = (BasicValueTerm)term;

                if (patternBasicValueTerm != termBasicValueTerm)
                {
                    return(null);
                }

                return(Enumerables.Create <Assignment>());
            }
            if (pattern is ValueDefinition)
            {
                if (!(term is ValueDefinition))
                {
                    return(null);
                }

                ValueDefinition patternBasicValueTerm = (ValueDefinition)pattern;
                ValueDefinition termBasicValueTerm    = (ValueDefinition)term;

                if (patternBasicValueTerm != termBasicValueTerm)
                {
                    return(null);
                }

                return(Enumerables.Create <Assignment>());
            }
            if (pattern is Variable)
            {
                Variable patternVariable = (Variable)pattern;

                return(Enumerables.Create(new Assignment(patternVariable, term)));
            }
            if (pattern is Application)
            {
                if (!(term is Application))
                {
                    return(null);
                }

                Application patternApplication = (Application)pattern;
                Application termApplication    = (Application)term;

                if (patternApplication.Function != termApplication.Function)
                {
                    return(null);
                }

                return(GetEquations(patternApplication.Parameter, termApplication.Parameter));
            }
            if (pattern is Vector)
            {
                if (!(term is Vector))
                {
                    return(null);
                }

                Vector patternVector = (Vector)pattern;
                Vector termVector    = (Vector)term;

                if (patternVector.Terms.Count() != termVector.Terms.Count())
                {
                    return(null);
                }

                List <Assignment> result = new List <Assignment>();

                foreach (IEnumerable <Assignment> equations in Enumerable.Zip(patternVector.Terms, termVector.Terms, GetEquations))
                {
                    if (equations == null)
                    {
                        return(null);
                    }

                    result.AddRange(equations);
                }

                return(result);
            }
            if (pattern is Selection)
            {
                if (!(term is Selection))
                {
                    return(null);
                }

                Selection patternSelection = (Selection)pattern;
                Selection termSelection    = (Selection)term;

                if (patternSelection.Index != termSelection.Index)
                {
                    return(null);
                }

                return(GetEquations(patternSelection.Term, termSelection.Term));
            }

            throw new InvalidOperationException();
        }
Esempio n. 20
0
        public static IEnumerable <FunctionTerm> GetDerivatives(this FunctionTerm term)
        {
            if (term is Sum)
            {
                Variable x = new Variable(1, "x");
                Variable y = new Variable(1, "y");

                return(Enumerables.Create
                       (
                           Term.Constant(1).Abstract(x, y),
                           Term.Constant(1).Abstract(x, y)
                       ));
            }
            if (term is Product)
            {
                Variable x = new Variable(1, "x");
                Variable y = new Variable(1, "y");

                return(Enumerables.Create
                       (
                           y.Abstract(x, y),
                           x.Abstract(x, y)
                       ));
            }
            if (term is Exponentiation)
            {
                Variable x = new Variable(1, "x");
                Variable y = new Variable(1, "y");

                return(Enumerables.Create
                       (
                           Term.Product(y, Term.Exponentiation(x, Term.Difference(y, Term.Constant(1)))).Abstract(x, y),
                           Term.Product(Term.Logarithm(x), Term.Exponentiation(x, y)).Abstract(x, y)
                       ));
            }
            if (term is Logarithm)
            {
                Variable x = new Variable(1, "x");

                return(Enumerables.Create(Term.Invert(x).Abstract(x)));
            }
            if (term is FunctionDefinition)
            {
                FunctionDefinition functionDefinitionTerm = (FunctionDefinition)term;

                IEnumerable <FunctionTerm> derivatives = GetDerivatives(functionDefinitionTerm.Function).ToArray();

                return
                    ((
                         from index in Enumerable.Range(0, derivatives.Count())
                         let derivative = derivatives.ElementAt(index)
                                          select new FunctionDefinition
                                          (
                             string.Format("{0}_d{1}", functionDefinitionTerm.Name, index),
                             Rewriting.CompleteNormalization.Rewrite(derivative),
                             new BasicSyntax(string.Format("{0}'{1}", functionDefinitionTerm.Syntax.GetText(), index.ToString().ToSuperscript()))
                                          )
                         )
                     .ToArray());
            }
            if (term is Abstraction)
            {
                Abstraction abstractionTerm = (Abstraction)term;

                return
                    ((
                         from variable in abstractionTerm.Variables
                         from derivative in GetDerivatives(abstractionTerm.Term, variable)
                         select derivative.Abstract(abstractionTerm.Variables)
                         )
                     .ToArray());
            }

            throw new InvalidOperationException();
        }
Esempio n. 21
0
        public override T Rewrite <T>(T term)
        {
            if (!(term is Abstraction))
            {
                return(null);
            }

            Abstraction abstraction = (Abstraction)(BaseTerm)term;

            if (!(abstraction.Term is Application))
            {
                return(null);
            }

            Application application = (Application)abstraction.Term;

            IEnumerable <ValueTerm> parameters = application.Parameter is Vector ? ((Vector)application.Parameter).Terms : Enumerables.Create(application.Parameter);

            if (!Enumerable.SequenceEqual(abstraction.Variables, parameters))
            {
                return(null);
            }

            return((T)(BaseTerm)application.Function);
        }
Esempio n. 22
0
        public void SelectionChanged(PositionedControlComponent selectedComponent)
        {
            if (selectedComponent.IsSelected && !isShiftDown)
            {
                foreach (PositionedControlComponent component in PositionedControlComponents.Except(Enumerables.Create(selectedComponent)))
                {
                    component.IsSelected = false;
                }

                Changed();
            }
        }
Esempio n. 23
0
        public override T Rewrite <T>(T term)
        {
            if (!(term is Vector))
            {
                return(null);
            }

            Vector vector = (Vector)(BaseTerm)term;

            if (!vector.Terms.Any(subTerm => subTerm is Vector))
            {
                return(null);
            }

            return((T)(BaseTerm) new Vector
                   (
                       from subTerm in vector.Terms
                       let subSubTerms = subTerm is Vector ? ((Vector)subTerm).Terms : Enumerables.Create(subTerm)
                                         from subSubTerm in subSubTerms
                                         select subSubTerm
                   ));
        }
Esempio n. 24
0
 public override IEnumerable <double> Evaluate()
 {
     return(Enumerables.Create(value));
 }
Esempio n. 25
0
        public override Syntax GetApplicationSyntax(Application application)
        {
            IEnumerable <ValueTerm> parameters = application.Parameter is Vector ? ((Vector)application.Parameter).Terms : Enumerables.Create(application.Parameter);

            if (parameters.Count() != 2)
            {
                return(base.GetApplicationSyntax(application));
            }

            return(new BasicSyntax(string.Format("({0} {1} {2})", parameters.ElementAt(0), GetText(), parameters.ElementAt(1))));
        }