shepherd-core 2023.11.1__py3-none-any.whl → 2024.4.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/__init__.py +3 -2
- shepherd_core/data_models/base/calibration.py +3 -1
- shepherd_core/data_models/base/content.py +13 -11
- shepherd_core/data_models/base/shepherd.py +4 -6
- shepherd_core/data_models/content/energy_environment.py +1 -1
- shepherd_core/data_models/content/virtual_harvester.py +1 -1
- shepherd_core/data_models/content/virtual_source.py +31 -53
- shepherd_core/data_models/experiment/experiment.py +13 -18
- shepherd_core/data_models/experiment/observer_features.py +9 -15
- shepherd_core/data_models/experiment/target_config.py +4 -11
- shepherd_core/data_models/task/__init__.py +2 -6
- shepherd_core/data_models/task/emulation.py +7 -14
- shepherd_core/data_models/task/firmware_mod.py +1 -3
- shepherd_core/data_models/task/harvest.py +1 -3
- shepherd_core/data_models/task/observer_tasks.py +1 -1
- shepherd_core/data_models/task/testbed_tasks.py +7 -3
- shepherd_core/data_models/testbed/cape.py +1 -1
- shepherd_core/data_models/testbed/gpio.py +1 -1
- shepherd_core/data_models/testbed/mcu.py +1 -1
- shepherd_core/data_models/testbed/observer.py +7 -23
- shepherd_core/data_models/testbed/target.py +1 -1
- shepherd_core/data_models/testbed/testbed.py +2 -4
- shepherd_core/decoder_waveform/uart.py +9 -26
- shepherd_core/fw_tools/__init__.py +1 -3
- shepherd_core/fw_tools/converter.py +4 -12
- shepherd_core/fw_tools/patcher.py +4 -12
- shepherd_core/fw_tools/validation.py +1 -2
- shepherd_core/inventory/__init__.py +53 -9
- shepherd_core/inventory/system.py +10 -5
- shepherd_core/logger.py +1 -3
- shepherd_core/reader.py +45 -57
- shepherd_core/testbed_client/cache_path.py +15 -0
- shepherd_core/testbed_client/client.py +7 -19
- shepherd_core/testbed_client/fixtures.py +8 -15
- shepherd_core/testbed_client/user_model.py +7 -7
- shepherd_core/vsource/virtual_converter_model.py +5 -15
- shepherd_core/vsource/virtual_harvester_model.py +2 -3
- shepherd_core/vsource/virtual_source_model.py +3 -6
- shepherd_core/writer.py +16 -24
- {shepherd_core-2023.11.1.dist-info → shepherd_core-2024.4.1.dist-info}/METADATA +50 -38
- shepherd_core-2024.4.1.dist-info/RECORD +64 -0
- {shepherd_core-2023.11.1.dist-info → shepherd_core-2024.4.1.dist-info}/WHEEL +1 -1
- {shepherd_core-2023.11.1.dist-info → shepherd_core-2024.4.1.dist-info}/top_level.txt +0 -1
- shepherd_core/data_models/content/_external_fixtures.yaml +0 -394
- shepherd_core/data_models/content/energy_environment_fixture.yaml +0 -50
- shepherd_core/data_models/content/virtual_harvester_fixture.yaml +0 -159
- shepherd_core/data_models/content/virtual_source_fixture.yaml +0 -229
- shepherd_core/data_models/testbed/cape_fixture.yaml +0 -94
- shepherd_core/data_models/testbed/gpio_fixture.yaml +0 -166
- shepherd_core/data_models/testbed/mcu_fixture.yaml +0 -19
- shepherd_core/data_models/testbed/observer_fixture.yaml +0 -220
- shepherd_core/data_models/testbed/target_fixture.yaml +0 -137
- shepherd_core/data_models/testbed/testbed_fixture.yaml +0 -25
- shepherd_core-2023.11.1.dist-info/RECORD +0 -117
- tests/__init__.py +0 -0
- tests/conftest.py +0 -64
- tests/data_models/__init__.py +0 -0
- tests/data_models/conftest.py +0 -14
- tests/data_models/example_cal_data.yaml +0 -31
- tests/data_models/example_cal_data_faulty.yaml +0 -29
- tests/data_models/example_cal_meas.yaml +0 -178
- tests/data_models/example_cal_meas_faulty1.yaml +0 -142
- tests/data_models/example_cal_meas_faulty2.yaml +0 -136
- tests/data_models/example_config_emulator.yaml +0 -41
- tests/data_models/example_config_experiment.yaml +0 -16
- tests/data_models/example_config_experiment_alternative.yaml +0 -14
- tests/data_models/example_config_harvester.yaml +0 -15
- tests/data_models/example_config_testbed.yaml +0 -26
- tests/data_models/example_config_virtsource.yaml +0 -78
- tests/data_models/test_base_models.py +0 -205
- tests/data_models/test_content_fixtures.py +0 -41
- tests/data_models/test_content_models.py +0 -288
- tests/data_models/test_examples.py +0 -48
- tests/data_models/test_experiment_models.py +0 -279
- tests/data_models/test_task_generation.py +0 -52
- tests/data_models/test_task_models.py +0 -131
- tests/data_models/test_testbed_fixtures.py +0 -47
- tests/data_models/test_testbed_models.py +0 -187
- tests/decoder_waveform/__init__.py +0 -0
- tests/decoder_waveform/test_decoder.py +0 -34
- tests/fw_tools/__init__.py +0 -0
- tests/fw_tools/conftest.py +0 -5
- tests/fw_tools/test_converter.py +0 -76
- tests/fw_tools/test_patcher.py +0 -66
- tests/fw_tools/test_validation.py +0 -56
- tests/inventory/__init__.py +0 -0
- tests/inventory/test_inventory.py +0 -22
- tests/test_cal_hw.py +0 -38
- tests/test_examples.py +0 -40
- tests/test_logger.py +0 -15
- tests/test_reader.py +0 -283
- tests/test_writer.py +0 -169
- tests/testbed_client/__init__.py +0 -0
- tests/vsource/__init__.py +0 -0
- tests/vsource/conftest.py +0 -51
- tests/vsource/test_converter.py +0 -165
- tests/vsource/test_harvester.py +0 -79
- tests/vsource/test_z.py +0 -5
- {shepherd_core-2023.11.1.dist-info → shepherd_core-2024.4.1.dist-info}/zip-safe +0 -0
shepherd_core/writer.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
"""Writer that inherits from Reader-Baseclass
|
|
2
|
-
|
|
1
|
+
"""Writer that inherits from Reader-Baseclass"""
|
|
2
|
+
|
|
3
3
|
import logging
|
|
4
4
|
import math
|
|
5
5
|
import pathlib
|
|
@@ -39,9 +39,7 @@ def path2str(
|
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
def time2int(dumper: Dumper, data: timedelta) -> ScalarNode:
|
|
42
|
-
return dumper.represent_scalar(
|
|
43
|
-
"tag:yaml.org,2002:int", str(int(data.total_seconds()))
|
|
44
|
-
)
|
|
42
|
+
return dumper.represent_scalar("tag:yaml.org,2002:int", str(int(data.total_seconds())))
|
|
45
43
|
|
|
46
44
|
|
|
47
45
|
yaml.add_representer(pathlib.PosixPath, path2str, SafeDumper)
|
|
@@ -89,6 +87,7 @@ class Writer(Reader):
|
|
|
89
87
|
otherwise a unique name will be found
|
|
90
88
|
compression: (str) use either None, lzf or "1" (gzips compression level)
|
|
91
89
|
verbose: (bool) provides more debug-info
|
|
90
|
+
|
|
92
91
|
"""
|
|
93
92
|
|
|
94
93
|
comp_default: int = 1
|
|
@@ -130,23 +129,20 @@ class Writer(Reader):
|
|
|
130
129
|
base_dir = file_path.resolve().parents[0]
|
|
131
130
|
self.file_path = unique_path(base_dir / file_path.stem, file_path.suffix)
|
|
132
131
|
self._logger.warning(
|
|
133
|
-
"File '%s' already exists ->
|
|
132
|
+
"File '%s' already exists -> storing under '%s' instead",
|
|
134
133
|
file_path,
|
|
135
134
|
self.file_path.name,
|
|
136
135
|
)
|
|
137
136
|
|
|
138
137
|
if isinstance(mode, str) and mode not in self.mode_dtype_dict:
|
|
139
|
-
raise ValueError(
|
|
140
|
-
f"Can't handle mode '{mode}' " f"(choose one of {self.mode_dtype_dict})"
|
|
141
|
-
)
|
|
138
|
+
raise ValueError(f"Can't handle mode '{mode}' (choose one of {self.mode_dtype_dict})")
|
|
142
139
|
|
|
143
140
|
_dtypes = self.mode_dtype_dict[mode if mode else self.mode_default]
|
|
144
141
|
if isinstance(datatype, str):
|
|
145
142
|
datatype = EnergyDType[datatype]
|
|
146
143
|
if isinstance(datatype, EnergyDType) and datatype not in _dtypes:
|
|
147
144
|
raise ValueError(
|
|
148
|
-
f"Can't handle value '{datatype}' of datatype "
|
|
149
|
-
f"(choose one of {_dtypes})"
|
|
145
|
+
f"Can't handle value '{datatype}' of datatype (choose one of {_dtypes})"
|
|
150
146
|
)
|
|
151
147
|
|
|
152
148
|
if self._modify:
|
|
@@ -158,9 +154,7 @@ class Writer(Reader):
|
|
|
158
154
|
self._datatype = (
|
|
159
155
|
datatype if isinstance(datatype, EnergyDType) else self.datatype_default
|
|
160
156
|
)
|
|
161
|
-
self._window_samples = (
|
|
162
|
-
window_samples if isinstance(window_samples, int) else 0
|
|
163
|
-
)
|
|
157
|
+
self._window_samples = window_samples if isinstance(window_samples, int) else 0
|
|
164
158
|
|
|
165
159
|
if isinstance(cal_data, (CalEmu, CalHrv)):
|
|
166
160
|
self._cal = CalSeries.from_cal(cal_data)
|
|
@@ -181,9 +175,7 @@ class Writer(Reader):
|
|
|
181
175
|
|
|
182
176
|
# show key parameters for h5-performance
|
|
183
177
|
settings = list(self.h5file.id.get_access_plist().get_cache())
|
|
184
|
-
self._logger.debug(
|
|
185
|
-
"H5Py Cache_setting=%s (_mdc, _nslots, _nbytes, _w0)", settings
|
|
186
|
-
)
|
|
178
|
+
self._logger.debug("H5Py Cache_setting=%s (_mdc, _nslots, _nbytes, _w0)", settings)
|
|
187
179
|
|
|
188
180
|
# Store the mode in order to allow user to differentiate harvesting vs emulation data
|
|
189
181
|
if isinstance(self._mode, str) and self._mode in self.mode_dtype_dict:
|
|
@@ -257,9 +249,7 @@ class Writer(Reader):
|
|
|
257
249
|
compression=self._compression,
|
|
258
250
|
)
|
|
259
251
|
grp_data["time"].attrs["unit"] = "s"
|
|
260
|
-
grp_data["time"].attrs[
|
|
261
|
-
"description"
|
|
262
|
-
] = "system time [s] = value * gain + (offset)"
|
|
252
|
+
grp_data["time"].attrs["description"] = "system time [s] = value * gain + (offset)"
|
|
263
253
|
|
|
264
254
|
grp_data.create_dataset(
|
|
265
255
|
"current",
|
|
@@ -296,6 +286,7 @@ class Writer(Reader):
|
|
|
296
286
|
timestamp: just start of buffer or whole ndarray
|
|
297
287
|
voltage: ndarray as raw unsigned integers
|
|
298
288
|
current: ndarray as raw unsigned integers
|
|
289
|
+
|
|
299
290
|
"""
|
|
300
291
|
len_new = min(voltage.size, current.size)
|
|
301
292
|
|
|
@@ -309,7 +300,7 @@ class Writer(Reader):
|
|
|
309
300
|
else:
|
|
310
301
|
raise ValueError("timestamp-data was not usable")
|
|
311
302
|
|
|
312
|
-
len_old = self.
|
|
303
|
+
len_old = self.ds_voltage.shape[0]
|
|
313
304
|
|
|
314
305
|
# resize dataset
|
|
315
306
|
self.ds_time.resize((len_old + len_new,))
|
|
@@ -337,6 +328,7 @@ class Writer(Reader):
|
|
|
337
328
|
-> provide start of buffer or whole ndarray
|
|
338
329
|
voltage: ndarray in physical-unit V
|
|
339
330
|
current: ndarray in physical-unit A
|
|
331
|
+
|
|
340
332
|
"""
|
|
341
333
|
timestamp = self._cal.time.si_to_raw(timestamp)
|
|
342
334
|
voltage = self._cal.voltage.si_to_raw(voltage)
|
|
@@ -346,15 +338,15 @@ class Writer(Reader):
|
|
|
346
338
|
def _align(self) -> None:
|
|
347
339
|
"""Align datasets with buffer-size of shepherd"""
|
|
348
340
|
self._refresh_file_stats()
|
|
349
|
-
n_buff = self.
|
|
341
|
+
n_buff = self.ds_voltage.size / self.samples_per_buffer
|
|
350
342
|
size_new = int(math.floor(n_buff) * self.samples_per_buffer)
|
|
351
|
-
if size_new < self.
|
|
343
|
+
if size_new < self.ds_voltage.size:
|
|
352
344
|
if self.samplerate_sps != samplerate_sps_default:
|
|
353
345
|
self._logger.debug("skipped alignment due to altered samplerate")
|
|
354
346
|
return
|
|
355
347
|
self._logger.info(
|
|
356
348
|
"aligning with buffer-size, discarding last %d entries",
|
|
357
|
-
self.
|
|
349
|
+
self.ds_voltage.size - size_new,
|
|
358
350
|
)
|
|
359
351
|
self.ds_time.resize((size_new,))
|
|
360
352
|
self.ds_voltage.resize((size_new,))
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
|
-
Name:
|
|
3
|
-
Version:
|
|
2
|
+
Name: shepherd_core
|
|
3
|
+
Version: 2024.4.1
|
|
4
4
|
Summary: Programming- and CLI-Interface for the h5-dataformat of the Shepherd-Testbed
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
Project-URL: Tracker, https://github.com/orgua/shepherd-datalib/issues
|
|
11
|
-
Project-URL: Source, https://github.com/orgua/shepherd-datalib
|
|
5
|
+
Author-email: Ingmar Splitt <ingmar.splitt@tu-dresden.de>
|
|
6
|
+
Maintainer-email: Ingmar Splitt <ingmar.splitt@tu-dresden.de>
|
|
7
|
+
Project-URL: Documentation, https://github.com/orgua/shepherd-datalib/blob/main/README.md
|
|
8
|
+
Project-URL: Issues, https://github.com/orgua/shepherd-datalib/issues
|
|
9
|
+
Project-URL: Source, https://pypi.org/project/shepherd-core/
|
|
12
10
|
Keywords: testbed,beaglebone,pru,batteryless,energyharvesting,solar
|
|
13
11
|
Platform: unix
|
|
14
12
|
Platform: linux
|
|
@@ -35,16 +33,13 @@ Requires-Dist: numpy
|
|
|
35
33
|
Requires-Dist: pyYAML
|
|
36
34
|
Requires-Dist: chromalog
|
|
37
35
|
Requires-Dist: pydantic[email] >2.0.0
|
|
38
|
-
Requires-Dist: tqdm
|
|
39
36
|
Requires-Dist: scipy
|
|
37
|
+
Requires-Dist: tqdm
|
|
40
38
|
Requires-Dist: intelhex
|
|
41
39
|
Requires-Dist: requests
|
|
42
40
|
Requires-Dist: pyelftools
|
|
43
41
|
Requires-Dist: zstandard
|
|
44
42
|
Provides-Extra: dev
|
|
45
|
-
Requires-Dist: black ; extra == 'dev'
|
|
46
|
-
Requires-Dist: pylint ; extra == 'dev'
|
|
47
|
-
Requires-Dist: flake8 ; extra == 'dev'
|
|
48
43
|
Requires-Dist: twine ; extra == 'dev'
|
|
49
44
|
Requires-Dist: pre-commit ; extra == 'dev'
|
|
50
45
|
Requires-Dist: pyright ; extra == 'dev'
|
|
@@ -64,9 +59,9 @@ Requires-Dist: coverage ; extra == 'test'
|
|
|
64
59
|
[](https://pypi.org/project/shepherd_core)
|
|
65
60
|
[](https://pypi.python.org/pypi/shepherd-core)
|
|
66
61
|
[](https://github.com/orgua/shepherd-datalib/actions/workflows/py_unittest.yml)
|
|
67
|
-
[](https://github.com/astral-sh/ruff)
|
|
68
63
|
|
|
69
|
-
**Documentation**: <https://orgua.github.io/shepherd
|
|
64
|
+
**Main Documentation**: <https://orgua.github.io/shepherd>
|
|
70
65
|
|
|
71
66
|
**Source Code**: <https://github.com/orgua/shepherd-datalib>
|
|
72
67
|
|
|
@@ -74,53 +69,42 @@ Requires-Dist: coverage ; extra == 'test'
|
|
|
74
69
|
|
|
75
70
|
---
|
|
76
71
|
|
|
77
|
-
|
|
72
|
+
`shepherd-core` is designed as a library and bundles data-models and file-access-routines for the shepherd-testbed, that are used by several codebases.
|
|
78
73
|
|
|
79
|
-
For postprocessing shepherds .h5-files
|
|
74
|
+
For postprocessing shepherds .h5-files usage of [shepherd_data](https://pypi.org/project/shepherd_data) is recommended.
|
|
80
75
|
|
|
81
76
|
## Features
|
|
82
77
|
|
|
83
78
|
- read and write shepherds hdf5-files
|
|
84
|
-
- create, read, write and convert experiments for the testbed
|
|
79
|
+
- create, read, write and convert experiments for the testbed
|
|
80
|
+
- all required data-models are included
|
|
85
81
|
- simulate the virtual source, including virtual harvesters (and virtual converter as a whole)
|
|
86
|
-
- connect and query the testbed via a webclient (TestbedClient)
|
|
82
|
+
- connect and query the testbed via a webclient (TestbedClient in alpha-stage)
|
|
87
83
|
- offline usage defaults to static demo-fixtures loaded from yaml-files in the model-directories
|
|
88
84
|
- work with target-firmwares
|
|
89
85
|
- embed, modify, verify, convert
|
|
90
86
|
- **Note**: working with ELF-files requires external dependencies, see ``Installation``-Chapter
|
|
91
87
|
- decode waveforms (gpio-state & timestamp) to UART
|
|
92
|
-
- create an inventory (
|
|
88
|
+
- create an inventory (for deployed versions of software, hardware)
|
|
93
89
|
|
|
94
|
-
See [
|
|
90
|
+
See [official documentation](https://orgua.github.io/shepherd) or [example scripts](https://github.com/orgua/shepherd-datalib/tree/main/shepherd_core/examples) for more details and usage. Most functionality is showcased in both. The [extra](https://github.com/orgua/shepherd-datalib/tree/main/shepherd_core/extra)-directory holds data-generators relevant for the testbed. Notably is a [trafficbench](https://github.com/orgua/TrafficBench)-experiment that's used to derive the link-matrix of the testbed-nodes.
|
|
95
91
|
|
|
96
|
-
|
|
92
|
+
## Config-Models in Detail
|
|
97
93
|
|
|
98
|
-
|
|
99
|
-
|---------|--------------|--------------------------------------------|
|
|
100
|
-
| Ubuntu | 3.8 - 3.12 | |
|
|
101
|
-
| Windows | 3.8 - 3.12 | no support for elf and hex-conversions yet |
|
|
102
|
-
| MacOS | 3.8 - 3.12 | hex-conversion missing |
|
|
94
|
+
These pydantic data-models are used throughout all shepherd interfaces. Users can create an experiment, include their own content and feed it to the testbed.
|
|
103
95
|
|
|
104
|
-
|
|
105
|
-
- hex-conversion needs a working and accessible objcopy
|
|
106
|
-
- elf-supports needs
|
|
107
|
-
- ``shepherd-core[elf]`` installs ``pwntools-elf-only``
|
|
108
|
-
- most elf-features also still utilize hex-conversion
|
|
109
|
-
|
|
110
|
-
### Data-Models in Detail
|
|
111
|
-
|
|
112
|
-
- new orchestration ``/data-models`` with focus on remote shepherd-testbed
|
|
96
|
+
- orchestration ``/data-models`` with focus on remote shepherd-testbed
|
|
113
97
|
- classes of sub-models
|
|
114
98
|
- ``/base``: base-classes, configuration and -functionality for all models
|
|
115
99
|
- ``/testbed``: meta-data representation of all testbed-components
|
|
116
|
-
- ``/content``: reusable meta-data for fw, h5 and vsrc-definitions
|
|
100
|
+
- ``/content``: reusable user-defined meta-data for fw, h5 and vsrc-definitions
|
|
117
101
|
- ``/experiment``: configuration-models including sub-systems
|
|
118
102
|
- ``/task``: digestible configs for shepherd-herd or -sheep
|
|
119
103
|
- behavior controlled by ``ShpModel`` and ``content``-model
|
|
120
104
|
- a basic database is available as fixtures through a ``tb_client``
|
|
121
105
|
- fixtures selectable by name & ID
|
|
122
106
|
- fixtures support inheritance
|
|
123
|
-
- models support
|
|
107
|
+
- the models support
|
|
124
108
|
- auto-completion with neutral / sensible values
|
|
125
109
|
- complex and custom datatypes (i.e. PositiveInt, lists-checks on length)
|
|
126
110
|
- checking of inputs and type-casting
|
|
@@ -133,6 +117,20 @@ Notes:
|
|
|
133
117
|
- exposes no internal paths
|
|
134
118
|
- experiments can be transformed to task-sets (``TestbedTasks.from_xp()``)
|
|
135
119
|
|
|
120
|
+
## Compatibility
|
|
121
|
+
|
|
122
|
+
| OS | PyVersion | Comment |
|
|
123
|
+
|---------|--------------|--------------------------------------------|
|
|
124
|
+
| Ubuntu | 3.8 - 3.12 | |
|
|
125
|
+
| Windows | 3.8 - 3.12 | no support for elf and hex-conversions yet |
|
|
126
|
+
| MacOS | 3.8 - 3.12 | hex-conversion missing |
|
|
127
|
+
|
|
128
|
+
Notes:
|
|
129
|
+
- hex-conversion needs a working and accessible objcopy
|
|
130
|
+
- elf-supports needs
|
|
131
|
+
- ``shepherd-core[elf]`` installs ``pwntools-elf-only``
|
|
132
|
+
- most elf-features also still utilize hex-conversion
|
|
133
|
+
|
|
136
134
|
## Installation
|
|
137
135
|
|
|
138
136
|
The Library is available via PyPI and can be installed with
|
|
@@ -169,3 +167,17 @@ For creating an inventory of the host-system you should install
|
|
|
169
167
|
```shell
|
|
170
168
|
pip install shepherd-core[inventory]
|
|
171
169
|
```
|
|
170
|
+
|
|
171
|
+
## Unittests
|
|
172
|
+
|
|
173
|
+
To run the testbench, follow these steps:
|
|
174
|
+
|
|
175
|
+
1. Navigate your host-shell into the package-folder and
|
|
176
|
+
2. install dependencies
|
|
177
|
+
3. run the testbench (~ 320 tests):
|
|
178
|
+
|
|
179
|
+
```Shell
|
|
180
|
+
cd shepherd-datalib/shepherd_core
|
|
181
|
+
pip3 install ./[tests]
|
|
182
|
+
pytest
|
|
183
|
+
```
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
shepherd_core/__init__.py,sha256=UPDbfToRQ7BvvtGOE2ogINDK22SdlYdS3Z4TQp9JLUI,1358
|
|
2
|
+
shepherd_core/calibration_hw_def.py,sha256=VBPgekKtoA6xc5pLOADGdAIuJUNz5kdDf3pm3A13F0U,2158
|
|
3
|
+
shepherd_core/commons.py,sha256=8HLrOq30Zrgh0AcrtakJYyu3hwMgQks7mF7JyaBMcdw,170
|
|
4
|
+
shepherd_core/logger.py,sha256=mIJQ5eCpamsCnc_R7qoceYVXe8JM4-YZriqfzvTt9Yk,1656
|
|
5
|
+
shepherd_core/reader.py,sha256=NPpyMa0aArTyfz1vPHNbIzOGZQxkii96JUMX3jZ6_dY,26082
|
|
6
|
+
shepherd_core/writer.py,sha256=VeBqJZYw6M5CeswPaYWWeAjtQ2xH9ROqA6ziEBK-Npg,14355
|
|
7
|
+
shepherd_core/data_models/__init__.py,sha256=mem0m4nZY3EgG1ctBdGGGt128lhmglF9a4e5w9OGJu0,1651
|
|
8
|
+
shepherd_core/data_models/doc_virtual_source.py,sha256=KizMcfGKj7BnHIbaJHT7KeTF01SV__UXv01qV_DGHSs,6057
|
|
9
|
+
shepherd_core/data_models/base/__init__.py,sha256=ugVEWXfYRCmK4o94RG4N_GKR7AbBQLfn5PCbEKVpZMU,44
|
|
10
|
+
shepherd_core/data_models/base/cal_measurement.py,sha256=ZlSnHXOiY--AzQ1-g0BnU7I4g9sMDqF3g52jsl5IHDY,2873
|
|
11
|
+
shepherd_core/data_models/base/calibration.py,sha256=QTUGpW_YZ4slvfzUwkImp67u13gX90r5ua_qgbVPRXw,9711
|
|
12
|
+
shepherd_core/data_models/base/content.py,sha256=oCefaykxq9HnuRe-6ruk_hC96WECZldriBFeX-PBb8M,2254
|
|
13
|
+
shepherd_core/data_models/base/shepherd.py,sha256=kasSaMZ2baq160WNJMwEhdko2x13fsWYtE5VfHhg8Fs,5822
|
|
14
|
+
shepherd_core/data_models/base/timezone.py,sha256=OBzPPfrD__z1aTO7qlVWD1uD8eZFJ6CoDLac_mTrYCg,443
|
|
15
|
+
shepherd_core/data_models/base/wrapper.py,sha256=mzAMdX9-BeSAeTzlWKFnjj3v2wV6NJgaSHULFHEiWes,600
|
|
16
|
+
shepherd_core/data_models/content/__init__.py,sha256=JLj2zzjDeyqLrz9KiWDMW1shCeJjj676zjcXj8ly10Y,545
|
|
17
|
+
shepherd_core/data_models/content/energy_environment.py,sha256=bH6jB93e_XAAZ_NixNPlF2syEKzRtpMbImA7aD3lyTo,1342
|
|
18
|
+
shepherd_core/data_models/content/firmware.py,sha256=cuh8tURI39ZzTF-wuh4ofsNfRC1TK8lHrGKYm-o9SC0,5533
|
|
19
|
+
shepherd_core/data_models/content/firmware_datatype.py,sha256=WHVJu-LIP_snjeITIKkuZo7aIapoTIZeFXkUNqyEqy8,154
|
|
20
|
+
shepherd_core/data_models/content/virtual_harvester.py,sha256=M23YRfmXPkW145GNFoMHJvsVvJE8wUc_sNOU3OBXZtc,9268
|
|
21
|
+
shepherd_core/data_models/content/virtual_source.py,sha256=rBjfX1a22x_JF4MiQiEpaaWz2LVoHplMSrkHQnqHjDQ,13958
|
|
22
|
+
shepherd_core/data_models/experiment/__init__.py,sha256=DX9kylCe8zFm4PpVT8YS4csip7-MDoSrdah3nhBdiJE,651
|
|
23
|
+
shepherd_core/data_models/experiment/experiment.py,sha256=-qsmogEgHbijxrSfV0mLWj8biOMmDU1sEssZHo97HNI,3912
|
|
24
|
+
shepherd_core/data_models/experiment/observer_features.py,sha256=80z_U3fVFagROtMlWy2vZdbLn1-G8fZm9k8rZlyo4Lo,4997
|
|
25
|
+
shepherd_core/data_models/experiment/target_config.py,sha256=IBWxf3yVF5dUBi7mS5mJXfN1rL2S7QYhu_4IL6u6Yig,3532
|
|
26
|
+
shepherd_core/data_models/task/__init__.py,sha256=g0l4dtIgTPKhfFvnClJrCm3zLFiZpBVbbQ2f4gzdwK0,3180
|
|
27
|
+
shepherd_core/data_models/task/emulation.py,sha256=HE7L3GWKdsAkUPgvdDHxYJG92GNodP9CUEtKgQJghjA,6221
|
|
28
|
+
shepherd_core/data_models/task/firmware_mod.py,sha256=8uXMFVk3Z96gUW0gVY95VeUx-YtZnMc2yw3paC5S5Mw,2730
|
|
29
|
+
shepherd_core/data_models/task/harvest.py,sha256=QcNJjgixiq70NogdcYXwpj91_6Jl7s7CaAnEw_xEWck,3254
|
|
30
|
+
shepherd_core/data_models/task/observer_tasks.py,sha256=_fgG_xqPHQN34jdWxXVvtgJuY_05YiLGPftTGtglTfk,3437
|
|
31
|
+
shepherd_core/data_models/task/programming.py,sha256=uO6IZR8wb0N3791QgAZE7AF0CB7XoyOkFBiDH395IvE,2244
|
|
32
|
+
shepherd_core/data_models/task/testbed_tasks.py,sha256=5T_aTUE6Fby-TG5ZZAcqXVolzs4oCQ_ttNXoinREE4U,1966
|
|
33
|
+
shepherd_core/data_models/testbed/__init__.py,sha256=kQG0EUqJ5ylGRuwYZTbppWue9zDcSytpsHtUnohbGgA,566
|
|
34
|
+
shepherd_core/data_models/testbed/cape.py,sha256=_u38jvy_7yv_J3HSjGblwZXX3iOm0JF7IpTEkF9zhyg,1140
|
|
35
|
+
shepherd_core/data_models/testbed/gpio.py,sha256=9LlaxsWzEnjwaCobO-YcCWi1HZ67OsPKg5ExvtnVglQ,2086
|
|
36
|
+
shepherd_core/data_models/testbed/mcu.py,sha256=enaKdwgmasJuyHlru3UqMIA-mUq1xAoafqAgzVITxoU,1287
|
|
37
|
+
shepherd_core/data_models/testbed/observer.py,sha256=OjdvVa6uxreqIV9VM8jK1OM-RPsH4FGbKklY25_oTqg,3096
|
|
38
|
+
shepherd_core/data_models/testbed/target.py,sha256=bKrPpVcdUNYcpEudbySQ6mPFibedeNsPy9kzUMu-Um0,1762
|
|
39
|
+
shepherd_core/data_models/testbed/testbed.py,sha256=dR4yEwQKSMSXSGyPsuQ7zG2cp2LqCAQZjAzmuFOWvJo,3260
|
|
40
|
+
shepherd_core/decoder_waveform/__init__.py,sha256=HEdjRcm3m4ySEXpJ_D3lZqnxiuobJqC8axZAaAHBwDk,43
|
|
41
|
+
shepherd_core/decoder_waveform/uart.py,sha256=M4k5ymWeGP28i-_tl2FMG0YivY_WGpiZN2JOwSzlSBQ,10672
|
|
42
|
+
shepherd_core/fw_tools/__init__.py,sha256=9W-MXU5j3iJ8AgRzoGUaljD0bN29jh8LtY-pyj5HWbY,2071
|
|
43
|
+
shepherd_core/fw_tools/converter.py,sha256=2g0CZBZLn-CfUTpJljghf8AEpjIt4X7Q1FoCTsmx3A0,3273
|
|
44
|
+
shepherd_core/fw_tools/converter_elf.py,sha256=SEkrPuYUsr1VICDlZiZzr0B1njWcl9mW3J_oZk32Sb4,1008
|
|
45
|
+
shepherd_core/fw_tools/patcher.py,sha256=nXgYKGQjcEE4IYd8yNl4-t5kjlB43iFdp24oYlEaras,3774
|
|
46
|
+
shepherd_core/fw_tools/validation.py,sha256=pdZ4Q7_GyMUarELBt3OOTPIqZIGtDF3MBqOhlF75n4E,4261
|
|
47
|
+
shepherd_core/inventory/__init__.py,sha256=vTeAXOHk3paE3McpWQNBlsll40wY-IQT8alPh3n_1dE,3690
|
|
48
|
+
shepherd_core/inventory/python.py,sha256=Ar_M4cmmQgViY4caU5XH9Iye5X3jNFDnJiWGaZwNpo4,1168
|
|
49
|
+
shepherd_core/inventory/system.py,sha256=lD70oYMF0dPDvYDglhYIXIfjEFtxVoY9Zhoiwvj-oo0,2181
|
|
50
|
+
shepherd_core/inventory/target.py,sha256=XywiKmDpYKIBQt1Jo_k3bJeCOKxnzy5ob_9PYdFrjGE,421
|
|
51
|
+
shepherd_core/testbed_client/__init__.py,sha256=V38uxXOhwB8tlAjR0jH1MPSWB1LltwC0g8ipwaIyC9o,103
|
|
52
|
+
shepherd_core/testbed_client/cache_path.py,sha256=ZAoYi0je5Bg6fcP_OJa32zL6rXNPL5Ef-8vSungW9_M,401
|
|
53
|
+
shepherd_core/testbed_client/client.py,sha256=83RynaL7MiezZky-Iw-K6m8QWqRV4hAHW8awKNcTUFk,5776
|
|
54
|
+
shepherd_core/testbed_client/fixtures.py,sha256=vhSYWd3OgMP4fL5I_n1Y6flR68aSJlJnR6yFwX-D38Y,9233
|
|
55
|
+
shepherd_core/testbed_client/user_model.py,sha256=6HfDSRs4WgttEA1znVLdNwV8Pv7R_0YKxK0b30hr6mQ,2026
|
|
56
|
+
shepherd_core/vsource/__init__.py,sha256=x84_0M8Dg8R7DLKE5zyNAAGFiuOHPehDOWPt2KeBhKw,344
|
|
57
|
+
shepherd_core/vsource/virtual_converter_model.py,sha256=DCNf-O3gFmU1DIbZkESNvveCJ5sN-5dZoqAxBUogzO4,10332
|
|
58
|
+
shepherd_core/vsource/virtual_harvester_model.py,sha256=MoMa2S0VKfK1Q8fZ9CEx7sNnr3b3ae8M4YhsyY5DSgY,7764
|
|
59
|
+
shepherd_core/vsource/virtual_source_model.py,sha256=5AcNG7s_GqGn4hTzCWKTz0CNIBjF8g3YsZtc8HF0D5Q,2724
|
|
60
|
+
shepherd_core-2024.4.1.dist-info/METADATA,sha256=G0Lc2ETRLVsNDAKlpq3Od7xYsClqjbwjJiYyeEwFiv0,7618
|
|
61
|
+
shepherd_core-2024.4.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
62
|
+
shepherd_core-2024.4.1.dist-info/top_level.txt,sha256=wy-t7HRBrKARZxa-Y8_j8d49oVHnulh-95K9ikxVhew,14
|
|
63
|
+
shepherd_core-2024.4.1.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
64
|
+
shepherd_core-2024.4.1.dist-info/RECORD,,
|