From d3f0d0ccb8a3071b6200e91904e63bf6e01372dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Go=C5=82=C4=99biowski?= Date: Sat, 19 Oct 2024 15:48:42 +0200 Subject: [PATCH 1/2] Cleanup of events --- .../BaseTests.cs | 20 ++++++++-------- .../Common/CaseSensitivityTests.cs | 4 ++-- .../Waveforms/PulseTests.cs | 23 +++++++++++-------- .../Waveforms/PwlTests.cs | 12 ++++------ .../Waveforms/SineTests.cs | 6 ++--- .../Spice/Readers/Controls/PrintControl.cs | 2 +- .../Spice/Readers/Controls/SaveControl.cs | 10 ++++---- .../Spice/Readers/Controls/WaveControl.cs | 7 +++--- .../CSharp/Events/ACWithEvents.cs | 13 +++++------ .../CSharp/Events/DcWithEvents.cs | 6 ++--- .../CSharp/Events/ISimulationWithEvents.cs | 15 +++--------- .../CSharp/Events/NoiseWithEvents.cs | 4 ++-- .../CSharp/Events/OpWithEvents.cs | 4 ++-- .../CSharp/Events/TransientWithEvents.cs | 6 ++--- 14 files changed, 61 insertions(+), 71 deletions(-) diff --git a/src/SpiceSharpParser.IntegrationTests/BaseTests.cs b/src/SpiceSharpParser.IntegrationTests/BaseTests.cs index 8d97218d..b8d5bb78 100644 --- a/src/SpiceSharpParser.IntegrationTests/BaseTests.cs +++ b/src/SpiceSharpParser.IntegrationTests/BaseTests.cs @@ -156,13 +156,13 @@ public static List RunSimulationsAndReturnExports(SpiceSharpModel reader }; } - if (simulation is Transient) + if (simulation is Transient transient) { var tranResult = new List>(); result.Add(tranResult); simulation.EventExportData += (sender, e) => { - tranResult.Add(new Tuple(e.Time, export.Extract())); + tranResult.Add(new Tuple(transient.Time, export.Extract())); }; } } @@ -170,7 +170,7 @@ public static List RunSimulationsAndReturnExports(SpiceSharpModel reader foreach (var simulation in readerResult.Simulations) { var codes = simulation.Run(readerResult.Circuit, -1); - codes = simulation.AttachEvents(codes); + codes = simulation.InvokeEvents(codes); codes.ToArray(); //eval } @@ -190,7 +190,7 @@ public static void RunSimulations(SpiceSharpModel readerResult) foreach (var simulation in readerResult.Simulations) { var codes = simulation.Run(readerResult.Circuit, -1); - codes = simulation.AttachEvents(codes); + codes = simulation.InvokeEvents(codes); codes.ToArray(); // eval } @@ -207,7 +207,7 @@ public static double RunOpSimulation(SpiceSharpModel readerResult, string nameOf }; var codes = simulation.Run(readerResult.Circuit, -1); - codes = simulation.AttachEvents(codes); + codes = simulation.InvokeEvents(codes); codes.ToArray(); // eval return result; } @@ -227,7 +227,7 @@ public static double[] RunOpSimulation(SpiceSharpModel readerResult, params stri }; var codes = simulation.Run(readerResult.Circuit, -1); - var attached = simulation.AttachEvents(codes); + var attached = simulation.InvokeEvents(codes); attached.ToArray(); // eval return result; @@ -255,7 +255,7 @@ public static Tuple[] RunOpSimulation(SpiceSharpModel readerResu }; var codes = simulation.Run(readerResult.Circuit, -1); - var attached = simulation.AttachEvents(codes); + var attached = simulation.InvokeEvents(codes); attached.ToArray(); // eval return result; @@ -269,11 +269,11 @@ public static Tuple[] RunTransientSimulation(SpiceSharpModel rea var simulation = readerResult.Simulations.First(s => s is Transient); simulation.EventExportData += (sender, e) => { - list.Add(new Tuple(e.Time, export.Extract())); + list.Add(new Tuple(((Transient)simulation).Time, export.Extract())); }; var codes = simulation.Run(readerResult.Circuit, -1); - var attached = simulation.AttachEvents(codes); + var attached = simulation.InvokeEvents(codes); attached.ToArray(); // eval return list.ToArray(); @@ -291,7 +291,7 @@ public static Tuple[] RunDCSimulation(SpiceSharpModel readerResu }; var codes = simulation.Run(readerResult.Circuit, -1); - var attached = simulation.AttachEvents(codes); + var attached = simulation.InvokeEvents(codes); attached.ToArray(); // eval return list.ToArray(); diff --git a/src/SpiceSharpParser.IntegrationTests/Common/CaseSensitivityTests.cs b/src/SpiceSharpParser.IntegrationTests/Common/CaseSensitivityTests.cs index cce88875..2561f55a 100644 --- a/src/SpiceSharpParser.IntegrationTests/Common/CaseSensitivityTests.cs +++ b/src/SpiceSharpParser.IntegrationTests/Common/CaseSensitivityTests.cs @@ -132,7 +132,7 @@ public void When_DistributionNameSensitive_Positive_Expect_NoException() var spiceModel = reader.Read(parseResult.FinalModel); var codes = spiceModel.Simulations[0].Run(spiceModel.Circuit, -1); - codes = spiceModel.Simulations[0].AttachEvents(codes); + codes = spiceModel.Simulations[0].InvokeEvents(codes); codes.ToArray(); } @@ -159,7 +159,7 @@ public void When_DistributionNameSensitive_Negative_Expect_Exception() var spiceModel = reader.Read(parseResult.FinalModel); var codes = spiceModel.Simulations[0].Run(spiceModel.Circuit, -1); - codes = spiceModel.Simulations[0].AttachEvents(codes); + codes = spiceModel.Simulations[0].InvokeEvents(codes); Assert.Throws(() => codes.ToArray()); diff --git a/src/SpiceSharpParser.IntegrationTests/Waveforms/PulseTests.cs b/src/SpiceSharpParser.IntegrationTests/Waveforms/PulseTests.cs index bf209b72..15e249f3 100644 --- a/src/SpiceSharpParser.IntegrationTests/Waveforms/PulseTests.cs +++ b/src/SpiceSharpParser.IntegrationTests/Waveforms/PulseTests.cs @@ -20,22 +20,23 @@ public void Test01() Assert.NotNull(netlist); var simulation = netlist.Simulations.First(s => s is Transient); + var raw = (Transient)simulation; bool riseHit = false, risenHit = false, fallHit = false, fallenHit = false; simulation.EventExportData += (sender, args) => { - if (Math.Abs(args.Time - 0.2) < 1e-12) + if (Math.Abs(raw.Time - 0.2) < 1e-12) riseHit = true; - if (Math.Abs(args.Time - 0.3) < 1e-12) + if (Math.Abs(raw.Time - 0.3) < 1e-12) risenHit = true; - if (Math.Abs(args.Time - 0.7) < 1e-12) + if (Math.Abs(raw.Time - 0.7) < 1e-12) fallHit = true; - if (Math.Abs(args.Time - 0.8) < 1e-12) + if (Math.Abs(raw.Time - 0.8) < 1e-12) fallenHit = true; }; var events = simulation.Run(netlist.Circuit); - simulation.AttachEvents(events).ToArray(); + simulation.InvokeEvents(events).ToArray(); Assert.True(riseHit); Assert.True(risenHit); @@ -56,23 +57,25 @@ public void Test02() Assert.NotNull(netlist); var simulation = netlist.Simulations.First(s => s is Transient); + var raw = (Transient)simulation; + bool riseHit = false, risenHit = false, fallHit = false, fallenHit = false; simulation.EventExportData += (sender, args) => { - if (Math.Abs(args.Time - 0.2) < 1e-12) + if (Math.Abs(raw.Time - 0.2) < 1e-12) riseHit = true; - if (Math.Abs(args.Time - 0.3) < 1e-12) + if (Math.Abs(raw.Time - 0.3) < 1e-12) risenHit = true; - if (Math.Abs(args.Time - 0.7) < 1e-12) + if (Math.Abs(raw.Time - 0.7) < 1e-12) fallHit = true; - if (Math.Abs(args.Time - 0.8) < 1e-12) + if (Math.Abs(raw.Time - 0.8) < 1e-12) fallenHit = true; }; var events = simulation.Run(netlist.Circuit); - var codes = simulation.AttachEvents(events); + var codes = simulation.InvokeEvents(events); //eval codes.ToArray(); diff --git a/src/SpiceSharpParser.IntegrationTests/Waveforms/PwlTests.cs b/src/SpiceSharpParser.IntegrationTests/Waveforms/PwlTests.cs index 7bff3038..f3617350 100644 --- a/src/SpiceSharpParser.IntegrationTests/Waveforms/PwlTests.cs +++ b/src/SpiceSharpParser.IntegrationTests/Waveforms/PwlTests.cs @@ -1,9 +1,5 @@ using SpiceSharp.Simulations; -using System; -using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; using Xunit; namespace SpiceSharpParser.IntegrationTests.Waveforms @@ -23,18 +19,18 @@ public void Test01() Assert.NotNull(netlist); var simulation = netlist.Simulations.First(s => s is Transient); - + var raw = (Transient)simulation; var wasHit1 = false; var wasHit2 = false; simulation.EventExportData += (sender, args) => { - if (args.Time == 1.111) + if (raw.Time == 1.111) { wasHit1 = true; } - if (args.Time == 3.34) + if (raw.Time == 3.34) { wasHit2 = true; } @@ -43,7 +39,7 @@ public void Test01() }; var codes = simulation.Run(netlist.Circuit); - var withEvents = simulation.AttachEvents(codes); + var withEvents = simulation.InvokeEvents(codes); withEvents.ToArray(); //eval diff --git a/src/SpiceSharpParser.IntegrationTests/Waveforms/SineTests.cs b/src/SpiceSharpParser.IntegrationTests/Waveforms/SineTests.cs index 67122e90..694dcf96 100644 --- a/src/SpiceSharpParser.IntegrationTests/Waveforms/SineTests.cs +++ b/src/SpiceSharpParser.IntegrationTests/Waveforms/SineTests.cs @@ -46,7 +46,7 @@ public void Test01(double offset, double amplitude, double frequency, double del Assert.True(EqualsWithTol(expected, simulation.GetVoltage("1"))); }; - foreach (var code in simulation.AttachEvents(simulation.Run(netlist.Circuit))) + foreach (var code in simulation.InvokeEvents(simulation.Run(netlist.Circuit))) { } @@ -69,7 +69,7 @@ public void Test02(double offset, double amplitude, double frequency, double del simulation.EventExportData += (sender, args) => { - var time = args.Time; + var time = ((Transient)simulation).Time; time -= delay; // Calculate sine wave result (no offset) @@ -89,7 +89,7 @@ public void Test02(double offset, double amplitude, double frequency, double del }; var events = simulation.Run(netlist.Circuit); - foreach (var code in simulation.AttachEvents(events)) + foreach (var code in simulation.InvokeEvents(events)) { } diff --git a/src/SpiceSharpParser/ModelReaders/Netlist/Spice/Readers/Controls/PrintControl.cs b/src/SpiceSharpParser/ModelReaders/Netlist/Spice/Readers/Controls/PrintControl.cs index ced5fc24..eb97e68d 100644 --- a/src/SpiceSharpParser/ModelReaders/Netlist/Spice/Readers/Controls/PrintControl.cs +++ b/src/SpiceSharpParser/ModelReaders/Netlist/Spice/Readers/Controls/PrintControl.cs @@ -69,7 +69,7 @@ public override void Read(Control statement, IReadingContext context) } } - private static void CreateRowInPrint(ref int rowIndex, ISimulationWithEvents simulation, IReadingContext context, ExportData eventArgs, List exports, Print print) + private static void CreateRowInPrint(ref int rowIndex, ISimulationWithEvents simulation, IReadingContext context, object eventArgs, List exports, Print print) { Row row = new Row(rowIndex++); diff --git a/src/SpiceSharpParser/ModelReaders/Netlist/Spice/Readers/Controls/SaveControl.cs b/src/SpiceSharpParser/ModelReaders/Netlist/Spice/Readers/Controls/SaveControl.cs index 33386f3e..d51542c9 100644 --- a/src/SpiceSharpParser/ModelReaders/Netlist/Spice/Readers/Controls/SaveControl.cs +++ b/src/SpiceSharpParser/ModelReaders/Netlist/Spice/Readers/Controls/SaveControl.cs @@ -229,7 +229,7 @@ private void CreateAcSweepPlot(string variableName, List exports, IReadi private void AddOpPointToSeries(Context.Sweeps.ParameterSweep firstParameterSweep, Export export, IReadingContext context, Series series) { - export.Simulation.EventExportData += (object sender, ExportData e) => + export.Simulation.EventExportData += (object sender, object e) => { var expressionContext = context.EvaluationContext.GetSimulationContext(export.Simulation); var firstParameterSweepParameter = expressionContext.Parameters[firstParameterSweep.Parameter.Value]; @@ -241,17 +241,17 @@ private void AddOpPointToSeries(Context.Sweeps.ParameterSweep firstParameterSwee private void AddTranPointsToSeries(Export export, Series series) { - export.Simulation.EventExportData += (object sender, ExportData e) => + export.Simulation.EventExportData += (object sender, object e) => { - series.Points.Add(new Point() { X = e.Time, Y = export.Extract() }); + series.Points.Add(new Point() { X = (export.Simulation as Transient).Time, Y = export.Extract() }); }; } private void AddAcPointsToSeries(Export export, Series series) { - export.Simulation.EventExportData += (object sender, ExportData e) => + export.Simulation.EventExportData += (object sender, object e) => { - series.Points.Add(new Point() { X = e.Frequency, Y = export.Extract() }); + series.Points.Add(new Point() { X = (export.Simulation as AC).Frequency, Y = export.Extract() }); }; } diff --git a/src/SpiceSharpParser/ModelReaders/Netlist/Spice/Readers/Controls/WaveControl.cs b/src/SpiceSharpParser/ModelReaders/Netlist/Spice/Readers/Controls/WaveControl.cs index 777be501..8d56f330 100644 --- a/src/SpiceSharpParser/ModelReaders/Netlist/Spice/Readers/Controls/WaveControl.cs +++ b/src/SpiceSharpParser/ModelReaders/Netlist/Spice/Readers/Controls/WaveControl.cs @@ -36,6 +36,7 @@ public WaveControl(IMapper mapper, IExportFactory factory) public override void Read(Control statement, IReadingContext context) { var transient = (ISimulationWithEvents)context.Result.Simulations.FirstOrDefault(s => s is Transient); + var sim = (Transient)transient; if (transient != null) { @@ -56,7 +57,7 @@ public override void Read(Control statement, IReadingContext context) var pwlData = new List<(double, double)>(); transient.EventExportData += (sender, args) => { - pwlData.Add((args.Time, monoChannelExport.Extract())); + pwlData.Add((sim.Time, monoChannelExport.Extract())); }; transient.EventAfterExecute += (sender, args) => @@ -76,8 +77,8 @@ public override void Read(Control statement, IReadingContext context) var rightData = new List<(double, double)>(); transient.EventExportData += (sender, args) => { - leftData.Add((args.Time, leftChannelExport.Extract())); - rightData.Add((args.Time, rightChannelExport.Extract())); + leftData.Add((sim.Time, leftChannelExport.Extract())); + rightData.Add((sim.Time, rightChannelExport.Extract())); }; transient.EventAfterExecute += (sender, args) => diff --git a/src/SpiceSharpParser/ModelWriters/CSharp/Events/ACWithEvents.cs b/src/SpiceSharpParser/ModelWriters/CSharp/Events/ACWithEvents.cs index 8bf5e0ce..c64eee27 100644 --- a/src/SpiceSharpParser/ModelWriters/CSharp/Events/ACWithEvents.cs +++ b/src/SpiceSharpParser/ModelWriters/CSharp/Events/ACWithEvents.cs @@ -6,7 +6,8 @@ namespace SpiceSharpParser.Common { public class ACWithEvents : AC, ISimulationWithEvents { - protected ACWithEvents(string name) : base(name) + protected ACWithEvents(string name) + : base(name) { } @@ -34,9 +35,8 @@ public ACWithEvents(string name, IEnumerable frequencySweep): base(name, public event OnExportData EventExportData; - public IEnumerable AttachEvents(IEnumerable codes) + public IEnumerable InvokeEvents(IEnumerable codes) { - EventBeforeSetup.Invoke(this, EventArgs.Empty); foreach (var code in codes) { switch (code) @@ -73,11 +73,10 @@ public IEnumerable AttachEvents(IEnumerable codes) EventAfterExecute.Invoke(this, EventArgs.Empty); break; + case AC.ExportSmallSignal: - case AC.Exports: - - double frequency = base.Frequency; - EventExportData.Invoke(this, new ExportData { Frequency = frequency }); + double frequency = Frequency; + EventExportData?.Invoke(this, EventArgs.Empty); break; } yield return code; diff --git a/src/SpiceSharpParser/ModelWriters/CSharp/Events/DcWithEvents.cs b/src/SpiceSharpParser/ModelWriters/CSharp/Events/DcWithEvents.cs index 4a1fc6dd..33d04e9c 100644 --- a/src/SpiceSharpParser/ModelWriters/CSharp/Events/DcWithEvents.cs +++ b/src/SpiceSharpParser/ModelWriters/CSharp/Events/DcWithEvents.cs @@ -40,7 +40,7 @@ public DcWithEvents(string name, IEnumerable sweeps) : this(name) public event OnExportData EventExportData; - public IEnumerable AttachEvents(IEnumerable codes) + public IEnumerable InvokeEvents(IEnumerable codes) { foreach (var code in codes) { @@ -54,7 +54,7 @@ public IEnumerable AttachEvents(IEnumerable codes) EventAfterValidation?.Invoke(this, EventArgs.Empty); break; - case 65536: + case DC.BeforeSetup: EventBeforeSetup?.Invoke(this, EventArgs.Empty); break; case DC.AfterSetup: @@ -79,7 +79,7 @@ public IEnumerable AttachEvents(IEnumerable codes) break; case DC.ExportSweep: - EventExportData?.Invoke(this, new ExportData { }); + EventExportData?.Invoke(this, EventArgs.Empty); break; } yield return code; diff --git a/src/SpiceSharpParser/ModelWriters/CSharp/Events/ISimulationWithEvents.cs b/src/SpiceSharpParser/ModelWriters/CSharp/Events/ISimulationWithEvents.cs index ec3d2e80..9dcf8560 100644 --- a/src/SpiceSharpParser/ModelWriters/CSharp/Events/ISimulationWithEvents.cs +++ b/src/SpiceSharpParser/ModelWriters/CSharp/Events/ISimulationWithEvents.cs @@ -1,6 +1,4 @@ -using SpiceSharp; -using SpiceSharp.Entities; -using SpiceSharp.Simulations; +using SpiceSharp.Simulations; using System.Collections.Generic; namespace SpiceSharpParser.Common @@ -21,14 +19,7 @@ namespace SpiceSharpParser.Common public delegate void OnAfterExecute(object sender, object argument); - public delegate void OnExportData(object sender, ExportData argument); - - public class ExportData - { - public double Time { get; set; } - public double Frequency { get; internal set; } - } - + public delegate void OnExportData(object sender, object argument); public interface ISimulationWithEvents : ISimulation { @@ -52,6 +43,6 @@ public interface ISimulationWithEvents : ISimulation event OnExportData EventExportData; - IEnumerable AttachEvents(IEnumerable codes); + IEnumerable InvokeEvents(IEnumerable codes); } } \ No newline at end of file diff --git a/src/SpiceSharpParser/ModelWriters/CSharp/Events/NoiseWithEvents.cs b/src/SpiceSharpParser/ModelWriters/CSharp/Events/NoiseWithEvents.cs index a824c614..efdbc0c0 100644 --- a/src/SpiceSharpParser/ModelWriters/CSharp/Events/NoiseWithEvents.cs +++ b/src/SpiceSharpParser/ModelWriters/CSharp/Events/NoiseWithEvents.cs @@ -38,7 +38,7 @@ public NoiseWithEvents(string name, string input, string output, string referenc public event OnExportData EventExportData; - public IEnumerable AttachEvents(IEnumerable codes) + public IEnumerable InvokeEvents(IEnumerable codes) { foreach (var code in codes) { @@ -79,7 +79,7 @@ public IEnumerable AttachEvents(IEnumerable codes) case Noise.ExportNoise: - EventExportData?.Invoke(this, new ExportData { }); + EventExportData?.Invoke(this, EventArgs.Empty); break; } yield return code; diff --git a/src/SpiceSharpParser/ModelWriters/CSharp/Events/OpWithEvents.cs b/src/SpiceSharpParser/ModelWriters/CSharp/Events/OpWithEvents.cs index 1ec528d4..6e8fde96 100644 --- a/src/SpiceSharpParser/ModelWriters/CSharp/Events/OpWithEvents.cs +++ b/src/SpiceSharpParser/ModelWriters/CSharp/Events/OpWithEvents.cs @@ -30,7 +30,7 @@ public OpWithEvents(string name) : base(name) public event OnExportData EventExportData; - public IEnumerable AttachEvents(IEnumerable codes) + public IEnumerable InvokeEvents(IEnumerable codes) { foreach (var code in codes) { @@ -68,7 +68,7 @@ public IEnumerable AttachEvents(IEnumerable codes) EventBeforeUnSetup?.Invoke(this, EventArgs.Empty); break; case OP.ExportOperatingPoint: - EventExportData?.Invoke(this, new ExportData() { }); + EventExportData?.Invoke(this, EventArgs.Empty); break; } yield return code; diff --git a/src/SpiceSharpParser/ModelWriters/CSharp/Events/TransientWithEvents.cs b/src/SpiceSharpParser/ModelWriters/CSharp/Events/TransientWithEvents.cs index e902e497..97c62da3 100644 --- a/src/SpiceSharpParser/ModelWriters/CSharp/Events/TransientWithEvents.cs +++ b/src/SpiceSharpParser/ModelWriters/CSharp/Events/TransientWithEvents.cs @@ -61,7 +61,7 @@ public TransientWithEvents(string name, double step, double final, double maxSte public event OnExportData EventExportData; - public IEnumerable AttachEvents(IEnumerable codes) + public IEnumerable InvokeEvents(IEnumerable codes) { EventBeforeSetup.Invoke(this, EventArgs.Empty); EventBeforeTemperature?.Invoke(this, null); @@ -100,12 +100,12 @@ public IEnumerable AttachEvents(IEnumerable codes) case Transient.BeforeExecute: EventBeforeExecute?.Invoke(this, EventArgs.Empty); break; - case Simulation.AfterExecute: + case Transient.AfterExecute: EventAfterExecute?.Invoke(this, EventArgs.Empty); break; case Transient.ExportTransient: - EventExportData?.Invoke(this, new ExportData { Time = this.Time }); + EventExportData?.Invoke(this, EventArgs.Empty); break; } yield return code; From 2469282705af0550d9aa0708266554d7b385e023 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Go=C5=82=C4=99biowski?= Date: Sat, 19 Oct 2024 15:52:08 +0200 Subject: [PATCH 2/2] Update version --- src/SpiceSharpParser/SpiceSharpParser.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SpiceSharpParser/SpiceSharpParser.csproj b/src/SpiceSharpParser/SpiceSharpParser.csproj index 47045676..64811ce4 100644 --- a/src/SpiceSharpParser/SpiceSharpParser.csproj +++ b/src/SpiceSharpParser/SpiceSharpParser.csproj @@ -22,7 +22,7 @@ MIT latest - 3.2.1 + 3.2.2