shepherd-core 2023.12.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 (90) 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 +11 -4
  4. shepherd_core/data_models/base/shepherd.py +2 -0
  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 +18 -13
  8. shepherd_core/data_models/experiment/experiment.py +10 -10
  9. shepherd_core/data_models/experiment/observer_features.py +5 -6
  10. shepherd_core/data_models/task/observer_tasks.py +1 -1
  11. shepherd_core/data_models/task/testbed_tasks.py +7 -3
  12. shepherd_core/data_models/testbed/cape.py +1 -1
  13. shepherd_core/data_models/testbed/gpio.py +1 -1
  14. shepherd_core/data_models/testbed/mcu.py +1 -1
  15. shepherd_core/data_models/testbed/observer.py +1 -1
  16. shepherd_core/data_models/testbed/target.py +1 -1
  17. shepherd_core/data_models/testbed/testbed.py +1 -1
  18. shepherd_core/decoder_waveform/uart.py +1 -0
  19. shepherd_core/fw_tools/validation.py +1 -2
  20. shepherd_core/inventory/__init__.py +51 -1
  21. shepherd_core/inventory/system.py +8 -0
  22. shepherd_core/reader.py +19 -16
  23. shepherd_core/testbed_client/cache_path.py +15 -0
  24. shepherd_core/testbed_client/client.py +2 -3
  25. shepherd_core/testbed_client/fixtures.py +4 -1
  26. shepherd_core/testbed_client/user_model.py +6 -4
  27. shepherd_core/vsource/virtual_converter_model.py +1 -1
  28. shepherd_core/vsource/virtual_harvester_model.py +1 -0
  29. shepherd_core/vsource/virtual_source_model.py +1 -0
  30. shepherd_core/writer.py +5 -2
  31. {shepherd_core-2023.12.1.dist-info → shepherd_core-2024.4.1.dist-info}/METADATA +49 -34
  32. shepherd_core-2024.4.1.dist-info/RECORD +64 -0
  33. {shepherd_core-2023.12.1.dist-info → shepherd_core-2024.4.1.dist-info}/WHEEL +1 -1
  34. {shepherd_core-2023.12.1.dist-info → shepherd_core-2024.4.1.dist-info}/top_level.txt +0 -1
  35. shepherd_core/data_models/content/_external_fixtures.yaml +0 -394
  36. shepherd_core/data_models/content/energy_environment_fixture.yaml +0 -50
  37. shepherd_core/data_models/content/virtual_harvester_fixture.yaml +0 -159
  38. shepherd_core/data_models/content/virtual_source_fixture.yaml +0 -229
  39. shepherd_core/data_models/testbed/cape_fixture.yaml +0 -94
  40. shepherd_core/data_models/testbed/gpio_fixture.yaml +0 -166
  41. shepherd_core/data_models/testbed/mcu_fixture.yaml +0 -19
  42. shepherd_core/data_models/testbed/observer_fixture.yaml +0 -220
  43. shepherd_core/data_models/testbed/target_fixture.yaml +0 -137
  44. shepherd_core/data_models/testbed/testbed_fixture.yaml +0 -25
  45. shepherd_core-2023.12.1.dist-info/RECORD +0 -117
  46. tests/__init__.py +0 -0
  47. tests/conftest.py +0 -64
  48. tests/data_models/__init__.py +0 -0
  49. tests/data_models/conftest.py +0 -14
  50. tests/data_models/example_cal_data.yaml +0 -31
  51. tests/data_models/example_cal_data_faulty.yaml +0 -29
  52. tests/data_models/example_cal_meas.yaml +0 -178
  53. tests/data_models/example_cal_meas_faulty1.yaml +0 -142
  54. tests/data_models/example_cal_meas_faulty2.yaml +0 -136
  55. tests/data_models/example_config_emulator.yaml +0 -41
  56. tests/data_models/example_config_experiment.yaml +0 -16
  57. tests/data_models/example_config_experiment_alternative.yaml +0 -14
  58. tests/data_models/example_config_harvester.yaml +0 -15
  59. tests/data_models/example_config_testbed.yaml +0 -26
  60. tests/data_models/example_config_virtsource.yaml +0 -78
  61. tests/data_models/test_base_models.py +0 -205
  62. tests/data_models/test_content_fixtures.py +0 -41
  63. tests/data_models/test_content_models.py +0 -282
  64. tests/data_models/test_examples.py +0 -48
  65. tests/data_models/test_experiment_models.py +0 -277
  66. tests/data_models/test_task_generation.py +0 -52
  67. tests/data_models/test_task_models.py +0 -131
  68. tests/data_models/test_testbed_fixtures.py +0 -47
  69. tests/data_models/test_testbed_models.py +0 -187
  70. tests/decoder_waveform/__init__.py +0 -0
  71. tests/decoder_waveform/test_decoder.py +0 -34
  72. tests/fw_tools/__init__.py +0 -0
  73. tests/fw_tools/conftest.py +0 -5
  74. tests/fw_tools/test_converter.py +0 -76
  75. tests/fw_tools/test_patcher.py +0 -66
  76. tests/fw_tools/test_validation.py +0 -56
  77. tests/inventory/__init__.py +0 -0
  78. tests/inventory/test_inventory.py +0 -20
  79. tests/test_cal_hw.py +0 -34
  80. tests/test_examples.py +0 -40
  81. tests/test_logger.py +0 -15
  82. tests/test_reader.py +0 -283
  83. tests/test_writer.py +0 -169
  84. tests/testbed_client/__init__.py +0 -0
  85. tests/vsource/__init__.py +0 -0
  86. tests/vsource/conftest.py +0 -49
  87. tests/vsource/test_converter.py +0 -161
  88. tests/vsource/test_harvester.py +0 -73
  89. tests/vsource/test_z.py +0 -5
  90. {shepherd_core-2023.12.1.dist-info → shepherd_core-2024.4.1.dist-info}/zip-safe +0 -0
@@ -41,8 +41,7 @@ class TestbedClient:
41
41
 
42
42
  @validate_call
43
43
  def connect(self, server: Optional[str] = None, token: Union[str, Path, None] = None) -> bool:
44
- """
45
- server: either "local" to use demo-fixtures or something like "https://HOST:PORT"
44
+ """server: either "local" to use demo-fixtures or something like "https://HOST:PORT"
46
45
  token: your account validation
47
46
  """
48
47
  if isinstance(token, Path):
@@ -120,7 +119,7 @@ class TestbedClient:
120
119
  return self._fixtures[model_type].inheritance(values)
121
120
 
122
121
  def try_completing_model(self, model_type: str, values: dict) -> (dict, list):
123
- """init by name/id, for none existing instances raise Exception"""
122
+ """Init by name/id, for none existing instances raise Exception"""
124
123
  if len(values) == 1 and next(iter(values.keys())) in {"id", "name"}:
125
124
  value = next(iter(values.values()))
126
125
  if (
@@ -18,6 +18,7 @@ from ..data_models.base.timezone import local_now
18
18
  from ..data_models.base.timezone import local_tz
19
19
  from ..data_models.base.wrapper import Wrapper
20
20
  from ..logger import logger
21
+ from .cache_path import cache_user_path
21
22
 
22
23
  # Proposed field-name:
23
24
  # - inheritance
@@ -174,10 +175,11 @@ class Fixtures:
174
175
  else:
175
176
  self.file_path = file_path
176
177
  self.components: Dict[str, Fixture] = {}
177
- save_path = self.file_path / "fixtures.pickle"
178
+ save_path = cache_user_path / "fixtures.pickle"
178
179
 
179
180
  if save_path.exists() and not file_older_than(save_path, timedelta(hours=24)) and not reset:
180
181
  # speedup
182
+ # TODO: also add version as criterion
181
183
  with save_path.open("rb", buffering=-1) as fd:
182
184
  self.components = pickle.load(fd) # noqa: S301
183
185
  logger.debug(" -> found & used pickled fixtures")
@@ -192,6 +194,7 @@ class Fixtures:
192
194
  for file in files:
193
195
  self.insert_file(file)
194
196
 
197
+ save_path.parent.mkdir(parents=True, exist_ok=True)
195
198
  with save_path.open("wb", buffering=-1) as fd:
196
199
  pickle.dump(self.components, fd)
197
200
 
@@ -1,7 +1,10 @@
1
1
  import secrets
2
2
  from hashlib import pbkdf2_hmac
3
3
  from typing import Optional
4
+ from typing import Union
5
+ from uuid import uuid4
4
6
 
7
+ from pydantic import UUID4
5
8
  from pydantic import EmailStr
6
9
  from pydantic import Field
7
10
  from pydantic import SecretBytes
@@ -11,10 +14,8 @@ from pydantic import model_validator
11
14
  from pydantic import validate_call
12
15
  from typing_extensions import Annotated
13
16
 
14
- from ..data_models.base.content import IdInt
15
17
  from ..data_models.base.content import NameStr
16
18
  from ..data_models.base.content import SafeStr
17
- from ..data_models.base.content import id_default
18
19
  from ..data_models.base.shepherd import ShpModel
19
20
 
20
21
 
@@ -34,9 +35,10 @@ def hash_password(pw: Annotated[str, StringConstraints(min_length=20, max_length
34
35
  class User(ShpModel):
35
36
  """meta-data representation of a testbed-component (physical object)"""
36
37
 
37
- id: IdInt = Field( # noqa: A003
38
+ # id: UUID4 = Field( # TODO db-migration - temp fix for documentation
39
+ id: Union[UUID4, int] = Field(
38
40
  description="Unique ID",
39
- default_factory=id_default,
41
+ default_factory=uuid4,
40
42
  )
41
43
  name: NameStr
42
44
  description: Optional[SafeStr] = None
@@ -6,7 +6,7 @@
6
6
  NOTE: DO NOT OPTIMIZE -> stay close to original code-base
7
7
 
8
8
  Compromises:
9
- - bitshifted values (ie. _n28) are converted to float without shift
9
+ - bitshifted values (i.e. _n28) are converted to float without shift
10
10
 
11
11
  """
12
12
 
@@ -11,6 +11,7 @@ Compromises:
11
11
  - Python has no static vars -> FName_reset is handling the class-vars
12
12
 
13
13
  """
14
+
14
15
  from typing import Tuple
15
16
 
16
17
  from ..data_models.content.virtual_harvester import HarvesterPRUConfig
@@ -6,6 +6,7 @@
6
6
  NOTE: DO NOT OPTIMIZE -> stay close to original code-base
7
7
 
8
8
  """
9
+
9
10
  from typing import Optional
10
11
 
11
12
  from ..data_models import CalibrationEmulator
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
@@ -87,6 +87,7 @@ class Writer(Reader):
87
87
  otherwise a unique name will be found
88
88
  compression: (str) use either None, lzf or "1" (gzips compression level)
89
89
  verbose: (bool) provides more debug-info
90
+
90
91
  """
91
92
 
92
93
  comp_default: int = 1
@@ -285,6 +286,7 @@ class Writer(Reader):
285
286
  timestamp: just start of buffer or whole ndarray
286
287
  voltage: ndarray as raw unsigned integers
287
288
  current: ndarray as raw unsigned integers
289
+
288
290
  """
289
291
  len_new = min(voltage.size, current.size)
290
292
 
@@ -326,6 +328,7 @@ class Writer(Reader):
326
328
  -> provide start of buffer or whole ndarray
327
329
  voltage: ndarray in physical-unit V
328
330
  current: ndarray in physical-unit A
331
+
329
332
  """
330
333
  timestamp = self._cal.time.si_to_raw(timestamp)
331
334
  voltage = self._cal.voltage.si_to_raw(voltage)
@@ -1,14 +1,12 @@
1
1
  Metadata-Version: 2.1
2
- Name: shepherd-core
3
- Version: 2023.12.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,8 +33,8 @@ 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
@@ -63,7 +61,7 @@ Requires-Dist: coverage ; extra == 'test'
63
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)
64
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)
65
63
 
66
- **Documentation**: <https://orgua.github.io/shepherd/external/shepherd_core.html>
64
+ **Main Documentation**: <https://orgua.github.io/shepherd>
67
65
 
68
66
  **Source Code**: <https://github.com/orgua/shepherd-datalib>
69
67
 
@@ -71,53 +69,42 @@ Requires-Dist: coverage ; extra == 'test'
71
69
 
72
70
  ---
73
71
 
74
- 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.
75
73
 
76
- 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.
77
75
 
78
76
  ## Features
79
77
 
80
78
  - read and write shepherds hdf5-files
81
- - 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
82
81
  - simulate the virtual source, including virtual harvesters (and virtual converter as a whole)
83
- - connect and query the testbed via a webclient (TestbedClient)
82
+ - connect and query the testbed via a webclient (TestbedClient in alpha-stage)
84
83
  - offline usage defaults to static demo-fixtures loaded from yaml-files in the model-directories
85
84
  - work with target-firmwares
86
85
  - embed, modify, verify, convert
87
86
  - **Note**: working with ELF-files requires external dependencies, see ``Installation``-Chapter
88
87
  - decode waveforms (gpio-state & timestamp) to UART
89
- - create an inventory (used versions of software, hardware)
88
+ - create an inventory (for deployed versions of software, hardware)
90
89
 
91
- 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.
92
91
 
93
- ### Compatibility
92
+ ## Config-Models in Detail
94
93
 
95
- | OS | PyVersion | Comment |
96
- |---------|--------------|--------------------------------------------|
97
- | Ubuntu | 3.8 - 3.12 | |
98
- | Windows | 3.8 - 3.12 | no support for elf and hex-conversions yet |
99
- | 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.
100
95
 
101
- Notes:
102
- - hex-conversion needs a working and accessible objcopy
103
- - elf-supports needs
104
- - ``shepherd-core[elf]`` installs ``pwntools-elf-only``
105
- - most elf-features also still utilize hex-conversion
106
-
107
- ### Data-Models in Detail
108
-
109
- - new orchestration ``/data-models`` with focus on remote shepherd-testbed
96
+ - orchestration ``/data-models`` with focus on remote shepherd-testbed
110
97
  - classes of sub-models
111
98
  - ``/base``: base-classes, configuration and -functionality for all models
112
99
  - ``/testbed``: meta-data representation of all testbed-components
113
- - ``/content``: reusable meta-data for fw, h5 and vsrc-definitions
100
+ - ``/content``: reusable user-defined meta-data for fw, h5 and vsrc-definitions
114
101
  - ``/experiment``: configuration-models including sub-systems
115
102
  - ``/task``: digestible configs for shepherd-herd or -sheep
116
103
  - behavior controlled by ``ShpModel`` and ``content``-model
117
104
  - a basic database is available as fixtures through a ``tb_client``
118
105
  - fixtures selectable by name & ID
119
106
  - fixtures support inheritance
120
- - models support
107
+ - the models support
121
108
  - auto-completion with neutral / sensible values
122
109
  - complex and custom datatypes (i.e. PositiveInt, lists-checks on length)
123
110
  - checking of inputs and type-casting
@@ -130,6 +117,20 @@ Notes:
130
117
  - exposes no internal paths
131
118
  - experiments can be transformed to task-sets (``TestbedTasks.from_xp()``)
132
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
+
133
134
  ## Installation
134
135
 
135
136
  The Library is available via PyPI and can be installed with
@@ -166,3 +167,17 @@ For creating an inventory of the host-system you should install
166
167
  ```shell
167
168
  pip install shepherd-core[inventory]
168
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.42.0)
2
+ Generator: bdist_wheel (0.43.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5