boundlab.interp.Interpreter#

class boundlab.interp.Interpreter[source]#

Bases: TyDict[OpHandler]

Evaluate an ONNX graph over concrete tensors and abstract expressions.

A collection of OpHandlers keyed by handler class. Calling the interpreter on a model (module, callable, ONNX IR, or path) returns a function that replays the graph node by node: each node’s operator name dispatches to the unique handler whose condition accepts the operands, and after_each post-processes every node result (domains use it to normalize components). interpreter.<op>(...) exposes the same dispatch directly, which is how handlers compose.

Methods

__init__

after_each

clear

copy

fromkeys

Create a new dictionary with keys from iterable and values set to value.

get

Return the value for key if key is in the dictionary, else default.

items

keys

keyset

pop

If the key is not found, return the default if given; otherwise, raise a KeyError.

popitem

Remove and return a (key, value) pair as a 2-tuple.

setdefault

Insert key with a value of default if key is not in the dictionary.

update

If E is present and has a .keys() method, then does: for k in E.keys(): D[k] = E[k] If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v In either case, this is followed by: for k in F: D[k] = F[k]

values

__init__(*handlers, after_each=None)[source]#
handler_called: list[OpHandler] | None#
static after_each(value, name)#
__call__(model, verbose=False)[source]#

Build a callable that evaluates model over abstract inputs.

classmethod __new__(*args, **kwargs)#
clear() → None.  Remove all items from D.#
copy() → a shallow copy of D#
classmethod fromkeys(iterable, value=None, /)#

Create a new dictionary with keys from iterable and values set to value.

get(key, default=None, /)#

Return the value for key if key is in the dictionary, else default.

items() → a set-like object providing a view on D's items#
keys() → a set-like object providing a view on D's keys#
keyset()#
pop(k[, d]) → v, remove specified key and return the corresponding value.#

If the key is not found, return the default if given; otherwise, raise a KeyError.

popitem()#

Remove and return a (key, value) pair as a 2-tuple.

Pairs are returned in LIFO (last-in, first-out) order. Raises KeyError if the dict is empty.

setdefault(key, default=None, /)#

Insert key with a value of default if key is not in the dictionary.

Return the value for key if key is in the dictionary, else default.

update([E, ]**F) → None.  Update D from mapping/iterable E and F.#

If E is present and has a .keys() method, then does: for k in E.keys(): D[k] = E[k] If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v In either case, this is followed by: for k in F: D[k] = F[k]

values() → an object providing a view on D's values#