PyIBIS-AMI 9.3.1__tar.gz → 10.0.0__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.
- pyibis_ami-10.0.0/CHANGELOG.md +380 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/MANIFEST.in +1 -0
- pyibis_ami-10.0.0/PKG-INFO +201 -0
- pyibis_ami-10.0.0/README.md +153 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/docs/source/ami.rst +7 -4
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/docs/source/conf.py +1 -6
- pyibis_ami-10.0.0/docs/source/gui.rst +15 -0
- pyibis_ami-10.0.0/docs/source/ibis.rst +24 -0
- pyibis_ami-10.0.0/docs/source/install.rst +136 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/docs/source/modules.rst +1 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/examples/freq_resp.em +3 -3
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/examples/impulse.em +4 -4
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/pyproject.toml +28 -14
- pyibis_ami-10.0.0/requirements.txt +20 -0
- pyibis_ami-10.0.0/src/pyibis_ami.egg-info/PKG-INFO +201 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibis_ami.egg-info/SOURCES.txt +18 -6
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibis_ami.egg-info/entry_points.txt +1 -1
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibis_ami.egg-info/requires.txt +19 -10
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibisami/IBIS_AMI_Checker.ipynb +2 -2
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibisami/IBIS_AMI_Tester.ipynb +4 -4
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibisami/__init__.py +4 -1
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibisami/__main__.py +1 -1
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibisami/ami/config.py +43 -9
- pyibis_ami-10.0.0/src/pyibisami/ami/configurator.py +553 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibisami/ami/model.py +68 -54
- pyibis_ami-10.0.0/src/pyibisami/ami/parameter.py +532 -0
- pyibis_ami-10.0.0/src/pyibisami/ami/parser.py +390 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibisami/ami/reserved_parameter_names.py +9 -0
- pyibis_ami-10.0.0/src/pyibisami/cli_logging.py +70 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibisami/common.py +9 -4
- pyibis_ami-10.0.0/src/pyibisami/gui/__init__.py +22 -0
- pyibis_ami-10.0.0/src/pyibisami/gui/ami_config.py +127 -0
- pyibis_ami-10.0.0/src/pyibisami/gui/ibis.py +157 -0
- pyibis_ami-10.0.0/src/pyibisami/ibis/file.py +519 -0
- pyibis_ami-10.0.0/src/pyibisami/ibis/iv.py +210 -0
- pyibis_ami-10.0.0/src/pyibisami/ibis/model.py +492 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibisami/ibis/parser.py +181 -74
- pyibis_ami-10.0.0/src/pyibisami/report/__init__.py +21 -0
- {pyibis_ami-9.3.1/src/pyibisami/testing → pyibis_ami-10.0.0/src/pyibisami/report}/ami_tests.py +15 -32
- {pyibis_ami-9.3.1/src/pyibisami/testing → pyibis_ami-10.0.0/src/pyibisami/report}/ami_tests_helpers.py +5 -5
- {pyibis_ami-9.3.1/src/pyibisami/testing → pyibis_ami-10.0.0/src/pyibisami/report}/ibis_file_tests.py +2 -10
- {pyibis_ami-9.3.1/src/pyibisami/util → pyibis_ami-10.0.0/src/pyibisami/report}/plot.py +10 -14
- {pyibis_ami-9.3.1/src/pyibisami/testing → pyibis_ami-10.0.0/src/pyibisami/report}/test_models.py +13 -11
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibisami/testing/__init__.py +4 -2
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibisami/testing/ami_test_config.py +4 -1
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibisami/testing/test_defs.py +23 -11
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibisami/tools/run_notebook.py +59 -32
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibisami/tools/run_tests.py +30 -19
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibisami/util/ami.py +45 -9
- pyibis_ami-10.0.0/tests/test_core_only.py +108 -0
- pyibis_ami-10.0.0/tests/test_gui_render.py +62 -0
- pyibis_ami-10.0.0/tests/test_report.py +37 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/tests/test_run_tests.py +28 -15
- pyibis_ami-9.3.1/PKG-INFO +0 -111
- pyibis_ami-9.3.1/README.md +0 -68
- pyibis_ami-9.3.1/docs/source/ibis.rst +0 -22
- pyibis_ami-9.3.1/docs/source/install.rst +0 -31
- pyibis_ami-9.3.1/requirements.txt +0 -500
- pyibis_ami-9.3.1/src/pyibis_ami.egg-info/PKG-INFO +0 -111
- pyibis_ami-9.3.1/src/pyibisami/ami/parameter.py +0 -395
- pyibis_ami-9.3.1/src/pyibisami/ami/parser.py +0 -905
- pyibis_ami-9.3.1/src/pyibisami/ibis/file.py +0 -394
- pyibis_ami-9.3.1/src/pyibisami/ibis/model.py +0 -419
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/LICENSE +0 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/docs/source/index.rst +0 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/docs/source/tools.rst +0 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/examples/all_taps.run +0 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/examples/bandwidth.run +0 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/examples/dummy.em +0 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/examples/examples.md +0 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/examples/impulse_response_8ma.txt +0 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/examples/mode.run +0 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/examples/stratix4_ami_tx_runs/all_taps.run +0 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/examples/stratix4_ami_tx_runs/test_results.xml +0 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/examples/test_results/test_results.xsl +0 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/setup.cfg +0 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibis_ami.egg-info/dependency_links.txt +0 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibis_ami.egg-info/top_level.txt +0 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibisami/ami/__init__.py +0 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibisami/ami/generic.ami.em +0 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibisami/ami/generic.ibs.em +0 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibisami/ibis/__init__.py +0 -0
- /pyibis_ami-9.3.1/src/pyibisami/util/reportlab.py → /pyibis_ami-10.0.0/src/pyibisami/report/pdf.py +0 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibisami/testing/util.py +0 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibisami/tools/__init__.py +0 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibisami/tools/test_results.xsl +0 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/src/pyibisami/util/misc.py +0 -0
- {pyibis_ami-9.3.1 → pyibis_ami-10.0.0}/tests/test_ami_test_config.py +0 -0
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Notable changes to *PyIBIS-AMI* (`pyibis-ami` on PyPI).
|
|
4
|
+
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
5
|
+
Releases before 10.0.0 are summarized from their
|
|
6
|
+
[GitHub release notes](https://github.com/capn-freako/PyAMI/releases), which have the full details.
|
|
7
|
+
|
|
8
|
+
For help porting code from v9.x, see
|
|
9
|
+
[Upgrading from v9.x](https://pyibis-ami.readthedocs.io/en/latest/install.html#upgrading-from-v9-x).
|
|
10
|
+
|
|
11
|
+
## [10.0.0] - Unreleased
|
|
12
|
+
|
|
13
|
+
### Changed (breaking)
|
|
14
|
+
|
|
15
|
+
- The GUI, report and notebook dependencies are optional extras now: `gui` (chaco, enable, traitsui),
|
|
16
|
+
`report` (matplotlib, reportlab, scipy), `notebook` (jupyter, papermill, ..., plus `report`) and `all`.
|
|
17
|
+
The core (AMI/IBIS parsing, AMI DLL calls, `ami-config`, `check-ami`) needs none of them.
|
|
18
|
+
The `gui` extra installs no Qt binding.
|
|
19
|
+
- SciPy is now in the `report` extra. `common.deconv_same()` uses NumPy only;
|
|
20
|
+
`testing.test_defs.lossy_channel()`/`reflective_channel()` need SciPy.
|
|
21
|
+
- The PDF/plot reporting modules moved to the new `pyibisami.report` package
|
|
22
|
+
(`testing.test_models`, `testing.ami_tests`, `testing.ami_tests_helpers`, `testing.ibis_file_tests`,
|
|
23
|
+
`util.plot`, `util.reportlab`).
|
|
24
|
+
- `make_gui()`/`make_gui_items()` moved to `pyibisami.gui.ami_config`, and no longer return `Trait`s.
|
|
25
|
+
`make_param_traits()` builds those.
|
|
26
|
+
- `AMIParamConfigurator`, `make_param_traits()` and `trait_name_part()` moved from `pyibisami.ami.parser`
|
|
27
|
+
to the new `pyibisami.ami.configurator`. The old imports still work.
|
|
28
|
+
- Tap parameters (`-1`, `0`, `1`, ...) get trait names `pre1`, `post0`, `post1`, ...
|
|
29
|
+
The names sent to the model, and the `fetch_param_val()`/`set_param_val()` paths, stay as written in the `.ami` file.
|
|
30
|
+
- *PyIBIS-AMI* only logs now, through loggers under `pyibisami`; it never prints or opens dialogs itself.
|
|
31
|
+
`IBISModel.log()`, `IBISModel.log_txt` and the `debug` and `gui` arguments of `IBISModel` and
|
|
32
|
+
`parse_ibis_file()` were removed. `IBISModel` sends its notices through its new `alert` event;
|
|
33
|
+
`pyibisami.gui.ibis.show_alerts()` shows them as dialogs. CLIs take `-d/--debug`.
|
|
34
|
+
- `IBISModel` raises `ValueError` (`Couldn't parse IBIS file ...`, with the line and column) when the file
|
|
35
|
+
doesn't parse, instead of logging a warning.
|
|
36
|
+
- `IBISModel.dll_file`/`ami_file` come from the selected model, not the file.
|
|
37
|
+
The private `Model._exec32Wins`, etc., were removed; `Model.ami_files` and `Model.executables` remain.
|
|
38
|
+
- `Model.zout`/`slew`/`zin` are `None` (and the model has no such trait) where its `Model_type` or data
|
|
39
|
+
gives no value.
|
|
40
|
+
- A Boolean `List` with no `Default` starts at its first value, not `False`.
|
|
41
|
+
- Viewer titles no longer mention *PyBERT*; the IBIS model selector's view `id` is now
|
|
42
|
+
`pyibisami_ibis_model_selector`.
|
|
43
|
+
|
|
44
|
+
### Added
|
|
45
|
+
|
|
46
|
+
- `IBISModel(..., model_types=...)` offers only the pins and models of the given `Model_type`s
|
|
47
|
+
(e.g. `TX_MODEL_TYPES`, `RX_MODEL_TYPES`); it can be changed later through the `model_types` trait.
|
|
48
|
+
- Direction-aware AMI executables for `I/O` models: `Model.get_ami_files(is_tx)`, `Model.ami_executables`
|
|
49
|
+
(`AmiExecutable` tuples, with `Executable_Tx`/`Executable_Rx` direction) and `Model.is_io`.
|
|
50
|
+
- `IBISModel.ibis_dir`, `resolve_file()`, `dll_path` and `ami_path`, for the paths of the files an `.ibs` names.
|
|
51
|
+
- `IBISModel.comps`, the components offered for selection (those with a usable pin).
|
|
52
|
+
- `Model.iv_data` (`pyibisami.ibis.iv.IVData`/`IVCurve`): I-V tables without any GUI dependency.
|
|
53
|
+
`Model.plot_iv` is built on first access and needs the `gui` extra.
|
|
54
|
+
- IBIS spec-rule warnings (`Model.spec_warnings`, the parsed file's `"warnings"`, and `ibis_parsing_errors`):
|
|
55
|
+
`[Algorithmic Model]` use for each `Model_type`, `Executable` vs. `Executable_Tx`/`_Rx`, `.ami` extensions,
|
|
56
|
+
missing `Vinl`/`Vinh`.
|
|
57
|
+
- Every `.ami` `Format` parses: `Increment` and `Steps` (offered as their legal values), `Corner` (follows the new
|
|
58
|
+
`AMIParamConfigurator.sim_corner`), `Table`, `Gaussian`, `Dual-Dirac` and `DjRj` (sent as written).
|
|
59
|
+
Usage `Dep` is accepted.
|
|
60
|
+
- `model.ami_params_string()` builds the `AMI_parameters_in` string.
|
|
61
|
+
- The AMI_Version 7.2 and 8.0 reserved parameter names
|
|
62
|
+
(`Modulation_Levels`, `PAM_Offsets`, `PAM_Thresholds`, `Tx_Impulse_Input`, `Adaptation_Valid`,
|
|
63
|
+
`Rx_Port_Order`, `Tx_Port_Order`).
|
|
64
|
+
- IBIS parsing of:
|
|
65
|
+
true differential `*_diff` `Model_type`s; any OS in `Executable` lines; pin, signal and model names with
|
|
66
|
+
punctuation (e.g. `TX+`, `DQ<0>`); `NA` for either of min/max; `NA` in a pin's R/L/C columns;
|
|
67
|
+
`[Comment Char]`; `name=value` without spaces; `[Pin]` header words in any case.
|
|
68
|
+
|
|
69
|
+
### Fixed
|
|
70
|
+
|
|
71
|
+
- `.ami` parameter names and `Default` values are sent to the model as written (`Default` is read with the
|
|
72
|
+
parameter's `Type`). Empty groups aren't sent. Descriptions lose their quotes.
|
|
73
|
+
- A parameter that can't be built is skipped, with a warning; the rest of the `.ami` file loads.
|
|
74
|
+
Subparameters named like tags (e.g. `Corner`) are kept.
|
|
75
|
+
- A `List` parameter's dropdown no longer offers its default value twice.
|
|
76
|
+
- `set_param_val()` validates through the parameter's trait; tap tuners read their values from the traits.
|
|
77
|
+
- `IBISModel.get_pins_qualified()` used a removed `is_tx` attribute; it now goes by the pin's models'
|
|
78
|
+
`Model_type`s (any model of a `[Model Selector]`).
|
|
79
|
+
- A component change to a pin of the same name updates the models offered; `pin_` is no longer stale.
|
|
80
|
+
- `zout`/`slew`/`zin` are found for every `Model_type` the data supports (e.g. `3-state`, `Open_*`).
|
|
81
|
+
- A `Vmeas` outside an I-V table no longer fails the file; the first table row no longer wraps around.
|
|
82
|
+
- Trailing `|` comments are dropped from text values; text after `[End]` is ignored, with a warning;
|
|
83
|
+
`CIRCUITCALL` pins are dropped.
|
|
84
|
+
- `test-model` picks the executable by the interpreter's bitness and OS.
|
|
85
|
+
- `run-notebook` works on Python 3.10 and 3.11, and picks the `.ami` file for `--is_tx` on `I/O` models.
|
|
86
|
+
- The model viewers no longer crash on their `zout`/`slew`/`zin` and display values.
|
|
87
|
+
|
|
88
|
+
### Deprecated
|
|
89
|
+
|
|
90
|
+
- `ami-config` / `ami.config.ami_config()` now warn when used. Make your model configurator executable and
|
|
91
|
+
have it call `ami.config.mk_model()` instead.
|
|
92
|
+
|
|
93
|
+
### Dependencies
|
|
94
|
+
|
|
95
|
+
- `click>=8.4.2,<9`, `traits>=7.1,<8` (were pinned); `reportlab==5.0.1`.
|
|
96
|
+
|
|
97
|
+
## [9.3.1] - 2026-08-17
|
|
98
|
+
|
|
99
|
+
### Added
|
|
100
|
+
|
|
101
|
+
- The source distribution includes a `requirements.txt` exported from `uv.lock`.
|
|
102
|
+
|
|
103
|
+
## [9.3.0] - 2026-08-15
|
|
104
|
+
|
|
105
|
+
### Added
|
|
106
|
+
|
|
107
|
+
- What *PyBERT* needs to tune IBIS-AMI model equalization: `AMIParamConfigurator.tunable_params` (#92).
|
|
108
|
+
|
|
109
|
+
### Fixed
|
|
110
|
+
|
|
111
|
+
- Hierarchical AMI parameter naming (#92).
|
|
112
|
+
|
|
113
|
+
## [9.2.0] - 2026-07-20
|
|
114
|
+
|
|
115
|
+
### Added
|
|
116
|
+
|
|
117
|
+
- Python 3.13 support (#91).
|
|
118
|
+
|
|
119
|
+
### Fixed
|
|
120
|
+
|
|
121
|
+
- The tap parser, and test sweep file naming (#89).
|
|
122
|
+
|
|
123
|
+
## [9.1.0] - 2026-06-18
|
|
124
|
+
|
|
125
|
+
### Added
|
|
126
|
+
|
|
127
|
+
- `check-ami` command: runs the IBIS 8.0 `[AMI Test Configuration]`s of an IBIS file and checks the results
|
|
128
|
+
against their golden data (#85).
|
|
129
|
+
|
|
130
|
+
## [9.0.0] - 2026-05-25
|
|
131
|
+
|
|
132
|
+
### Changed (breaking)
|
|
133
|
+
|
|
134
|
+
- New model testing infrastructure, in plain Python, with PDF reports made with ReportLab: `test-model`.
|
|
135
|
+
Parameter sweeps are `TestSweep` subclasses in Python modules (a `defaults_template.py` is generated).
|
|
136
|
+
- `ami.parser.parse_ami_file_contents()` returns separate lists of errors and warnings, and raises
|
|
137
|
+
`RuntimeError` when the file doesn't parse.
|
|
138
|
+
- `ami.model.get_responses()` takes a maximum run length in place of `pad_bits` (it no longer overrides
|
|
139
|
+
`Ignore_Bits`), returns a more specific type, and takes a `debug` flag.
|
|
140
|
+
- `IBISModel` no longer takes an `is_tx` argument.
|
|
141
|
+
- Stricter types for `ami.config.mk_model()`, `make_gui()` and `make_gui_items()`.
|
|
142
|
+
|
|
143
|
+
### Added
|
|
144
|
+
|
|
145
|
+
- Modules `testing`, `util.ami`, `util.misc`, `util.plot` and `util.reportlab`.
|
|
146
|
+
- `run-notebook` builds a default parameter sweep (#65).
|
|
147
|
+
|
|
148
|
+
### Fixed
|
|
149
|
+
|
|
150
|
+
- The `Clocks` array size, to prevent access violations (#78).
|
|
151
|
+
|
|
152
|
+
### Deprecated
|
|
153
|
+
|
|
154
|
+
- The `tools` modules; use `testing`.
|
|
155
|
+
|
|
156
|
+
## [8.1.0] - 2026-02-13
|
|
157
|
+
|
|
158
|
+
### Changed
|
|
159
|
+
|
|
160
|
+
- Better type specification of the recursive `AmiNode` type (#62).
|
|
161
|
+
|
|
162
|
+
## [8.0.0] - 2026-01-25
|
|
163
|
+
|
|
164
|
+
### Changed
|
|
165
|
+
|
|
166
|
+
- Development moved from pip and Tox to uv, still driven by `make` (#60).
|
|
167
|
+
|
|
168
|
+
### Fixed
|
|
169
|
+
|
|
170
|
+
- `(Format Corner ...)` AMI parameters (#58).
|
|
171
|
+
|
|
172
|
+
## [7.3.1] - 2025-12-24
|
|
173
|
+
|
|
174
|
+
### Changed (breaking)
|
|
175
|
+
|
|
176
|
+
- `AMIModel.ami_params_out` is a decoded `str`.
|
|
177
|
+
|
|
178
|
+
### Fixed
|
|
179
|
+
|
|
180
|
+
- The AMI parameter configuration dialog no longer grows wider than the screen (#56).
|
|
181
|
+
- Some IBIS and AMI parsing bugs.
|
|
182
|
+
|
|
183
|
+
## [7.2.7] - 2025-10-18
|
|
184
|
+
|
|
185
|
+
### Fixed
|
|
186
|
+
|
|
187
|
+
- Negative tap indices in AMI files.
|
|
188
|
+
|
|
189
|
+
## [7.2.5] - 2025-07-23
|
|
190
|
+
|
|
191
|
+
### Fixed
|
|
192
|
+
|
|
193
|
+
- Miscellaneous fixes made for *PyBERT* v9.1.2.
|
|
194
|
+
|
|
195
|
+
## [7.2.4] - 2025-07-12
|
|
196
|
+
|
|
197
|
+
### Fixed
|
|
198
|
+
|
|
199
|
+
- A crash when a String parameter's `Format` was left as `None`.
|
|
200
|
+
|
|
201
|
+
## [7.2.3] - 2025-05-01
|
|
202
|
+
|
|
203
|
+
### Fixed
|
|
204
|
+
|
|
205
|
+
- Passing String parameters to the model.
|
|
206
|
+
|
|
207
|
+
### Changed
|
|
208
|
+
|
|
209
|
+
- Assertions removed from the code base, except in notebooks (#52).
|
|
210
|
+
|
|
211
|
+
## [7.2.2] - 2025-04-06
|
|
212
|
+
|
|
213
|
+
### Fixed
|
|
214
|
+
|
|
215
|
+
- AMI model initialization no longer crashes when no `Info` parameters are given.
|
|
216
|
+
|
|
217
|
+
### Changed
|
|
218
|
+
|
|
219
|
+
- Build infrastructure improvements.
|
|
220
|
+
|
|
221
|
+
## [7.2.0] - 2025-03-18
|
|
222
|
+
|
|
223
|
+
### Changed (breaking)
|
|
224
|
+
|
|
225
|
+
- Python 3.9 support dropped; Python 3.10-3.12 supported.
|
|
226
|
+
- Wheel and sdist file names are lower case.
|
|
227
|
+
|
|
228
|
+
### Added
|
|
229
|
+
|
|
230
|
+
- Type annotations throughout.
|
|
231
|
+
- `Tap` parameter type.
|
|
232
|
+
- AMI reserved parameter names as a `dataclass`.
|
|
233
|
+
- Cleaner AMI parameter configurator GUIs, and more documentation.
|
|
234
|
+
|
|
235
|
+
### Fixed
|
|
236
|
+
|
|
237
|
+
- A crash on models with only one of `[POWER Clamp]` and `[GND Clamp]`.
|
|
238
|
+
- Like-named AMI parameters below the top level were conflated.
|
|
239
|
+
|
|
240
|
+
### Deprecated
|
|
241
|
+
|
|
242
|
+
- Non-executable model configurators; use executable ones.
|
|
243
|
+
|
|
244
|
+
## [6.2.2] - 2025-02-23
|
|
245
|
+
|
|
246
|
+
### Fixed
|
|
247
|
+
|
|
248
|
+
- `run-notebook` with models generated by *ibisami*.
|
|
249
|
+
|
|
250
|
+
## [6.2.1] - 2025-02-22
|
|
251
|
+
|
|
252
|
+
### Added
|
|
253
|
+
|
|
254
|
+
- `run-notebook` command: runs the IBIS-AMI model testing notebook on a model (#48).
|
|
255
|
+
|
|
256
|
+
## [6.2.0] - 2024-09-09
|
|
257
|
+
|
|
258
|
+
### Changed (breaking)
|
|
259
|
+
|
|
260
|
+
- `ami.model.get_responses()` returns only the impulse responses.
|
|
261
|
+
|
|
262
|
+
### Added
|
|
263
|
+
|
|
264
|
+
- Output parameters are captured from each `GetWave()` call.
|
|
265
|
+
|
|
266
|
+
### Fixed
|
|
267
|
+
|
|
268
|
+
- One extra clock-times slot, to prevent segmentation faults.
|
|
269
|
+
- CTLE step response shifted one UI right; `GetWave()` input gets a prequel, to remove step response noise.
|
|
270
|
+
- Fixes for macOS on Apple silicon; `IBIS_AMI_Checker` notebook finishing touches.
|
|
271
|
+
|
|
272
|
+
## [5.1.4] - 2024-04-23
|
|
273
|
+
|
|
274
|
+
### Fixed
|
|
275
|
+
|
|
276
|
+
- `FLOAT`/`TAP` parameters use C type `double`, not `float`.
|
|
277
|
+
|
|
278
|
+
## [5.1.3] - 2024-04-11
|
|
279
|
+
|
|
280
|
+
### Changed
|
|
281
|
+
|
|
282
|
+
- Model configurators (e.g. `rx.py`) are executable and drive model configuration, using the library.
|
|
283
|
+
|
|
284
|
+
## [5.1.2] - 2024-04-09
|
|
285
|
+
|
|
286
|
+
### Changed
|
|
287
|
+
|
|
288
|
+
- Updated to the current Enable/Chaco/Traits/UI; pip-installable.
|
|
289
|
+
|
|
290
|
+
## [5.1.1] - 2024-02-12
|
|
291
|
+
|
|
292
|
+
### Fixed
|
|
293
|
+
|
|
294
|
+
- Rx input termination in generated IBIS models.
|
|
295
|
+
|
|
296
|
+
## [4.1.1] - 2023-04-20
|
|
297
|
+
|
|
298
|
+
### Changed
|
|
299
|
+
|
|
300
|
+
- Single-source versioning.
|
|
301
|
+
|
|
302
|
+
## [4.0.0] - 2022-11-16
|
|
303
|
+
|
|
304
|
+
### Changed
|
|
305
|
+
|
|
306
|
+
- pip-installable, with a `src/` layout and `pyproject.toml`.
|
|
307
|
+
|
|
308
|
+
## [3.5.5] - 2022-02-19
|
|
309
|
+
|
|
310
|
+
### Fixed
|
|
311
|
+
|
|
312
|
+
- AMI parameter parsing fragilities.
|
|
313
|
+
|
|
314
|
+
## [3.4.1] - 2021-08-16
|
|
315
|
+
|
|
316
|
+
### Changed
|
|
317
|
+
|
|
318
|
+
- Clean-ups for the *DesignCon 2021 Bootcamp* exercises.
|
|
319
|
+
|
|
320
|
+
## [3.3.2] - 2020-01-21
|
|
321
|
+
|
|
322
|
+
### Fixed
|
|
323
|
+
|
|
324
|
+
- IBIS files without `[Date]`, and models with incomplete `[Algorithmic Model]` sections, failed to parse.
|
|
325
|
+
|
|
326
|
+
## [3.3] - 2019-12-02
|
|
327
|
+
|
|
328
|
+
### Changed
|
|
329
|
+
|
|
330
|
+
- Python 3 support.
|
|
331
|
+
|
|
332
|
+
## [2.0.1] - 2017-01-02
|
|
333
|
+
|
|
334
|
+
### Fixed
|
|
335
|
+
|
|
336
|
+
- Fixes made while testing *PyBERT* v2.0.1 against several IBIS-AMI models.
|
|
337
|
+
|
|
338
|
+
## [1.1.2] - 2015-05-13
|
|
339
|
+
|
|
340
|
+
### Fixed
|
|
341
|
+
|
|
342
|
+
- A crash when loading models without `GetWave()`.
|
|
343
|
+
|
|
344
|
+
## [1.1] - 2015-04-17
|
|
345
|
+
|
|
346
|
+
### Fixed
|
|
347
|
+
|
|
348
|
+
- `AMIModelInitializer.__init__()` handling of extra keyword arguments.
|
|
349
|
+
|
|
350
|
+
[10.0.0]: https://github.com/capn-freako/PyAMI/compare/v9.3.1...HEAD
|
|
351
|
+
[9.3.1]: https://github.com/capn-freako/PyAMI/compare/v9.3.0...v9.3.1
|
|
352
|
+
[9.3.0]: https://github.com/capn-freako/PyAMI/releases/tag/v9.3.0
|
|
353
|
+
[9.2.0]: https://github.com/capn-freako/PyAMI/releases/tag/v9.2.0
|
|
354
|
+
[9.1.0]: https://github.com/capn-freako/PyAMI/releases/tag/v9.1.0
|
|
355
|
+
[9.0.0]: https://github.com/capn-freako/PyAMI/releases/tag/v9.0.0
|
|
356
|
+
[8.1.0]: https://github.com/capn-freako/PyAMI/releases/tag/v8.1.0
|
|
357
|
+
[8.0.0]: https://github.com/capn-freako/PyAMI/releases/tag/v8.0.0
|
|
358
|
+
[7.3.1]: https://github.com/capn-freako/PyAMI/releases/tag/v7.3.1
|
|
359
|
+
[7.2.7]: https://github.com/capn-freako/PyAMI/releases/tag/v7.2.7
|
|
360
|
+
[7.2.5]: https://github.com/capn-freako/PyAMI/releases/tag/v7.2.5
|
|
361
|
+
[7.2.4]: https://github.com/capn-freako/PyAMI/releases/tag/v7.2.4
|
|
362
|
+
[7.2.3]: https://github.com/capn-freako/PyAMI/releases/tag/v7.2.3
|
|
363
|
+
[7.2.2]: https://github.com/capn-freako/PyAMI/releases/tag/v7.2.2
|
|
364
|
+
[7.2.0]: https://github.com/capn-freako/PyAMI/releases/tag/v7.2.0
|
|
365
|
+
[6.2.2]: https://github.com/capn-freako/PyAMI/releases/tag/v6.2.2
|
|
366
|
+
[6.2.1]: https://github.com/capn-freako/PyAMI/releases/tag/v6.2.1
|
|
367
|
+
[6.2.0]: https://github.com/capn-freako/PyAMI/releases/tag/v6.2.0
|
|
368
|
+
[5.1.4]: https://github.com/capn-freako/PyAMI/releases/tag/v5.1.4
|
|
369
|
+
[5.1.3]: https://github.com/capn-freako/PyAMI/releases/tag/v5.1.3
|
|
370
|
+
[5.1.2]: https://github.com/capn-freako/PyAMI/releases/tag/v5.1.2
|
|
371
|
+
[5.1.1]: https://github.com/capn-freako/PyAMI/releases/tag/5.1.1
|
|
372
|
+
[4.1.1]: https://github.com/capn-freako/PyAMI/releases/tag/4.1.1
|
|
373
|
+
[4.0.0]: https://github.com/capn-freako/PyAMI/releases/tag/4.0.0
|
|
374
|
+
[3.5.5]: https://github.com/capn-freako/PyAMI/releases/tag/3.5.5
|
|
375
|
+
[3.4.1]: https://github.com/capn-freako/PyAMI/releases/tag/v3.4.1
|
|
376
|
+
[3.3.2]: https://github.com/capn-freako/PyAMI/releases/tag/v3.3.2
|
|
377
|
+
[3.3]: https://github.com/capn-freako/PyAMI/releases/tag/v3.3
|
|
378
|
+
[2.0.1]: https://github.com/capn-freako/PyAMI/releases/tag/v2.0.1
|
|
379
|
+
[1.1.2]: https://github.com/capn-freako/PyAMI/releases/tag/v1.1.2
|
|
380
|
+
[1.1]: https://github.com/capn-freako/PyAMI/releases/tag/v1.1
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: pyibis-ami
|
|
3
|
+
Version: 10.0.0
|
|
4
|
+
Summary: Facilitates working directly with IBIS-AMI DLLs from the Python command prompt.
|
|
5
|
+
Author-email: David Banas <capn.freako@gmail.com>
|
|
6
|
+
Project-URL: Documentation, https://pyibis-ami.readthedocs.io/en/latest/
|
|
7
|
+
Project-URL: Wiki, https://github.com/capn-freako/PyAMI/wiki
|
|
8
|
+
Project-URL: GitHub, https://github.com/capn-freako/PyAMI
|
|
9
|
+
Project-URL: PyPi, https://pypi.org/project/PyIBIS-AMI/
|
|
10
|
+
Keywords: ibis-ami
|
|
11
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
22
|
+
Classifier: Topic :: System :: Emulators
|
|
23
|
+
Classifier: Topic :: Utilities
|
|
24
|
+
Requires-Python: <3.14,>=3.10
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
License-File: LICENSE
|
|
27
|
+
Requires-Dist: click<9,>=8.4.2
|
|
28
|
+
Requires-Dist: empy==4.2.1
|
|
29
|
+
Requires-Dist: numpy>=1.26
|
|
30
|
+
Requires-Dist: parsec==3.17
|
|
31
|
+
Requires-Dist: traits<8,>=7.1
|
|
32
|
+
Provides-Extra: gui
|
|
33
|
+
Requires-Dist: chaco==6.1.1; extra == "gui"
|
|
34
|
+
Requires-Dist: enable==6.1.0; extra == "gui"
|
|
35
|
+
Requires-Dist: traitsui==8.0.0; extra == "gui"
|
|
36
|
+
Provides-Extra: report
|
|
37
|
+
Requires-Dist: matplotlib>=3.6.1; extra == "report"
|
|
38
|
+
Requires-Dist: reportlab==5.0.1; extra == "report"
|
|
39
|
+
Requires-Dist: scipy>=1.15; extra == "report"
|
|
40
|
+
Provides-Extra: notebook
|
|
41
|
+
Requires-Dist: pyibis-ami[report]; extra == "notebook"
|
|
42
|
+
Requires-Dist: jupyter==1.1.1; extra == "notebook"
|
|
43
|
+
Requires-Dist: lxml-html-clean==0.4.5; extra == "notebook"
|
|
44
|
+
Requires-Dist: papermill==2.7.0; extra == "notebook"
|
|
45
|
+
Provides-Extra: all
|
|
46
|
+
Requires-Dist: pyibis-ami[gui,notebook,report]; extra == "all"
|
|
47
|
+
Dynamic: license-file
|
|
48
|
+
|
|
49
|
+
[](https://results.pre-commit.ci/latest/github/capn-freako/PyAMI/master)
|
|
50
|
+
|
|
51
|
+
# PyIBIS-AMI
|
|
52
|
+
|
|
53
|
+
PyIBIS-AMI is a Python package of tools useful in the development and testing of IBIS-AMI models.
|
|
54
|
+
It parses IBIS (`.ibs`) and AMI (`.ami`) files, drives a model's `AMI_Init()` / `AMI_GetWave()`
|
|
55
|
+
functions from Python, and provides several command line applications.
|
|
56
|
+
This library is used in [PyBERT](https://github.com/capn-freako/PyBERT).
|
|
57
|
+
|
|
58
|
+
[View API/Developer's Documentation.](https://pyibis-ami.readthedocs.io/en/latest/)
|
|
59
|
+
[View the changelog.](https://github.com/capn-freako/PyAMI/blob/master/CHANGELOG.md)
|
|
60
|
+
|
|
61
|
+
## Installation
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
pip install PyIBIS-AMI
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
The basic install contains the core library, plus the `ami-config` and `check-ami` tools.
|
|
68
|
+
Optional features are installed as extras, e.g. `pip install 'PyIBIS-AMI[gui]'`:
|
|
69
|
+
|
|
70
|
+
| Extra | Needed for |
|
|
71
|
+
|------------|-----------------------------------------------------------------|
|
|
72
|
+
| `gui` | Traits/UI GUIs (AMI parameter configurator, IBIS model viewers) |
|
|
73
|
+
| `report` | `test-model` and `run-tests` |
|
|
74
|
+
| `notebook` | `run-notebook` |
|
|
75
|
+
| `all` | All of the above |
|
|
76
|
+
|
|
77
|
+
The `gui` extra doesn't include a Qt binding; install one too, if you have none (e.g. `pip install pyside6`).
|
|
78
|
+
|
|
79
|
+
## Python Example
|
|
80
|
+
|
|
81
|
+
Load an IBIS-AMI model, initialize it with its default parameter values, and run a bit stream through it:
|
|
82
|
+
|
|
83
|
+
```python
|
|
84
|
+
import logging
|
|
85
|
+
|
|
86
|
+
import numpy as np
|
|
87
|
+
|
|
88
|
+
from pyibisami.ami.model import AMIModel
|
|
89
|
+
from pyibisami.ami.parser import AMIParamConfigurator
|
|
90
|
+
from pyibisami.ibis.file import IBISModel
|
|
91
|
+
|
|
92
|
+
# PyIBIS-AMI only logs (to loggers under `pyibisami`); it's silent until you configure logging.
|
|
93
|
+
# Show warnings and above from everything, plus `pyibisami`'s debug messages:
|
|
94
|
+
logging.basicConfig(level=logging.WARNING, format="%(levelname)s %(name)s: %(message)s")
|
|
95
|
+
logging.getLogger("pyibisami").setLevel(logging.DEBUG)
|
|
96
|
+
# Or, tune one module, e.g. quiet the IBIS parser:
|
|
97
|
+
logging.getLogger("pyibisami.ibis.parser").setLevel(logging.INFO)
|
|
98
|
+
log = logging.getLogger("example") # This script's own messages.
|
|
99
|
+
log.setLevel(logging.INFO)
|
|
100
|
+
|
|
101
|
+
# Parse the IBIS file. The first component/pin/model is selected by default;
|
|
102
|
+
# change the selection via `ibis.comp`, `ibis.pin`, and `ibis.mod`.
|
|
103
|
+
ibis = IBISModel("example_tx.ibs")
|
|
104
|
+
|
|
105
|
+
# Parse the selected model's AMI file and take its default parameter values.
|
|
106
|
+
# (For an I/O model with both Tx and Rx executables, use `ibis.model.get_ami_files(is_tx)` to pick one.)
|
|
107
|
+
with open(ibis.ami_path, encoding="utf-8") as f:
|
|
108
|
+
ami_cfg = AMIParamConfigurator(f.read())
|
|
109
|
+
ami_params = ami_cfg.input_ami_params # e.g. {'root_name': 'example_tx', 'tx_tap_units': 27, ...}
|
|
110
|
+
|
|
111
|
+
# Build the `AMI_Init()` input: 10 Gb/s, 32 samples per UI, ideal channel (unit impulse).
|
|
112
|
+
bit_time = 100e-12
|
|
113
|
+
sample_interval = bit_time / 32
|
|
114
|
+
h = np.zeros(256)
|
|
115
|
+
h[0] = 1 / sample_interval
|
|
116
|
+
initializer = ami_cfg.get_init(bit_time, sample_interval, h, ami_params=ami_params)
|
|
117
|
+
|
|
118
|
+
# Load the model's DLL/SO (for this platform) and call `AMI_Init()`.
|
|
119
|
+
model = AMIModel(str(ibis.dll_path))
|
|
120
|
+
model.initialize(initializer)
|
|
121
|
+
log.info("AMI_Init() message: %s", model.msg.decode().strip())
|
|
122
|
+
log.info("AMI_Init() output parameters: %s", model.ami_params_out)
|
|
123
|
+
h_out = np.array(model.initOut) # Channel impulse response, convolved with the model's
|
|
124
|
+
|
|
125
|
+
# Run a random NRZ bit stream through `AMI_GetWave()`, if the model has one.
|
|
126
|
+
if model.has_getwave:
|
|
127
|
+
bits = np.random.randint(2, size=1000)
|
|
128
|
+
wave_in = np.repeat(2.0 * bits - 1.0, 32)
|
|
129
|
+
wave_out, clock_times, params_out = model.getWave(wave_in)
|
|
130
|
+
|
|
131
|
+
# Plot the first 50 bits of the input and output waveforms (needs `matplotlib`).
|
|
132
|
+
import matplotlib.pyplot as plt
|
|
133
|
+
|
|
134
|
+
n = 50 * 32
|
|
135
|
+
t_ns = np.arange(n) * sample_interval * 1e9
|
|
136
|
+
plt.plot(t_ns, wave_in[:n], label="wave_in")
|
|
137
|
+
plt.plot(t_ns, wave_out[:n], label="wave_out")
|
|
138
|
+
plt.xlabel("Time (ns)")
|
|
139
|
+
plt.ylabel("Amplitude (V)")
|
|
140
|
+
plt.legend()
|
|
141
|
+
plt.show()
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Command Line Tools
|
|
145
|
+
|
|
146
|
+
| Command | Purpose | Extra |
|
|
147
|
+
|----------------|------------------------------------------------------------------------|------------|
|
|
148
|
+
| `test-model` | Test an IBIS-AMI model, producing a PDF report | `report` |
|
|
149
|
+
| `check-ami` | Run the `[AMI Test Configuration]` blocks of an IBIS 8.0 file | (core) |
|
|
150
|
+
| `run-notebook` | Run a Jupyter notebook on an IBIS-AMI model | `notebook` |
|
|
151
|
+
| `run-tests` | Run EmPy-based tests on an AMI model DLL, producing XML output (older) | `report` |
|
|
152
|
+
| `ami-config` | Generate model C++ source, `.ibs`, and `.ami` files (deprecated) | (core) |
|
|
153
|
+
|
|
154
|
+
All commands accept `-h`/`--help`.
|
|
155
|
+
|
|
156
|
+
### IBIS-AMI Model Testing
|
|
157
|
+
|
|
158
|
+
**PyIBIS-AMI Native:**
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
% test-model -h
|
|
162
|
+
Usage: test-model [OPTIONS] IBIS_FILE
|
|
163
|
+
|
|
164
|
+
Options:
|
|
165
|
+
-m, --model TEXT Name of IBIS-AMI model to test.
|
|
166
|
+
-p, --params TEXT Directory containing test configuration sweeps.
|
|
167
|
+
-d, --debug Provide extra debugging information.
|
|
168
|
+
--version Show the version and exit.
|
|
169
|
+
-h, --help Show this message and exit.
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
**IBIS v8.0:**
|
|
173
|
+
|
|
174
|
+
Runs the `[AMI Test Configuration]` blocks of an IBIS 8.0 file (§10.11).
|
|
175
|
+
From Python, use `pyibisami.testing.ami_test_config.run_ami_test_config()` (one configuration)
|
|
176
|
+
or `run_all_ami_test_configs()` (all of a model's).
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
% check-ami -h
|
|
180
|
+
Usage: check-ami [OPTIONS] IBIS_FILE
|
|
181
|
+
|
|
182
|
+
Run [AMI Test Configuration] blocks embedded in an IBIS file (IBIS 8.0
|
|
183
|
+
§10.11).
|
|
184
|
+
|
|
185
|
+
Parses IBIS_FILE, locates the target model, then calls AMI_Init() (and
|
|
186
|
+
AMI_GetWave() for Time_domain configs) and compares the outputs against the
|
|
187
|
+
golden data files referenced in each [AMI Test Configuration] block.
|
|
188
|
+
|
|
189
|
+
Exits with status 1 if any configuration fails.
|
|
190
|
+
|
|
191
|
+
Options:
|
|
192
|
+
-m, --model-name TEXT Name of the [Model] to test. Required when the .ibs
|
|
193
|
+
file defines more than one model.
|
|
194
|
+
-c, --config TEXT Name of a single [AMI Test Configuration] to run.
|
|
195
|
+
Runs all configs when omitted.
|
|
196
|
+
--tol-ir FLOAT Absolute tolerance for impulse-response comparison.
|
|
197
|
+
[default: 1e-06]
|
|
198
|
+
--tol-wave FLOAT Absolute tolerance for waveform comparison.
|
|
199
|
+
[default: 1e-06]
|
|
200
|
+
-h, --help Show this message and exit.
|
|
201
|
+
```
|