public Architecture InstantiateToPort(Port port)
        {
            if (IntegerValueCategory.IsIntegerValueMember(port))
            {
                return(new GenericArchitecture(EntityId.DerivePrefix("Integer"), EntityId, false, port, IntegerValueCategory.IsIntegerValueMember, 0, new Process[] { new IntegerValue.AddProcess(0, port.InputSignalCount - 1, 0) }));
            }

            if (RationalValueCategory.IsRationalValueMember(port))
            {
                return(new GenericArchitecture(EntityId.DerivePrefix("Rational"), EntityId, false, port, RationalValueCategory.IsRationalValueMember, 0, new Process[] { new RationalValue.AddProcess(0, port.InputSignalCount - 1, 0) }));
            }

            if (RealValueCategory.IsRealValueMember(port))
            {
                return(new GenericArchitecture(EntityId.DerivePrefix("Real"), EntityId, false, port, RealValueCategory.IsRealValueMember, 0, new Process[] { new RealValue.AddProcess(0, port.InputSignalCount - 1, 0) }));
            }

            if (ComplexValueCategory.IsComplexValueMember(port))
            {
                return(new GenericArchitecture(EntityId.DerivePrefix("Complex"), EntityId, false, port, RealValueCategory.IsRealValueMember, 0, new Process[] { new GenericStdFunctionProcess <ComplexValue>(delegate() { return ComplexValue.Zero; }, ComplexValue.ConvertFrom, ComplexValue.Add, port.InputSignalCount) }));
            }

            if (IsVector(port))
            {
                return(new GenericArchitecture(EntityId.DerivePrefix("Vector"), EntityId, false, port, IsVector, 0, new Process[] { })); //DUMMY
            }
            throw new MathNet.Symbolics.Backend.Exceptions.ArchitectureNotAvailableException(port);
        }
        public bool SupportsPort(Port port)
        {
            if (port == null || !port.Entity.EqualsById(_entityId))
            {
                return(false);
            }

            if (IntegerValueCategory.IsIntegerValueMember(port))
            {
                return(true);
            }

            if (RationalValueCategory.IsRationalValueMember(port))
            {
                return(true);
            }

            if (RealValueCategory.IsRealValueMember(port))
            {
                return(true);
            }

            if (ComplexValueCategory.IsComplexValueMember(port))
            {
                return(true);
            }

            if (IsVector(port)) //DUMMY
            {
                return(true);
            }

            return(false);
        }