esiaccel 0.1.5.dev67__cp312-cp312-win_amd64.whl → 0.1.5.dev71__cp312-cp312-win_amd64.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.

Potentially problematic release.


This version of esiaccel might be problematic. Click here for more details.

esiaccel/CosimBackend.dll CHANGED
Binary file
esiaccel/CosimBackend.lib CHANGED
Binary file
Binary file
Binary file
Binary file
Binary file
esiaccel/MtiPli.dll CHANGED
Binary file
esiaccel/MtiPli.lib CHANGED
Binary file
Binary file
esiaccel/esiquery.exe CHANGED
Binary file
@@ -20,6 +20,7 @@
20
20
  #include <cstdint>
21
21
  #include <map>
22
22
  #include <optional>
23
+ #include <span>
23
24
  #include <stdexcept>
24
25
  #include <string>
25
26
  #include <vector>
@@ -115,6 +116,11 @@ public:
115
116
  /// Get the data as a vector of bytes.
116
117
  const std::vector<uint8_t> &getData() const { return data; }
117
118
 
119
+ /// Implicit conversion to a vector/span of bytes, to play nice with other
120
+ /// APIs that accept bytearray-like things.
121
+ operator const std::vector<uint8_t> &() const { return data; }
122
+ operator std::span<const uint8_t>() const { return data; }
123
+
118
124
  /// Move the data out of this object.
119
125
  std::vector<uint8_t> takeData() { return std::move(data); }
120
126
 
@@ -16,11 +16,17 @@
16
16
  #ifndef ESI_TYPES_H
17
17
  #define ESI_TYPES_H
18
18
 
19
+ #include <algorithm>
20
+ #include <any>
19
21
  #include <cstdint>
20
22
  #include <map>
23
+ #include <span>
24
+ #include <stdexcept>
21
25
  #include <string>
22
26
  #include <vector>
23
27
 
28
+ #include "esi/Common.h"
29
+
24
30
  namespace esi {
25
31
 
26
32
  /// Root class of the ESI type system.
@@ -33,6 +39,37 @@ public:
33
39
  ID getID() const { return id; }
34
40
  virtual std::ptrdiff_t getBitWidth() const { return -1; }
35
41
 
42
+ /// Serialize an object to MessageData. The object should be passed as a
43
+ /// std::any to provide type erasure. Returns a MessageData containing the
44
+ /// serialized representation.
45
+ virtual MessageData serialize(const std::any &obj) const {
46
+ throw std::runtime_error("Serialization not implemented for type " + id);
47
+ }
48
+
49
+ /// Deserialize from a span of bytes to an object. Returns the deserialized
50
+ /// object as a std::any and a span to the remaining bytes.
51
+ virtual std::pair<std::any, std::span<const uint8_t>>
52
+ deserialize(std::span<const uint8_t> data) const {
53
+ throw std::runtime_error("Deserialization not implemented for type " + id);
54
+ }
55
+
56
+ /// Ensure that a std::any object is valid for this type. Throws
57
+ /// std::runtime_error if the object is not valid.
58
+ virtual void ensureValid(const std::any &obj) const {
59
+ throw std::runtime_error("Validation not implemented for type " + id);
60
+ }
61
+
62
+ // Check if a std::any object is valid for this type. Returns an optional
63
+ // error message if the object is not valid, else, std::nullopt.
64
+ std::optional<std::string> isValid(const std::any &obj) const {
65
+ try {
66
+ ensureValid(obj);
67
+ return std::nullopt;
68
+ } catch (const std::runtime_error &e) {
69
+ return e.what();
70
+ }
71
+ }
72
+
36
73
  protected:
37
74
  ID id;
38
75
  };
@@ -54,12 +91,7 @@ public:
54
91
  const ChannelVector &getChannels() const { return channels; }
55
92
  std::ptrdiff_t getBitWidth() const override { return -1; };
56
93
 
57
- std::pair<const Type *, Direction> findChannel(std::string name) const {
58
- for (auto [channelName, dir, type] : channels)
59
- if (channelName == name)
60
- return std::make_pair(type, dir);
61
- throw std::runtime_error("Channel '" + name + "' not found in bundle");
62
- }
94
+ std::pair<const Type *, Direction> findChannel(std::string name) const;
63
95
 
64
96
  protected:
65
97
  ChannelVector channels;
@@ -73,6 +105,13 @@ public:
73
105
  const Type *getInner() const { return inner; }
74
106
  std::ptrdiff_t getBitWidth() const override { return inner->getBitWidth(); };
75
107
 
108
+ void ensureValid(const std::any &obj) const override;
109
+
110
+ MessageData serialize(const std::any &obj) const override;
111
+
112
+ std::pair<std::any, std::span<const uint8_t>>
113
+ deserialize(std::span<const uint8_t> data) const override;
114
+
76
115
  private:
77
116
  const Type *inner;
78
117
  };
@@ -83,6 +122,13 @@ public:
83
122
  VoidType(const ID &id) : Type(id) {}
84
123
  // 'void' is 1 bit by convention.
85
124
  std::ptrdiff_t getBitWidth() const override { return 1; };
125
+
126
+ void ensureValid(const std::any &obj) const override;
127
+
128
+ MessageData serialize(const std::any &obj) const override;
129
+
130
+ std::pair<std::any, std::span<const uint8_t>>
131
+ deserialize(std::span<const uint8_t> data) const override;
86
132
  };
87
133
 
88
134
  /// The "any" type is a special type which can be used to represent any type, as
@@ -112,6 +158,13 @@ private:
112
158
  class BitsType : public BitVectorType {
113
159
  public:
114
160
  using BitVectorType::BitVectorType;
161
+
162
+ void ensureValid(const std::any &obj) const override;
163
+
164
+ MessageData serialize(const std::any &obj) const override;
165
+
166
+ std::pair<std::any, std::span<const uint8_t>>
167
+ deserialize(std::span<const uint8_t> data) const override;
115
168
  };
116
169
 
117
170
  /// Integers are bit vectors which may be signed or unsigned and are interpreted
@@ -125,12 +178,26 @@ public:
125
178
  class SIntType : public IntegerType {
126
179
  public:
127
180
  using IntegerType::IntegerType;
181
+
182
+ void ensureValid(const std::any &obj) const override;
183
+
184
+ MessageData serialize(const std::any &obj) const override;
185
+
186
+ std::pair<std::any, std::span<const uint8_t>>
187
+ deserialize(std::span<const uint8_t> data) const override;
128
188
  };
129
189
 
130
190
  /// Unsigned integer.
131
191
  class UIntType : public IntegerType {
132
192
  public:
133
193
  using IntegerType::IntegerType;
194
+
195
+ void ensureValid(const std::any &obj) const override;
196
+
197
+ MessageData serialize(const std::any &obj) const override;
198
+
199
+ std::pair<std::any, std::span<const uint8_t>>
200
+ deserialize(std::span<const uint8_t> data) const override;
134
201
  };
135
202
 
136
203
  /// Structs are an ordered collection of fields, each with a name and a type.
@@ -153,6 +220,13 @@ public:
153
220
  return size;
154
221
  }
155
222
 
223
+ void ensureValid(const std::any &obj) const override;
224
+
225
+ MessageData serialize(const std::any &obj) const override;
226
+
227
+ std::pair<std::any, std::span<const uint8_t>>
228
+ deserialize(std::span<const uint8_t> data) const override;
229
+
156
230
  private:
157
231
  FieldVector fields;
158
232
  };
@@ -172,6 +246,13 @@ public:
172
246
  return elementSize * size;
173
247
  }
174
248
 
249
+ void ensureValid(const std::any &obj) const override;
250
+
251
+ MessageData serialize(const std::any &obj) const override;
252
+
253
+ std::pair<std::any, std::span<const uint8_t>>
254
+ deserialize(std::span<const uint8_t> data) const override;
255
+
175
256
  private:
176
257
  const Type *elementType;
177
258
  uint64_t size;
esiaccel/types.py CHANGED
@@ -15,7 +15,6 @@ from __future__ import annotations
15
15
  from . import esiCppAccel as cpp
16
16
 
17
17
  from typing import TYPE_CHECKING
18
-
19
18
  if TYPE_CHECKING:
20
19
  from .accelerator import HWModule
21
20
 
@@ -27,33 +26,22 @@ import traceback
27
26
 
28
27
  def _get_esi_type(cpp_type: cpp.Type):
29
28
  """Get the wrapper class for a C++ type."""
30
- if isinstance(cpp_type, cpp.ChannelType):
31
- return _get_esi_type(cpp_type.inner)
32
-
33
- for cpp_type_cls, wrapper_cls in __esi_mapping.items():
29
+ for cpp_type_cls, fn in __esi_mapping.items():
34
30
  if isinstance(cpp_type, cpp_type_cls):
35
- return wrapper_cls.wrap_cpp(cpp_type)
36
- return ESIType.wrap_cpp(cpp_type)
31
+ return fn(cpp_type)
32
+ return ESIType(cpp_type)
37
33
 
38
34
 
39
- # Mapping from C++ types to wrapper classes
40
- __esi_mapping: Dict[Type, Type] = {}
35
+ # Mapping from C++ types to functions constructing the Python object
36
+ # corresponding to that type.
37
+ __esi_mapping: Dict[Type, Callable] = {
38
+ cpp.ChannelType: lambda cpp_type: _get_esi_type(cpp_type.inner)
39
+ }
41
40
 
42
41
 
43
42
  class ESIType:
44
43
 
45
- def __init__(self, id: str):
46
- self._init_from_cpp(cpp.Type(id))
47
-
48
- @classmethod
49
- def wrap_cpp(cls, cpp_type: cpp.Type):
50
- """Wrap a C++ ESI type with its corresponding Python ESI Type."""
51
- instance = cls.__new__(cls)
52
- instance._init_from_cpp(cpp_type)
53
- return instance
54
-
55
- def _init_from_cpp(self, cpp_type: cpp.Type):
56
- """Initialize instance attributes from a C++ type object."""
44
+ def __init__(self, cpp_type: cpp.Type):
57
45
  self.cpp_type = cpp_type
58
46
 
59
47
  @property
@@ -98,9 +86,6 @@ class ESIType:
98
86
 
99
87
  class VoidType(ESIType):
100
88
 
101
- def __init__(self, id: str):
102
- self._init_from_cpp(cpp.VoidType(id))
103
-
104
89
  def is_valid(self, obj) -> Tuple[bool, Optional[str]]:
105
90
  if obj is not None:
106
91
  return (False, f"void type cannot must represented by None, not {obj}")
@@ -125,8 +110,8 @@ __esi_mapping[cpp.VoidType] = VoidType
125
110
 
126
111
  class BitsType(ESIType):
127
112
 
128
- def __init__(self, id: str, width: int):
129
- self._init_from_cpp(cpp.BitsType(id, width))
113
+ def __init__(self, cpp_type: cpp.BitsType):
114
+ self.cpp_type: cpp.BitsType = cpp_type
130
115
 
131
116
  def is_valid(self, obj) -> Tuple[bool, Optional[str]]:
132
117
  if not isinstance(obj, (bytearray, bytes, list)):
@@ -158,8 +143,8 @@ __esi_mapping[cpp.BitsType] = BitsType
158
143
 
159
144
  class IntType(ESIType):
160
145
 
161
- def __init__(self, id: str, width: int):
162
- self._init_from_cpp(cpp.IntegerType(id, width))
146
+ def __init__(self, cpp_type: cpp.IntegerType):
147
+ self.cpp_type: cpp.IntegerType = cpp_type
163
148
 
164
149
  @property
165
150
  def bit_width(self) -> int:
@@ -168,9 +153,6 @@ class IntType(ESIType):
168
153
 
169
154
  class UIntType(IntType):
170
155
 
171
- def __init__(self, id: str, width: int):
172
- self._init_from_cpp(cpp.UIntType(id, width))
173
-
174
156
  def is_valid(self, obj) -> Tuple[bool, Optional[str]]:
175
157
  if not isinstance(obj, int):
176
158
  return (False, f"must be an int, not {type(obj)}")
@@ -194,9 +176,6 @@ __esi_mapping[cpp.UIntType] = UIntType
194
176
 
195
177
  class SIntType(IntType):
196
178
 
197
- def __init__(self, id: str, width: int):
198
- self._init_from_cpp(cpp.SIntType(id, width))
199
-
200
179
  def is_valid(self, obj) -> Tuple[bool, Optional[str]]:
201
180
  if not isinstance(obj, int):
202
181
  return (False, f"must be an int, not {type(obj)}")
@@ -224,16 +203,11 @@ __esi_mapping[cpp.SIntType] = SIntType
224
203
 
225
204
  class StructType(ESIType):
226
205
 
227
- def __init__(self, id: str, fields: List[Tuple[str, "ESIType"]]):
228
- # Convert Python ESIType fields to cpp Type fields
229
- cpp_fields = [(name, field_type.cpp_type) for name, field_type in fields]
230
- self._init_from_cpp(cpp.StructType(id, cpp_fields))
231
-
232
- def _init_from_cpp(self, cpp_type: cpp.StructType):
233
- """Initialize instance attributes from a C++ type object."""
234
- super()._init_from_cpp(cpp_type)
235
- # For wrap_cpp path, we need to convert C++ fields back to Python
236
- self.fields = [(name, _get_esi_type(ty)) for (name, ty) in cpp_type.fields]
206
+ def __init__(self, cpp_type: cpp.StructType):
207
+ self.cpp_type = cpp_type
208
+ self.fields: List[Tuple[str, ESIType]] = [
209
+ (name, _get_esi_type(ty)) for (name, ty) in cpp_type.fields
210
+ ]
237
211
 
238
212
  @property
239
213
  def bit_width(self) -> int:
@@ -278,12 +252,8 @@ __esi_mapping[cpp.StructType] = StructType
278
252
 
279
253
  class ArrayType(ESIType):
280
254
 
281
- def __init__(self, id: str, element_type: "ESIType", size: int):
282
- self._init_from_cpp(cpp.ArrayType(id, element_type.cpp_type, size))
283
-
284
- def _init_from_cpp(self, cpp_type: cpp.ArrayType):
285
- """Initialize instance attributes from a C++ type object."""
286
- super()._init_from_cpp(cpp_type)
255
+ def __init__(self, cpp_type: cpp.ArrayType):
256
+ self.cpp_type = cpp_type
287
257
  self.element_type = _get_esi_type(cpp_type.element)
288
258
  self.size = cpp_type.size
289
259
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: esiaccel
3
- Version: 0.1.5.dev67
3
+ Version: 0.1.5.dev71
4
4
  Summary: ESI accelerators runtime
5
5
  Author-email: John Demme <John.Demme@microsoft.com>
6
6
  License: ==============================================================================
@@ -1,18 +1,18 @@
1
- esiaccel/CosimBackend.dll,sha256=fgqt-B98or2gN5JGbeYVUXjCwaEKaP6C5_0SmkN-4QI,7150592
2
- esiaccel/CosimBackend.lib,sha256=8Fyulmz95ENysUTuD0iZJQvYbSmut971I2rTbIrFBzM,4991546
3
- esiaccel/ESICppRuntime.dll,sha256=sg3vyrI2KH1HyV5O3lyKBBNg91Ef2iPrkvgQMZ2uVIk,3721728
4
- esiaccel/ESICppRuntime.lib,sha256=6x7L5j_dXvWvnVQqtk7mYYWWECCf7dsiHYtx21_-hDA,14530116
5
- esiaccel/EsiCosimDpiServer.dll,sha256=ij6phU54C0hgF1Qi6lmDBz7B-PntO-LDovWMFd6Vkco,159744
6
- esiaccel/EsiCosimDpiServer.lib,sha256=MoMCezJdQ9qhdHtUicRVY7CrmYWfUwM2zK8flQxz5pY,604164
7
- esiaccel/MtiPli.dll,sha256=2z6x8HKZfHElygB8eBD8QBngGrNrURDw5FsxUBNABL4,14848
8
- esiaccel/MtiPli.lib,sha256=ZhsT1gjT0a2_jT_SKm_z_RHbFKAZ7kOLJ3U9dfCpjiY,14570
1
+ esiaccel/CosimBackend.dll,sha256=6i8cr_i9aBk_M5uDqeAR7gin0yuJfB-eLBtku-c_jWo,7152128
2
+ esiaccel/CosimBackend.lib,sha256=S1wD7i3dUYU1AmrlONIqggtOUbt9oxOGVmzZwXaPQnk,4992914
3
+ esiaccel/ESICppRuntime.dll,sha256=lzxARaXRQLKb6VGOjULuMZMlSWSFoT_-1xFsW3rJFCw,4068352
4
+ esiaccel/ESICppRuntime.lib,sha256=bWRxqgq0CYXlsMuJQZNetNhRQiw9JJgfM-NLiaMHHqA,15124618
5
+ esiaccel/EsiCosimDpiServer.dll,sha256=rFcPBt-2UvnIIQrBE6AfqmvDCzHJE2MBwQEVrvtNrh0,159744
6
+ esiaccel/EsiCosimDpiServer.lib,sha256=bYBigD0RtRRSEiDxf4_gvpasLjD8fcUmC0CjRgQiQ0s,604164
7
+ esiaccel/MtiPli.dll,sha256=3mGiklSpt-U5-gelGvXfosqcGljVgekRbZoNz40m2SY,14848
8
+ esiaccel/MtiPli.lib,sha256=X0PcXwheCUvBMgQ5BAawePxbXQSLNk5M1FFn6V56ydo,14570
9
9
  esiaccel/__init__.py,sha256=C0GLqCQuF5g5qTzmAkf_YAHmBV2XAyiJad3Qz7h8u1g,562
10
10
  esiaccel/accelerator.py,sha256=BcXPsUqcQV3YsVVyYbz9P6JnZLlcnuageFbJwID9_3s,3318
11
11
  esiaccel/codegen.py,sha256=uoYELtnIabVvgLeCABj-mWras0BvmSKABPH-cd9nDFk,6560
12
12
  esiaccel/esi-cosim.py,sha256=GwYfNh4aagypheAhGf0EIX6ojkLYKkc5OMlFR9pfXe8,14381
13
- esiaccel/esiCppAccel.cp312-win_amd64.pyd,sha256=iqbsgcGfmCBf3MUqZ-q7yCwPfzlMbDcKRYz-ipdYnVo,506880
14
- esiaccel/esiquery.exe,sha256=ZdkEuzLEWIo-p0fZKXR6oAosHA9yxo4aVff0FcFM9Xc,441856
15
- esiaccel/types.py,sha256=LtBYmpmSBlzbB-f_4XqcptmseqI6Q0ibnNWJT3G-GI8,18696
13
+ esiaccel/esiCppAccel.cp312-win_amd64.pyd,sha256=G0K6-DKgGIwNfgWTZk6IfQqiZCis7lycJ2fZS6DK930,467968
14
+ esiaccel/esiquery.exe,sha256=7W6bc5Us8HIaPcoN3ct9qcEP5I6ELMwrWapANViM0Pg,441856
15
+ esiaccel/types.py,sha256=xR7XbXQ8LqoiiniThYJhqphG813KBNi5d-yHm5bEXtg,17465
16
16
  esiaccel/utils.py,sha256=0_A8Jw3M7mjvjTHeV6u00tvRWxLnWKdFq_6NFKTgbVk,1296
17
17
  esiaccel/cmake/esiaccelConfig.cmake,sha256=u2aW99k1lEcmYTG1P3BTJqtmDrj53wUUaBz_jzw8kYY,565
18
18
  esiaccel/cosim/Cosim_DpiPkg.sv,sha256=9qGn1VyAVrzBP5At1thV6xrovg0WghICD01Zz9J221E,3458
@@ -22,7 +22,7 @@ esiaccel/cosim/driver.cpp,sha256=DrEKkSN7Y_Hu7wcaUulH5mbC2L4yB9xLClRMeRUpzHM,384
22
22
  esiaccel/cosim/driver.sv,sha256=ro-j9GM164A1W0MDPkqYfEn3TUKHSqVvgjO31fnloQI,1428
23
23
  esiaccel/include/esi/Accelerator.h,sha256=RhkZ2HeMZ0iHc5BkHdDWXoeg9J9lyPQciH5bWq5Qc_w,9772
24
24
  esiaccel/include/esi/CLI.h,sha256=Nn8tHn_xtEfkrD7USE2tao6ktYOJ6xcbnhZkS9-ox0A,2540
25
- esiaccel/include/esi/Common.h,sha256=pR2cqBEgKRYeJsHatjE7MC5WAw9SGbcO-JOyIGjIwF8,5503
25
+ esiaccel/include/esi/Common.h,sha256=IGJvAU72dlearXFbSmlXFFriy8aomirp7opEBjgewek,5775
26
26
  esiaccel/include/esi/Context.h,sha256=Tk_4nBDtTeVY62GfX4Cs_ZMIQstjSgrWHddN_PKANEA,2396
27
27
  esiaccel/include/esi/Design.h,sha256=mU8OwpCYijiWSdDq17l45LMzZxBca93nosudWCXNHfQ,4922
28
28
  esiaccel/include/esi/Engines.h,sha256=bbGbhXjYMpIpXh_DR0OS57zyGQUIDXh_S7xHX3su0Y0,4831
@@ -30,14 +30,14 @@ esiaccel/include/esi/Logging.h,sha256=sHqMcpp0lNIHkIEyvSm-BBWx4zXXh6NOATCgZpgzYI
30
30
  esiaccel/include/esi/Manifest.h,sha256=j3v9UA0ogtJQBlv6k5s4j_3sCsq-gwF9btVg5dKTBlg,2244
31
31
  esiaccel/include/esi/Ports.h,sha256=T2WbPBViUSvFbO5Jjxlcp_eGq9jMitguvNnz3O0564U,10543
32
32
  esiaccel/include/esi/Services.h,sha256=H7Iq3F3LivSZHblFJmrC8RAU_MftfKAPDtyGBfJ2nP4,14815
33
- esiaccel/include/esi/Types.h,sha256=P4ExO8-zvm7qQocUmkM_ATIvamxtDZ8JT2ToLkFo1dk,5483
33
+ esiaccel/include/esi/Types.h,sha256=ZfPCyeVSHIZ7_jwBl1SFd0XrkqFDEk3LvCcBKnGvjF4,8327
34
34
  esiaccel/include/esi/Utils.h,sha256=KPd75GajIFeTBVJocXBjwsJqhbZg-ShWZCIe3oQdBss,3061
35
35
  esiaccel/include/esi/backends/Cosim.h,sha256=s7vYd0ra6m1nvk-n37MjvBoGVI-CCUKBt0DU4PKlaHM,2838
36
36
  esiaccel/include/esi/backends/RpcServer.h,sha256=WMwnhwU2qnrcglGNeiKg9QQHpkDx1QE1JydKYDK4jqE,1856
37
37
  esiaccel/include/esi/backends/Trace.h,sha256=kx4wwLH3a0ndmRUdaDyYGZ1SP83zlpFrk30Nw8ZrJJA,3286
38
- esiaccel-0.1.5.dev67.dist-info/licenses/LICENSE,sha256=vtnVnB8_lN1yPYcA5MeT56R8UsQtBhyzZLBvu_KMf7I,13468
39
- esiaccel-0.1.5.dev67.dist-info/METADATA,sha256=J7tMwe7y1xSpcVIBs0dT8J26XXecyf4cmVCLiz2HInE,16147
40
- esiaccel-0.1.5.dev67.dist-info/WHEEL,sha256=8UP9x9puWI0P1V_d7K2oMTBqfeLNm21CTzZ_Ptr0NXU,101
41
- esiaccel-0.1.5.dev67.dist-info/entry_points.txt,sha256=_CuNLV0fyTURxRREFwpzGycifZW_-7-MyuJNEwKK9J8,137
42
- esiaccel-0.1.5.dev67.dist-info/top_level.txt,sha256=fYWTWMDK4PDu4ePQ9NtcFHas2k8-d1kWhTs2avPpgB4,9
43
- esiaccel-0.1.5.dev67.dist-info/RECORD,,
38
+ esiaccel-0.1.5.dev71.dist-info/licenses/LICENSE,sha256=vtnVnB8_lN1yPYcA5MeT56R8UsQtBhyzZLBvu_KMf7I,13468
39
+ esiaccel-0.1.5.dev71.dist-info/METADATA,sha256=k7H3Z3P-PQ2EMvZlMYHPhNocpRQ_m-y_TG8nFW_tLqg,16147
40
+ esiaccel-0.1.5.dev71.dist-info/WHEEL,sha256=8UP9x9puWI0P1V_d7K2oMTBqfeLNm21CTzZ_Ptr0NXU,101
41
+ esiaccel-0.1.5.dev71.dist-info/entry_points.txt,sha256=_CuNLV0fyTURxRREFwpzGycifZW_-7-MyuJNEwKK9J8,137
42
+ esiaccel-0.1.5.dev71.dist-info/top_level.txt,sha256=fYWTWMDK4PDu4ePQ9NtcFHas2k8-d1kWhTs2avPpgB4,9
43
+ esiaccel-0.1.5.dev71.dist-info/RECORD,,