Basic ExamplesΒΆ

from skillbridge import Workspace

ws = Workspace.open()
cell_view = ws.ge.get_edit_cell_view()

print(dir(cell_view))
print(cell_view.b_box)

cell_view = ws.db.open_cell_view("lib", "cell_name", "view_name")

Accessing the currently open edit cell view

cell_view = ws.ge.get_edit_cell_view()

Skill equivalent: cellView = geGetEditCellView()

Inspecting available properties

>>> dir(cell_view)
['DBUPerUU', 'any_inst_count', 'area_boundaries', 'assoc_text_displays', 'b_box', ...]

Skill equivalent: cellView->?

or type cell_view.<TAB> in ipython/jupyter

Reading properties

>>> print(cell_view.b_box)
[[0, 10], [0, 10]]

Skill equivalent: cellView->bBox

Hint

All Skill identifiers like bBox or cellViewType are transformed to snake case on the python side b_box and cell_view_type. You may choose whether you want to use the original camel-case names or the transformed snake-case variants.

>>> cell_view.bBox
[[0, 10], [0, 10]]
>>> cell_view.b_box
[[0, 10], [0, 10]]

Calling global functions

The Skill functions are separated based on their prefix (compare dbOpenCellView vs schCreateWire). Functions with the same prefix are grouped together inside a python client.functions.FunctionCollection.

>>> ws.db.open_cell_view("lib", "cell_name", "view_name")  # dbOpenCellView
<remote object ...>

Skill equivalent: dbOpenCellView("lib", "cell_name", "view_name")

>>> ws.sch.create_wire(...)  # schCreateWire
[<remote object ...>]

Skill equivalent: schCreateWire(...)

Passing Quoted Symbols

Some Skill functions accept quoted symbols e.g. 'someSymbol. For this simple case you can use the Symbol wrapper class in python.

>>> ws.ns.some_function(Symbol('someSymbol'))
...

Skill equivalent: nsSomeFunction('someSymbol)

Calling functions with keyword arguments

Some Skill functions have named arguments (key arguments). This can be seen in the documentation.

>>> ws.le.compute_area_density
<remote function>
leComputeAreaDensity(
w_windowId
l_lppSpec
[ ?depth x_depth ]
[ ?region l_region ]
)

Skill equivalent: help(leComputeAreaDensity)

We can see that the function takes four arguments: w_windowId and l_lppSpec are positional arguments and can be passed as shown above. But depth and region are key parameters. These are translated to keyword arguments in python:

>>> ws.le.compute_area_density(window, llp_spec, depth=some_value, region=some_value)
[...]

Skill equivalent: leComputeAreaDensity(window llpSpec ?depth someValue ?region someValue)

Warning

On the python side you must use keyword arguments if and only if the Skill function has a named parameter.

Some functions even take lists of key arguments. For this case we provide the keys function in python:

>>> from skillbridge import keys
>>> ws._.some_function([keys(x=1, y=1), keys(x=2, y=2])
[...]

Skill equivalent: someFunction( list( list(?x 1 ?y 1) list(?x 2 ?y 2) ) )

Should the need arise it is also possible to directly create these key symbols for Skill with the Key class.

>>> from skillbridge import Key
>>> Key('xyz')
Key(xyz)

Skill equivalent: ?xyz

Calling methods

Some Skill functions receive a remote object as their first argument.

>>> ws.db.full_path
<remote method 'dbFullPath'>
dbFullPath(
d_cellView
)

These functions can be treated like methods by calling them directly from the corresponding remote object:

>>> cell_view.db_full_path()  # not the '_' instead of '.'
# same output as ws.db.full_path(cell_view)

Skill equivalent: dbFullPath(cellView)

Note

In order to prevent name collisions, the method name contains the prefix of the Skill function while the global functions do not, since they are already grouped under that prefix.

Accessing global variables

Sometimes you need access to certain global variables (e.g. stdout). All global variables are grouped under the prefix __ (two underscores).

>>> ws.__.stdout
<remote open_file '*stdout*'>