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.1.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.1-py3-none-any.whl (15.7 kB view details)

Uploaded Python 3

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

Hashes for eda_ibis_parser-0.1.1.tar.gz
Algorithm Hash digest
SHA256 7ed08070f6c1a286445b025b67fad752614a5114f19b3de389b3e17fd9aa9045
MD5 6b6787a2916d2c3eccd513c0b9d90d7b
BLAKE2b-256 66430314665261a5afaf5eaae779c1c8f98c43fe45c67e43b0d594796d780023

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eda_ibis_parser-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0f2723c5017d2e98402ab1364d538a5a28f5526abd78a472c72e2eaac4292aed
MD5 363386d36c9dc3732923d06be230e9c1
BLAKE2b-256 4c4d451a4259f55f334ecf29d52f6ddffd6004493bb7873abfc7030969374311

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