Skip to content

Commit ab58acc

Browse files
Merge pull request #164 from SpiceSharp/clean_up
Cleanup of events
2 parents da694c4 + 2469282 commit ab58acc

15 files changed

Lines changed: 62 additions & 72 deletions

File tree

src/SpiceSharpParser.IntegrationTests/BaseTests.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -156,21 +156,21 @@ public static List<object> RunSimulationsAndReturnExports(SpiceSharpModel reader
156156
};
157157
}
158158

159-
if (simulation is Transient)
159+
if (simulation is Transient transient)
160160
{
161161
var tranResult = new List<Tuple<double, double>>();
162162
result.Add(tranResult);
163163
simulation.EventExportData += (sender, e) =>
164164
{
165-
tranResult.Add(new Tuple<double, double>(e.Time, export.Extract()));
165+
tranResult.Add(new Tuple<double, double>(transient.Time, export.Extract()));
166166
};
167167
}
168168
}
169169

170170
foreach (var simulation in readerResult.Simulations)
171171
{
172172
var codes = simulation.Run(readerResult.Circuit, -1);
173-
codes = simulation.AttachEvents(codes);
173+
codes = simulation.InvokeEvents(codes);
174174

175175
codes.ToArray(); //eval
176176
}
@@ -190,7 +190,7 @@ public static void RunSimulations(SpiceSharpModel readerResult)
190190
foreach (var simulation in readerResult.Simulations)
191191
{
192192
var codes = simulation.Run(readerResult.Circuit, -1);
193-
codes = simulation.AttachEvents(codes);
193+
codes = simulation.InvokeEvents(codes);
194194

195195
codes.ToArray(); // eval
196196
}
@@ -207,7 +207,7 @@ public static double RunOpSimulation(SpiceSharpModel readerResult, string nameOf
207207
};
208208

209209
var codes = simulation.Run(readerResult.Circuit, -1);
210-
codes = simulation.AttachEvents(codes);
210+
codes = simulation.InvokeEvents(codes);
211211
codes.ToArray(); // eval
212212
return result;
213213
}
@@ -227,7 +227,7 @@ public static double[] RunOpSimulation(SpiceSharpModel readerResult, params stri
227227
};
228228

229229
var codes = simulation.Run(readerResult.Circuit, -1);
230-
var attached = simulation.AttachEvents(codes);
230+
var attached = simulation.InvokeEvents(codes);
231231
attached.ToArray(); // eval
232232

233233
return result;
@@ -255,7 +255,7 @@ public static Tuple<string, double>[] RunOpSimulation(SpiceSharpModel readerResu
255255
};
256256

257257
var codes = simulation.Run(readerResult.Circuit, -1);
258-
var attached = simulation.AttachEvents(codes);
258+
var attached = simulation.InvokeEvents(codes);
259259
attached.ToArray(); // eval
260260

261261
return result;
@@ -269,11 +269,11 @@ public static Tuple<double, double>[] RunTransientSimulation(SpiceSharpModel rea
269269
var simulation = readerResult.Simulations.First(s => s is Transient);
270270
simulation.EventExportData += (sender, e) =>
271271
{
272-
list.Add(new Tuple<double, double>(e.Time, export.Extract()));
272+
list.Add(new Tuple<double, double>(((Transient)simulation).Time, export.Extract()));
273273
};
274274

275275
var codes = simulation.Run(readerResult.Circuit, -1);
276-
var attached = simulation.AttachEvents(codes);
276+
var attached = simulation.InvokeEvents(codes);
277277
attached.ToArray(); // eval
278278

279279
return list.ToArray();
@@ -291,7 +291,7 @@ public static Tuple<double, double>[] RunDCSimulation(SpiceSharpModel readerResu
291291
};
292292

293293
var codes = simulation.Run(readerResult.Circuit, -1);
294-
var attached = simulation.AttachEvents(codes);
294+
var attached = simulation.InvokeEvents(codes);
295295
attached.ToArray(); // eval
296296

297297
return list.ToArray();

src/SpiceSharpParser.IntegrationTests/Common/CaseSensitivityTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ public void When_DistributionNameSensitive_Positive_Expect_NoException()
132132
var spiceModel = reader.Read(parseResult.FinalModel);
133133

134134
var codes = spiceModel.Simulations[0].Run(spiceModel.Circuit, -1);
135-
codes = spiceModel.Simulations[0].AttachEvents(codes);
135+
codes = spiceModel.Simulations[0].InvokeEvents(codes);
136136

137137
codes.ToArray();
138138
}
@@ -159,7 +159,7 @@ public void When_DistributionNameSensitive_Negative_Expect_Exception()
159159
var spiceModel = reader.Read(parseResult.FinalModel);
160160

161161
var codes = spiceModel.Simulations[0].Run(spiceModel.Circuit, -1);
162-
codes = spiceModel.Simulations[0].AttachEvents(codes);
162+
codes = spiceModel.Simulations[0].InvokeEvents(codes);
163163

164164

165165
Assert.Throws<ArgumentException>(() => codes.ToArray());

src/SpiceSharpParser.IntegrationTests/Waveforms/PulseTests.cs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,23 @@ public void Test01()
2020
Assert.NotNull(netlist);
2121

2222
var simulation = netlist.Simulations.First(s => s is Transient);
23+
var raw = (Transient)simulation;
2324
bool riseHit = false, risenHit = false, fallHit = false, fallenHit = false;
2425

2526
simulation.EventExportData += (sender, args) =>
2627
{
27-
if (Math.Abs(args.Time - 0.2) < 1e-12)
28+
if (Math.Abs(raw.Time - 0.2) < 1e-12)
2829
riseHit = true;
29-
if (Math.Abs(args.Time - 0.3) < 1e-12)
30+
if (Math.Abs(raw.Time - 0.3) < 1e-12)
3031
risenHit = true;
31-
if (Math.Abs(args.Time - 0.7) < 1e-12)
32+
if (Math.Abs(raw.Time - 0.7) < 1e-12)
3233
fallHit = true;
33-
if (Math.Abs(args.Time - 0.8) < 1e-12)
34+
if (Math.Abs(raw.Time - 0.8) < 1e-12)
3435
fallenHit = true;
3536
};
3637

3738
var events = simulation.Run(netlist.Circuit);
38-
simulation.AttachEvents(events).ToArray();
39+
simulation.InvokeEvents(events).ToArray();
3940

4041
Assert.True(riseHit);
4142
Assert.True(risenHit);
@@ -56,23 +57,25 @@ public void Test02()
5657
Assert.NotNull(netlist);
5758

5859
var simulation = netlist.Simulations.First(s => s is Transient);
60+
var raw = (Transient)simulation;
61+
5962
bool riseHit = false, risenHit = false, fallHit = false, fallenHit = false;
6063

6164
simulation.EventExportData += (sender, args) =>
6265
{
63-
if (Math.Abs(args.Time - 0.2) < 1e-12)
66+
if (Math.Abs(raw.Time - 0.2) < 1e-12)
6467
riseHit = true;
65-
if (Math.Abs(args.Time - 0.3) < 1e-12)
68+
if (Math.Abs(raw.Time - 0.3) < 1e-12)
6669
risenHit = true;
67-
if (Math.Abs(args.Time - 0.7) < 1e-12)
70+
if (Math.Abs(raw.Time - 0.7) < 1e-12)
6871
fallHit = true;
69-
if (Math.Abs(args.Time - 0.8) < 1e-12)
72+
if (Math.Abs(raw.Time - 0.8) < 1e-12)
7073
fallenHit = true;
7174
};
7275

7376

7477
var events = simulation.Run(netlist.Circuit);
75-
var codes = simulation.AttachEvents(events);
78+
var codes = simulation.InvokeEvents(events);
7679

7780
//eval
7881
codes.ToArray();

src/SpiceSharpParser.IntegrationTests/Waveforms/PwlTests.cs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
using SpiceSharp.Simulations;
2-
using System;
3-
using System.Collections.Generic;
42
using System.Linq;
5-
using System.Text;
6-
using System.Threading.Tasks;
73
using Xunit;
84

95
namespace SpiceSharpParser.IntegrationTests.Waveforms
@@ -23,18 +19,18 @@ public void Test01()
2319
Assert.NotNull(netlist);
2420

2521
var simulation = netlist.Simulations.First(s => s is Transient);
26-
22+
var raw = (Transient)simulation;
2723
var wasHit1 = false;
2824
var wasHit2 = false;
2925

3026
simulation.EventExportData += (sender, args) =>
3127
{
32-
if (args.Time == 1.111)
28+
if (raw.Time == 1.111)
3329
{
3430
wasHit1 = true;
3531
}
3632

37-
if (args.Time == 3.34)
33+
if (raw.Time == 3.34)
3834
{
3935
wasHit2 = true;
4036
}
@@ -43,7 +39,7 @@ public void Test01()
4339
};
4440

4541
var codes = simulation.Run(netlist.Circuit);
46-
var withEvents = simulation.AttachEvents(codes);
42+
var withEvents = simulation.InvokeEvents(codes);
4743

4844
withEvents.ToArray(); //eval
4945

src/SpiceSharpParser.IntegrationTests/Waveforms/SineTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public void Test01(double offset, double amplitude, double frequency, double del
4646
Assert.True(EqualsWithTol(expected, simulation.GetVoltage("1")));
4747
};
4848

49-
foreach (var code in simulation.AttachEvents(simulation.Run(netlist.Circuit)))
49+
foreach (var code in simulation.InvokeEvents(simulation.Run(netlist.Circuit)))
5050
{
5151
}
5252

@@ -69,7 +69,7 @@ public void Test02(double offset, double amplitude, double frequency, double del
6969

7070
simulation.EventExportData += (sender, args) =>
7171
{
72-
var time = args.Time;
72+
var time = ((Transient)simulation).Time;
7373
time -= delay;
7474

7575
// Calculate sine wave result (no offset)
@@ -89,7 +89,7 @@ public void Test02(double offset, double amplitude, double frequency, double del
8989
};
9090

9191
var events = simulation.Run(netlist.Circuit);
92-
foreach (var code in simulation.AttachEvents(events))
92+
foreach (var code in simulation.InvokeEvents(events))
9393
{
9494

9595
}

src/SpiceSharpParser/ModelReaders/Netlist/Spice/Readers/Controls/PrintControl.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public override void Read(Control statement, IReadingContext context)
6969
}
7070
}
7171

72-
private static void CreateRowInPrint(ref int rowIndex, ISimulationWithEvents simulation, IReadingContext context, ExportData eventArgs, List<Export> exports, Print print)
72+
private static void CreateRowInPrint(ref int rowIndex, ISimulationWithEvents simulation, IReadingContext context, object eventArgs, List<Export> exports, Print print)
7373
{
7474
Row row = new Row(rowIndex++);
7575

src/SpiceSharpParser/ModelReaders/Netlist/Spice/Readers/Controls/SaveControl.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ private void CreateAcSweepPlot(string variableName, List<Export> exports, IReadi
229229

230230
private void AddOpPointToSeries(Context.Sweeps.ParameterSweep firstParameterSweep, Export export, IReadingContext context, Series series)
231231
{
232-
export.Simulation.EventExportData += (object sender, ExportData e) =>
232+
export.Simulation.EventExportData += (object sender, object e) =>
233233
{
234234
var expressionContext = context.EvaluationContext.GetSimulationContext(export.Simulation);
235235
var firstParameterSweepParameter = expressionContext.Parameters[firstParameterSweep.Parameter.Value];
@@ -241,17 +241,17 @@ private void AddOpPointToSeries(Context.Sweeps.ParameterSweep firstParameterSwee
241241

242242
private void AddTranPointsToSeries(Export export, Series series)
243243
{
244-
export.Simulation.EventExportData += (object sender, ExportData e) =>
244+
export.Simulation.EventExportData += (object sender, object e) =>
245245
{
246-
series.Points.Add(new Point() { X = e.Time, Y = export.Extract() });
246+
series.Points.Add(new Point() { X = (export.Simulation as Transient).Time, Y = export.Extract() });
247247
};
248248
}
249249

250250
private void AddAcPointsToSeries(Export export, Series series)
251251
{
252-
export.Simulation.EventExportData += (object sender, ExportData e) =>
252+
export.Simulation.EventExportData += (object sender, object e) =>
253253
{
254-
series.Points.Add(new Point() { X = e.Frequency, Y = export.Extract() });
254+
series.Points.Add(new Point() { X = (export.Simulation as AC).Frequency, Y = export.Extract() });
255255
};
256256
}
257257

src/SpiceSharpParser/ModelReaders/Netlist/Spice/Readers/Controls/WaveControl.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public WaveControl(IMapper<Exporter> mapper, IExportFactory factory)
3636
public override void Read(Control statement, IReadingContext context)
3737
{
3838
var transient = (ISimulationWithEvents)context.Result.Simulations.FirstOrDefault(s => s is Transient);
39+
var sim = (Transient)transient;
3940

4041
if (transient != null)
4142
{
@@ -56,7 +57,7 @@ public override void Read(Control statement, IReadingContext context)
5657
var pwlData = new List<(double, double)>();
5758
transient.EventExportData += (sender, args) =>
5859
{
59-
pwlData.Add((args.Time, monoChannelExport.Extract()));
60+
pwlData.Add((sim.Time, monoChannelExport.Extract()));
6061
};
6162

6263
transient.EventAfterExecute += (sender, args) =>
@@ -76,8 +77,8 @@ public override void Read(Control statement, IReadingContext context)
7677
var rightData = new List<(double, double)>();
7778
transient.EventExportData += (sender, args) =>
7879
{
79-
leftData.Add((args.Time, leftChannelExport.Extract()));
80-
rightData.Add((args.Time, rightChannelExport.Extract()));
80+
leftData.Add((sim.Time, leftChannelExport.Extract()));
81+
rightData.Add((sim.Time, rightChannelExport.Extract()));
8182
};
8283

8384
transient.EventAfterExecute += (sender, args) =>

src/SpiceSharpParser/ModelWriters/CSharp/Events/ACWithEvents.cs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ namespace SpiceSharpParser.Common
66
{
77
public class ACWithEvents : AC, ISimulationWithEvents
88
{
9-
protected ACWithEvents(string name) : base(name)
9+
protected ACWithEvents(string name)
10+
: base(name)
1011
{
1112
}
1213

@@ -34,9 +35,8 @@ public ACWithEvents(string name, IEnumerable<double> frequencySweep): base(name,
3435

3536
public event OnExportData EventExportData;
3637

37-
public IEnumerable<int> AttachEvents(IEnumerable<int> codes)
38+
public IEnumerable<int> InvokeEvents(IEnumerable<int> codes)
3839
{
39-
EventBeforeSetup.Invoke(this, EventArgs.Empty);
4040
foreach (var code in codes)
4141
{
4242
switch (code)
@@ -73,11 +73,10 @@ public IEnumerable<int> AttachEvents(IEnumerable<int> codes)
7373
EventAfterExecute.Invoke(this, EventArgs.Empty);
7474
break;
7575

76+
case AC.ExportSmallSignal:
7677

77-
case AC.Exports:
78-
79-
double frequency = base.Frequency;
80-
EventExportData.Invoke(this, new ExportData { Frequency = frequency });
78+
double frequency = Frequency;
79+
EventExportData?.Invoke(this, EventArgs.Empty);
8180
break;
8281
}
8382
yield return code;

src/SpiceSharpParser/ModelWriters/CSharp/Events/DcWithEvents.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public DcWithEvents(string name, IEnumerable<ISweep> sweeps) : this(name)
4040

4141
public event OnExportData EventExportData;
4242

43-
public IEnumerable<int> AttachEvents(IEnumerable<int> codes)
43+
public IEnumerable<int> InvokeEvents(IEnumerable<int> codes)
4444
{
4545
foreach (var code in codes)
4646
{
@@ -54,7 +54,7 @@ public IEnumerable<int> AttachEvents(IEnumerable<int> codes)
5454
EventAfterValidation?.Invoke(this, EventArgs.Empty);
5555
break;
5656

57-
case 65536:
57+
case DC.BeforeSetup:
5858
EventBeforeSetup?.Invoke(this, EventArgs.Empty);
5959
break;
6060
case DC.AfterSetup:
@@ -79,7 +79,7 @@ public IEnumerable<int> AttachEvents(IEnumerable<int> codes)
7979
break;
8080

8181
case DC.ExportSweep:
82-
EventExportData?.Invoke(this, new ExportData { });
82+
EventExportData?.Invoke(this, EventArgs.Empty);
8383
break;
8484
}
8585
yield return code;

0 commit comments

Comments
 (0)