shepherd-core 2025.6.4__py3-none-any.whl → 2025.10.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- shepherd_core/data_models/__init__.py +4 -2
- shepherd_core/data_models/base/content.py +2 -0
- shepherd_core/data_models/content/__init__.py +4 -2
- shepherd_core/data_models/content/{virtual_harvester.py → virtual_harvester_config.py} +3 -3
- shepherd_core/data_models/content/{virtual_source.py → virtual_source_config.py} +82 -58
- shepherd_core/data_models/content/virtual_source_fixture.yaml +24 -24
- shepherd_core/data_models/content/virtual_storage_config.py +426 -0
- shepherd_core/data_models/content/virtual_storage_fixture_creator.py +267 -0
- shepherd_core/data_models/content/virtual_storage_fixture_ideal.yaml +637 -0
- shepherd_core/data_models/content/virtual_storage_fixture_lead.yaml +49 -0
- shepherd_core/data_models/content/virtual_storage_fixture_lipo.yaml +735 -0
- shepherd_core/data_models/content/virtual_storage_fixture_mlcc.yaml +200 -0
- shepherd_core/data_models/content/virtual_storage_fixture_param_experiments.py +151 -0
- shepherd_core/data_models/content/virtual_storage_fixture_super.yaml +150 -0
- shepherd_core/data_models/content/virtual_storage_fixture_tantal.yaml +550 -0
- shepherd_core/data_models/experiment/observer_features.py +8 -2
- shepherd_core/data_models/experiment/target_config.py +1 -1
- shepherd_core/data_models/task/emulation.py +9 -6
- shepherd_core/data_models/task/firmware_mod.py +1 -0
- shepherd_core/data_models/task/harvest.py +4 -4
- shepherd_core/data_models/task/observer_tasks.py +5 -2
- shepherd_core/data_models/task/programming.py +1 -0
- shepherd_core/data_models/task/testbed_tasks.py +6 -1
- shepherd_core/decoder_waveform/uart.py +2 -1
- shepherd_core/fw_tools/patcher.py +60 -34
- shepherd_core/fw_tools/validation.py +7 -1
- shepherd_core/inventory/system.py +1 -1
- shepherd_core/reader.py +4 -3
- shepherd_core/version.py +1 -1
- shepherd_core/vsource/__init__.py +4 -0
- shepherd_core/vsource/virtual_converter_model.py +27 -26
- shepherd_core/vsource/virtual_harvester_model.py +27 -19
- shepherd_core/vsource/virtual_harvester_simulation.py +38 -39
- shepherd_core/vsource/virtual_source_model.py +17 -13
- shepherd_core/vsource/virtual_source_simulation.py +71 -73
- shepherd_core/vsource/virtual_storage_model.py +164 -0
- shepherd_core/vsource/virtual_storage_model_fixed_point_math.py +58 -0
- shepherd_core/vsource/virtual_storage_models_kibam.py +449 -0
- shepherd_core/vsource/virtual_storage_simulator.py +104 -0
- {shepherd_core-2025.6.4.dist-info → shepherd_core-2025.10.1.dist-info}/METADATA +4 -6
- {shepherd_core-2025.6.4.dist-info → shepherd_core-2025.10.1.dist-info}/RECORD +44 -32
- shepherd_core/data_models/virtual_source_doc.txt +0 -207
- {shepherd_core-2025.6.4.dist-info → shepherd_core-2025.10.1.dist-info}/WHEEL +0 -0
- {shepherd_core-2025.6.4.dist-info → shepherd_core-2025.10.1.dist-info}/top_level.txt +0 -0
- {shepherd_core-2025.6.4.dist-info → shepherd_core-2025.10.1.dist-info}/zip-safe +0 -0
|
@@ -0,0 +1,550 @@
|
|
|
1
|
+
- datatype: VirtualStorageConfig
|
|
2
|
+
comment: created by script 'virtual_storage_fixture_creator.py'
|
|
3
|
+
created: 2025-09-11 19:47:04.417937+02:00
|
|
4
|
+
parameters:
|
|
5
|
+
id: 658115076921762514
|
|
6
|
+
name: AVX TAJB106x006
|
|
7
|
+
description: Tantal-Capacitor similar to ideal Model, but with R_leak & R_series,
|
|
8
|
+
R_leak = 19600.000 Ohm, R_serial = 3 Ohm
|
|
9
|
+
comment: null
|
|
10
|
+
created: 2025-09-11 19:47:04.396525
|
|
11
|
+
updated_last: 2025-09-11 19:47:04.396525
|
|
12
|
+
owner: NES Lab
|
|
13
|
+
group: NES Lab
|
|
14
|
+
visible2group: true
|
|
15
|
+
visible2all: true
|
|
16
|
+
SoC_init: 0.8
|
|
17
|
+
q_As: 6.299999999999999e-05
|
|
18
|
+
p_VOC:
|
|
19
|
+
- 0.0
|
|
20
|
+
- 0.0
|
|
21
|
+
- 0.0
|
|
22
|
+
- 6.3
|
|
23
|
+
- 0.0
|
|
24
|
+
- 0.0
|
|
25
|
+
p_Rs:
|
|
26
|
+
- 0.0
|
|
27
|
+
- 0.0
|
|
28
|
+
- 3.0
|
|
29
|
+
- 0.0
|
|
30
|
+
- 0.0
|
|
31
|
+
- 0.0
|
|
32
|
+
p_RtS:
|
|
33
|
+
- 0.0
|
|
34
|
+
- 0.0
|
|
35
|
+
- 0.0
|
|
36
|
+
p_CtS:
|
|
37
|
+
- 0.0
|
|
38
|
+
- 0.0
|
|
39
|
+
- 0.0
|
|
40
|
+
p_RtL:
|
|
41
|
+
- 0.0
|
|
42
|
+
- 0.0
|
|
43
|
+
- 0.0
|
|
44
|
+
p_CtL:
|
|
45
|
+
- 0.0
|
|
46
|
+
- 0.0
|
|
47
|
+
- 0.0
|
|
48
|
+
p_rce: 1.0
|
|
49
|
+
kdash: 2.2250738585072014e-308
|
|
50
|
+
R_leak_Ohm: 19600000.0
|
|
51
|
+
- datatype: VirtualStorageConfig
|
|
52
|
+
comment: created by script 'virtual_storage_fixture_creator.py'
|
|
53
|
+
created: 2025-09-11 19:47:04.417991+02:00
|
|
54
|
+
parameters:
|
|
55
|
+
id: 717348422201116595
|
|
56
|
+
name: AVX TAJB156x006
|
|
57
|
+
description: Tantal-Capacitor similar to ideal Model, but with R_leak & R_series,
|
|
58
|
+
R_leak = 13066.667 Ohm, R_serial = 2 Ohm
|
|
59
|
+
comment: null
|
|
60
|
+
created: 2025-09-11 19:47:04.396569
|
|
61
|
+
updated_last: 2025-09-11 19:47:04.396569
|
|
62
|
+
owner: NES Lab
|
|
63
|
+
group: NES Lab
|
|
64
|
+
visible2group: true
|
|
65
|
+
visible2all: true
|
|
66
|
+
SoC_init: 0.8
|
|
67
|
+
q_As: 9.449999999999999e-05
|
|
68
|
+
p_VOC:
|
|
69
|
+
- 0.0
|
|
70
|
+
- 0.0
|
|
71
|
+
- 0.0
|
|
72
|
+
- 6.3
|
|
73
|
+
- 0.0
|
|
74
|
+
- 0.0
|
|
75
|
+
p_Rs:
|
|
76
|
+
- 0.0
|
|
77
|
+
- 0.0
|
|
78
|
+
- 2.0
|
|
79
|
+
- 0.0
|
|
80
|
+
- 0.0
|
|
81
|
+
- 0.0
|
|
82
|
+
p_RtS:
|
|
83
|
+
- 0.0
|
|
84
|
+
- 0.0
|
|
85
|
+
- 0.0
|
|
86
|
+
p_CtS:
|
|
87
|
+
- 0.0
|
|
88
|
+
- 0.0
|
|
89
|
+
- 0.0
|
|
90
|
+
p_RtL:
|
|
91
|
+
- 0.0
|
|
92
|
+
- 0.0
|
|
93
|
+
- 0.0
|
|
94
|
+
p_CtL:
|
|
95
|
+
- 0.0
|
|
96
|
+
- 0.0
|
|
97
|
+
- 0.0
|
|
98
|
+
p_rce: 1.0
|
|
99
|
+
kdash: 2.2250738585072014e-308
|
|
100
|
+
R_leak_Ohm: 13066666.666666666
|
|
101
|
+
- datatype: VirtualStorageConfig
|
|
102
|
+
comment: created by script 'virtual_storage_fixture_creator.py'
|
|
103
|
+
created: 2025-09-11 19:47:04.418033+02:00
|
|
104
|
+
parameters:
|
|
105
|
+
id: 259188812671774089
|
|
106
|
+
name: AVX TAJB226x006
|
|
107
|
+
description: Tantal-Capacitor similar to ideal Model, but with R_leak & R_series,
|
|
108
|
+
R_leak = 8909.091 Ohm, R_serial = 2 Ohm
|
|
109
|
+
comment: null
|
|
110
|
+
created: 2025-09-11 19:47:04.396610
|
|
111
|
+
updated_last: 2025-09-11 19:47:04.396611
|
|
112
|
+
owner: NES Lab
|
|
113
|
+
group: NES Lab
|
|
114
|
+
visible2group: true
|
|
115
|
+
visible2all: true
|
|
116
|
+
SoC_init: 0.8
|
|
117
|
+
q_As: 0.00013859999999999998
|
|
118
|
+
p_VOC:
|
|
119
|
+
- 0.0
|
|
120
|
+
- 0.0
|
|
121
|
+
- 0.0
|
|
122
|
+
- 6.3
|
|
123
|
+
- 0.0
|
|
124
|
+
- 0.0
|
|
125
|
+
p_Rs:
|
|
126
|
+
- 0.0
|
|
127
|
+
- 0.0
|
|
128
|
+
- 2.5
|
|
129
|
+
- 0.0
|
|
130
|
+
- 0.0
|
|
131
|
+
- 0.0
|
|
132
|
+
p_RtS:
|
|
133
|
+
- 0.0
|
|
134
|
+
- 0.0
|
|
135
|
+
- 0.0
|
|
136
|
+
p_CtS:
|
|
137
|
+
- 0.0
|
|
138
|
+
- 0.0
|
|
139
|
+
- 0.0
|
|
140
|
+
p_RtL:
|
|
141
|
+
- 0.0
|
|
142
|
+
- 0.0
|
|
143
|
+
- 0.0
|
|
144
|
+
p_CtL:
|
|
145
|
+
- 0.0
|
|
146
|
+
- 0.0
|
|
147
|
+
- 0.0
|
|
148
|
+
p_rce: 1.0
|
|
149
|
+
kdash: 2.2250738585072014e-308
|
|
150
|
+
R_leak_Ohm: 8909090.909090908
|
|
151
|
+
- datatype: VirtualStorageConfig
|
|
152
|
+
comment: created by script 'virtual_storage_fixture_creator.py'
|
|
153
|
+
created: 2025-09-11 19:47:04.418067+02:00
|
|
154
|
+
parameters:
|
|
155
|
+
id: 405126271430376935
|
|
156
|
+
name: AVX TAJB336x006
|
|
157
|
+
description: Tantal-Capacitor similar to ideal Model, but with R_leak & R_series,
|
|
158
|
+
R_leak = 5939.394 Ohm, R_serial = 2 Ohm
|
|
159
|
+
comment: null
|
|
160
|
+
created: 2025-09-11 19:47:04.396648
|
|
161
|
+
updated_last: 2025-09-11 19:47:04.396649
|
|
162
|
+
owner: NES Lab
|
|
163
|
+
group: NES Lab
|
|
164
|
+
visible2group: true
|
|
165
|
+
visible2all: true
|
|
166
|
+
SoC_init: 0.8
|
|
167
|
+
q_As: 0.00020789999999999996
|
|
168
|
+
p_VOC:
|
|
169
|
+
- 0.0
|
|
170
|
+
- 0.0
|
|
171
|
+
- 0.0
|
|
172
|
+
- 6.3
|
|
173
|
+
- 0.0
|
|
174
|
+
- 0.0
|
|
175
|
+
p_Rs:
|
|
176
|
+
- 0.0
|
|
177
|
+
- 0.0
|
|
178
|
+
- 2.2
|
|
179
|
+
- 0.0
|
|
180
|
+
- 0.0
|
|
181
|
+
- 0.0
|
|
182
|
+
p_RtS:
|
|
183
|
+
- 0.0
|
|
184
|
+
- 0.0
|
|
185
|
+
- 0.0
|
|
186
|
+
p_CtS:
|
|
187
|
+
- 0.0
|
|
188
|
+
- 0.0
|
|
189
|
+
- 0.0
|
|
190
|
+
p_RtL:
|
|
191
|
+
- 0.0
|
|
192
|
+
- 0.0
|
|
193
|
+
- 0.0
|
|
194
|
+
p_CtL:
|
|
195
|
+
- 0.0
|
|
196
|
+
- 0.0
|
|
197
|
+
- 0.0
|
|
198
|
+
p_rce: 1.0
|
|
199
|
+
kdash: 2.2250738585072014e-308
|
|
200
|
+
R_leak_Ohm: 5939393.939393939
|
|
201
|
+
- datatype: VirtualStorageConfig
|
|
202
|
+
comment: created by script 'virtual_storage_fixture_creator.py'
|
|
203
|
+
created: 2025-09-11 19:47:04.418098+02:00
|
|
204
|
+
parameters:
|
|
205
|
+
id: 438724114000062422
|
|
206
|
+
name: AVX TAJB476x006
|
|
207
|
+
description: Tantal-Capacitor similar to ideal Model, but with R_leak & R_series,
|
|
208
|
+
R_leak = 4170.213 Ohm, R_serial = 2 Ohm
|
|
209
|
+
comment: null
|
|
210
|
+
created: 2025-09-11 19:47:04.396689
|
|
211
|
+
updated_last: 2025-09-11 19:47:04.396689
|
|
212
|
+
owner: NES Lab
|
|
213
|
+
group: NES Lab
|
|
214
|
+
visible2group: true
|
|
215
|
+
visible2all: true
|
|
216
|
+
SoC_init: 0.8
|
|
217
|
+
q_As: 0.0002961
|
|
218
|
+
p_VOC:
|
|
219
|
+
- 0.0
|
|
220
|
+
- 0.0
|
|
221
|
+
- 0.0
|
|
222
|
+
- 6.3
|
|
223
|
+
- 0.0
|
|
224
|
+
- 0.0
|
|
225
|
+
p_Rs:
|
|
226
|
+
- 0.0
|
|
227
|
+
- 0.0
|
|
228
|
+
- 2.0
|
|
229
|
+
- 0.0
|
|
230
|
+
- 0.0
|
|
231
|
+
- 0.0
|
|
232
|
+
p_RtS:
|
|
233
|
+
- 0.0
|
|
234
|
+
- 0.0
|
|
235
|
+
- 0.0
|
|
236
|
+
p_CtS:
|
|
237
|
+
- 0.0
|
|
238
|
+
- 0.0
|
|
239
|
+
- 0.0
|
|
240
|
+
p_RtL:
|
|
241
|
+
- 0.0
|
|
242
|
+
- 0.0
|
|
243
|
+
- 0.0
|
|
244
|
+
p_CtL:
|
|
245
|
+
- 0.0
|
|
246
|
+
- 0.0
|
|
247
|
+
- 0.0
|
|
248
|
+
p_rce: 1.0
|
|
249
|
+
kdash: 2.2250738585072014e-308
|
|
250
|
+
R_leak_Ohm: 4170212.765957447
|
|
251
|
+
- datatype: VirtualStorageConfig
|
|
252
|
+
comment: created by script 'virtual_storage_fixture_creator.py'
|
|
253
|
+
created: 2025-09-11 19:47:04.418129+02:00
|
|
254
|
+
parameters:
|
|
255
|
+
id: 1009176866204862382
|
|
256
|
+
name: AVX TAJB686x006
|
|
257
|
+
description: Tantal-Capacitor similar to ideal Model, but with R_leak & R_series,
|
|
258
|
+
R_leak = 2882.353 Ohm, R_serial = 1 Ohm
|
|
259
|
+
comment: null
|
|
260
|
+
created: 2025-09-11 19:47:04.396727
|
|
261
|
+
updated_last: 2025-09-11 19:47:04.396727
|
|
262
|
+
owner: NES Lab
|
|
263
|
+
group: NES Lab
|
|
264
|
+
visible2group: true
|
|
265
|
+
visible2all: true
|
|
266
|
+
SoC_init: 0.8
|
|
267
|
+
q_As: 0.0004284
|
|
268
|
+
p_VOC:
|
|
269
|
+
- 0.0
|
|
270
|
+
- 0.0
|
|
271
|
+
- 0.0
|
|
272
|
+
- 6.3
|
|
273
|
+
- 0.0
|
|
274
|
+
- 0.0
|
|
275
|
+
p_Rs:
|
|
276
|
+
- 0.0
|
|
277
|
+
- 0.0
|
|
278
|
+
- 0.9
|
|
279
|
+
- 0.0
|
|
280
|
+
- 0.0
|
|
281
|
+
- 0.0
|
|
282
|
+
p_RtS:
|
|
283
|
+
- 0.0
|
|
284
|
+
- 0.0
|
|
285
|
+
- 0.0
|
|
286
|
+
p_CtS:
|
|
287
|
+
- 0.0
|
|
288
|
+
- 0.0
|
|
289
|
+
- 0.0
|
|
290
|
+
p_RtL:
|
|
291
|
+
- 0.0
|
|
292
|
+
- 0.0
|
|
293
|
+
- 0.0
|
|
294
|
+
p_CtL:
|
|
295
|
+
- 0.0
|
|
296
|
+
- 0.0
|
|
297
|
+
- 0.0
|
|
298
|
+
p_rce: 1.0
|
|
299
|
+
kdash: 2.2250738585072014e-308
|
|
300
|
+
R_leak_Ohm: 2882352.9411764704
|
|
301
|
+
- datatype: VirtualStorageConfig
|
|
302
|
+
comment: created by script 'virtual_storage_fixture_creator.py'
|
|
303
|
+
created: 2025-09-11 19:47:04.418164+02:00
|
|
304
|
+
parameters:
|
|
305
|
+
id: 729681208823285712
|
|
306
|
+
name: AVX TAJB107x006
|
|
307
|
+
description: Tantal-Capacitor similar to ideal Model, but with R_leak & R_series,
|
|
308
|
+
R_leak = 1960.000 Ohm, R_serial = 2 Ohm
|
|
309
|
+
comment: null
|
|
310
|
+
created: 2025-09-11 19:47:04.396770
|
|
311
|
+
updated_last: 2025-09-11 19:47:04.396770
|
|
312
|
+
owner: NES Lab
|
|
313
|
+
group: NES Lab
|
|
314
|
+
visible2group: true
|
|
315
|
+
visible2all: true
|
|
316
|
+
SoC_init: 0.8
|
|
317
|
+
q_As: 0.0006299999999999999
|
|
318
|
+
p_VOC:
|
|
319
|
+
- 0.0
|
|
320
|
+
- 0.0
|
|
321
|
+
- 0.0
|
|
322
|
+
- 6.3
|
|
323
|
+
- 0.0
|
|
324
|
+
- 0.0
|
|
325
|
+
p_Rs:
|
|
326
|
+
- 0.0
|
|
327
|
+
- 0.0
|
|
328
|
+
- 1.7
|
|
329
|
+
- 0.0
|
|
330
|
+
- 0.0
|
|
331
|
+
- 0.0
|
|
332
|
+
p_RtS:
|
|
333
|
+
- 0.0
|
|
334
|
+
- 0.0
|
|
335
|
+
- 0.0
|
|
336
|
+
p_CtS:
|
|
337
|
+
- 0.0
|
|
338
|
+
- 0.0
|
|
339
|
+
- 0.0
|
|
340
|
+
p_RtL:
|
|
341
|
+
- 0.0
|
|
342
|
+
- 0.0
|
|
343
|
+
- 0.0
|
|
344
|
+
p_CtL:
|
|
345
|
+
- 0.0
|
|
346
|
+
- 0.0
|
|
347
|
+
- 0.0
|
|
348
|
+
p_rce: 1.0
|
|
349
|
+
kdash: 2.2250738585072014e-308
|
|
350
|
+
R_leak_Ohm: 1960000.0
|
|
351
|
+
- datatype: VirtualStorageConfig
|
|
352
|
+
comment: created by script 'virtual_storage_fixture_creator.py'
|
|
353
|
+
created: 2025-09-11 19:47:04.418195+02:00
|
|
354
|
+
parameters:
|
|
355
|
+
id: 978798746708642073
|
|
356
|
+
name: AVX TAJC157x006
|
|
357
|
+
description: Tantal-Capacitor similar to ideal Model, but with R_leak & R_series,
|
|
358
|
+
R_leak = 1306.667 Ohm, R_serial = 1 Ohm
|
|
359
|
+
comment: null
|
|
360
|
+
created: 2025-09-11 19:47:04.396807
|
|
361
|
+
updated_last: 2025-09-11 19:47:04.396807
|
|
362
|
+
owner: NES Lab
|
|
363
|
+
group: NES Lab
|
|
364
|
+
visible2group: true
|
|
365
|
+
visible2all: true
|
|
366
|
+
SoC_init: 0.8
|
|
367
|
+
q_As: 0.0009449999999999999
|
|
368
|
+
p_VOC:
|
|
369
|
+
- 0.0
|
|
370
|
+
- 0.0
|
|
371
|
+
- 0.0
|
|
372
|
+
- 6.3
|
|
373
|
+
- 0.0
|
|
374
|
+
- 0.0
|
|
375
|
+
p_Rs:
|
|
376
|
+
- 0.0
|
|
377
|
+
- 0.0
|
|
378
|
+
- 1.3
|
|
379
|
+
- 0.0
|
|
380
|
+
- 0.0
|
|
381
|
+
- 0.0
|
|
382
|
+
p_RtS:
|
|
383
|
+
- 0.0
|
|
384
|
+
- 0.0
|
|
385
|
+
- 0.0
|
|
386
|
+
p_CtS:
|
|
387
|
+
- 0.0
|
|
388
|
+
- 0.0
|
|
389
|
+
- 0.0
|
|
390
|
+
p_RtL:
|
|
391
|
+
- 0.0
|
|
392
|
+
- 0.0
|
|
393
|
+
- 0.0
|
|
394
|
+
p_CtL:
|
|
395
|
+
- 0.0
|
|
396
|
+
- 0.0
|
|
397
|
+
- 0.0
|
|
398
|
+
p_rce: 1.0
|
|
399
|
+
kdash: 2.2250738585072014e-308
|
|
400
|
+
R_leak_Ohm: 1306666.6666666667
|
|
401
|
+
- datatype: VirtualStorageConfig
|
|
402
|
+
comment: created by script 'virtual_storage_fixture_creator.py'
|
|
403
|
+
created: 2025-09-11 19:47:04.418225+02:00
|
|
404
|
+
parameters:
|
|
405
|
+
id: 403726628035571227
|
|
406
|
+
name: AVX TAJC227x006
|
|
407
|
+
description: Tantal-Capacitor similar to ideal Model, but with R_leak & R_series,
|
|
408
|
+
R_leak = 890.909 Ohm, R_serial = 1 Ohm
|
|
409
|
+
comment: null
|
|
410
|
+
created: 2025-09-11 19:47:04.396844
|
|
411
|
+
updated_last: 2025-09-11 19:47:04.396845
|
|
412
|
+
owner: NES Lab
|
|
413
|
+
group: NES Lab
|
|
414
|
+
visible2group: true
|
|
415
|
+
visible2all: true
|
|
416
|
+
SoC_init: 0.8
|
|
417
|
+
q_As: 0.0013859999999999999
|
|
418
|
+
p_VOC:
|
|
419
|
+
- 0.0
|
|
420
|
+
- 0.0
|
|
421
|
+
- 0.0
|
|
422
|
+
- 6.3
|
|
423
|
+
- 0.0
|
|
424
|
+
- 0.0
|
|
425
|
+
p_Rs:
|
|
426
|
+
- 0.0
|
|
427
|
+
- 0.0
|
|
428
|
+
- 1.2
|
|
429
|
+
- 0.0
|
|
430
|
+
- 0.0
|
|
431
|
+
- 0.0
|
|
432
|
+
p_RtS:
|
|
433
|
+
- 0.0
|
|
434
|
+
- 0.0
|
|
435
|
+
- 0.0
|
|
436
|
+
p_CtS:
|
|
437
|
+
- 0.0
|
|
438
|
+
- 0.0
|
|
439
|
+
- 0.0
|
|
440
|
+
p_RtL:
|
|
441
|
+
- 0.0
|
|
442
|
+
- 0.0
|
|
443
|
+
- 0.0
|
|
444
|
+
p_CtL:
|
|
445
|
+
- 0.0
|
|
446
|
+
- 0.0
|
|
447
|
+
- 0.0
|
|
448
|
+
p_rce: 1.0
|
|
449
|
+
kdash: 2.2250738585072014e-308
|
|
450
|
+
R_leak_Ohm: 890909.0909090909
|
|
451
|
+
- datatype: VirtualStorageConfig
|
|
452
|
+
comment: created by script 'virtual_storage_fixture_creator.py'
|
|
453
|
+
created: 2025-09-11 19:47:04.418255+02:00
|
|
454
|
+
parameters:
|
|
455
|
+
id: 9706982809086515
|
|
456
|
+
name: AVX TAJC337x006
|
|
457
|
+
description: Tantal-Capacitor similar to ideal Model, but with R_leak & R_series,
|
|
458
|
+
R_leak = 593.939 Ohm, R_serial = 0 Ohm
|
|
459
|
+
comment: null
|
|
460
|
+
created: 2025-09-11 19:47:04.396886
|
|
461
|
+
updated_last: 2025-09-11 19:47:04.396886
|
|
462
|
+
owner: NES Lab
|
|
463
|
+
group: NES Lab
|
|
464
|
+
visible2group: true
|
|
465
|
+
visible2all: true
|
|
466
|
+
SoC_init: 0.8
|
|
467
|
+
q_As: 0.002079
|
|
468
|
+
p_VOC:
|
|
469
|
+
- 0.0
|
|
470
|
+
- 0.0
|
|
471
|
+
- 0.0
|
|
472
|
+
- 6.3
|
|
473
|
+
- 0.0
|
|
474
|
+
- 0.0
|
|
475
|
+
p_Rs:
|
|
476
|
+
- 0.0
|
|
477
|
+
- 0.0
|
|
478
|
+
- 0.5
|
|
479
|
+
- 0.0
|
|
480
|
+
- 0.0
|
|
481
|
+
- 0.0
|
|
482
|
+
p_RtS:
|
|
483
|
+
- 0.0
|
|
484
|
+
- 0.0
|
|
485
|
+
- 0.0
|
|
486
|
+
p_CtS:
|
|
487
|
+
- 0.0
|
|
488
|
+
- 0.0
|
|
489
|
+
- 0.0
|
|
490
|
+
p_RtL:
|
|
491
|
+
- 0.0
|
|
492
|
+
- 0.0
|
|
493
|
+
- 0.0
|
|
494
|
+
p_CtL:
|
|
495
|
+
- 0.0
|
|
496
|
+
- 0.0
|
|
497
|
+
- 0.0
|
|
498
|
+
p_rce: 1.0
|
|
499
|
+
kdash: 2.2250738585072014e-308
|
|
500
|
+
R_leak_Ohm: 593939.3939393939
|
|
501
|
+
- datatype: VirtualStorageConfig
|
|
502
|
+
comment: created by script 'virtual_storage_fixture_creator.py'
|
|
503
|
+
created: 2025-09-11 19:47:04.418284+02:00
|
|
504
|
+
parameters:
|
|
505
|
+
id: 472122620116510153
|
|
506
|
+
name: AVX TAJD477x006
|
|
507
|
+
description: Tantal-Capacitor similar to ideal Model, but with R_leak & R_series,
|
|
508
|
+
R_leak = 417.021 Ohm, R_serial = 0 Ohm
|
|
509
|
+
comment: null
|
|
510
|
+
created: 2025-09-11 19:47:04.396929
|
|
511
|
+
updated_last: 2025-09-11 19:47:04.396929
|
|
512
|
+
owner: NES Lab
|
|
513
|
+
group: NES Lab
|
|
514
|
+
visible2group: true
|
|
515
|
+
visible2all: true
|
|
516
|
+
SoC_init: 0.8
|
|
517
|
+
q_As: 0.0029609999999999997
|
|
518
|
+
p_VOC:
|
|
519
|
+
- 0.0
|
|
520
|
+
- 0.0
|
|
521
|
+
- 0.0
|
|
522
|
+
- 6.3
|
|
523
|
+
- 0.0
|
|
524
|
+
- 0.0
|
|
525
|
+
p_Rs:
|
|
526
|
+
- 0.0
|
|
527
|
+
- 0.0
|
|
528
|
+
- 0.4
|
|
529
|
+
- 0.0
|
|
530
|
+
- 0.0
|
|
531
|
+
- 0.0
|
|
532
|
+
p_RtS:
|
|
533
|
+
- 0.0
|
|
534
|
+
- 0.0
|
|
535
|
+
- 0.0
|
|
536
|
+
p_CtS:
|
|
537
|
+
- 0.0
|
|
538
|
+
- 0.0
|
|
539
|
+
- 0.0
|
|
540
|
+
p_RtL:
|
|
541
|
+
- 0.0
|
|
542
|
+
- 0.0
|
|
543
|
+
- 0.0
|
|
544
|
+
p_CtL:
|
|
545
|
+
- 0.0
|
|
546
|
+
- 0.0
|
|
547
|
+
- 0.0
|
|
548
|
+
p_rce: 1.0
|
|
549
|
+
kdash: 2.2250738585072014e-308
|
|
550
|
+
R_leak_Ohm: 417021.27659574465
|
|
@@ -37,9 +37,15 @@ class PowerTracing(ShpModel, title="Config for Power-Tracing"):
|
|
|
37
37
|
|
|
38
38
|
# further processing of IV-Samples
|
|
39
39
|
only_power: bool = False
|
|
40
|
-
""" ⤷ reduce file-size by calculating power and automatically discard I&V
|
|
40
|
+
""" ⤷ reduce file-size by calculating power and automatically discard I&V
|
|
41
|
+
Caution: increases cpu-utilization on observer - power @ 100 kHz is not recommended
|
|
42
|
+
"""
|
|
41
43
|
samplerate: Annotated[int, Field(ge=10, le=100_000)] = 100_000
|
|
42
44
|
""" ⤷ reduce file-size by re-sampling (mean over x samples)
|
|
45
|
+
|
|
46
|
+
Caution: this option is available for IV-Samples (not only .only_power)
|
|
47
|
+
but results might be faulty for use-cases that are not const-voltage
|
|
48
|
+
Sum(U * I) != Sum(U) * Sum(I)
|
|
43
49
|
Timestamps will be taken from the start of that sample-window.
|
|
44
50
|
example: 10 Hz samplerate will be binning 10k samples via mean() and
|
|
45
51
|
the timestamp for that new sample will be value[0] of the 10k long vector
|
|
@@ -148,7 +154,7 @@ class GpioTracing(ShpModel, title="Config for GPIO-Tracing"):
|
|
|
148
154
|
See doc for nRF_FRAM_Target_v1.3+ to see mapping of target port.
|
|
149
155
|
|
|
150
156
|
Example for skipping UART (pin 0 & 1):
|
|
151
|
-
.
|
|
157
|
+
.gpios = range(2,18)
|
|
152
158
|
|
|
153
159
|
Note:
|
|
154
160
|
- Cape 2.4 (2023) and lower only has 9x GPIO + 1x PwrGood
|
|
@@ -10,7 +10,7 @@ from shepherd_core.data_models.base.content import IdInt
|
|
|
10
10
|
from shepherd_core.data_models.base.shepherd import ShpModel
|
|
11
11
|
from shepherd_core.data_models.content.energy_environment import EnergyEnvironment
|
|
12
12
|
from shepherd_core.data_models.content.firmware import Firmware
|
|
13
|
-
from shepherd_core.data_models.content.
|
|
13
|
+
from shepherd_core.data_models.content.virtual_source_config import VirtualSourceConfig
|
|
14
14
|
from shepherd_core.data_models.testbed.target import IdInt16
|
|
15
15
|
from shepherd_core.data_models.testbed.target import Target
|
|
16
16
|
|
|
@@ -17,7 +17,7 @@ from typing_extensions import Self
|
|
|
17
17
|
from shepherd_core.data_models.base.content import IdInt
|
|
18
18
|
from shepherd_core.data_models.base.shepherd import ShpModel
|
|
19
19
|
from shepherd_core.data_models.base.timezone import local_tz
|
|
20
|
-
from shepherd_core.data_models.content.
|
|
20
|
+
from shepherd_core.data_models.content.virtual_source_config import VirtualSourceConfig
|
|
21
21
|
from shepherd_core.data_models.experiment.experiment import Experiment
|
|
22
22
|
from shepherd_core.data_models.experiment.observer_features import GpioActuation
|
|
23
23
|
from shepherd_core.data_models.experiment.observer_features import GpioTracing
|
|
@@ -35,8 +35,8 @@ from .helper_paths import path_posix
|
|
|
35
35
|
class Compression(str, Enum):
|
|
36
36
|
"""Options for choosing a dataset-compression."""
|
|
37
37
|
|
|
38
|
-
lzf =
|
|
39
|
-
gzip1 = gzip = 1 # higher compr & load
|
|
38
|
+
lzf = "lzf" # not native hdf5
|
|
39
|
+
gzip1 = gzip = default = 1 # higher compr & load
|
|
40
40
|
null = None
|
|
41
41
|
# NOTE: lzf & external file-compression (xz or zstd) work better than gzip
|
|
42
42
|
# -> even with additional compression
|
|
@@ -127,14 +127,13 @@ class EmulationTask(ShpModel):
|
|
|
127
127
|
|
|
128
128
|
@model_validator(mode="after")
|
|
129
129
|
def post_validation(self) -> Self:
|
|
130
|
-
|
|
131
|
-
time_now = datetime.now().astimezone()
|
|
130
|
+
time_now = datetime.now().astimezone() - timedelta(hours=24)
|
|
132
131
|
if self.time_start is not None and self.time_start < time_now:
|
|
133
132
|
msg = (
|
|
134
133
|
"Start-Time for Emulation can't be in the past "
|
|
135
134
|
f"('{self.time_start}' vs '{time_now}'."
|
|
136
135
|
)
|
|
137
|
-
|
|
136
|
+
log.error(msg) # do not raise anymore - server & clients do not have to match
|
|
138
137
|
if self.duration and self.duration.total_seconds() < 0:
|
|
139
138
|
raise ValueError("Task-Duration can't be negative.")
|
|
140
139
|
if isinstance(self.voltage_aux, str) and self.voltage_aux not in {
|
|
@@ -181,6 +180,10 @@ class EmulationTask(ShpModel):
|
|
|
181
180
|
)
|
|
182
181
|
|
|
183
182
|
def is_contained(self, paths: AbstractSet[PurePosixPath]) -> bool:
|
|
183
|
+
"""Limit paths to allowed directories.
|
|
184
|
+
|
|
185
|
+
TODO: could be added to validator (with a switch)
|
|
186
|
+
"""
|
|
184
187
|
all_ok = any(self.input_path.is_relative_to(path) for path in paths)
|
|
185
188
|
all_ok &= any(self.output_path.is_relative_to(path) for path in paths)
|
|
186
189
|
return all_ok
|
|
@@ -93,6 +93,7 @@ class FirmwareModTask(ShpModel):
|
|
|
93
93
|
return cls(**kwargs)
|
|
94
94
|
|
|
95
95
|
def is_contained(self, paths: AbstractSet[PurePosixPath]) -> bool:
|
|
96
|
+
"""Limit paths to allowed directories."""
|
|
96
97
|
all_ok = any(self.firmware_file.is_relative_to(path) for path in paths)
|
|
97
98
|
if isinstance(self.data, Path):
|
|
98
99
|
all_ok = any(self.data.is_relative_to(path) for path in paths)
|
|
@@ -13,7 +13,7 @@ from typing_extensions import Self
|
|
|
13
13
|
|
|
14
14
|
from shepherd_core.data_models.base.shepherd import ShpModel
|
|
15
15
|
from shepherd_core.data_models.base.timezone import local_tz
|
|
16
|
-
from shepherd_core.data_models.content.
|
|
16
|
+
from shepherd_core.data_models.content.virtual_harvester_config import VirtualHarvesterConfig
|
|
17
17
|
from shepherd_core.data_models.experiment.observer_features import PowerTracing
|
|
18
18
|
from shepherd_core.data_models.experiment.observer_features import SystemLogging
|
|
19
19
|
|
|
@@ -72,12 +72,11 @@ class HarvestTask(ShpModel):
|
|
|
72
72
|
@model_validator(mode="after")
|
|
73
73
|
def post_validation(self) -> Self:
|
|
74
74
|
# TODO: limit paths
|
|
75
|
-
has_time = self.time_start is not None
|
|
75
|
+
has_time = False # TODO: deactivated, self.time_start is not None
|
|
76
76
|
time_now = datetime.now().astimezone()
|
|
77
77
|
if has_time and self.time_start < time_now:
|
|
78
78
|
msg = (
|
|
79
|
-
"Start-Time for
|
|
80
|
-
f"('{self.time_start}' vs '{time_now}'."
|
|
79
|
+
f"Start-Time for Harvest can't be in the past ('{self.time_start}' vs '{time_now}'."
|
|
81
80
|
)
|
|
82
81
|
raise ValueError(msg)
|
|
83
82
|
if self.duration and self.duration.total_seconds() < 0:
|
|
@@ -85,4 +84,5 @@ class HarvestTask(ShpModel):
|
|
|
85
84
|
return self
|
|
86
85
|
|
|
87
86
|
def is_contained(self, paths: AbstractSet[PurePosixPath]) -> bool:
|
|
87
|
+
"""Limit paths to allowed directories."""
|
|
88
88
|
return any(self.output_path.is_relative_to(path) for path in paths)
|
|
@@ -52,12 +52,14 @@ class ObserverTasks(ShpModel):
|
|
|
52
52
|
|
|
53
53
|
@classmethod
|
|
54
54
|
@validate_call
|
|
55
|
-
def from_xp(cls, xp: Experiment, tb: Testbed, tgt_id: IdInt) -> Self:
|
|
55
|
+
def from_xp(cls, xp: Experiment, xp_folder: str | None, tb: Testbed, tgt_id: IdInt) -> Self:
|
|
56
56
|
if not tb.shared_storage:
|
|
57
57
|
raise ValueError("Implementation currently relies on shared storage!")
|
|
58
58
|
|
|
59
59
|
obs = tb.get_observer(tgt_id)
|
|
60
|
-
|
|
60
|
+
if xp_folder is None:
|
|
61
|
+
xp_folder = xp.folder_name() # moved a layer up for consistent naming
|
|
62
|
+
root_path = tb.data_on_observer / "experiments" / xp_folder
|
|
61
63
|
fw_paths = [root_path / f"fw{_i}_{obs.name}.hex" for _i in [1, 2]]
|
|
62
64
|
|
|
63
65
|
return cls(
|
|
@@ -93,6 +95,7 @@ class ObserverTasks(ShpModel):
|
|
|
93
95
|
return values
|
|
94
96
|
|
|
95
97
|
def is_contained(self, paths: AbstractSet[PurePosixPath]) -> bool:
|
|
98
|
+
"""Limit paths to allowed directories."""
|
|
96
99
|
all_ok = any(self.root_path.is_relative_to(path) for path in paths)
|
|
97
100
|
all_ok &= self.fw1_mod.is_contained(paths)
|
|
98
101
|
all_ok &= self.fw2_mod.is_contained(paths)
|