Welcome to the PySpice documentation!


The official Home Page of PySpice is located at http://fabricesalvaire.github.io/PySpice

If you are at http://readthedocs.org then you are reading the so called latest documentation.

The latest documentation PySpice@readthedocs-badge is automatically built from the git repository after each commit.

As opposite the PySpice Home Page is built manually and is thus less prone to errors.



  • fixed CCCS and CCVS


  • fixed ngspice shared


  • Added an example to show how to use the NgSpice Shared Simulation Mode.
  • Completed the Spice netlist parser and added examples, we could now use a schematic editor to define the circuit. The program cir2py translates a circuit file to Python.


PySpice is a Python 3 library which interplay with Berkeley SPICE, the industrial circuit simulator reference.

SPICE (Simulation Program with Integrated Circuit Emphasis) was developed at the Electronics Research Laboratory of the University of California, Berkeley in 1973 by Laurence Nagel with direction from his research advisor, Prof. Donald Pederson. Then Spice emerged as an industrial standard through its descendants and is still the reference 40 years later.

PySpice is born as a personal project to relearn electronics where circuit simulation is a part of this goal. Since I use the Python language every day, I quickly feel the need to plug SPICE and Python.

The aim of PySpice is to address several needs:

  • SPICE language is fine to describe circuits, but it lacks a real language for circuit steering. By contrast Python is a powerful high level, oriented object and dynamic language which is perfectly suited for steering and reusing circuit. But it comes at the price its more general syntax is less fluent than SPICE for circuit description.
  • Ngspice provides some extension to Berkeley SPICE for data analysis, but its interactive environment or TCL module are now outdated. By contrast Python has scientific framework like Numpy and Matplotlib that compete with Matlab.
  • Ngspice source code is derived from Berkeley SPICE and thus has a very old basis. Moreover the sources are poorly documented. So it is really difficult to understand how it works and modify it. PySpice could serve to easily experiment extension.

As opposite to other SPICE derivatives, PySpice focus on programming and not on graphical user interface. Thus it doesn’t feature a schematic capture editor and we cannot pickup a node or an element and plot the associated waveform. Moreover we can notice the Modelica language treats diagrams as annotations. A choice which I consider judicious. Thus we can imagine to follow the same principle and extend PySpice later.


The main features of PySpice are:

  • actually PySpice only supports Ngspice
  • an oriented-object API to describe circuit in a way similar to SPICE
  • a library and model manager that index recursively a directory
  • an (experimental) SPICE netlist parser. Kicad can be used as schematic editor to simplify the netlist writing.
  • a circuit can be simulated using a subprocess (aka server mode) or using the NgSpice shared library, NgSpice vectors are converted to Numpy array
  • the NgSpice shared library permits to plug voltage/current sources from Python to NgSpice and vice versa.
  • some data analysis add-ons

Since PySpice is born with a learning goal, many examples are provided with the sources. These examples could serve as learning materials. A tool to generate an HTML and PDF documentation is included in the tools directory. This tool could be extended to generate IPython Notebook as well.

Planned Features

These features are planned in the future:

  • implement a basic simulator featuring passive element like resistor, capacitor and inductor.
  • implement a Modelica backend. Modelica is a very interesting solution for transient analysis.


Users should be aware of these advertisements.


The API is quite unstable until now. Some efforts is made to have a smooth API.


Ngspice and PySpice are provided without any warranty. Thus use it with care for real design. Best is to cross check the simulation using an industrial grade simulator.


Simulation is a tool and not a perfect representation of the real world.


The procedure to install PySpice is described in the Installation Manual.


The best way to know what we can do with PySpice and learn it, is to start with the examples.