public static ITheorem[] BuildTheorems(Context context) { ITheorem[] theorems = new ITheorem[2]; theorems[0] = new Analysis.DerivativeTransformation(_entityId, delegate(Port port, SignalSet manipulatedInputs, Signal variable, bool hasManipulatedInputs) { Builder b = context.Builder; ReadOnlySignalSet tangents = Std.Tangent(context, port.InputSignals); SignalSet outputs = new SignalSet(); for (int i = 0; i < manipulatedInputs.Count; i++) { outputs.Add(b.MultiplySimplified(port.OutputSignals[i], tangents[i], manipulatedInputs[i])); } return(outputs); }); theorems[1] = new BasicTransformation(_entityId.DerivePostfix("TrigonometricSubstitute"), new MathIdentifier("TrigonometricSubstitute", "Std"), delegate() { return(new Pattern(new EntityCondition(_entityId))); }, delegate(Port port) { return(ManipulationPlan.DoAlter); }, delegate(Port port, SignalSet transformedInputs, bool hasTransformedInputs) { return(port.Context.Builder.Invert(Std.Cosine(port.Context, transformedInputs))); //Signal[] ret = new Signal[transformedInputs.Length]; //for(int i = 0; i < ret.Length; i++) // ret[i] = port.Context.Builder.Invert(Std.Cosine(port.Context, transformedInputs[i])); //return ret; }); return(theorems); }
public static ITheorem[] BuildTheorems(Context context) { ITheorem[] theorems = new ITheorem[2]; theorems[0] = new Analysis.DerivativeTransformation(_entityId, delegate(Port port, SignalSet manipulatedInputs, Signal variable, bool hasManipulatedInputs) { Builder b = context.Builder; ReadOnlySignalSet squares = b.Square(port.OutputSignals); Signal one = IntegerValue.ConstantOne(context); SignalSet outputs = new SignalSet(); for (int i = 0; i < manipulatedInputs.Count; i++) { outputs.Add((one + squares[i]) * manipulatedInputs[i]); } return(outputs); }); theorems[1] = new BasicTransformation(_entityId.DerivePostfix("TrigonometricSubstitute"), new MathIdentifier("TrigonometricSubstitute", "Std"), delegate() { return(new Pattern(new EntityCondition(_entityId))); }, delegate(Port port) { return(ManipulationPlan.DoAlter); }, delegate(Port port, SignalSet transformedInputs, bool hasTransformedInputs) { Signal[] ret = new Signal[transformedInputs.Count]; for (int i = 0; i < ret.Length; i++) { ret[i] = Std.Sine(port.Context, transformedInputs[i]) / Std.Cosine(port.Context, transformedInputs[i]); } return(ret); }); return(theorems); }
public void PropertyTriggerTest() { MathIdentifier propertyId = new MathIdentifier("T2_PT", "FundamentTest"); NodeEvent clearEvent = NodeEvent.Register(propertyId.DerivePostfix("ClearTrigger"), typeof(EventHandler), typeof(FundamentTest)); NodeEvent clear2Event = NodeEvent.Register(propertyId.DerivePostfix("Clear2Trigger"), typeof(EventHandler), typeof(FundamentTest)); NodeEvent clear3Event = NodeEvent.Register(propertyId.DerivePostfix("Clear3Trigger"), typeof(EventHandler), typeof(FundamentTest)); NodeEvent reevaluateEvent = NodeEvent.Register(propertyId.DerivePostfix("ReevaluateTrigger"), typeof(EventHandler), typeof(FundamentTest)); NodeProperty property = NodeProperty.Register(propertyId, typeof(string), typeof(FundamentTest), new NodeEventTrigger(EventTriggerAction.Clear, clearEvent, clear2Event), new NodeEventTrigger(EventTriggerAction.Clear, clear3Event), new NodeEventTrigger(EventTriggerAction.Reevaluate, reevaluateEvent)); NodeObject n = new NodeObject(); Assert.IsFalse(n.IsPropertySet(property), "A01"); n.SetProperty(property, "test"); Assert.IsTrue(n.IsPropertySet(property), "B01"); n.RaiseEvent(clearEvent, EventArgs.Empty); Assert.IsFalse(n.IsPropertySet(property), "C01"); n.SetProperty(property, "test2"); Assert.IsTrue(n.IsPropertySet(property), "D01"); Assert.AreEqual("test2", n.GetProperty(property), "D02"); n.RaiseEvent(reevaluateEvent, EventArgs.Empty); Assert.IsTrue(n.IsPropertySet(property), "E01"); Assert.AreEqual("test2", n.GetProperty(property), "E02"); n.RaiseEvent(clear2Event, EventArgs.Empty); Assert.IsFalse(n.IsPropertySet(property), "F01"); n.SetProperty(property, "test3"); Assert.IsTrue(n.IsPropertySet(property), "G01"); n.RaiseEvent(clear3Event, EventArgs.Empty); Assert.IsFalse(n.IsPropertySet(property), "H01"); }
public void FlagTriggerTest() { MathIdentifier flagId = new MathIdentifier("T3_FT", "FundamentTest"); NodeEvent clearEvent = NodeEvent.Register(flagId.DerivePostfix("ClearTrigger"), typeof(EventHandler), typeof(FundamentTest)); NodeEvent enableEvent = NodeEvent.Register(flagId.DerivePostfix("EnableTrigger"), typeof(EventHandler), typeof(FundamentTest)); NodeEvent disableEvent = NodeEvent.Register(flagId.DerivePostfix("DisableTrigger"), typeof(EventHandler), typeof(FundamentTest)); NodeEvent disable2Event = NodeEvent.Register(flagId.DerivePostfix("Disable2Trigger"), typeof(EventHandler), typeof(FundamentTest)); NodeEvent reevaluateEvent = NodeEvent.Register(flagId.DerivePostfix("ReevaluateTrigger"), typeof(EventHandler), typeof(FundamentTest)); NodeFlag flag = NodeFlag.Register(flagId, typeof(FundamentTest), FlagKind.Default, new NodeEventTrigger(EventTriggerAction.Clear, clearEvent), new NodeEventTrigger(EventTriggerAction.Enable, enableEvent), new NodeEventTrigger(EventTriggerAction.Disable, disableEvent, disable2Event), new NodeEventTrigger(EventTriggerAction.Reevaluate, reevaluateEvent)); NodeObject n = new NodeObject(); Assert.AreEqual(FlagState.Unknown, n.GetFlagState(flag), "A01"); n.EnableFlag(flag); Assert.AreEqual(FlagState.Enabled, n.GetFlagState(flag), "B01"); n.RaiseEvent(disableEvent, EventArgs.Empty); Assert.AreEqual(FlagState.Disabled, n.GetFlagState(flag), "C01"); n.RaiseEvent(enableEvent, EventArgs.Empty); Assert.AreEqual(FlagState.Enabled, n.GetFlagState(flag), "D01"); n.RaiseEvent(reevaluateEvent, EventArgs.Empty); Assert.AreEqual(FlagState.Enabled, n.GetFlagState(flag), "E01"); n.RaiseEvent(disable2Event, EventArgs.Empty); Assert.AreEqual(FlagState.Disabled, n.GetFlagState(flag), "F01"); n.RaiseEvent(clearEvent, EventArgs.Empty); Assert.AreEqual(FlagState.Unknown, n.GetFlagState(flag), "G01"); }
public static Signal Constant(Context context) { MathIdentifier id = _structureId.DerivePostfix("Constant"); Signal ret; if (context.SingletonSignals.TryGetValue(id, out ret)) { return(ret); } else { ret = new Signal(context, Instance); ret.Label = "ComplexInfinity"; ret.Properties.AddProperty(Properties.ConstantSignalProperty.Instance); context.SingletonSignals.Add(id, ret); return(ret); } }
public static void RegisterTheorems(ILibrary library) { Analysis.DerivativeTransformation.Provider.Add( new Analysis.DerivativeTransformation(_entityId, delegate(Port port, SignalSet manipulatedInputs, Signal variable, bool hasManipulatedInputs) { ReadOnlySignalSet squares = StdBuilder.Square(port.OutputSignals); Signal one = IntegerValue.ConstantOne; SignalSet outputs = new SignalSet(); for (int i = 0; i < manipulatedInputs.Count; i++) { outputs.Add((one + squares[i]) * manipulatedInputs[i]); } return(outputs); })); MathIdentifier typeId = new MathIdentifier("TrigonometricSubstitute", "Std"); ITheoremProvider basicProvider; if (!library.TryLookupTheoremType(typeId, out basicProvider)) { basicProvider = Binder.GetInstance <ITransformationTheoremProvider, MathIdentifier>(typeId); library.AddTheoremType(basicProvider); } ((ITransformationTheoremProvider)basicProvider).Add( new BasicTransformation(_entityId.DerivePostfix("TrigonometricSubstitute"), typeId, delegate() { return(new Pattern(new EntityCondition(_entityId))); }, delegate(Port port) { return(ManipulationPlan.DoAlter); }, delegate(Port port, SignalSet transformedInputs, bool hasTransformedInputs) { Signal[] ret = new Signal[transformedInputs.Count]; for (int i = 0; i < ret.Length; i++) { ret[i] = StdBuilder.Sine(transformedInputs[i]) / StdBuilder.Cosine(transformedInputs[i]); } return(ret); })); }
public static Signal Constant(Context context) { if (context == null) { throw new ArgumentNullException("context"); } MathIdentifier id = _structureId.DerivePostfix("Constant"); Signal ret; if (context.SingletonSignals.TryGetValue(id, out ret)) { return(ret); } else { ret = new Signal(context, Instance); ret.Label = "Undefined"; ret.AddConstraint(Properties.ConstantSignalProperty.Instance); context.SingletonSignals.Add(id, ret); return(ret); } }
public static void RegisterTheorems(ILibrary library) { Analysis.DerivativeTransformation.Provider.Add( new Analysis.DerivativeTransformation(_entityId, delegate(Port port, SignalSet manipulatedInputs, Signal variable, bool hasManipulatedInputs) { Signal[] outputs = new Signal[manipulatedInputs.Count]; ReadOnlySignalSet cotangents = StdBuilder.Cotangent(port.InputSignals); for (int i = 0; i < outputs.Length; i++) { outputs[i] = Std.Multiply(port.OutputSignals[i], cotangents[i], manipulatedInputs[i]); } return(StdBuilder.Negate(outputs)); })); MathIdentifier typeId = new MathIdentifier("TrigonometricSubstitute", "Std"); ITheoremProvider basicProvider; if (!library.TryLookupTheoremType(typeId, out basicProvider)) { basicProvider = Binder.GetInstance <ITransformationTheoremProvider, MathIdentifier>(typeId); library.AddTheoremType(basicProvider); } ((ITransformationTheoremProvider)basicProvider).Add( new BasicTransformation(_entityId.DerivePostfix("TrigonometricSubstitute"), typeId, delegate() { return(new Pattern(new EntityCondition(_entityId))); }, delegate(Port port) { return(ManipulationPlan.DoAlter); }, delegate(Port port, SignalSet transformedInputs, bool hasTransformedInputs) { return(StdBuilder.Invert(StdBuilder.Sine(transformedInputs))); //Signal[] ret = new Signal[transformedInputs.Count]; //for(int i = 0; i < ret.Length; i++) // ret[i] = Std.Invert(Std.Sine(transformedInputs[i])); //return ret; })); }
public DerivativeTransformation(MathIdentifier supportedEntityId, EstimateDerivePlan plan, Derive derive) : this(supportedEntityId.DerivePostfix("Derivative"), supportedEntityId, plan, derive) { }
public DerivativeTransformation(MathIdentifier supportedEntityId, Derive derive) : this(supportedEntityId.DerivePostfix("Derivative"), supportedEntityId, DefaultEstimate, derive) { }
public void RemoteEventTriggersTest() { MathIdentifier flagId = new MathIdentifier("TX_F", "FundamentTest"); NodeFlag flag = NodeFlag.Register(flagId, typeof(FundamentTest)); NodeFlag flagEnableRemote = NodeFlag.Register(flagId.DerivePostfix("EnableRemote"), typeof(FundamentTest), FlagKind.Default, new NodeEventTrigger(EventTriggerAction.Enable, flag, flag.FlagEnabledEvent)); NodeFlag flagEnableLocal = NodeFlag.Register(flagId.DerivePostfix("EnableLocal"), typeof(FundamentTest), FlagKind.Default, new NodeEventTrigger(EventTriggerAction.Enable, flag.FlagEnabledEvent)); NodeFlag flagDisableRemote = NodeFlag.Register(flagId.DerivePostfix("DisableRemote"), typeof(FundamentTest), FlagKind.Default, new NodeEventTrigger(EventTriggerAction.Disable, flag, flag.FlagChangedEvent)); NodeFlag flagDisableLocal = NodeFlag.Register(flagId.DerivePostfix("DisableLocal"), typeof(FundamentTest), FlagKind.Default, new NodeEventTrigger(EventTriggerAction.Disable, flag.FlagChangedEvent)); NodeObject n = new NodeObject(); Assert.AreEqual(FlagState.Unknown, n.GetFlagState(flag), "A01"); Assert.AreEqual(FlagState.Unknown, n.GetFlagState(flagEnableRemote), "A02"); Assert.AreEqual(FlagState.Unknown, n.GetFlagState(flagEnableLocal), "A03"); Assert.AreEqual(FlagState.Unknown, n.GetFlagState(flagDisableRemote), "A04"); Assert.AreEqual(FlagState.Unknown, n.GetFlagState(flagDisableLocal), "A05"); n.EnableFlag(flag); Assert.AreEqual(FlagState.Enabled, n.GetFlagState(flag), "B01"); Assert.AreEqual(FlagState.Enabled, n.GetFlagState(flagEnableRemote), "B02"); Assert.AreEqual(FlagState.Unknown, n.GetFlagState(flagEnableLocal), "B03"); Assert.AreEqual(FlagState.Disabled, n.GetFlagState(flagDisableRemote), "B04"); Assert.AreEqual(FlagState.Unknown, n.GetFlagState(flagDisableLocal), "B05"); n.ClearFlag(flag); Assert.AreEqual(FlagState.Unknown, n.GetFlagState(flag), "C01"); Assert.AreEqual(FlagState.Enabled, n.GetFlagState(flagEnableRemote), "C02"); Assert.AreEqual(FlagState.Unknown, n.GetFlagState(flagEnableLocal), "C03"); Assert.AreEqual(FlagState.Disabled, n.GetFlagState(flagDisableRemote), "C04"); Assert.AreEqual(FlagState.Unknown, n.GetFlagState(flagDisableLocal), "C05"); n.EnableFlag(flagDisableLocal); n.DisableFlag(flagEnableLocal); n.ClearFlag(flagDisableRemote); n.ClearFlag(flagEnableRemote); Assert.AreEqual(FlagState.Unknown, n.GetFlagState(flag), "D01"); Assert.AreEqual(FlagState.Unknown, n.GetFlagState(flagEnableRemote), "D02"); Assert.AreEqual(FlagState.Disabled, n.GetFlagState(flagEnableLocal), "D03"); Assert.AreEqual(FlagState.Unknown, n.GetFlagState(flagDisableRemote), "D04"); Assert.AreEqual(FlagState.Enabled, n.GetFlagState(flagDisableLocal), "D05"); n.DisableFlag(flag); Assert.AreEqual(FlagState.Disabled, n.GetFlagState(flag), "E01"); Assert.AreEqual(FlagState.Unknown, n.GetFlagState(flagEnableRemote), "E02"); Assert.AreEqual(FlagState.Disabled, n.GetFlagState(flagEnableLocal), "E03"); Assert.AreEqual(FlagState.Disabled, n.GetFlagState(flagDisableRemote), "E04"); Assert.AreEqual(FlagState.Disabled, n.GetFlagState(flagDisableLocal), "E05"); n.EnableFlag(flag); Assert.AreEqual(FlagState.Enabled, n.GetFlagState(flag), "F01"); Assert.AreEqual(FlagState.Enabled, n.GetFlagState(flagEnableRemote), "F02"); Assert.AreEqual(FlagState.Enabled, n.GetFlagState(flagEnableLocal), "F03"); Assert.AreEqual(FlagState.Disabled, n.GetFlagState(flagDisableRemote), "F04"); Assert.AreEqual(FlagState.Disabled, n.GetFlagState(flagDisableLocal), "F05"); }
public AutoSimplifyTransformation(MathIdentifier supportedEntityId, EstimatePlan plan, ManipulatePort simplify) : this(supportedEntityId.DerivePostfix("AutoSimplify"), delegate() { return new Pattern(new EntityCondition(supportedEntityId)); }, plan, simplify) { }