PyIBIS-AMI 9.2.0__tar.gz → 9.3.1__tar.gz

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 (66) hide show
  1. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/MANIFEST.in +1 -0
  2. {pyibis_ami-9.2.0/src/pyibis_ami.egg-info → pyibis_ami-9.3.1}/PKG-INFO +1 -1
  3. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/pyproject.toml +8 -1
  4. pyibis_ami-9.3.1/requirements.txt +500 -0
  5. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1/src/pyibis_ami.egg-info}/PKG-INFO +1 -1
  6. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibis_ami.egg-info/SOURCES.txt +1 -0
  7. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/ami/config.py +4 -5
  8. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/ami/model.py +12 -12
  9. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/ami/parameter.py +68 -1
  10. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/ami/parser.py +155 -21
  11. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/ami/reserved_parameter_names.py +1 -1
  12. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/ibis/file.py +29 -29
  13. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/ibis/model.py +5 -5
  14. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/ibis/parser.py +5 -4
  15. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/testing/ami_test_config.py +3 -3
  16. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/testing/ami_tests.py +13 -12
  17. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/testing/ami_tests_helpers.py +2 -2
  18. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/testing/ibis_file_tests.py +3 -3
  19. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/testing/test_defs.py +3 -2
  20. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/testing/test_models.py +0 -0
  21. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/testing/util.py +1 -1
  22. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/tools/run_notebook.py +5 -7
  23. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/util/plot.py +4 -4
  24. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/util/reportlab.py +2 -2
  25. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/LICENSE +0 -0
  26. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/README.md +0 -0
  27. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/docs/source/ami.rst +0 -0
  28. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/docs/source/conf.py +0 -0
  29. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/docs/source/ibis.rst +0 -0
  30. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/docs/source/index.rst +0 -0
  31. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/docs/source/install.rst +0 -0
  32. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/docs/source/modules.rst +0 -0
  33. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/docs/source/tools.rst +0 -0
  34. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/examples/all_taps.run +0 -0
  35. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/examples/bandwidth.run +0 -0
  36. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/examples/dummy.em +0 -0
  37. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/examples/examples.md +0 -0
  38. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/examples/freq_resp.em +0 -0
  39. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/examples/impulse.em +0 -0
  40. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/examples/impulse_response_8ma.txt +0 -0
  41. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/examples/mode.run +0 -0
  42. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/examples/stratix4_ami_tx_runs/all_taps.run +0 -0
  43. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/examples/stratix4_ami_tx_runs/test_results.xml +0 -0
  44. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/examples/test_results/test_results.xsl +0 -0
  45. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/setup.cfg +0 -0
  46. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibis_ami.egg-info/dependency_links.txt +0 -0
  47. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibis_ami.egg-info/entry_points.txt +0 -0
  48. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibis_ami.egg-info/requires.txt +0 -0
  49. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibis_ami.egg-info/top_level.txt +0 -0
  50. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/IBIS_AMI_Checker.ipynb +0 -0
  51. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/IBIS_AMI_Tester.ipynb +0 -0
  52. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/__init__.py +0 -0
  53. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/__main__.py +0 -0
  54. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/ami/__init__.py +0 -0
  55. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/ami/generic.ami.em +0 -0
  56. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/ami/generic.ibs.em +0 -0
  57. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/common.py +0 -0
  58. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/ibis/__init__.py +0 -0
  59. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/testing/__init__.py +0 -0
  60. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/tools/__init__.py +0 -0
  61. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/tools/run_tests.py +0 -0
  62. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/tools/test_results.xsl +0 -0
  63. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/util/ami.py +0 -0
  64. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/src/pyibisami/util/misc.py +0 -0
  65. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/tests/test_ami_test_config.py +0 -0
  66. {pyibis_ami-9.2.0 → pyibis_ami-9.3.1}/tests/test_run_tests.py +0 -0
@@ -1,5 +1,6 @@
1
1
  include README.md
2
2
  include LICENSE
3
+ include requirements.txt
3
4
  include src/pyibisami/tools/test_results.xsl
4
5
  include src/pyibisami/ami/generic.ami.em
5
6
  include src/pyibisami/ami/generic.ibs.em
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyibis-ami
3
- Version: 9.2.0
3
+ Version: 9.3.1
4
4
  Summary: Facilitates working directly with IBIS-AMI DLLs from the Python command prompt.
5
5
  Author-email: David Banas <capn.freako@gmail.com>
6
6
  Project-URL: Documentation, https://pyibis-ami.readthedocs.io/en/latest/
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
  [project]
6
6
  name = "pyibis-ami"
7
7
  description = "Facilitates working directly with IBIS-AMI DLLs from the Python command prompt."
8
- version = "9.2.0"
8
+ version = "9.3.1"
9
9
  authors = [ {name = "David Banas", email = "capn.freako@gmail.com"}
10
10
  ]
11
11
  readme = "README.md"
@@ -96,6 +96,13 @@ ignore = [
96
96
  exclude = [
97
97
  "*.ipynb"
98
98
  ]
99
+ lint.ignore = [
100
+ "UP045", # "Optional[X] -> "X | None"
101
+ "I001", # import formatting
102
+ "BLE001", # blind exceptions
103
+ "UP031", # format specifiers instead of '%'
104
+ "RUF022", # unsorted all
105
+ ]
99
106
 
100
107
  [[tool.mypy.overrides]]
101
108
  module = [
@@ -0,0 +1,500 @@
1
+ # This file was autogenerated by uv via the following command:
2
+ # uv export --package pyibis-ami --no-dev --no-hashes --no-emit-project -o requirements.txt
3
+ aiohappyeyeballs==2.7.1 ; python_full_version == '3.12.*'
4
+ # via aiohttp
5
+ aiohttp==3.14.3 ; python_full_version == '3.12.*'
6
+ # via papermill
7
+ aiosignal==1.4.0 ; python_full_version == '3.12.*'
8
+ # via aiohttp
9
+ anyio==4.14.2
10
+ # via
11
+ # httpx
12
+ # jupyter-server
13
+ appnope==0.1.4 ; sys_platform == 'darwin'
14
+ # via ipykernel
15
+ argon2-cffi==25.1.0
16
+ # via jupyter-server
17
+ argon2-cffi-bindings==25.1.0
18
+ # via argon2-cffi
19
+ arrow==1.4.0
20
+ # via isoduration
21
+ asttokens==3.0.2
22
+ # via stack-data
23
+ async-lru==2.3.0
24
+ # via jupyterlab
25
+ attrs==26.1.0
26
+ # via
27
+ # aiohttp
28
+ # jsonschema
29
+ # referencing
30
+ babel==2.18.0
31
+ # via jupyterlab-server
32
+ beautifulsoup4==4.15.0
33
+ # via nbconvert
34
+ bleach==6.4.0
35
+ # via nbconvert
36
+ certifi==2026.6.17
37
+ # via
38
+ # httpcore
39
+ # httpx
40
+ # requests
41
+ cffi==2.1.0
42
+ # via
43
+ # argon2-cffi-bindings
44
+ # pyzmq
45
+ chaco==6.1.1
46
+ # via pyibis-ami
47
+ charset-normalizer==3.4.9
48
+ # via
49
+ # reportlab
50
+ # requests
51
+ click==8.4.2
52
+ # via
53
+ # papermill
54
+ # pyibis-ami
55
+ colorama==0.4.6 ; sys_platform == 'win32'
56
+ # via
57
+ # click
58
+ # ipython
59
+ # tqdm
60
+ comm==0.2.3
61
+ # via
62
+ # ipykernel
63
+ # ipywidgets
64
+ contourpy==1.3.2 ; python_full_version < '3.11'
65
+ # via matplotlib
66
+ contourpy==1.3.3 ; python_full_version >= '3.11'
67
+ # via matplotlib
68
+ cycler==0.12.1
69
+ # via matplotlib
70
+ debugpy==1.8.21
71
+ # via ipykernel
72
+ decorator==5.3.1
73
+ # via ipython
74
+ defusedxml==0.7.1
75
+ # via nbconvert
76
+ empy==4.2.1
77
+ # via pyibis-ami
78
+ enable==6.1.0
79
+ # via chaco
80
+ entrypoints==0.4
81
+ # via
82
+ # nbconvert
83
+ # papermill
84
+ exceptiongroup==1.3.1 ; python_full_version < '3.11'
85
+ # via
86
+ # anyio
87
+ # ipython
88
+ executing==2.2.1
89
+ # via stack-data
90
+ fastjsonschema==2.21.2
91
+ # via nbformat
92
+ fonttools==4.63.0
93
+ # via
94
+ # enable
95
+ # matplotlib
96
+ fqdn==1.5.1
97
+ # via jsonschema
98
+ frozenlist==1.8.0 ; python_full_version == '3.12.*'
99
+ # via
100
+ # aiohttp
101
+ # aiosignal
102
+ h11==0.16.0
103
+ # via httpcore
104
+ httpcore==1.0.9
105
+ # via httpx
106
+ httpx==0.28.1
107
+ # via jupyterlab
108
+ idna==3.18
109
+ # via
110
+ # anyio
111
+ # httpx
112
+ # jsonschema
113
+ # requests
114
+ # yarl
115
+ importlib-resources==7.1.0
116
+ # via pyibis-ami
117
+ ipykernel==7.3.0
118
+ # via
119
+ # jupyter
120
+ # jupyter-console
121
+ # jupyterlab
122
+ ipython==8.39.0 ; python_full_version < '3.11'
123
+ # via
124
+ # ipykernel
125
+ # ipywidgets
126
+ # jupyter-console
127
+ ipython==9.15.0 ; python_full_version >= '3.11'
128
+ # via
129
+ # ipykernel
130
+ # ipywidgets
131
+ # jupyter-console
132
+ ipython-pygments-lexers==1.1.1 ; python_full_version >= '3.11'
133
+ # via ipython
134
+ ipywidgets==8.1.8
135
+ # via jupyter
136
+ isoduration==20.11.0
137
+ # via jsonschema
138
+ jedi==0.20.0
139
+ # via ipython
140
+ jinja2==3.1.6
141
+ # via
142
+ # jupyter-server
143
+ # jupyterlab
144
+ # jupyterlab-server
145
+ # nbconvert
146
+ json5==0.15.0
147
+ # via jupyterlab-server
148
+ jsonpointer==3.1.1
149
+ # via jsonschema
150
+ jsonschema==4.26.0
151
+ # via
152
+ # jupyter-events
153
+ # jupyterlab-server
154
+ # nbformat
155
+ jsonschema-specifications==2025.9.1
156
+ # via jsonschema
157
+ jupyter==1.1.1
158
+ # via pyibis-ami
159
+ jupyter-builder==1.1.1
160
+ # via
161
+ # jupyterlab
162
+ # notebook
163
+ jupyter-client==8.9.1
164
+ # via
165
+ # ipykernel
166
+ # jupyter-console
167
+ # jupyter-server
168
+ # nbclient
169
+ jupyter-console==6.6.3
170
+ # via jupyter
171
+ jupyter-core==5.9.1
172
+ # via
173
+ # ipykernel
174
+ # jupyter-builder
175
+ # jupyter-client
176
+ # jupyter-console
177
+ # jupyter-server
178
+ # jupyterlab
179
+ # nbclient
180
+ # nbconvert
181
+ # nbformat
182
+ jupyter-events==0.12.1
183
+ # via jupyter-server
184
+ jupyter-lsp==2.3.1
185
+ # via jupyterlab
186
+ jupyter-server==2.20.0
187
+ # via
188
+ # jupyter-lsp
189
+ # jupyterlab
190
+ # jupyterlab-server
191
+ # notebook
192
+ # notebook-shim
193
+ jupyter-server-terminals==0.5.4
194
+ # via jupyter-server
195
+ jupyterlab==4.6.2
196
+ # via
197
+ # jupyter
198
+ # notebook
199
+ jupyterlab-pygments==0.3.0
200
+ # via nbconvert
201
+ jupyterlab-server==2.28.0
202
+ # via
203
+ # jupyterlab
204
+ # notebook
205
+ jupyterlab-widgets==3.0.16
206
+ # via ipywidgets
207
+ kiwisolver==1.5.0
208
+ # via
209
+ # enable
210
+ # matplotlib
211
+ lark==1.3.1
212
+ # via rfc3987-syntax
213
+ lxml==6.1.1
214
+ # via
215
+ # lxml-html-clean
216
+ # nbconvert
217
+ lxml-html-clean==0.4.5
218
+ # via pyibis-ami
219
+ markupsafe==3.0.3
220
+ # via
221
+ # jinja2
222
+ # nbconvert
223
+ matplotlib==3.10.9 ; python_full_version < '3.11'
224
+ # via pyibis-ami
225
+ matplotlib==3.11.1 ; python_full_version >= '3.11'
226
+ # via pyibis-ami
227
+ matplotlib-inline==0.2.2
228
+ # via
229
+ # ipykernel
230
+ # ipython
231
+ mistune==0.8.4
232
+ # via nbconvert
233
+ multidict==6.7.1 ; python_full_version == '3.12.*'
234
+ # via
235
+ # aiohttp
236
+ # yarl
237
+ nbclient==0.11.0
238
+ # via
239
+ # nbconvert
240
+ # papermill
241
+ nbconvert==6.5.4
242
+ # via
243
+ # jupyter
244
+ # jupyter-server
245
+ nbformat==5.10.4
246
+ # via
247
+ # jupyter-server
248
+ # nbclient
249
+ # nbconvert
250
+ # papermill
251
+ nest-asyncio2==1.7.2
252
+ # via ipykernel
253
+ notebook==7.6.0
254
+ # via jupyter
255
+ notebook-shim==0.2.4
256
+ # via
257
+ # jupyterlab
258
+ # notebook
259
+ numpy==2.2.6 ; python_full_version < '3.11'
260
+ # via
261
+ # chaco
262
+ # contourpy
263
+ # enable
264
+ # matplotlib
265
+ # pyibis-ami
266
+ # scipy
267
+ numpy==2.4.6 ; python_full_version == '3.11.*'
268
+ # via
269
+ # chaco
270
+ # contourpy
271
+ # enable
272
+ # matplotlib
273
+ # pyibis-ami
274
+ # scipy
275
+ numpy==2.5.1 ; python_full_version >= '3.12'
276
+ # via
277
+ # chaco
278
+ # contourpy
279
+ # enable
280
+ # matplotlib
281
+ # pyibis-ami
282
+ # scipy
283
+ overrides==7.7.0 ; python_full_version < '3.12'
284
+ # via jupyter-server
285
+ packaging==26.2
286
+ # via
287
+ # ipykernel
288
+ # jupyter-events
289
+ # jupyter-server
290
+ # jupyterlab
291
+ # jupyterlab-server
292
+ # matplotlib
293
+ # nbconvert
294
+ pandocfilters==1.5.1
295
+ # via nbconvert
296
+ papermill==2.7.0
297
+ # via pyibis-ami
298
+ parsec==3.17
299
+ # via pyibis-ami
300
+ parso==0.8.7
301
+ # via jedi
302
+ pexpect==4.9.0 ; sys_platform != 'emscripten' and sys_platform != 'win32'
303
+ # via ipython
304
+ pillow==12.3.0
305
+ # via
306
+ # enable
307
+ # matplotlib
308
+ # reportlab
309
+ platformdirs==4.10.1
310
+ # via jupyter-core
311
+ prometheus-client==0.25.0
312
+ # via jupyter-server
313
+ prompt-toolkit==3.0.52
314
+ # via
315
+ # ipython
316
+ # jupyter-console
317
+ propcache==0.5.2 ; python_full_version == '3.12.*'
318
+ # via
319
+ # aiohttp
320
+ # yarl
321
+ psutil==7.2.2
322
+ # via
323
+ # ipykernel
324
+ # ipython
325
+ ptyprocess==0.7.0 ; os_name != 'nt' or (sys_platform != 'emscripten' and sys_platform != 'win32')
326
+ # via
327
+ # pexpect
328
+ # terminado
329
+ pure-eval==0.2.3
330
+ # via stack-data
331
+ pycparser==3.0 ; implementation_name != 'PyPy'
332
+ # via cffi
333
+ pyface==8.0.0
334
+ # via
335
+ # chaco
336
+ # enable
337
+ # traitsui
338
+ pygments==2.20.0
339
+ # via
340
+ # ipython
341
+ # ipython-pygments-lexers
342
+ # jupyter-console
343
+ # nbconvert
344
+ pyparsing==3.3.2
345
+ # via
346
+ # enable
347
+ # matplotlib
348
+ python-dateutil==2.9.0.post0
349
+ # via
350
+ # arrow
351
+ # jupyter-client
352
+ # matplotlib
353
+ python-json-logger==4.1.0
354
+ # via jupyter-events
355
+ pywinpty==3.0.5 ; os_name == 'nt'
356
+ # via
357
+ # jupyter-server
358
+ # jupyter-server-terminals
359
+ # terminado
360
+ pyyaml==6.0.3
361
+ # via
362
+ # jupyter-events
363
+ # papermill
364
+ pyzmq==27.1.0
365
+ # via
366
+ # ipykernel
367
+ # jupyter-client
368
+ # jupyter-console
369
+ # jupyter-server
370
+ referencing==0.37.0
371
+ # via
372
+ # jsonschema
373
+ # jsonschema-specifications
374
+ # jupyter-events
375
+ reportlab==5.0.0
376
+ # via pyibis-ami
377
+ requests==2.34.2
378
+ # via
379
+ # jupyterlab-server
380
+ # papermill
381
+ rfc3339-validator==0.1.4
382
+ # via
383
+ # jsonschema
384
+ # jupyter-events
385
+ rfc3986-validator==0.1.1
386
+ # via
387
+ # jsonschema
388
+ # jupyter-events
389
+ rfc3987-syntax==1.1.0
390
+ # via jsonschema
391
+ rpds-py==0.30.0 ; python_full_version < '3.11'
392
+ # via
393
+ # jsonschema
394
+ # referencing
395
+ rpds-py==2026.6.3 ; python_full_version >= '3.11'
396
+ # via
397
+ # jsonschema
398
+ # referencing
399
+ scipy==1.15.3 ; python_full_version < '3.11'
400
+ # via pyibis-ami
401
+ scipy==1.17.1 ; python_full_version == '3.11.*'
402
+ # via pyibis-ami
403
+ scipy==1.18.0 ; python_full_version >= '3.12'
404
+ # via pyibis-ami
405
+ send2trash==2.1.0
406
+ # via jupyter-server
407
+ setuptools==83.0.0
408
+ # via parsec
409
+ six==1.17.0
410
+ # via
411
+ # python-dateutil
412
+ # rfc3339-validator
413
+ soupsieve==2.9
414
+ # via beautifulsoup4
415
+ stack-data==0.6.3
416
+ # via ipython
417
+ tenacity==9.1.4
418
+ # via papermill
419
+ terminado==0.18.1
420
+ # via
421
+ # jupyter-server
422
+ # jupyter-server-terminals
423
+ tinycss2==1.5.1
424
+ # via nbconvert
425
+ tomli==2.4.1 ; python_full_version < '3.11'
426
+ # via
427
+ # jupyter-builder
428
+ # jupyterlab
429
+ tornado==6.5.7
430
+ # via
431
+ # ipykernel
432
+ # jupyter-client
433
+ # jupyter-server
434
+ # jupyterlab
435
+ # notebook
436
+ # terminado
437
+ tqdm==4.69.0
438
+ # via papermill
439
+ traitlets==5.15.1
440
+ # via
441
+ # ipykernel
442
+ # ipython
443
+ # ipywidgets
444
+ # jupyter-builder
445
+ # jupyter-client
446
+ # jupyter-console
447
+ # jupyter-core
448
+ # jupyter-events
449
+ # jupyter-server
450
+ # jupyterlab
451
+ # matplotlib-inline
452
+ # nbclient
453
+ # nbconvert
454
+ # nbformat
455
+ traits==7.1.0
456
+ # via
457
+ # chaco
458
+ # enable
459
+ # pyface
460
+ # pyibis-ami
461
+ # traitsui
462
+ traitsui==8.0.0
463
+ # via
464
+ # chaco
465
+ # enable
466
+ # pyibis-ami
467
+ types-reportlab==4.5.1.20260712
468
+ # via pyibis-ami
469
+ typing-extensions==4.16.0
470
+ # via
471
+ # aiohttp
472
+ # aiosignal
473
+ # anyio
474
+ # async-lru
475
+ # beautifulsoup4
476
+ # exceptiongroup
477
+ # ipython
478
+ # jupyter-client
479
+ # jupyterlab
480
+ # referencing
481
+ tzdata==2026.3
482
+ # via arrow
483
+ uri-template==1.3.0
484
+ # via jsonschema
485
+ urllib3==2.7.0
486
+ # via requests
487
+ wcwidth==0.8.2
488
+ # via prompt-toolkit
489
+ webcolors==25.10.0
490
+ # via jsonschema
491
+ webencodings==0.5.1
492
+ # via
493
+ # bleach
494
+ # tinycss2
495
+ websocket-client==1.9.0
496
+ # via jupyter-server
497
+ widgetsnbextension==4.0.15
498
+ # via ipywidgets
499
+ yarl==1.24.2 ; python_full_version == '3.12.*'
500
+ # via aiohttp
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyibis-ami
3
- Version: 9.2.0
3
+ Version: 9.3.1
4
4
  Summary: Facilitates working directly with IBIS-AMI DLLs from the Python command prompt.
5
5
  Author-email: David Banas <capn.freako@gmail.com>
6
6
  Project-URL: Documentation, https://pyibis-ami.readthedocs.io/en/latest/
@@ -2,6 +2,7 @@ LICENSE
2
2
  MANIFEST.in
3
3
  README.md
4
4
  pyproject.toml
5
+ requirements.txt
5
6
  docs/source/ami.rst
6
7
  docs/source/conf.py
7
8
  docs/source/ibis.rst
@@ -171,7 +171,7 @@ def mk_model(
171
171
  "param_types": param_types,
172
172
  "model_name": model_name,
173
173
  "description": description,
174
- "date": str(date.today()),
174
+ "date": str(date.today()), # noqa: DTZ011
175
175
  },
176
176
  )
177
177
  try:
@@ -246,8 +246,8 @@ def mk_tests( # pylint: disable=too-many-locals
246
246
  pname.mkdir(exist_ok=True)
247
247
  pname = (pname / file_base_name).resolve()
248
248
  pname.mkdir(exist_ok=True)
249
- for fname in test_defs.keys():
250
- desc, ami_defs, sim_defs, ref_fstr = test_defs[fname]
249
+ for fname, value in test_defs.items():
250
+ desc, ami_defs, sim_defs, ref_fstr = value
251
251
  ami_str, ami_dict = ami_defs
252
252
  sim_str, sim_dict = sim_defs
253
253
  with open((pname / fname).with_suffix(".run"), "w", encoding="utf-8") as f:
@@ -258,8 +258,7 @@ def mk_tests( # pylint: disable=too-many-locals
258
258
  pdict.update(dict(sim_comb))
259
259
  f.write(f"\n('{ami_str.format(pdict=pdict)}_{sim_str.format(pdict=pdict)}', \\\n")
260
260
  f.write(f" ({{'root_name': '{file_base_name}', \\\n")
261
- for k, v in ami_comb:
262
- f.write(f" '{k}': {v}, \\\n")
261
+ f.writelines(f" '{k}': {v}, \\\n" for k, v in ami_comb)
263
262
  f.write(" }, \\\n")
264
263
  if sim_comb:
265
264
  head, *tail = sim_comb
@@ -355,11 +355,12 @@ class AMIModel: # pylint: disable=too-many-instance-attributes
355
355
  self._info_params = init_object.info_params # pylint: disable=attribute-defined-outside-init
356
356
 
357
357
  # Check GetWave() consistency if possible.
358
- if init_object.info_params and init_object.info_params["GetWave_Exists"] and init_object.info_params["GetWave_Exists"].pvalue:
359
- if not self._amiGetWave:
360
- raise RuntimeError(
361
- "Reserved parameter `GetWave_Exists` is True, but I can't bind to `AMI_GetWave()`!"
362
- )
358
+ if (init_object.info_params and init_object.info_params["GetWave_Exists"] and
359
+ init_object.info_params["GetWave_Exists"].pvalue and
360
+ not self._amiGetWave): # noqa: E129
361
+ raise RuntimeError(
362
+ "Reserved parameter `GetWave_Exists` is True, but I can't bind to `AMI_GetWave()`!"
363
+ )
363
364
 
364
365
  # Construct the AMI parameters string.
365
366
  def sexpr(pname: str, pval: Any) -> str:
@@ -387,7 +388,7 @@ class AMIModel: # pylint: disable=too-many-instance-attributes
387
388
  self._root_name = root_name # pylint: disable=attribute-defined-outside-init
388
389
  ami_params_in = f"({root_name} "
389
390
  for item in list(init_object.ami_params.items()):
390
- if not item[0] == "root_name":
391
+ if item[0] != "root_name":
391
392
  ami_params_in += sexpr(item[0], item[1])
392
393
  ami_params_in += ")"
393
394
  self._ami_params_in = ami_params_in.encode("utf-8") # pylint: disable=attribute-defined-outside-init
@@ -424,7 +425,7 @@ class AMIModel: # pylint: disable=too-many-instance-attributes
424
425
  print(f"&ami_params_out = {byref(self._ami_params_out)}")
425
426
  print(f"&ami_mem_handle = {byref(self._ami_mem_handle)}") # type: ignore
426
427
  print(f"&msg = {byref(self._msg)}")
427
- raise err
428
+ raise
428
429
 
429
430
  # Initialize attributes used by getWave().
430
431
  bit_time = init_object.bit_time
@@ -441,7 +442,7 @@ class AMIModel: # pylint: disable=too-many-instance-attributes
441
442
  )
442
443
  self._getwave_step_response_out_params = None
443
444
 
444
- def getWave(self, wave: Rvec, bits_per_call: int = 0) -> tuple[Rvec, Rvec, list[str]]: # noqa: F405
445
+ def getWave(self, wave: Rvec, bits_per_call: int = 0) -> tuple[Rvec, Rvec, list[str]]:
445
446
  """
446
447
  Performs time domain processing of input waveform, using the ``AMI_GetWave()`` function.
447
448
 
@@ -562,9 +563,8 @@ class AMIModel: # pylint: disable=too-many-instance-attributes
562
563
  ts = self.sample_interval
563
564
  info_params = self._info_params
564
565
  ignore_bits = 0
565
- if info_params:
566
- if "Ignore_Bits" in info_params:
567
- ignore_bits = info_params["Ignore_Bits"].pvalue
566
+ if info_params and "Ignore_Bits" in info_params:
567
+ ignore_bits = info_params["Ignore_Bits"].pvalue
568
568
 
569
569
  # Capture/convert instance variables.
570
570
  chnl_imp = np.array(self.channel_response[:self.row_size]) * ts # input (a.k.a. - "channel") impulse response (V/sample)
@@ -584,7 +584,7 @@ class AMIModel: # pylint: disable=too-many-instance-attributes
584
584
  ):
585
585
  pass
586
586
  else:
587
- h_model = deconv_same(out_imp, chnl_imp) # noqa: F405
587
+ h_model = deconv_same(out_imp, chnl_imp)
588
588
  rslt[IMP_RESP_INIT] = np.roll(h_model, -len(h_model) // 2 + 3 * nspui)
589
589
 
590
590
  h_init = np.roll(out_imp, pad_samps)