esiaccel 0.1.5.dev205__cp312-cp312-win_amd64.whl → 0.1.5.dev219__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
Binary file
Binary file
esiaccel/MtiPli.dll CHANGED
Binary file
esiaccel/cosim/driver.cpp CHANGED
@@ -30,7 +30,7 @@
30
30
  #include CONCAT3(V,TOP_MODULE,.h)
31
31
  // clang-format on
32
32
 
33
- #include "verilated_vcd_c.h"
33
+ #include "verilated_fst_c.h"
34
34
 
35
35
  #include "signal.h"
36
36
  #include <iostream>
@@ -64,12 +64,12 @@ int main(int argc, char **argv) {
64
64
  }
65
65
 
66
66
  #ifdef TRACE
67
- VerilatedVcdC *tfp = nullptr;
67
+ VerilatedFstC *tfp = nullptr;
68
68
  #endif
69
69
 
70
70
  if (waveformFile) {
71
71
  #ifdef TRACE
72
- tfp = new VerilatedVcdC();
72
+ tfp = new VerilatedFstC();
73
73
  Verilated::traceEverOn(true);
74
74
  dut.trace(tfp, 99); // Trace 99 levels of hierarchy
75
75
  tfp->open(waveformFile);
@@ -95,11 +95,11 @@ int main(int argc, char **argv) {
95
95
  // Run for a few cycles with reset held.
96
96
  for (timeStamp = 0; timeStamp < 8 && !Verilated::gotFinish(); timeStamp++) {
97
97
  dut.eval();
98
- dut.clk = !dut.clk;
99
98
  #ifdef TRACE
100
99
  if (tfp)
101
100
  tfp->dump(timeStamp);
102
101
  #endif
102
+ dut.clk = !dut.clk;
103
103
  }
104
104
 
105
105
  // Take simulation out of reset.
@@ -108,12 +108,12 @@ int main(int argc, char **argv) {
108
108
  // Run for the specified number of cycles out of reset.
109
109
  for (; !Verilated::gotFinish() && !stopSimulation; timeStamp++) {
110
110
  dut.eval();
111
- dut.clk = !dut.clk;
112
-
113
111
  #ifdef TRACE
114
112
  if (tfp)
115
113
  tfp->dump(timeStamp);
116
114
  #endif
115
+ dut.clk = !dut.clk;
116
+
117
117
  if (debugPeriod)
118
118
  std::this_thread::sleep_for(std::chrono::milliseconds(debugPeriod));
119
119
  }
@@ -9,7 +9,8 @@ import socket
9
9
  import subprocess
10
10
  import time
11
11
  from pathlib import Path
12
- from typing import Dict, List
12
+ from typing import Dict, List, Optional, Callable, IO
13
+ import threading
13
14
 
14
15
  _thisdir = Path(__file__).parent
15
16
  CosimCollateralDir = _thisdir
@@ -77,9 +78,13 @@ class SourceFiles:
77
78
 
78
79
  class SimProcess:
79
80
 
80
- def __init__(self, proc: subprocess.Popen, port: int):
81
+ def __init__(self,
82
+ proc: subprocess.Popen,
83
+ port: int,
84
+ threads: Optional[List[threading.Thread]] = None):
81
85
  self.proc = proc
82
86
  self.port = port
87
+ self.threads: List[threading.Thread] = threads or []
83
88
 
84
89
  def force_stop(self):
85
90
  """Make sure to stop the simulation no matter what."""
@@ -92,6 +97,10 @@ class SimProcess:
92
97
  # If the simulation doesn't exit of its own free will, kill it.
93
98
  self.proc.kill()
94
99
 
100
+ # Join reader threads (they should exit once pipes are closed).
101
+ for t in self.threads:
102
+ t.join()
103
+
95
104
 
96
105
  class Simulator:
97
106
 
@@ -100,11 +109,72 @@ class Simulator:
100
109
  # broken behavior by overriding this.
101
110
  UsesStderr = True
102
111
 
103
- def __init__(self, sources: SourceFiles, run_dir: Path, debug: bool):
112
+ def __init__(self,
113
+ sources: SourceFiles,
114
+ run_dir: Path,
115
+ debug: bool,
116
+ run_stdout_callback: Optional[Callable[[str], None]] = None,
117
+ run_stderr_callback: Optional[Callable[[str], None]] = None,
118
+ compile_stdout_callback: Optional[Callable[[str], None]] = None,
119
+ compile_stderr_callback: Optional[Callable[[str], None]] = None,
120
+ make_default_logs: bool = True):
121
+ """Simulator base class.
122
+
123
+ Optional sinks can be provided for capturing output. If not provided,
124
+ the simulator will write to log files in `run_dir`.
125
+
126
+ Args:
127
+ sources: SourceFiles describing RTL/DPI inputs.
128
+ run_dir: Directory where build/run artifacts are placed.
129
+ debug: Enable cosim debug mode.
130
+ run_stdout_callback: Line-based callback for runtime stdout.
131
+ run_stderr_callback: Line-based callback for runtime stderr.
132
+ compile_stdout_callback: Line-based callback for compile stdout.
133
+ compile_stderr_callback: Line-based callback for compile stderr.
134
+ make_default_logs: If True and corresponding callback is not supplied,
135
+ create log file and emit via internally-created callback.
136
+ """
104
137
  self.sources = sources
105
138
  self.run_dir = run_dir
106
139
  self.debug = debug
107
140
 
141
+ # Unified list of any log file handles we opened.
142
+ self._default_files: List[IO[str]] = []
143
+
144
+ def _ensure_default(cb: Optional[Callable[[str], None]], filename: str):
145
+ """Return (callback, file_handle_or_None) with optional file creation.
146
+
147
+ Behavior:
148
+ * If a callback is provided, return it unchanged with no file.
149
+ * If no callback and make_default_logs is False, return (None, None).
150
+ * If no callback and make_default_logs is True, create a log file and
151
+ return a writer callback plus the opened file handle.
152
+ """
153
+ if cb is not None:
154
+ return cb, None
155
+ if not make_default_logs:
156
+ return None, None
157
+ p = self.run_dir / filename
158
+ p.parent.mkdir(parents=True, exist_ok=True)
159
+ logf = p.open("w+")
160
+ self._default_files.append(logf)
161
+
162
+ def _writer(line: str, _lf=logf):
163
+ _lf.write(line + "\n")
164
+ _lf.flush()
165
+
166
+ return _writer, logf
167
+
168
+ # Initialize all four (compile/run stdout/stderr) uniformly.
169
+ self._compile_stdout_cb, self._compile_stdout_log = _ensure_default(
170
+ compile_stdout_callback, 'compile_stdout.log')
171
+ self._compile_stderr_cb, self._compile_stderr_log = _ensure_default(
172
+ compile_stderr_callback, 'compile_stderr.log')
173
+ self._run_stdout_cb, self._run_stdout_log = _ensure_default(
174
+ run_stdout_callback, 'sim_stdout.log')
175
+ self._run_stderr_cb, self._run_stderr_log = _ensure_default(
176
+ run_stderr_callback, 'sim_stderr.log')
177
+
108
178
  @staticmethod
109
179
  def get_env() -> Dict[str, str]:
110
180
  """Get the environment variables to locate shared objects."""
@@ -123,23 +193,29 @@ class Simulator:
123
193
  def compile(self) -> int:
124
194
  cmds = self.compile_commands()
125
195
  self.run_dir.mkdir(parents=True, exist_ok=True)
126
- with (self.run_dir / "compile_stdout.log").open("w") as stdout, (
127
- self.run_dir / "compile_stderr.log").open("w") as stderr:
128
- for cmd in cmds:
129
- stderr.write(" ".join(cmd) + "\n")
130
- cp = subprocess.run(cmd,
131
- env=Simulator.get_env(),
132
- capture_output=True,
133
- text=True)
134
- stdout.write(cp.stdout)
135
- stderr.write(cp.stderr)
136
- if cp.returncode != 0:
137
- print("====== Compilation failure:")
138
- if self.UsesStderr:
139
- print(cp.stderr)
140
- else:
141
- print(cp.stdout)
142
- return cp.returncode
196
+ for cmd in cmds:
197
+ ret = self._start_process_with_callbacks(
198
+ cmd,
199
+ env=Simulator.get_env(),
200
+ cwd=None,
201
+ stdout_cb=self._compile_stdout_cb,
202
+ stderr_cb=self._compile_stderr_cb,
203
+ wait=True)
204
+ if isinstance(ret, int) and ret != 0:
205
+ print("====== Compilation failure")
206
+
207
+ # If we have the default file loggers, print the compilation logs to
208
+ # console. Else, assume that the user has already captured them.
209
+ if self.UsesStderr:
210
+ if self._compile_stderr_log is not None:
211
+ self._compile_stderr_log.seek(0)
212
+ print(self._compile_stderr_log.read())
213
+ else:
214
+ if self._compile_stdout_log is not None:
215
+ self._compile_stdout_log.seek(0)
216
+ print(self._compile_stdout_log.read())
217
+
218
+ return ret
143
219
  return 0
144
220
 
145
221
  def run_command(self, gui: bool) -> List[str]:
@@ -148,11 +224,12 @@ class Simulator:
148
224
 
149
225
  def run_proc(self, gui: bool = False) -> SimProcess:
150
226
  """Run the simulation process. Returns the Popen object and the port which
151
- the simulation is listening on."""
152
- # Open log files
227
+ the simulation is listening on.
228
+
229
+ If user-provided stdout/stderr sinks were supplied in the constructor,
230
+ they are used. Otherwise, log files are created in `run_dir`.
231
+ """
153
232
  self.run_dir.mkdir(parents=True, exist_ok=True)
154
- simStdout = open(self.run_dir / "sim_stdout.log", "w")
155
- simStderr = open(self.run_dir / "sim_stderr.log", "w")
156
233
 
157
234
  # Erase the config file if it exists. We don't want to read
158
235
  # an old config.
@@ -168,19 +245,19 @@ class Simulator:
168
245
  # Slow the simulation down to one tick per millisecond.
169
246
  simEnv["DEBUG_PERIOD"] = "1"
170
247
  rcmd = self.run_command(gui)
171
- simProc = subprocess.Popen(self.run_command(gui),
172
- stdout=simStdout,
173
- stderr=simStderr,
174
- env=simEnv,
175
- cwd=self.run_dir,
176
- preexec_fn=os.setsid)
177
- simStderr.close()
178
- simStdout.close()
248
+ # Start process with asynchronous output capture.
249
+ proc, threads = self._start_process_with_callbacks(
250
+ rcmd,
251
+ env=simEnv,
252
+ cwd=self.run_dir,
253
+ stdout_cb=self._run_stdout_cb,
254
+ stderr_cb=self._run_stderr_cb,
255
+ wait=False)
179
256
 
180
257
  # Get the port which the simulation RPC selected.
181
258
  checkCount = 0
182
259
  while (not os.path.exists(portFileName)) and \
183
- simProc.poll() is None:
260
+ proc.poll() is None:
184
261
  time.sleep(0.1)
185
262
  checkCount += 1
186
263
  if checkCount > 500 and not gui:
@@ -200,10 +277,57 @@ class Simulator:
200
277
  checkCount += 1
201
278
  if checkCount > 200:
202
279
  raise Exception(f"Cosim RPC port ({port}) never opened")
203
- if simProc.poll() is not None:
280
+ if proc.poll() is not None:
204
281
  raise Exception("Simulation exited early")
205
282
  time.sleep(0.05)
206
- return SimProcess(proc=simProc, port=port)
283
+ return SimProcess(proc=proc, port=port, threads=threads)
284
+
285
+ def _start_process_with_callbacks(
286
+ self, cmd: List[str], env: Optional[Dict[str, str]], cwd: Optional[Path],
287
+ stdout_cb: Optional[Callable[[str],
288
+ None]], stderr_cb: Optional[Callable[[str],
289
+ None]],
290
+ wait: bool) -> int | tuple[subprocess.Popen, List[threading.Thread]]:
291
+ """Start a subprocess and stream its stdout/stderr to callbacks.
292
+
293
+ If wait is True, blocks until process completes and returns its exit code.
294
+ If wait is False, returns the Popen object (threads keep streaming).
295
+ """
296
+ proc = subprocess.Popen(cmd,
297
+ stdout=subprocess.PIPE,
298
+ stderr=subprocess.PIPE,
299
+ env=env,
300
+ cwd=cwd,
301
+ text=True,
302
+ preexec_fn=os.setsid)
303
+
304
+ def _reader(pipe, cb):
305
+ if pipe is None:
306
+ return
307
+ for raw in pipe:
308
+ if raw.endswith('\n'):
309
+ raw = raw[:-1]
310
+ if cb:
311
+ try:
312
+ cb(raw)
313
+ except Exception as e:
314
+ print(f"Exception in simulator output callback: {e}")
315
+
316
+ threads: List[threading.Thread] = [
317
+ threading.Thread(target=_reader,
318
+ args=(proc.stdout, stdout_cb),
319
+ daemon=True),
320
+ threading.Thread(target=_reader,
321
+ args=(proc.stderr, stderr_cb),
322
+ daemon=True),
323
+ ]
324
+ for t in threads:
325
+ t.start()
326
+ if wait:
327
+ for t in threads:
328
+ t.join()
329
+ return proc.wait()
330
+ return proc, threads
207
331
 
208
332
  def run(self,
209
333
  inner_command: str,
@@ -4,7 +4,7 @@
4
4
 
5
5
  import os
6
6
  from pathlib import Path
7
- from typing import List
7
+ from typing import List, Optional, Callable
8
8
 
9
9
  from .simulator import CosimCollateralDir, Simulator, SourceFiles
10
10
 
@@ -14,9 +14,23 @@ class Verilator(Simulator):
14
14
 
15
15
  DefaultDriver = CosimCollateralDir / "driver.cpp"
16
16
 
17
- def __init__(self, sources: SourceFiles, run_dir: Path, debug: bool):
18
- super().__init__(sources, run_dir, debug)
19
-
17
+ def __init__(self,
18
+ sources: SourceFiles,
19
+ run_dir: Path,
20
+ debug: bool,
21
+ run_stdout_callback: Optional[Callable[[str], None]] = None,
22
+ run_stderr_callback: Optional[Callable[[str], None]] = None,
23
+ compile_stdout_callback: Optional[Callable[[str], None]] = None,
24
+ compile_stderr_callback: Optional[Callable[[str], None]] = None,
25
+ make_default_logs: bool = True):
26
+ super().__init__(sources=sources,
27
+ run_dir=run_dir,
28
+ debug=debug,
29
+ run_stdout_callback=run_stdout_callback,
30
+ run_stderr_callback=run_stderr_callback,
31
+ compile_stdout_callback=compile_stdout_callback,
32
+ compile_stderr_callback=compile_stderr_callback,
33
+ make_default_logs=make_default_logs)
20
34
  self.verilator = "verilator"
21
35
  if "VERILATOR_PATH" in os.environ:
22
36
  self.verilator = os.environ["VERILATOR_PATH"]
@@ -36,6 +50,7 @@ class Verilator(Simulator):
36
50
  "-j",
37
51
  "0",
38
52
  "--output-split",
53
+ "--autoflush",
39
54
  "--assert",
40
55
  str(Verilator.DefaultDriver),
41
56
  ]
@@ -44,7 +59,8 @@ class Verilator(Simulator):
44
59
  ]
45
60
  if self.debug:
46
61
  cmd += [
47
- "--trace", "--trace-params", "--trace-structs", "--trace-underscore"
62
+ "--trace-fst", "--trace-params", "--trace-structs",
63
+ "--trace-underscore"
48
64
  ]
49
65
  cflags.append("-DTRACE")
50
66
  if len(cflags) > 0:
Binary file
esiaccel/esiquery.exe CHANGED
Binary file
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: esiaccel
3
- Version: 0.1.5.dev205
3
+ Version: 0.1.5.dev219
4
4
  Summary: ESI accelerators runtime
5
5
  Author-email: John Demme <John.Demme@microsoft.com>
6
6
  License: ==============================================================================
@@ -1,28 +1,28 @@
1
- esiaccel/CosimBackend.dll,sha256=UiMiWukPyecx9fgJMz7scGA862JPD_ApmTLaJAWElJE,7152128
1
+ esiaccel/CosimBackend.dll,sha256=cANubAxsaG3GoSz3tJdaXXY3CwiLwGnD49l7ApTnIh4,7152128
2
2
  esiaccel/CosimBackend.lib,sha256=5tnhX-BFxzlslXNsblCWXjY583sDW4lFLGNch7hzWZw,4992924
3
- esiaccel/ESICppRuntime.dll,sha256=IN1gagR1JvgXj376t5Plg3Su3Lou9FpsEqQq6_T7KcA,4078592
3
+ esiaccel/ESICppRuntime.dll,sha256=s4vPL6_NQrvWUs9XMOfxhiBs1G4iPETULL1guvDlfoM,4078592
4
4
  esiaccel/ESICppRuntime.lib,sha256=tltAogZ3c0ryYHirOXz_qltr5aNdoquZ-Q4yVqim3FY,15154004
5
- esiaccel/EsiCosimDpiServer.dll,sha256=412hqK72k7wg6rhS6d9AqoKE10n-KkrkLkHkNJ-9h_I,159744
5
+ esiaccel/EsiCosimDpiServer.dll,sha256=Z7IXzih80HZN_9IzM9uq8RydnB3M92mCMn6NIahl2tU,159744
6
6
  esiaccel/EsiCosimDpiServer.lib,sha256=zn3bIX10e2HQtwZOi1xpqeNfy4AdZm8Jx634HVTVQ8w,604164
7
- esiaccel/MtiPli.dll,sha256=44O2jtZ7zDXt-Mo0L2cXFhe_sEU-KDICrmw-TV3IRLA,14848
7
+ esiaccel/MtiPli.dll,sha256=u0qCm45umvX6o42Y7rDonOYMJfMW0VV4K99pMuxzIKQ,14848
8
8
  esiaccel/MtiPli.lib,sha256=juJ2Asmv6cnozNPpXvGeKkieYFcXK8MOYmDQZz-dAy4,14570
9
9
  esiaccel/__init__.py,sha256=65xXWHwJwRePsyhWk837NpzuN0qsNhoAX29TOiSYKGc,905
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=P7n3SBgKPnXynwghY5zK1FmpqZkbC_YxfVIvNNQNl6Q,3817
13
- esiaccel/esiCppAccel.cp312-win_amd64.pyd,sha256=JKn0jtlFgfSGsvgkEkn9WK8D9q7_1hbkPpp0WzzN9cs,510976
14
- esiaccel/esiquery.exe,sha256=zvoo-VYY5Uw5GbX6PlrfT82dR0NevTOQEhhR52TUXwI,441856
13
+ esiaccel/esiCppAccel.cp312-win_amd64.pyd,sha256=KEdQXKdir6NZ_xmvhn-5PLi7K205FXl_LI-WgrvEBRQ,510976
14
+ esiaccel/esiquery.exe,sha256=uIflsoLud7pPhpnom5IKb5Nf3DMF1yFZ5gFj8h2L-hY,441856
15
15
  esiaccel/types.py,sha256=LFLzUCvtYF6FLsmKet6eJTMq2ija2Z5kxd5Ks6tkS4U,19044
16
16
  esiaccel/utils.py,sha256=q-8fmgJ9tUvmBsIvqZiZ7u845IJhOjvjYTQLhhrNYl0,1515
17
17
  esiaccel/cmake/esiaccelConfig.cmake,sha256=u2aW99k1lEcmYTG1P3BTJqtmDrj53wUUaBz_jzw8kYY,565
18
18
  esiaccel/cosim/Cosim_DpiPkg.sv,sha256=9qGn1VyAVrzBP5At1thV6xrovg0WghICD01Zz9J221E,3458
19
19
  esiaccel/cosim/Cosim_Endpoint.sv,sha256=2F7UQYWavUlWx7Iqi_6iawn5geZRPG96H8rDBBDRAQ0,8391
20
20
  esiaccel/cosim/Cosim_Manifest.sv,sha256=vl9b6XieEkP880IBw1ferekBnDJwFanZZggJJGertXM,1123
21
- esiaccel/cosim/driver.cpp,sha256=DrEKkSN7Y_Hu7wcaUulH5mbC2L4yB9xLClRMeRUpzHM,3842
21
+ esiaccel/cosim/driver.cpp,sha256=Lvmo03pzzhoswdxAtdXAm-oU6UkfTyl1LgoCpyDzLhY,3842
22
22
  esiaccel/cosim/driver.sv,sha256=ro-j9GM164A1W0MDPkqYfEn3TUKHSqVvgjO31fnloQI,1428
23
23
  esiaccel/cosim/questa.py,sha256=d6PnjzRxQpu47Zpez6hmzTc_aMQdrmQRSmnpOXSPFVU,2386
24
- esiaccel/cosim/simulator.py,sha256=VZnCxRW6QzCMVhkkq0VC7tJ-kIxXatz30P5dJ5zzCKw,8081
25
- esiaccel/cosim/verilator.py,sha256=BwCJWLlMOPD_JZyjOoLGUW48-IIndtbj55D2kRvL1l4,1834
24
+ esiaccel/cosim/simulator.py,sha256=aWhEjuAwdzgAIRUsW9yC2ACBIbdxbmMhJSGnH-OP_n0,12975
25
+ esiaccel/cosim/verilator.py,sha256=WPZT14EkjtF1214P2noZyQC58GR7021xWaQ5oQwVcIg,2696
26
26
  esiaccel/include/esi/Accelerator.h,sha256=RhkZ2HeMZ0iHc5BkHdDWXoeg9J9lyPQciH5bWq5Qc_w,9772
27
27
  esiaccel/include/esi/CLI.h,sha256=Nn8tHn_xtEfkrD7USE2tao6ktYOJ6xcbnhZkS9-ox0A,2540
28
28
  esiaccel/include/esi/Common.h,sha256=IGJvAU72dlearXFbSmlXFFriy8aomirp7opEBjgewek,5775
@@ -38,9 +38,9 @@ esiaccel/include/esi/Utils.h,sha256=KPd75GajIFeTBVJocXBjwsJqhbZg-ShWZCIe3oQdBss,
38
38
  esiaccel/include/esi/backends/Cosim.h,sha256=s7vYd0ra6m1nvk-n37MjvBoGVI-CCUKBt0DU4PKlaHM,2838
39
39
  esiaccel/include/esi/backends/RpcServer.h,sha256=WMwnhwU2qnrcglGNeiKg9QQHpkDx1QE1JydKYDK4jqE,1856
40
40
  esiaccel/include/esi/backends/Trace.h,sha256=kx4wwLH3a0ndmRUdaDyYGZ1SP83zlpFrk30Nw8ZrJJA,3286
41
- esiaccel-0.1.5.dev205.dist-info/licenses/LICENSE,sha256=vtnVnB8_lN1yPYcA5MeT56R8UsQtBhyzZLBvu_KMf7I,13468
42
- esiaccel-0.1.5.dev205.dist-info/METADATA,sha256=tXBuqKC4EqMHtaA7m4pFDR7kDgXdyoon8kcLLW4xG6I,16148
43
- esiaccel-0.1.5.dev205.dist-info/WHEEL,sha256=8UP9x9puWI0P1V_d7K2oMTBqfeLNm21CTzZ_Ptr0NXU,101
44
- esiaccel-0.1.5.dev205.dist-info/entry_points.txt,sha256=_CuNLV0fyTURxRREFwpzGycifZW_-7-MyuJNEwKK9J8,137
45
- esiaccel-0.1.5.dev205.dist-info/top_level.txt,sha256=fYWTWMDK4PDu4ePQ9NtcFHas2k8-d1kWhTs2avPpgB4,9
46
- esiaccel-0.1.5.dev205.dist-info/RECORD,,
41
+ esiaccel-0.1.5.dev219.dist-info/licenses/LICENSE,sha256=vtnVnB8_lN1yPYcA5MeT56R8UsQtBhyzZLBvu_KMf7I,13468
42
+ esiaccel-0.1.5.dev219.dist-info/METADATA,sha256=f-XqGqrEMBo0ogpjlkVr9oUcYU2Yafo8diGbgjK4ePM,16148
43
+ esiaccel-0.1.5.dev219.dist-info/WHEEL,sha256=8UP9x9puWI0P1V_d7K2oMTBqfeLNm21CTzZ_Ptr0NXU,101
44
+ esiaccel-0.1.5.dev219.dist-info/entry_points.txt,sha256=_CuNLV0fyTURxRREFwpzGycifZW_-7-MyuJNEwKK9J8,137
45
+ esiaccel-0.1.5.dev219.dist-info/top_level.txt,sha256=fYWTWMDK4PDu4ePQ9NtcFHas2k8-d1kWhTs2avPpgB4,9
46
+ esiaccel-0.1.5.dev219.dist-info/RECORD,,