Skip to main content

A pure-Python parser for IBIS (.ibs) files — extracts I/O buffer model data including pin, component, and waveform information for EDA signal integrity workflows

Project description

ibis-parser

A pure-Python parser for IBIS (I/O Buffer Information Specification) .ibs signal-integrity model files.

Python License: MIT


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 .ibs with printer()
  • SI unit conversionstring2float('1.5nH')1.5e-9
  • Pythonic navigationget_block() / get_blocks() with optional title and node filters
  • CLI included — inspect .ibs files from the terminal without writing a single line of Python

Installation

pip install eda-ibis-parser

PyPI Python

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

MIT

Project details


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.0.tar.gz (18.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

eda_ibis_parser-0.1.0-py3-none-any.whl (15.7 kB view details)

Uploaded Python 3

File details

Details for the file eda_ibis_parser-0.1.0.tar.gz.

File metadata

  • Download URL: eda_ibis_parser-0.1.0.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

Hashes for eda_ibis_parser-0.1.0.tar.gz
Algorithm Hash digest
SHA256 626e984c0b0a989c7e8d2cf602ea62e00cb15b9fd20da5588c6733ffc4a09931
MD5 37d53ca03e521750047f50f749d8040c
BLAKE2b-256 093e84f2b8e6d962c995afaae744e24afbd3f241e095138ef68317e86328176c

See more details on using hashes here.

File details

Details for the file eda_ibis_parser-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for eda_ibis_parser-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f20f1381762ba6e727dbc107198552ae5e1908f21fe374de68ef0e6a620f404d
MD5 4e9b379e8646500c298e376f502a408d
BLAKE2b-256 b4611ff08fdb34f489c0d521fafc3baba8e063fd19264a22cdaf86369d54e067

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page