2.1. Vx.y.0 (whishes)¶
The circuit API is actually low level. It is fastidious to work with and error-prone. Skidl has a very good approach to make the connections between elements. A clever idea is to make the connection through loop, e.g. gnd & C1 & (R1 | R2) & D1 & vcc.
Improve Spice library handling, e.g. we have to read the library code to know how to map the pins, etc.
Improve the Spice parser.
Unit should be provided by a third party. We need a library that works well with Spice.
2.2. V1.6.0 (development release)¶
New Simulation API
# build a circuit # instantiate a simulator simulator = Simulator.factory() # or simulator = Simulator.factory(simulator='ngspice') # same as simulator = Simulator.factory(simulator='ngspice-shared') # create a simulation, it corresponds to the Spice code part with lines starting with ".someting ..." simulation = simulator.simulation(circuit, temperature=25, nominal_temperature=25) # define a analysis and run it analysis = simulation.transient(step_time=ac_line.period/200, end_time=ac_line.period*50, log_desk=True) # analysis is now Pickable
Simulation output is now Pickable
KiCadTools a proof of concept module to read KiCad 6 .kicad_sch schema file and compute the netlist. This module can be used to perform any kind of processings on a KiCad schema. It is actually hosted in the source but could become a standalone project. For PySpice, it provides a very flexible way to draft a circuit with the help of KiCad and then generate the netlist without using the netlist export feature of KiCad. And thus leverage the writing of fastidious cicruit.
The most common PySpice parts can be imported from
from PySpice import ...
Logging setup code cleanup
2.3. V1.5.0 (production release) 2021-05-15¶
Support Ngspice up to version 34
Renamed custom dunders “__dunder__” to “CONSTANT” or “_private” class attributes
Fixed typo in documentation (thanks to endolith and brollb)
Add DC temperature sweep support #272 (thanks to Fatsie)
PWL support improvements #271 (thanks to Fatsie)
Assign units on creation of temperature-sweep vectors #263 (thanks to ARF1)
Prevent memory leaks by freeing ngspice command log #260 thanks to ARF1)
Performance optimization: dispatch multiple alter commands jointly #259 (thanks to ARF1)
Added spice library support #258 (thanks to Fatsie)
Allow to specify DC value for PWL #257 (thanks to Fatsie)
Support for .nodeset type initial condition #256 (thanks to Fatsie)
Fix accuracy problems #254 (thanks to sotw1957)
Changes to make it easier to use PySpice with a large archive of SPICE models medium diff #249 (thanks to xesscorp)
Netlist.py: Fix wrong method when joining parameters during netlist parse #245 (thanks to cyber-g)
Unit: add Pickle support
Add Parser code from #136 (thanks to jmgc) but not yet merged
Unit: add np.mean
2.4. V1.4.3 2020-07-04¶
A huge effort, thanks to @stuarteberg Stuart Berg, has been made to make Ngspice and PySpice available on Anaconda (conda-forge) for the Window, OSX and Linux platforms. Thanks to the conda-forge continuous integration platform, we can now run unit tests and the examples on theses platforms automatically. Hope this will make the software more robust and easier to run !
PySpice is now available on Anaconda(conda-forge) as well as a wheel on PyPI
Added a post installation tool to download the Ngspice DLL on Windows and to check the installation. It should now simplify considerably the PySpice installation on Windows.
This tool can also download the examples and the Ngspice PDF manual.
On Linux and OSX, a Ngspice package is now available on Anaconda(conda-forge). Note that theses two platforms do not download a binary from Ngspice since a compiler can easily be installed on theses platforms.
Updated installation documentation for Linux, the main distributions now provide a ngspice shared package.
Added a front-end web site so as to keep older releases documentation available on the web.
fixed and rebuilt all examples (but mistakes could happen …)
examples are now available as Python files and Jupyter notebooks (but some issues must be fixed, e.g. due to the way Jupyter handles Matplotlib plots)
support NgSpice 32 API (no change)
removed @substitution@ in PySpice/__init__.py, beacause it breaks pip install from git
fixed some logging spams
fixed Unicode issue with °C (° is Extended ASCII)
fixed ffi_string_utf8 for UnicodeDecodeError
fixed logging formater for OSX (removed ANSI codes)
reworded “Invalid plot name” exception
removed diacritics in example filenames
cir2py has been converted to an entry point so as to work on all platforms
updated Matplotlib subplots in examples
added a unit example
added a NMOS example (thanks to cyber-g) cf. #221
2.5. V1.4.0 2020-05-05¶
This release is yanked due to broken Windows support.
fixed nasty issue with NgSpice shared for setlocale(LC_NUMERIC, “C”); cf. #172
fixed AC AC_MAG AC_PASAE SIN for new NgSpice syntax
fixed initial_state for VoltageControlledSwitch
fixed LosslessTransmissionLine #169
fixed docstrings for element shortcut methods (thanks to Kyle Dunn) #178
fixed parser for leading whitespace (thanks to Matt Huszagh) #182
fix for PyYAML newer API
support NgSpice 31 API (no change)
added check for CoupledInductor #157
added check-installation tool to help to fix broken installation
added pole-zero, noise, distorsion, transfer-function analyses (thanks to Peter Garrone) #191
added .measure support (thanks to ceprio) #160
added log_desk parameter to CircuitSimulator
added listing command method to NgSpiceShared
added Xyce Mosfet nfin #177
2.6. V1.3.2 2019-03-11¶
support Ngspice 30 and Xyce 6.10
fixed NgSpice and Xyce support on Windows 10
2.7. V1.2.0 2018-06-07¶
Initial support of the Xyce simulator. Xyce is an open source, SPICE-compatible, high-performance analog circuit simulator, capable of solving extremely large circuit problems developed at Sandia National Laboratories. Xyce will make PySpice suitable for industry and research use.
Fixed OSX support
Splitted G device
Implemented partially A XSPICE device
Implemented missing transmission line devices
Implemented high level current sources Notice: Some classes were renamed !
Implemented node kwarg e.g.
circuit.Q(1, base=1, collector=2, emitter=3, model='npn')
Implemented raw spice pass through (see User FAQ)
Implemented access to internal parameters (cf.
Implemented check for missing ground node
Implemented a way to disable an element and clone netlist
Improved SPICE parser
Improved unit support:
Implemented unit prefix cast U_μV(U_mV(1)) to easily convert values
Added U_mV, … shortcuts
Added Numpy array support to unit, see UnitValues Notice: this new feature could be buggy !!!
Rebased WaveForm to UnitValues
Fixed node order so as to not confuse users Now PySpice matches SPICE order for two ports elements !
Fixed device shortcuts in Netlist class
Fixed model kwarg for BJT Notice: it must be passed exclusively as kwarg !
Fixed subcircuit nesting
Outsourced documentation generator to Pyterate
Updated setup.py for wheel
2.8. V1.1.0 2017-09-06¶
Enhanced shared mode
Shared mode is now set as default on Linux
2.9. V1.0.0 2017-09-06¶
Bump version to v1.0.0 since it just works!
Support Windows platform using Ngspice shared mode
Fixed shared mode
Fixed and completed Spice parser : tested on example’s libraries
Fixed Spice parser for lower case device prefix.
2.11. V0.4.0 2017-07-31¶
Git repository cleanup: filtered generated doc and useless files so as to shrink the repository size.
Improved documentation generator: Implemented
formatfor RST content and Tikz figure.
Improved unit support: It implements now the International System of Units. And we can now use unit helper like
u_mVor compute the value of
1.2@u_kΩ / 2@u_mA. The relevant documentation is on this page.
Added the Simulation instance to the Analysis class.
Refactored simulation parameters as classes.
2.12. V0.3.2 2017-02-22¶
fixed CCCS and CCVS
2.13. V0.3.1 2017-02-22¶
fixed ngspice shared
2.14. V0.3.0 2015-12-08¶
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.
2.15. V0 2014-03-21¶