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.
Files changed (99) hide show
  1. shepherd_core/__init__.py +3 -2
  2. shepherd_core/data_models/base/calibration.py +3 -1
  3. shepherd_core/data_models/base/content.py +13 -11
  4. shepherd_core/data_models/base/shepherd.py +4 -6
  5. shepherd_core/data_models/content/energy_environment.py +1 -1
  6. shepherd_core/data_models/content/virtual_harvester.py +1 -1
  7. shepherd_core/data_models/content/virtual_source.py +31 -53
  8. shepherd_core/data_models/experiment/experiment.py +13 -18
  9. shepherd_core/data_models/experiment/observer_features.py +9 -15
  10. shepherd_core/data_models/experiment/target_config.py +4 -11
  11. shepherd_core/data_models/task/__init__.py +2 -6
  12. shepherd_core/data_models/task/emulation.py +7 -14
  13. shepherd_core/data_models/task/firmware_mod.py +1 -3
  14. shepherd_core/data_models/task/harvest.py +1 -3
  15. shepherd_core/data_models/task/observer_tasks.py +1 -1
  16. shepherd_core/data_models/task/testbed_tasks.py +7 -3
  17. shepherd_core/data_models/testbed/cape.py +1 -1
  18. shepherd_core/data_models/testbed/gpio.py +1 -1
  19. shepherd_core/data_models/testbed/mcu.py +1 -1
  20. shepherd_core/data_models/testbed/observer.py +7 -23
  21. shepherd_core/data_models/testbed/target.py +1 -1
  22. shepherd_core/data_models/testbed/testbed.py +2 -4
  23. shepherd_core/decoder_waveform/uart.py +9 -26
  24. shepherd_core/fw_tools/__init__.py +1 -3
  25. shepherd_core/fw_tools/converter.py +4 -12
  26. shepherd_core/fw_tools/patcher.py +4 -12
  27. shepherd_core/fw_tools/validation.py +1 -2
  28. shepherd_core/inventory/__init__.py +53 -9
  29. shepherd_core/inventory/system.py +10 -5
  30. shepherd_core/logger.py +1 -3
  31. shepherd_core/reader.py +45 -57
  32. shepherd_core/testbed_client/cache_path.py +15 -0
  33. shepherd_core/testbed_client/client.py +7 -19
  34. shepherd_core/testbed_client/fixtures.py +8 -15
  35. shepherd_core/testbed_client/user_model.py +7 -7
  36. shepherd_core/vsource/virtual_converter_model.py +5 -15
  37. shepherd_core/vsource/virtual_harvester_model.py +2 -3
  38. shepherd_core/vsource/virtual_source_model.py +3 -6
  39. shepherd_core/writer.py +16 -24
  40. {shepherd_core-2023.11.1.dist-info → shepherd_core-2024.4.1.dist-info}/METADATA +50 -38
  41. shepherd_core-2024.4.1.dist-info/RECORD +64 -0
  42. {shepherd_core-2023.11.1.dist-info → shepherd_core-2024.4.1.dist-info}/WHEEL +1 -1
  43. {shepherd_core-2023.11.1.dist-info → shepherd_core-2024.4.1.dist-info}/top_level.txt +0 -1
  44. shepherd_core/data_models/content/_external_fixtures.yaml +0 -394
  45. shepherd_core/data_models/content/energy_environment_fixture.yaml +0 -50
  46. shepherd_core/data_models/content/virtual_harvester_fixture.yaml +0 -159
  47. shepherd_core/data_models/content/virtual_source_fixture.yaml +0 -229
  48. shepherd_core/data_models/testbed/cape_fixture.yaml +0 -94
  49. shepherd_core/data_models/testbed/gpio_fixture.yaml +0 -166
  50. shepherd_core/data_models/testbed/mcu_fixture.yaml +0 -19
  51. shepherd_core/data_models/testbed/observer_fixture.yaml +0 -220
  52. shepherd_core/data_models/testbed/target_fixture.yaml +0 -137
  53. shepherd_core/data_models/testbed/testbed_fixture.yaml +0 -25
  54. shepherd_core-2023.11.1.dist-info/RECORD +0 -117
  55. tests/__init__.py +0 -0
  56. tests/conftest.py +0 -64
  57. tests/data_models/__init__.py +0 -0
  58. tests/data_models/conftest.py +0 -14
  59. tests/data_models/example_cal_data.yaml +0 -31
  60. tests/data_models/example_cal_data_faulty.yaml +0 -29
  61. tests/data_models/example_cal_meas.yaml +0 -178
  62. tests/data_models/example_cal_meas_faulty1.yaml +0 -142
  63. tests/data_models/example_cal_meas_faulty2.yaml +0 -136
  64. tests/data_models/example_config_emulator.yaml +0 -41
  65. tests/data_models/example_config_experiment.yaml +0 -16
  66. tests/data_models/example_config_experiment_alternative.yaml +0 -14
  67. tests/data_models/example_config_harvester.yaml +0 -15
  68. tests/data_models/example_config_testbed.yaml +0 -26
  69. tests/data_models/example_config_virtsource.yaml +0 -78
  70. tests/data_models/test_base_models.py +0 -205
  71. tests/data_models/test_content_fixtures.py +0 -41
  72. tests/data_models/test_content_models.py +0 -288
  73. tests/data_models/test_examples.py +0 -48
  74. tests/data_models/test_experiment_models.py +0 -279
  75. tests/data_models/test_task_generation.py +0 -52
  76. tests/data_models/test_task_models.py +0 -131
  77. tests/data_models/test_testbed_fixtures.py +0 -47
  78. tests/data_models/test_testbed_models.py +0 -187
  79. tests/decoder_waveform/__init__.py +0 -0
  80. tests/decoder_waveform/test_decoder.py +0 -34
  81. tests/fw_tools/__init__.py +0 -0
  82. tests/fw_tools/conftest.py +0 -5
  83. tests/fw_tools/test_converter.py +0 -76
  84. tests/fw_tools/test_patcher.py +0 -66
  85. tests/fw_tools/test_validation.py +0 -56
  86. tests/inventory/__init__.py +0 -0
  87. tests/inventory/test_inventory.py +0 -22
  88. tests/test_cal_hw.py +0 -38
  89. tests/test_examples.py +0 -40
  90. tests/test_logger.py +0 -15
  91. tests/test_reader.py +0 -283
  92. tests/test_writer.py +0 -169
  93. tests/testbed_client/__init__.py +0 -0
  94. tests/vsource/__init__.py +0 -0
  95. tests/vsource/conftest.py +0 -51
  96. tests/vsource/test_converter.py +0 -165
  97. tests/vsource/test_harvester.py +0 -79
  98. tests/vsource/test_z.py +0 -5
  99. {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 -> " "storing under '%s' instead",
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.ds_time.shape[0]
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.ds_time.size / self.samples_per_buffer
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.ds_time.size:
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.ds_time.size - size_new,
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: shepherd-core
3
- Version: 2023.11.1
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
- Home-page: https://pypi.org/project/shepherd-core/
6
- Author: Ingmar Splitt, Kai Geissdoerfer
7
- Author-email: ingmar.splitt@tu-dresden.de
8
- Maintainer-email: ingmar.splitt@tu-dresden.de
9
- License: MIT
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
  [![PyPiVersion](https://img.shields.io/pypi/v/shepherd_core.svg)](https://pypi.org/project/shepherd_core)
65
60
  [![image](https://img.shields.io/pypi/pyversions/shepherd_core.svg)](https://pypi.python.org/pypi/shepherd-core)
66
61
  [![Pytest](https://github.com/orgua/shepherd-datalib/actions/workflows/py_unittest.yml/badge.svg)](https://github.com/orgua/shepherd-datalib/actions/workflows/py_unittest.yml)
67
- [![CodeStyle](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
62
+ [![CodeStyle](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
68
63
 
69
- **Documentation**: <https://orgua.github.io/shepherd/external/shepherd_core.html>
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
- This Python Module is designed as a library and bundles data-models and file-access-routines for the shepherd-testbed, that are used by several codebases.
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 users want to use [shepherd_data](https://pypi.org/project/shepherd_data).
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 (all data-models included)
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 (used versions of software, hardware)
88
+ - create an inventory (for deployed versions of software, hardware)
93
89
 
94
- See [examples](https://github.com/orgua/shepherd-datalib/tree/main/shepherd_core/examples) for more details and usage. Most functionality is showcased there. 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-experiment that's used to derive the link-matrix.
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
- ### Compatibility
92
+ ## Config-Models in Detail
97
93
 
98
- | OS | PyVersion | Comment |
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
- Notes:
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.41.3)
2
+ Generator: bdist_wheel (0.43.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5