API reference¶
The reasitic package re-exports the most commonly used names at
the top level. Lower-level functionality lives in the subpackages
listed below.
Top-level package¶
reASITIC — reverse-engineered Python implementation of ASITIC.
Top-level package re-exports the most-used symbols. Submodules:
reasitic.tech—.tekparser and the Tech / Layer / Metal / Via dataclasses.reasitic.geometry— Point / Segment / Polygon / Shape and 9 shape builders (square / polygon / wire / ring / via / transformer / 3D-transformer / symmetric-square / balun / capacitor).reasitic.inductance— Greenhouse partial-inductance summation, filament-level current crowding, eddy-current correction.reasitic.resistance— DC and Wheeler skin-effect AC resistance.reasitic.quality— metal-loss-only Q.reasitic.network— Y/Z/S conversions, Pi/Pi3/Pi4 models, Zin, SelfRes, ShuntR, transformer analysis, frequency sweep, Touchstone export.reasitic.optimise— OptSq, OptPoly, OptArea, OptSymSq, BatchOpt, parametric sweeps.reasitic.substrate— per-metal-layer parallel-plate shunt cap, Sommerfeld Green’s function, FFT-grid Green’s.reasitic.exports— CIF, Sonnet, Tek, SPICE.reasitic.persistence— JSON save/load.reasitic.report— multi-frequency design report.reasitic.info— MetArea, ListSegs, LRMAT.reasitic.plot— optional matplotlib helpers.reasitic.validation— driver for the legacy ASITIC binary.reasitic.cli— REPL CLI (44 commands).
- class reasitic.Point[source]¶
Bases:
objectA 3D point in microns.
zis the metal-layer center height.
- class reasitic.Segment[source]¶
Bases:
objectA straight conductor run between two endpoints.
aandbare the endpoints;widthandthicknessare the cross-section dimensions (microns).metalis the metal layer index (resolved againstreasitic.tech.Tech).
- class reasitic.Shape[source]¶
Bases:
objectA named structure built up from polygons.
Mirrors the original C
Shaperecord (offsets 0x00..0xbc). Per-shape parameters (width,spacing,turns, etc.) are stored verbatim from the build call so downstream code can re-emit the original CLI form.- flip_horizontal()[source]¶
Mirror across the y-axis through the shape’s origin (
x → -x).- Return type:
- __init__(name, polygons=<factory>, width=0.0, length=0.0, spacing=0.0, turns=0.0, sides=4, metal=0, exit_metal=None, x_origin=0.0, y_origin=0.0, orientation=0, phase=0.0, kind='', radius=0.0, ilen=0.0)¶
- class reasitic.Tech[source]¶
Bases:
objectComplete tech-file contents.
- reasitic.balun(name, *, length, width, spacing, turns, tech, metal=None, metal2=None, primary_metal=None, secondary_metal=None, exit_metal=None, x_origin=0.0, y_origin=0.0, which='primary')[source]¶
Build one coil of a 3D / planar balun (
Balun, decomp0x0805bc74).The C builder is a 72-byte wrapper that calls
cmd_symsq_build_geometrytwice and appliescmd_flipv_applyto the secondary. Each coil is a partial SYMSQ — only alternating rings are emitted, so the two coils together interleave nicely in 3D:Primary coil: rings 0, 2, 4, … (even k) Secondary coil: rings 1, 3, 5, … (odd k)
The internal ILEN is derived from the build args (no explicit ILEN parameter for BALUN) — decoded from gold
balun_200x8x3x3_m3_m2:ILEN = 2 · (W + S) = 2 · pitch.Use
which="primary"(default) orwhich="secondary"to select the coil to materialise.- Parameters:
- Return type:
- reasitic.capacitor(name, *, length, width, metal_top, metal_bottom, tech, x_origin=0.0, y_origin=0.0)[source]¶
Build a metal-insulator-metal (MIM) capacitor (
Capacitor).Two stacked rectangles on different metal layers. The geometric overlap × dielectric thickness gives the MIM capacitance; we emit both rectangles as separate polygons so the caller can run geometry-only analyses (area, footprint).
Mirrors
cmd_capacitor_build_geometryin the original.
- reasitic.compute_ac_resistance(shape, tech, freq_ghz)[source]¶
Total AC resistance of
shapeatfreq_ghz, in Ω.Sums
ac_resistance_segment()over every segment using the metal layer’s rsh and thickness fromtech.
- reasitic.compute_dc_resistance(shape, tech)[source]¶
Return the total DC resistance of
shapein Ω.Sums
segment_dc_resistance()over every segment, treating the spiral as a single series chain (which is correct for the standard one-port self-resistance reported by ASITIC’sRescommand).
- reasitic.compute_mutual_inductance(shape_a, shape_b)[source]¶
Mutual inductance between two distinct shapes, in nH.
Sums the signed Greenhouse mutual contribution over every cross-pair of segments. The double-counting factor of 2 used in the self case does not apply here because each (i, j) pair appears exactly once.
Mirrors the binary’s
cmd_coupling_compute(asitic_repl.c:1478) — parallel, perpendicular, and general skew geometries are all handled via_segment_pair_mutual().
- reasitic.compute_self_inductance(shape)[source]¶
Total self-inductance (in nH) of a shape.
Uses Greenhouse partial-inductance summation. Mutual terms are routed through
_segment_pair_mutual(), which dispatches to the axis-aligned-parallel closed form for Manhattan spirals and to the general skew kernel for polygon / 3D geometry.
- reasitic.coupling_coefficient(shape_a, shape_b)[source]¶
Magnetic coupling coefficient
k = M / sqrt(L₁·L₂).Returns 0 if either self-inductance is non-positive. The result is dimensionless and lies in (-1, +1) for physically realisable geometries.
- reasitic.emit_vias_at_layer_transitions(shape, tech)[source]¶
Insert via polygons between adjacent polygons on different metals.
Mirrors
shape_emit_vias_at_layer_transitions(decomp0x0805ba2c). Walks the polygon list pair-wise; whenever two adjacent polygons are on different metal layers, looks up the via that bridges them and inserts a single-vertex (zero-extent) via polygon at the midpoint of the metal-to-metal transition.The via is placed on the via index of the matching
Viarecord in the tech file (matchingtop/bottomto the adjacent metal indices). If no via record matches, no insertion is made for that transition.Returns a copy; the original is untouched.
- reasitic.extend_last_segment_to_chip_edge(shape, tech)[source]¶
Push the last segment of
shapeout to the nearest chip boundary.Mirrors
shape_extend_last_to_chip_edge(decomp0x0805b154). The binary uses this on the export path so a winding’s terminal segment sticks out of the chip outline by enough to become a port.The decision tree:
If the last segment runs in +Y → snap its tail to
chipy.If it runs in -Y → snap its tail to
0.If it runs in +X → snap its tail to
chipx.If it runs in -X → snap its tail to
0.
A copy of the shape is returned; the original is untouched.
- reasitic.extend_terminal_segment(shape, *, dx_um=0.0)[source]¶
Extend the tail of
shape’s last polygon along its own axis.Mirrors
shape_terminal_segment_extend_unit(decomp0x0805b348). Walks to the last polygon, normalises the last edge’s direction vector, then re-projects its endpoint tolength/2 + dx_umalong that direction.The binary uses this when extending a winding terminal so the last segment leaves the chip with a fixed unit length plus a small
dxoffset. Returns a copy; the original is untouched.
- reasitic.metal_only_q(shape, tech, freq_ghz)[source]¶
Metal-loss-only quality factor at
freq_ghz.Returns 0 if either L or R is non-positive (so the call is safe on degenerate geometries).
- reasitic.multi_metal_square(name, *, length, width, spacing, turns, tech, metals=None, metal=None, exit_metal=None, x_origin=0.0, y_origin=0.0)[source]¶
Multi-metal series square inductor (
MMSquare).Mirrors
cmd_mmsquare_build_geometry(decomp0x0805af5c): builds a square spiral on the top metal, then a Y-mirrored, list-reversed copy on each lower metal layer down to and includingexit_metal. Adjacent layers connect via implicit vias at the inner-end of one and the outer-start of the next, boosting L for a given footprint by re-using area.Two equivalent calling conventions are supported:
metal="m3", exit_metal="m2"— matches the C ASITICMMSQ NAME=...:METAL=m3:EXIT=m2form. The Python uses every metal layer frommetaldown toexit_metalinclusive.metals=[m3, m2]— backward-compatible explicit list.
The basic square-spiral on the top metal is built with
cmd_square_build_geometry’s exit-routing branch suppressed (the C setsshape.exit_metal = -1before callingcmd_square_build_geometry). The full per-layer flip cascade is then applied by_mmsquare_layout_polygons().
- reasitic.parse_tech(source)[source]¶
Parse a tech file from a string or text stream.
- Parameters:
source (str | TextIOBase)
- Return type:
- reasitic.polygon_edge_vectors(poly, *, direction='forward')[source]¶
Return the per-edge
(dx, dy)vectors for a polygon.Mirrors the binary’s
forward_diff_2d_inplace(decomp address0x08056198) andbackward_diff_2d_inplace(0x08056148) in-place differencing helpers.direction="forward"returnsvertices[i+1] - vertices[i]fori in 0..N-2; matchesforward_diff_2d_inplaceafter-sign flip (the binary storesarr[i] -= arr[i+1], i.e.-(next - curr); we return the geometric forward edge).direction="backward"returnsvertices[i] - vertices[i-1]fori in 1..N-1; matchesbackward_diff_2d_inplace.
- reasitic.polygon_spiral(name, *, radius, width, spacing, turns, tech, sides=8, metal=0, x_origin=0.0, y_origin=0.0, phase=0.0)[source]¶
Build an
n-sided polygon spiral inscribed inradius.Mirrors ASITIC’s
cmd_spiral_build_geometry(decompiled at0x08057248): the spiral is generated as one connected polyline that turns by2π/sideseach step while the radius decreases bypitch_radial / sidesper side, wherepitch_radial = (W + S) / cos(π/sides)is the turn-to-turn radial pitch measured along the polygon’s perpendicular bisector.The bbox is then centered on
(x_origin, y_origin)(per ASITIC’sshape_translate_inplace_xypost-build pass) so the user’s origin parameter ends up at the spiral centre — matching the documented behaviour forSpiral (NAME:RADIUS:SIDES:…:XORG:YORG).
- reasitic.ring(name, *, radius, width, gap=0.0, sides=32, tech, metal=0, x_origin=0.0, y_origin=0.0, phase=0.0)[source]¶
Build a single closed-ring loop (
Ring, command id 22).A ring is a polygon spiral with exactly one turn — implemented as a thin wrapper for clarity, since the binary’s REPL exposes
Ringas a separate command.
- reasitic.segment_pair_distance_metric(seg)[source]¶
Cheap integer distance metric used to sort segment pairs.
Mirrors
segment_pair_distance_metric(decomp0x08094a5c):metric = ((seg[0x10] − seg[8]) // 1000) + ((seg[0xc] − seg[4]) · 1000)The decomp reads four
intfields from a 32-byte segment record. The Python equivalent picks the same fields off any object that exposes integer-coerciblea.x,a.y,b.x,b.yattributes (e.g. ourreasitic.geometry.Segment).
- reasitic.shapes_bounding_box(shapes, tech=None)[source]¶
Return the union bbox
(x_min, y_min, x_max, y_max)ofshapes.Mirrors the binary’s
compute_overall_bounding_box(decomp address0x08081ed4). If the input is empty andtechis provided, falls back to the chip outline(0, 0, chipx, chipy); if neither shapes nor tech is supplied, returns the all-zero bbox.The world-frame translation
(x_origin, y_origin)of eachShapeis folded into the bounding-box result, matching the binary which adds the cell offset to each shape’s local bbox.
- reasitic.spiral_max_n(*, outer_dim_um, width_um, spacing_um, spiral_type='square', sides=4)[source]¶
Maximum integer turn count that fits the spiral footprint.
Mirrors
spiral_FindMaxN(decomp0x08072a80):Square (type 0):
N = round(L / (1 + 2(W + S)))with a Q1-quartic refinement for fractional turns.Polygon (type 1):
N = (L − W) · cos(π/sides) / (S + W) − 2.
- Parameters:
- Returns:
The maximum (possibly fractional)
N. Returns-1.0if the spiral type is unrecognised, matching the binary’s error-path return value.- Return type:
- reasitic.spiral_radius_for_n(*, outer_dim_um, width_um, spacing_um, sides=4, spiral_type='square')[source]¶
Inverse of
spiral_max_n()— given the parameters, return the corner-rounded radius.Mirrors
spiral_radius_for_N(decomp0x0806c608). Square-like cases user = 0.5 · (L + W) / (W + S); polygon- like cases user = L · cos(π/sides) / (W + S).The result is then quantised on a 1/sides grid:
r = round(r) + round((r − round(r)) · sides) / sides, which is the binary’s quirky mid-fractional-turn snap. For the0x10 / 0x11symmetric-rect variants the result is fully rounded to an integer at the end (no fractional turns allowed).
- reasitic.spiral_turn_position(*, i, outer_dim_um, width_um, spacing_um, fold_size)[source]¶
Position of the
i-th wire turn, with reflection across the fold.Mirrors
spiral_turn_position_recursive(decomp0x080943ac):If
fold_size < i, recurse with the reflected index(2·fold_size − i) + 1and negate.Otherwise return
0.5 · (outer_dim − W) − (W + S) · (i − 1).
Used by the symmetric-spiral builders to place each turn at the right offset.
- reasitic.square_spiral(name, *, length, width, spacing, turns, tech, metal=0, x_origin=0.0, y_origin=0.0, phase=0.0)[source]¶
Build a square (4-sided) spiral.
Mirrors the binary’s
cmd_square_build_geometryfor the simple case (no exit metal, no ILEN inner-bound, no 3D mirroring): each turn is one closed square loop, with the spiral collapsing inward bywidth + spacingper turn. The spiral occupies the metal layermetal(index or tech-file name).Parameters are in microns.
turnsmay be fractional; integer turns each emit four sides, and the fractional remainder contributesround(4*frac)additional sides on a partial turn.The trace is generated as a single connected polyline matching ASITIC’s
cmd_square_build_geometry(decompiled at0x08056670):centerlines are inset by
W/2from the outerlength × lengthbounding box, so the outer metal edge sits exactly at±L/2;the entry lead extends the outermost top-side centerline all the way to the left edge (
x = -L/2) so the spiral can be probed at the chip boundary;each successive turn shrinks inward by
pitch = W + Sand the bottom-left corner of one turn connects to the top-left corner of the next via the outer-left side, producing a true Archimedean spiral instead of nested closed loops;the very last segment is trimmed by
1.5 × Wto leave clearance for the exit-via attachment, matching the binary’s reference output.
The Python signature follows ASITIC’s documented convention:
(x_origin, y_origin)is the lower-left corner of the spiral’s outer bounding box, so the spiral metal occupies[x_origin, x_origin + length] × [y_origin, y_origin + length]in world coords (withphase = 0).Verified vertex-for-vertex against the 1999 ASITIC binary’s
LISTSEGSoutput (BiCMOS tech, captured under qemu-i386-static).
- reasitic.summary()[source]¶
Return a one-line description of this reASITIC install.
Useful from the REPL or scripts to confirm version, optional extras (matplotlib), and Python version. Returns the string; callers can
print(summary())if needed.- Return type:
- reasitic.symmetric_polygon(name, *, radius, width, spacing, turns, ilen=0.0, sides=8, tech, metal=0, primary_metal=None, exit_metal=None, x_origin=0.0, y_origin=0.0)[source]¶
Symmetric centre-tapped polygon spiral (
SymPoly, case 17).Mirrors
cmd_sympoly_build_geometry(decomp0x0805a45c): one continuous polygon spiral that runs2Nhalf-turns from outer-to-inner-to-outer with a centre-tap stub at the apex and cross-ring slants at every other transition. The structure is decoded by_sympoly_layout_polygons(); this builder just wires the parameters through.- Parameters:
radius (float) – outer-corner polygon radius R (μm).
width (float) – metal trace width W (μm).
spacing (float) – edge-to-edge gap S between turns (μm).
turns (float) – integer turn count N.
ilen (float) – centre-tap span (ASITIC’s
ILENparameter; defaults toW + Sper the C edit_args fallback).sides (int) – polygon side count (must be even, ≥ 4).
exit_metal (int | str | None) – alternating slant + via-cluster metal (typically one layer below
metal).name (str)
tech (Tech)
primary_metal
x_origin (float)
y_origin (float)
- Return type:
- reasitic.symmetric_square(name, *, length, width, spacing, turns, tech, metal=0, primary_metal=None, exit_metal=None, bridge_metal=None, ilen=0.0, x_origin=0.0, y_origin=0.0)[source]¶
Build a symmetric centre-tapped square spiral (
SymSq).Mirrors
cmd_symsq_build_geometry(decomp0x08059854).The geometry is decoded by piece in
_symsq_layout_polygons(); this builder just wires the arguments through. Currently full CIF parity is reached forturns=2(the simplest case);turns≥3is a follow-up.- Parameters:
length (float) – outer side length L (μm).
width (float) – metal trace width W (μm).
spacing (float) – edge-to-edge gap S between turns (μm).
turns (float) – integer turn count N (only N=2 fully supported).
ilen (float) – centre-tap span (ASITIC’s
ILENparameter).exit_metal (int | str | None) – layer used for the centre-tap M2 trace + via cluster connection.
y_origin (float) – lower-left of the LxL bbox in μm.
name (str)
tech (Tech)
primary_metal
x_origin (float)
y_origin
- Return type:
- reasitic.three_class_resistance(shape, tech)[source]¶
Three-class material-weighted DC-resistance accumulator.
Returns a
ThreeClassResistancetriple(R_a, R_b, R_c)with each bucket combining a length term and a sheet-resistance term per the binary’s fixed weight table.
- reasitic.transformer(name, *, length=None, width=None, spacing=None, turns=None, primary_length=None, primary_width=None, primary_spacing=None, primary_turns=None, secondary_length=None, secondary_width=None, secondary_spacing=None, secondary_turns=None, tech, metal=None, exit_metal=None, metal_primary=None, metal_secondary=None, x_origin=0.0, y_origin=0.0, which='primary')[source]¶
Build a planar two-coil transformer (
Trans).Mirrors
cmd_trans_build_geometry(decomp0x080576d4): two square spirals on the same metal (METAL), interleaved by a double-pitch + a half-pitch offset so the secondary’s tracks fit between the primary’s. The secondary is built with a flip in both axes viacmd_flipv_apply+cmd_fliph_apply.For the canonical
TRANS PNAME=TP:SNAME=TS:LEN=L:W=W:S=S:N=Ncase both coils have identical dimensions. The primary’s internal lower-left corner sits at:(XORG + (W + S), YORG + (2W + S))
and each coil uses an effective spacing of
W + 2·Sso the inter-turn pitch is2·(W + S)— leaving room for the secondary’s interleaved turns.The C builder leaves both coils linked and
CIFSAVEaddresses each by name. Usewhich="primary"(default) orwhich="secondary"to pick the coil to materialise.Both legacy positional kwargs (
length,width,spacing,turns) and the test-harness primary/secondary pair are accepted; missing fields default to the correspondingprimary_*value or vice versa.- Parameters:
name (str)
length (float | None)
width (float | None)
spacing (float | None)
turns (float | None)
primary_length (float | None)
primary_width (float | None)
primary_spacing (float | None)
primary_turns (float | None)
secondary_length (float | None)
secondary_width (float | None)
secondary_spacing (float | None)
secondary_turns (float | None)
tech (Tech)
x_origin (float)
y_origin (float)
which (str)
- Return type:
- reasitic.transformer_3d(name, *, length, width, spacing, turns, tech, metal_top, metal_bottom, via_index=0, x_origin=0.0, y_origin=0.0)[source]¶
3-D non-planar mirror-stacked transformer (
3DTrans).Two co-axial square spirals on different metal layers, vertically aligned and connected by a via at the centre. The two coils share the same chip footprint, so there’s no horizontal separation as in
transformer().Mirrors the simple-case path of
cmd_3dtrans_build_geometry(asitic_repl.c:0x08057d40). The full binary version supports centre-tapped variants and multi-via stacks; this implementation is the planar-mirror form.
- reasitic.via(name, *, tech, via_index=0, nx=1, ny=1, x_origin=0.0, y_origin=0.0)[source]¶
Build a via cluster of size
nx×nyat(x, y).Mirrors
cmd_via_build_geometry(decomp0x08057b78): emits one polygon record at the shape’s origin with X-extentnx · via_w + (nx-1) · via_sand Y-extentny · via_w + (ny-1) · via_s. The polygon is tagged with both metal-layer colours (top via table[cc] and bottom via table[d0]) so the CIF/GDS emitter expands it to:an M2 box pad covering the array
an M3 box pad at the same position
nx × nyVIA squares of sizevia_w × via_wspaced byvia_s + via_win a regular grid
The Python form returns a Shape carrying all three layer polygons directly (the C’s “polygon record references both metals + emits a grid” is decoded into individual records).
- reasitic.wire(name, *, length, width, tech, metal=0, x_origin=0.0, y_origin=0.0, phase=0.0)[source]¶
Build a single straight wire of length
lengthonmetal.Matches ASITIC’s
W NAME=…:LEN=…:WID=…:METAL=…:XORG=…:YORG=…convention:(x_origin, y_origin)is the lower-left corner of the wire’s bounding box, so the metal occupies[x_origin, x_origin + length] × [y_origin, y_origin + width]whenphase=0. The centerline runs alongy = y_origin + W/2.
- reasitic.wire_position_periodic_fold(*, i, outer_dim_um, width_um, spacing_um, fold_size)[source]¶
1-D position-folding helper for the wire-discretisation pass.
Mirrors
wire_position_periodic_fold(decomp0x08094370). Reflectsiacross the fold centre until it lands in[0, fold_size], then returns(outer − W) − (W + S) · 2 · (i − 1).
- reasitic.write_tech_file(tech, path)[source]¶
Serialise a Tech object back to a
.tektext file.The output format matches the parser:
<chip>/<layer>/<metal>/<via>sections withkey = valuebody lines. Round-trips losslessly throughparse_tech_file()for the canonical fields;extradicts are preserved.
Subpackages¶
- Technology files
- Geometry & shapes
PointSegmentPolygonShapepolygon_edge_vectors()shapes_bounding_box()extend_terminal_segment()emit_vias_at_layer_transitions()extend_last_segment_to_chip_edge()layout_polygons()square_spiral()polygon_spiral()wire()via()ring()transformer()symmetric_square()capacitor()symmetric_polygon()multi_metal_square()transformer_3d()balun()
- Physical constants
- Inductance
rectangular_bar_self_inductance()segment_self_inductance()coupled_wire_self_inductance()perpendicular_segment_mutual()mohan_modified_wheeler()hoer_love_perpendicular_mutual()parallel_segment_mutual()compute_self_inductance()compute_mutual_inductance()coupling_coefficient()Filamentauto_filament_subdivisions()auto_filament_subdivisions_critical()filament_grid()build_inductance_matrix()build_resistance_vector()solve_inductance_mna()solve_inductance_matrix()assemble_eddy_matrix()eddy_packed_index()eddy_correction()solve_inductance_with_eddy()
- Resistance
- Quality factor
- Network analysis
y_to_z()z_to_y()y_to_s()s_to_y()PiModelpi_to_y()pi_equivalent()deembed_pad_open()deembed_pad_open_short()z_2port_from_y()imag_z_2port_from_y()zin_terminated_2port()spiral_y_at_freq()reduce_3port_z_to_2port_y()z_to_s_3port()TouchstonePointwrite_touchstone()write_touchstone_file()TouchstoneFileread_touchstone()read_touchstone_file()NetworkSweeptwo_port_sweep()linear_freqs()PiResultpi_model_at_freq()zin_terminated()Pi3ResultPi4Resultpi3_model()pi4_model()PixResultpix_model()ShuntRResultshunt_resistance()TransformerAnalysiscalc_transformer()SelfResonanceself_resonance()
- Substrate model
parallel_plate_cap_per_area()shape_shunt_capacitance()propagation_constant()green_oscillating_integrand()green_propagation_integrand()green_function_kernel_a_oscillating()green_function_kernel_b_reflection()green_function_select_integrator()green_kernel_shared_helper()green_kernel_a_helper()green_kernel_b_helper()green_function_kernel_a()green_function_kernel_b()layer_reflection_coefficient()green_layer_tanh_factor()green_function_static()rect_tile_self_inv_r()coupled_capacitance_per_pair()integrate_green_kernel()GreenFFTGridsetup_green_fft_grid()compute_green_function()green_apply()fft_apply_to_green()rasterize_shape()substrate_cap_matrix()
- Optimisation
- Exports
write_cif()write_cif_file()read_cif()read_cif_file()write_sonnet()write_sonnet_file()read_sonnet()read_sonnet_file()write_tek()write_tek_file()write_tek4014()write_tek4014_file()write_spice_subckt()write_spice_subckt_file()write_spice_broadband()write_spice_broadband_file()write_fasthenry()write_fasthenry_file()
- Info commands
- Design report
- Plotting helpers
- Persistence
- Binary validation
- Command-line REPL
- Graphical interface