PyIBIS-AMI 7.2.8__tar.gz → 7.2.10__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 (52) hide show
  1. {pyibis_ami-7.2.8/src/pyibis_ami.egg-info → pyibis_ami-7.2.10}/PKG-INFO +24 -25
  2. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/README.md +23 -24
  3. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/pyproject.toml +1 -2
  4. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10/src/pyibis_ami.egg-info}/PKG-INFO +24 -25
  5. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibisami/IBIS_AMI_Tester.ipynb +9 -7
  6. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibisami/ami/model.py +14 -4
  7. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibisami/ami/parser.py +33 -7
  8. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibisami/ibis/model.py +6 -1
  9. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibisami/ibis/parser.py +20 -3
  10. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibisami/tools/run_notebook.py +5 -2
  11. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/LICENSE +0 -0
  12. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/MANIFEST.in +0 -0
  13. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/docs/source/ami.rst +0 -0
  14. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/docs/source/conf.py +0 -0
  15. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/docs/source/ibis.rst +0 -0
  16. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/docs/source/index.rst +0 -0
  17. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/docs/source/install.rst +0 -0
  18. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/docs/source/modules.rst +0 -0
  19. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/docs/source/tools.rst +0 -0
  20. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/examples/all_taps.run +0 -0
  21. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/examples/bandwidth.run +0 -0
  22. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/examples/dummy.em +0 -0
  23. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/examples/examples.md +0 -0
  24. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/examples/freq_resp.em +0 -0
  25. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/examples/impulse.em +0 -0
  26. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/examples/impulse_response_8ma.txt +0 -0
  27. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/examples/mode.run +0 -0
  28. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/examples/stratix4_ami_tx_runs/all_taps.run +0 -0
  29. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/examples/stratix4_ami_tx_runs/test_results.xml +0 -0
  30. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/examples/test_results/test_results.xsl +0 -0
  31. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/setup.cfg +0 -0
  32. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibis_ami.egg-info/SOURCES.txt +0 -0
  33. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibis_ami.egg-info/dependency_links.txt +0 -0
  34. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibis_ami.egg-info/entry_points.txt +0 -0
  35. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibis_ami.egg-info/requires.txt +0 -0
  36. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibis_ami.egg-info/top_level.txt +0 -0
  37. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibisami/IBIS_AMI_Checker.ipynb +0 -0
  38. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibisami/__init__.py +0 -0
  39. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibisami/__main__.py +0 -0
  40. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibisami/ami/__init__.py +0 -0
  41. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibisami/ami/config.py +0 -0
  42. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibisami/ami/generic.ami.em +0 -0
  43. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibisami/ami/generic.ibs.em +0 -0
  44. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibisami/ami/parameter.py +0 -0
  45. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibisami/ami/reserved_parameter_names.py +0 -0
  46. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibisami/common.py +0 -0
  47. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibisami/ibis/__init__.py +0 -0
  48. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibisami/ibis/file.py +0 -0
  49. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibisami/tools/__init__.py +0 -0
  50. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibisami/tools/run_tests.py +0 -0
  51. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/src/pyibisami/tools/test_results.xsl +0 -0
  52. {pyibis_ami-7.2.8 → pyibis_ami-7.2.10}/tests/test_run_tests.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyibis-ami
3
- Version: 7.2.8
3
+ Version: 7.2.10
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/
@@ -40,7 +40,7 @@ Dynamic: license-file
40
40
  # PyIBIS-AMI
41
41
 
42
42
  PyIBIS-AMI is a Python package of tools useful in the development and testing of IBIS-AMI models.
43
- This library is used in [PyBERT](https://github.com/capn-freako/PyBERT) and also provides two
43
+ This library is used in [PyBERT](https://github.com/capn-freako/PyBERT) and also provides three
44
44
  command line applications.
45
45
 
46
46
  It can be installed via: `pip install PyIBIS-AMI`.
@@ -49,9 +49,23 @@ It can be installed via: `pip install PyIBIS-AMI`.
49
49
 
50
50
  ## Command Line Tools
51
51
 
52
- ### Run IBIS-AMI Model Testing Notebook
52
+ ### AMI Config
53
+
54
+ ```
55
+ ami_config -h
56
+ Usage: ami_config [OPTIONS] PY_FILE
57
+
58
+ Configure IBIS-AMI model C++ source code, IBIS model, and AMI file.
59
+
60
+ py_file: name of model configuration file (*.py)
61
+
62
+ Options:
63
+ -h, --help Show this message and exit.
64
+ ```
65
+
66
+ ### Run (New) IBIS-AMI Model Testing Notebook
53
67
 
54
- ```shell
68
+ ```
55
69
  $ run-notebook -h
56
70
  Usage: run-notebook [OPTIONS] IBIS_FILE BIT_RATE
57
71
 
@@ -77,46 +91,31 @@ Options:
77
91
  -h, --help Show this message and exit.
78
92
  ```
79
93
 
80
- ### AMI Config
81
-
82
- ```shell
83
- ami_config -h
84
- Usage: ami_config [OPTIONS] PY_FILE
85
-
86
- Configure IBIS-AMI model C++ source code, IBIS model, and AMI file.
87
-
88
- py_file: name of model configuration file (*.py)
94
+ ### Run (Old Style) Tests
89
95
 
90
- Options:
91
- -h, --help Show this message and exit.
92
96
  ```
93
-
94
- ### Run Tests
95
-
96
- ```shell
97
97
  run_tests -h
98
98
  Usage: run_tests [OPTIONS] [TESTS]...
99
99
 
100
100
  Run a series of tests on a AMI model DLL file.
101
101
 
102
102
  If no tests are specified on the command line, run all tests found in
103
- `test_dir'. (See `-t' option.)
103
+ `test_dir`. (See `-t` option.)
104
104
 
105
105
  usage: %prog [options] [test1 [test2 ...]]
106
106
 
107
107
  Tests are written in the EmPy templating language, and produce XML output.
108
- (See the examples provided in the `examples' directory of the `pyibisami'
108
+ (See the examples provided in the `examples` directory of the `pyibisami`
109
109
  Python package.)
110
110
 
111
111
  Test results should be viewed by loading the XML output file into a Web
112
112
  browser. By default, the XML output file refers to the supplied XSLT file,
113
- `test_results.xsl'. It is possible that you may need to copy this file
113
+ `test_results.xsl`. It is possible that you may need to copy this file
114
114
  from the pyibisami package directory to your local working directory, in
115
115
  order to avoid file loading errors in your Web browser.
116
116
 
117
117
  Options:
118
- -t, --test_dir PATH Sets the name of the directory from which tests are
119
- taken.
118
+ -t, --test_dir PATH Sets the name of the directory from which tests are taken.
120
119
  -m, --model PATH Sets the AMI model DLL file name.
121
120
  -p, --params TEXT List of lists of model configurations. Format:
122
121
  <filename> or [(name, [(label, ({AMI params., in
@@ -131,4 +130,4 @@ Options:
131
130
  results.
132
131
  -v, --version TEXT Show program version info and exit.
133
132
  -h, --help Show this message and exit.
134
- ```
133
+ ```
@@ -3,7 +3,7 @@
3
3
  # PyIBIS-AMI
4
4
 
5
5
  PyIBIS-AMI is a Python package of tools useful in the development and testing of IBIS-AMI models.
6
- This library is used in [PyBERT](https://github.com/capn-freako/PyBERT) and also provides two
6
+ This library is used in [PyBERT](https://github.com/capn-freako/PyBERT) and also provides three
7
7
  command line applications.
8
8
 
9
9
  It can be installed via: `pip install PyIBIS-AMI`.
@@ -12,9 +12,23 @@ It can be installed via: `pip install PyIBIS-AMI`.
12
12
 
13
13
  ## Command Line Tools
14
14
 
15
- ### Run IBIS-AMI Model Testing Notebook
15
+ ### AMI Config
16
+
17
+ ```
18
+ ami_config -h
19
+ Usage: ami_config [OPTIONS] PY_FILE
20
+
21
+ Configure IBIS-AMI model C++ source code, IBIS model, and AMI file.
22
+
23
+ py_file: name of model configuration file (*.py)
24
+
25
+ Options:
26
+ -h, --help Show this message and exit.
27
+ ```
28
+
29
+ ### Run (New) IBIS-AMI Model Testing Notebook
16
30
 
17
- ```shell
31
+ ```
18
32
  $ run-notebook -h
19
33
  Usage: run-notebook [OPTIONS] IBIS_FILE BIT_RATE
20
34
 
@@ -40,46 +54,31 @@ Options:
40
54
  -h, --help Show this message and exit.
41
55
  ```
42
56
 
43
- ### AMI Config
44
-
45
- ```shell
46
- ami_config -h
47
- Usage: ami_config [OPTIONS] PY_FILE
48
-
49
- Configure IBIS-AMI model C++ source code, IBIS model, and AMI file.
50
-
51
- py_file: name of model configuration file (*.py)
57
+ ### Run (Old Style) Tests
52
58
 
53
- Options:
54
- -h, --help Show this message and exit.
55
59
  ```
56
-
57
- ### Run Tests
58
-
59
- ```shell
60
60
  run_tests -h
61
61
  Usage: run_tests [OPTIONS] [TESTS]...
62
62
 
63
63
  Run a series of tests on a AMI model DLL file.
64
64
 
65
65
  If no tests are specified on the command line, run all tests found in
66
- `test_dir'. (See `-t' option.)
66
+ `test_dir`. (See `-t` option.)
67
67
 
68
68
  usage: %prog [options] [test1 [test2 ...]]
69
69
 
70
70
  Tests are written in the EmPy templating language, and produce XML output.
71
- (See the examples provided in the `examples' directory of the `pyibisami'
71
+ (See the examples provided in the `examples` directory of the `pyibisami`
72
72
  Python package.)
73
73
 
74
74
  Test results should be viewed by loading the XML output file into a Web
75
75
  browser. By default, the XML output file refers to the supplied XSLT file,
76
- `test_results.xsl'. It is possible that you may need to copy this file
76
+ `test_results.xsl`. It is possible that you may need to copy this file
77
77
  from the pyibisami package directory to your local working directory, in
78
78
  order to avoid file loading errors in your Web browser.
79
79
 
80
80
  Options:
81
- -t, --test_dir PATH Sets the name of the directory from which tests are
82
- taken.
81
+ -t, --test_dir PATH Sets the name of the directory from which tests are taken.
83
82
  -m, --model PATH Sets the AMI model DLL file name.
84
83
  -p, --params TEXT List of lists of model configurations. Format:
85
84
  <filename> or [(name, [(label, ({AMI params., in
@@ -94,4 +93,4 @@ Options:
94
93
  results.
95
94
  -v, --version TEXT Show program version info and exit.
96
95
  -h, --help Show this message and exit.
97
- ```
96
+ ```
@@ -5,12 +5,11 @@ 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 = "7.2.8"
8
+ version = "7.2.10"
9
9
  authors = [ {name = "David Banas", email = "capn.freako@gmail.com"}
10
10
  ]
11
11
  readme = "README.md"
12
12
  requires-python = ">=3.10,<3.13"
13
- # license = "BSD-3-Clause"
14
13
  dependencies = [
15
14
  "chaco>=6.0.0",
16
15
  "click>=8.1.3",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyibis-ami
3
- Version: 7.2.8
3
+ Version: 7.2.10
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/
@@ -40,7 +40,7 @@ Dynamic: license-file
40
40
  # PyIBIS-AMI
41
41
 
42
42
  PyIBIS-AMI is a Python package of tools useful in the development and testing of IBIS-AMI models.
43
- This library is used in [PyBERT](https://github.com/capn-freako/PyBERT) and also provides two
43
+ This library is used in [PyBERT](https://github.com/capn-freako/PyBERT) and also provides three
44
44
  command line applications.
45
45
 
46
46
  It can be installed via: `pip install PyIBIS-AMI`.
@@ -49,9 +49,23 @@ It can be installed via: `pip install PyIBIS-AMI`.
49
49
 
50
50
  ## Command Line Tools
51
51
 
52
- ### Run IBIS-AMI Model Testing Notebook
52
+ ### AMI Config
53
+
54
+ ```
55
+ ami_config -h
56
+ Usage: ami_config [OPTIONS] PY_FILE
57
+
58
+ Configure IBIS-AMI model C++ source code, IBIS model, and AMI file.
59
+
60
+ py_file: name of model configuration file (*.py)
61
+
62
+ Options:
63
+ -h, --help Show this message and exit.
64
+ ```
65
+
66
+ ### Run (New) IBIS-AMI Model Testing Notebook
53
67
 
54
- ```shell
68
+ ```
55
69
  $ run-notebook -h
56
70
  Usage: run-notebook [OPTIONS] IBIS_FILE BIT_RATE
57
71
 
@@ -77,46 +91,31 @@ Options:
77
91
  -h, --help Show this message and exit.
78
92
  ```
79
93
 
80
- ### AMI Config
81
-
82
- ```shell
83
- ami_config -h
84
- Usage: ami_config [OPTIONS] PY_FILE
85
-
86
- Configure IBIS-AMI model C++ source code, IBIS model, and AMI file.
87
-
88
- py_file: name of model configuration file (*.py)
94
+ ### Run (Old Style) Tests
89
95
 
90
- Options:
91
- -h, --help Show this message and exit.
92
96
  ```
93
-
94
- ### Run Tests
95
-
96
- ```shell
97
97
  run_tests -h
98
98
  Usage: run_tests [OPTIONS] [TESTS]...
99
99
 
100
100
  Run a series of tests on a AMI model DLL file.
101
101
 
102
102
  If no tests are specified on the command line, run all tests found in
103
- `test_dir'. (See `-t' option.)
103
+ `test_dir`. (See `-t` option.)
104
104
 
105
105
  usage: %prog [options] [test1 [test2 ...]]
106
106
 
107
107
  Tests are written in the EmPy templating language, and produce XML output.
108
- (See the examples provided in the `examples' directory of the `pyibisami'
108
+ (See the examples provided in the `examples` directory of the `pyibisami`
109
109
  Python package.)
110
110
 
111
111
  Test results should be viewed by loading the XML output file into a Web
112
112
  browser. By default, the XML output file refers to the supplied XSLT file,
113
- `test_results.xsl'. It is possible that you may need to copy this file
113
+ `test_results.xsl`. It is possible that you may need to copy this file
114
114
  from the pyibisami package directory to your local working directory, in
115
115
  order to avoid file loading errors in your Web browser.
116
116
 
117
117
  Options:
118
- -t, --test_dir PATH Sets the name of the directory from which tests are
119
- taken.
118
+ -t, --test_dir PATH Sets the name of the directory from which tests are taken.
120
119
  -m, --model PATH Sets the AMI model DLL file name.
121
120
  -p, --params TEXT List of lists of model configurations. Format:
122
121
  <filename> or [(name, [(label, ({AMI params., in
@@ -131,4 +130,4 @@ Options:
131
130
  results.
132
131
  -v, --version TEXT Show program version info and exit.
133
132
  -h, --help Show this message and exit.
134
- ```
133
+ ```
@@ -148,14 +148,14 @@
148
148
  "\n",
149
149
  "# Changing these will only have an effect if you are running this notebook manually.\n",
150
150
  "\n",
151
- "ibis_dir = \"/Users/davibana/prj/IBISAMI/celestica\"\n",
152
- "ibis_file = \"rx.ibs\" # IBIS-AMI model to test.\n",
153
- "# params = \"test_runs/rx/ctle_1p5.run\" # Directory or file containing AMI parameter sweep definitions.\n",
154
- "params = \"debug.run\" # Directory or file containing AMI parameter sweep definitions.\n",
151
+ "ibis_dir = \".\"\n",
152
+ "ibis_file = \"rx.ibs\" # IBIS-AMI model to test.\n",
153
+ "params = \"rx_test.run\" # Directory or file containing AMI parameter sweep definitions.\n",
155
154
  "is_tx = False # True for Tx; False for Rx.\n",
156
155
  "debug = False # Set to 'True' if you're having trouble and need some debugging info.\n",
157
156
  "bit_rate = 53.125e9\n",
158
157
  "nspui = 32 # vector samples per unit interval\n",
158
+ "no_nspui_swp = False # Skip samples per UI sweeping when true.\n",
159
159
  "nbits = 20 # number of bits for AMI_Init() exercising\n",
160
160
  "plot_t_max = 0.5e-9 # maximum x-axis extent for time domain plots (s)\n",
161
161
  "f_max = 40e9 # maximum frequency (Hz)\n",
@@ -1177,7 +1177,8 @@
1177
1177
  }
1178
1178
  ],
1179
1179
  "source": [
1180
- "samples_per_bit()\n"
1180
+ "if not no_nspui_swp:\n",
1181
+ " samples_per_bit()\n"
1181
1182
  ]
1182
1183
  },
1183
1184
  {
@@ -1388,7 +1389,8 @@
1388
1389
  }
1389
1390
  ],
1390
1391
  "source": [
1391
- "samples_per_bit()\n"
1392
+ "if not no_nspui_swp:\n",
1393
+ " samples_per_bit()\n"
1392
1394
  ]
1393
1395
  },
1394
1396
  {
@@ -1449,7 +1451,7 @@
1449
1451
  "name": "python",
1450
1452
  "nbconvert_exporter": "python",
1451
1453
  "pygments_lexer": "ipython3",
1452
- "version": "3.10.16"
1454
+ "version": "3.11.13"
1453
1455
  }
1454
1456
  },
1455
1457
  "nbformat": 4,
@@ -332,16 +332,26 @@ class AMIModel: # pylint: disable=too-many-instance-attributes
332
332
  )
333
333
 
334
334
  # Construct the AMI parameters string.
335
- def sexpr(pname, pval):
336
- """Create an S-expression from a parameter name/value pair, calling
337
- recursively as needed to elaborate sub-parameter dictionaries."""
335
+ def sexpr(pname: str, pval: Any) -> str:
336
+ """
337
+ Create an S-expression from a parameter name/value pair, calling
338
+ recursively as needed to elaborate sub-parameter dictionaries.
339
+
340
+ Args:
341
+ pname: Parameter name.
342
+ pval: Parameter value.
343
+
344
+ Returns:
345
+ A string containing the S-expression constructed.
346
+ """
338
347
  if isinstance(pval, str):
339
348
  return f'({pname} "{pval}")'
340
349
  if isinstance(pval, dict):
341
350
  subs = []
342
351
  for sname in pval:
343
352
  subs.append(sexpr(sname, pval[sname]))
344
- return sexpr(pname, " ".join(subs))
353
+ # return sexpr(pname, " ".join(subs))
354
+ return f"({pname} {' '.join(subs)})"
345
355
  return f"({pname} {pval})"
346
356
 
347
357
  ami_params_in = f"({init_object.ami_params['root_name']} "
@@ -15,7 +15,7 @@ import numpy as np
15
15
  from numpy.typing import NDArray
16
16
  from parsec import ParseError, generate, many, regex, string
17
17
  from traits.api import Bool, Enum, HasTraits, Range, Trait, TraitType
18
- from traitsui.api import Group, HFlow, Item, VGroup, View
18
+ from traitsui.api import Group, HGroup, Item, VGroup, View
19
19
  from traitsui.menu import ModalButtons
20
20
 
21
21
  from .model import AMIModelInitializer
@@ -594,18 +594,44 @@ def make_gui(params: ModelSpecificDict) -> tuple[Group, list[TraitType]]:
594
594
  Notes:
595
595
  1. The dictionary passed through ``params`` may have sub-dictionaries.
596
596
  The window layout will reflect this nesting.
597
+ 2. Some AMI files are written to encode the AMI parameter hierarchy
598
+ via some parameter naming scheme. This function makes a primitive attempt
599
+ to decode one particular example of this: ``<grp>_<param>``.
597
600
  """
598
601
 
599
602
  gui_items: list[Item | Group] = []
600
603
  new_traits: list[tuple[str, TraitType]] = []
604
+
605
+ # Place parameters with a common prefix in their names,
606
+ # but no pre-existing enclosing group, in a ``VGroup``.
607
+ # - Generate grouped parameter names and list of unique group names.
601
608
  pnames = list(params.keys())
602
- pnames.sort()
603
- for pname in pnames:
604
- gui_item, new_trait = make_gui_items(pname, params[pname])
605
- gui_items.extend(gui_item)
606
- new_traits.extend(new_trait)
609
+ pnames_split = list(map(lambda n: n.split('_'), pnames))
610
+ group_names = list(map(lambda xs: xs[0], pnames_split))
611
+ grouped_pnames = list(zip(pnames, group_names))
612
+ # The following doesn't preserve the parameter ordering of the AMI file!
613
+ # for group_name in set(group_names): # Iterate over unique group names.
614
+ unique_group_names = []
615
+ for group_name in group_names:
616
+ if group_name not in unique_group_names:
617
+ unique_group_names.append(group_name)
618
+ # - Process all parameters, trapping those from a non-explicit group for special processing.
619
+ for group_name in unique_group_names:
620
+ pnames_in_group = [pname for pname, grp_name in grouped_pnames if grp_name == group_name]
621
+ if len(pnames_in_group) > 1:
622
+ _gui_items: list[Item | Group] = []
623
+ for pname in pnames_in_group:
624
+ gui_item, new_trait = make_gui_items(pname, params[pname])
625
+ _gui_items.extend(gui_item)
626
+ new_traits.extend(new_trait)
627
+ gui_items.append(VGroup(*_gui_items, label=group_name, show_border=True))
628
+ else:
629
+ pname = pnames_in_group[0]
630
+ gui_item, new_trait = make_gui_items(pname, params[pname])
631
+ gui_items.extend(gui_item)
632
+ new_traits.extend(new_trait)
607
633
 
608
- return (HFlow(*gui_items), new_traits)
634
+ return (HGroup(*gui_items), new_traits)
609
635
 
610
636
 
611
637
  def make_gui_items( # pylint: disable=too-many-locals,too-many-branches
@@ -209,7 +209,8 @@ class Model(HasTraits): # pylint: disable=too-many-instance-attributes
209
209
  self._slew = (ramp["rising"][0] + ramp["falling"][0]) / 2e9 # (V/ns)
210
210
  elif mtype == "input":
211
211
  if "gnd_clamp" not in subDict and "power_clamp" not in subDict:
212
- raise LookupError("Missing clamp curves!")
212
+ # raise LookupError("Missing clamp curves!")
213
+ pass
213
214
 
214
215
  plotdata = ArrayPlotData()
215
216
 
@@ -220,6 +221,8 @@ class Model(HasTraits): # pylint: disable=too-many-instance-attributes
220
221
  plotdata.set_data("gc_ityps", gc_ityps)
221
222
  plotdata.set_data("gc_imins", gc_imins)
222
223
  plotdata.set_data("gc_imaxs", gc_imaxs)
224
+ else:
225
+ gc_z = 2e6
223
226
 
224
227
  if "power_clamp" in subDict:
225
228
  pc_vs, pc_ityps, pc_imins, pc_imaxs, pc_zs = proc_iv(subDict["power_clamp"])
@@ -232,6 +235,8 @@ class Model(HasTraits): # pylint: disable=too-many-instance-attributes
232
235
  plotdata.set_data("pc_ityps", pc_ityps)
233
236
  plotdata.set_data("pc_imins", pc_imins)
234
237
  plotdata.set_data("pc_imaxs", pc_imaxs)
238
+ else:
239
+ pc_z = 2e6
235
240
 
236
241
  plot_iv = Plot(plotdata) # , padding_left=75)
237
242
  # The 'line_style' trait of a LinePlot instance must be 'dash' or 'dot dash' or 'dot' or 'long dash' or 'solid'.
@@ -91,8 +91,11 @@ def word(p):
91
91
  @generate("remainder of line")
92
92
  def rest_line():
93
93
  "Parse remainder of line."
94
- chars = yield many(none_of("\n\r")) << ignore # So that we still function as a lexeme.
95
- return "".join(chars)
94
+ chars = yield many(none_of("[\n\r")) << ignore # So that we still function as a lexeme.
95
+ rslt = "".join(chars)
96
+ if DEBUG:
97
+ print(f"rest_line(): {rslt}", flush=True)
98
+ return rslt
96
99
 
97
100
 
98
101
  skip_line = lexeme(rest_line).result("(Skipped.)")
@@ -348,6 +351,17 @@ def model():
348
351
  rlc = lexeme(string("R_pin") | string("L_pin") | string("C_pin"))
349
352
 
350
353
 
354
+ @generate("[Manufacturer]")
355
+ def manufacturer():
356
+ "Parse manufacturer."
357
+ rslt = yield rest_line
358
+ if not rslt:
359
+ rslt = "(n/a)"
360
+ if DEBUG:
361
+ print(f"Manufacturer: {rslt}", flush=True)
362
+ return rslt
363
+
364
+
351
365
  @generate("[Package]")
352
366
  def package():
353
367
  "Parse package RLC values."
@@ -392,7 +406,7 @@ def pins():
392
406
 
393
407
 
394
408
  Component_keywords = {
395
- "manufacturer": rest_line,
409
+ "manufacturer": manufacturer,
396
410
  "package": package,
397
411
  "pin": pins,
398
412
  "diff_pin": skip_keyword,
@@ -495,6 +509,9 @@ def parse_ibis_file(ibis_file_contents_str, debug=False):
495
509
  Dictionary containing keyword definitions (empty upon failure).
496
510
  """
497
511
 
512
+ global DEBUG # pylint: disable=W0603
513
+ DEBUG = debug
514
+
498
515
  try:
499
516
  nodes = ibis_file.parse_strict(ibis_file_contents_str) # Parse must consume the entire file.
500
517
  if debug:
@@ -107,6 +107,7 @@ def run_notebook(
107
107
  @click.option("--debug", is_flag=True, help="Provide extra debugging information.")
108
108
  @click.option("--is_tx", is_flag=True, help="Flags a Tx model.")
109
109
  @click.option("--nspui", default=32, show_default=True, help="Number of samples per unit interval.")
110
+ @click.option("--no-nspui-swp", is_flag=True, help="Skip samples per UI sweep.")
110
111
  @click.option("--nbits", default=200, show_default=True, help="Number of bits to run in simulations.")
111
112
  @click.option("--plot-t-max", default=0.5e-9, show_default=True, help="Maximum time value for plots (s).")
112
113
  @click.option("--f-max", default=40e9, show_default=True, help="Maximum frequency for transfer functions (Hz).")
@@ -117,18 +118,20 @@ def run_notebook(
117
118
  @click.argument("bit_rate", type=float)
118
119
  @click.version_option(package_name="PyIBIS-AMI")
119
120
  # pylint: disable=too-many-arguments,too-many-positional-arguments
120
- def main(notebook, out_dir, params, ibis_file, bit_rate, debug, is_tx, nspui, nbits,
121
+ def main(notebook, out_dir, params, ibis_file, bit_rate,
122
+ debug, is_tx, nspui, no_nspui_swp, nbits,
121
123
  plot_t_max, f_max, f_step, fig_x, fig_y):
122
124
  "Run a *Jupyter* notebook on an IBIS-AMI model file."
123
125
  run_notebook(
124
126
  Path(ibis_file).resolve(), Path(notebook).resolve(),
125
- out_dir=out_dir,
127
+ out_dir=Path(out_dir).resolve(),
126
128
  notebook_params={
127
129
  'ibis_dir': ".",
128
130
  'ibis_file': ibis_file,
129
131
  'debug': debug,
130
132
  'is_tx': is_tx,
131
133
  'nspui': nspui,
134
+ 'no_nspui_swp': no_nspui_swp,
132
135
  'nbits': nbits,
133
136
  'plot_t_max': plot_t_max,
134
137
  'f_max': f_max,
File without changes
File without changes
File without changes