ibis-parser
A pure-Python parser for IBIS (I/O Buffer Information Specification) .ibs signal-integrity model files.
Features
- Zero dependencies — pure Python standard library only
- Full IBIS 4.x support — parses all major block types: Component, Package, Pin, Model, IV/VT tables, Waveforms, Ramp
- Three-corner data model — typ / min / max values returned as typed dicts
- Round-trip fidelity — write back to
.ibswithprinter() - SI unit conversion —
string2float('1.5nH')→1.5e-9 - Pythonic navigation —
get_block()/get_blocks()with optional title and node filters - CLI included — inspect
.ibsfiles from the terminal without writing a single line of Python
Installation
pip install eda-ibis-parser
Or install from source:
git clone https://github.com/rohaansch/ibis-parser.git
cd ibis-parser
pip install -e ".[dev]"
Quick Start
from ibis_parser import IBISParser
# Parse a file
ibis = IBISParser("device.ibs")
ibis.reader()
# Get component name
comp = ibis.get_block('Component')
print(comp.title) # → n344_n1a_stb
# Get manufacturer
mfr = comp.get_block('Manufacturer')
print(mfr.value1.get()) # → XYZ Semiconductor
# List all models
for model in ibis.get_blocks('Model'):
print(model.title)
# Read C_comp (typ / min / max)
model = ibis.get_block('Model')
c = model.C_comp.get(as_number=True)
print(f"C_comp typ = {c['typ']:.3e} F")
# Read a Pin table
pin = comp.get_block('Pin')
data = pin.table.get(['signal_name', 'model_name'])
# Read a GND Clamp IV curve
clamp = model.get_block('GND Clamp')
iv = clamp.table.get(['Voltage', 'Ityp'], as_number=True)
# Convert SI strings
IBISParser.string2float('100pF') # → 1e-10
IBISParser.string2float('1.5nH') # → 1.5e-9
# Write back to a new file
with open("out.ibs", "w") as fh:
ibis.printer(fh)
CLI
ibis-parser device.ibs # summary
ibis-parser device.ibs --dump # full parsed tree
ibis-parser device.ibs --block Model # print one block
ibis-parser device.ibs --blocks Model # list all Model blocks
ibis-parser --version
API Reference
IBISParser(path)
| Method | Description |
|---|---|
reader() |
Parse the .ibs file |
printer(fh) |
Write parsed data back to a file handle |
dumper() |
Return a debug string representation |
get_block(name, title=None) |
Return the single matching block (raises IBISError if not found or ambiguous) |
get_blocks(name, title=None, quiet=False) |
Return a list of matching blocks |
string2float(s) |
Class method — parse an IBIS value string to float |
is_number(s) |
Class method — return True if s is a plain decimal number |
Block navigation
Every IBISBlock exposes the same get_block() / get_blocks() methods, so navigation is uniform at every level:
model = ibis.get_block('Model', title='MIN')
clamp = model.get_block('GND Clamp')
ref = model.get_block('Voltage Range')
Node access
Named parameters inside a block are exposed as attributes:
model.C_comp # DictNode → .get() / .get(as_number=True)
model.Vinl # StrNode → .get()
model.Model_type # StrNode → .get()
pin.table # TableNode → .get(columns, as_number=False)
DictNode.get(conditions=None, as_number=False)
vals = pkg.R_pkg.get() # {'typ': '0', 'min': 'NA', 'max': 'NA'}
vals = pkg.R_pkg.get(conditions=['typ', 'min']) # subset
vals = pkg.R_pkg.get(as_number=True) # floats
TableNode.get(columns=None, as_number=False)
data = pin.table.get() # all columns as lists
data = pin.table.get(['signal_name']) # subset
data = clamp.table.get(['Voltage'], as_number=True)
Block Types
| Class | Used for |
|---|---|
TextBlock |
Single-value keyword lines (IBIS Ver, File Name, …) |
WrapTextBlock |
Multi-line wrapped text (Copyright) |
WrapIndentTextBlock |
Indented wrapped text (Disclaimer) |
TitledTextBlock |
Named blocks with sub-blocks (Component) |
MultiLineParamBlock |
Key = typ min max tables (Package) |
TitledModelBlock |
Full Model block with nodes and sub-blocks |
VarColumnTableBlock |
Variable-column tables (Pin, Diff Pin) |
IVTableBlock |
IV curve tables (GND Clamp, POWER Clamp) |
VTTableBlock |
VT waveform tables (Rising Waveform) |
SingleLineParamBlock |
Single-line typ min max (Voltage Range) |
Running Tests
pip install -e ".[dev]"
pytest -v
IBIS Resources
License
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
eda_ibis_parser-0.1.1.tar.gz
(18.0 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file eda_ibis_parser-0.1.1.tar.gz.
File metadata
- Download URL: eda_ibis_parser-0.1.1.tar.gz
- Upload date:
- Size: 18.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ed08070f6c1a286445b025b67fad752614a5114f19b3de389b3e17fd9aa9045
|
|
| MD5 |
6b6787a2916d2c3eccd513c0b9d90d7b
|
|
| BLAKE2b-256 |
66430314665261a5afaf5eaae779c1c8f98c43fe45c67e43b0d594796d780023
|
File details
Details for the file eda_ibis_parser-0.1.1-py3-none-any.whl.
File metadata
- Download URL: eda_ibis_parser-0.1.1-py3-none-any.whl
- Upload date:
- Size: 15.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f2723c5017d2e98402ab1364d538a5a28f5526abd78a472c72e2eaac4292aed
|
|
| MD5 |
363386d36c9dc3732923d06be230e9c1
|
|
| BLAKE2b-256 |
4c4d451a4259f55f334ecf29d52f6ddffd6004493bb7873abfc7030969374311
|