From 025237045ade55055004ad42eaffd56abacef83e Mon Sep 17 00:00:00 2001 From: Fabrice SALVAIRE Date: Fri, 26 Jan 2024 03:04:56 +0100 Subject: [PATCH 1/2] readme --- README.html | 745 ++++++++++++++++++++++++++++------------------------ README.rst | 106 ++++++-- README.txt | 19 +- 3 files changed, 501 insertions(+), 369 deletions(-) diff --git a/README.html b/README.html index 63f2eaa02..8d69b6c50 100644 --- a/README.html +++ b/README.html @@ -1,16 +1,17 @@ - - + + + PySpice : Simulate Electronic Circuit using Python and the Ngspice / Xyce Simulators -
+

PySpice : Simulate Electronic Circuit using Python and the Ngspice / Xyce Simulators

-

PySpice license -PySpice python version

-

PySpice last version

-

Anaconda last version -Anaconda donwloads

-

PySpice build status @travis-ci.org

+

PySpice license +PySpice python version

+

PySpice last version

+

Anaconda last version +Anaconda donwloads

+

PySpice build status @travis-ci.org

+

Pyspice Test

Quick Links

-
-

Brief Notes

-

Thanks to Discourse, PySpice now has a Forum hosted at https://pyspice.discourse.group

+
+

2024 Update

Disclaimer: PySpice is developed on my free time actually, so I could be busy with other tasks and less reactive.

+

The free Discourse forum was closed some time ago due to a lack of activity. +A HTML backup is stored in the directory pyspice-discourse-backup.

+

On HEAD +* fixed the ngspice library loading for recent cffi +* fixed simulation aborting due to a message from newer ngspice +* fixes for Spice parser +* added support for Pint unit library +* implemented SpiceLibrary +* code cleanup but must check for typo...

+

An issue was found with NgSpice Shared, we must setlocale(LC_NUMERIC, "C"); see https://sourceforge.net/p/ngspice/bugs/490/

-
-
-

Overview

-
-

What is PySpice ?

+ +
+

Overview

+
+

What is PySpice ?

PySpice is a Python module which interface Python to the Ngspice and Xyce circuit simulators.

-
-
-

Where is the Documentation ?

+ +
+

Where is the Documentation ?

The documentation is available on the PySpice Home Page.

Note: This site is hosted on my own infrastructure, if the site seems done, please create an issue to notify me.

-
-
-

Where to get help or talk about PySpice ?

+ +
+

Where to get help or talk about PySpice ?

Thanks to Discourse, PySpice now has a Forum hosted at https://pyspice.discourse.group

-
-
-

What are the main features ?

+ +
+

What are the main features ?

  • support Ngspice and Xyce circuit simulators

  • support Linux, Windows and Mac OS X platforms

  • @@ -657,41 +676,79 @@

    What are the main features ?

  • implement a documentation generator

  • provides many examples

-
-
-

How to install it ?

+ +
+

How to install it ?

Look at the installation section in the documentation.

-
-
-
-

Pull Request Recommendation

+ + +
+

Pull Request Recommendation

To make it easier to merge your pull request, you should divide your PR into smaller and easier-to-verify units.

Please do not make a pull requests with a lot of modifications which are difficult to check. If I merge pull requests blindly then there is a high risk this software will become a mess quickly for everybody.

-
-
-

Credits

-

Authors: Fabrice Salvaire and contributors

-
-
-

News

+ +
+

Credits

+

Authors: Fabrice SALVAIRE and contributors

+
+
+

News

-
-

V1.6.0 (development release)

+
+

Vx.y.0 (wishes)

    +
  • 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.

  • +
  • Unit should be provided by a third party. We need a library that works well with Spice.

  • +
+
+
+

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 ".something ..."
    +simulation = simulator.simulation(circuit, temperature=25, nominal_temperature=25)
    +# define an 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

  • +
  • The Spice parser was rewritten from scratch using the PLY +library, which is an implementation of lex and yacc parsing tools for Python. The LALR parser +generates an AST from a BNF grammar written from scratch using the Ngspice manual. Up to now, it +only requires a hack to handle the grammar, cf. XSpice vector syntax [1 -1 -2] which +interfere with mathematical expression. PySpice is now able to parse completely and properly all +the examples from the Ngspice manual. However, the processing of the AST does actually the bare +minimum.

  • 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 +be used to perform any kind of processing 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.

  • +writing of fastidious circuit.

    +
  • The most common PySpice parts can be imported from from PySpice import ...

  • +
  • Logging setup code clean-up

-
-
-

V1.5.0 (production release) 2021-05-15

+
+
+

V1.5.0 (production release) 2021-05-15

  • Support Ngspice up to version 34

  • Renamed custom dunders "__dunder__" to "CONSTANT" or "_private" class attributes

  • @@ -709,14 +766,14 @@

    V1.5.0 (production release) 2021-05-15

  • 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

  • +
  • Unit: add np.mean

-
-
-

V1.4.3 2020-07-04

+ +
+

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 +conda-forge continuous integration platform, we can now run unit tests and the examples on these 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

  • @@ -724,29 +781,29 @@

    V1.4.3 2020-07-04

    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.

  • +Note that theses two platforms do not download a binary from Ngspice since a compiler can easily be installed on these 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.

  • +
  • Added a front-end website 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

  • +
  • removed @substitution@ in PySpice/__init__.py, beacause it breaks pip install from git

  • fixed some logging spams

  • fixed NonLinearVoltageSource

  • fixed Unicode issue with °C (° is Extended ASCII)

  • fixed ffi_string_utf8 for UnicodeDecodeError

  • -
  • fixed logging formater for OSX (removed ANSI codes)

  • +
  • fixed logging formatter 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

  • +
  • cir2py has been converted to an entry point to work on all platforms

  • updated Matplotlib subplots in examples

  • added a unit example

  • added a NMOS example (thanks to cyber-g) cf. #221

-
-
-

V1.4.0 2020-05-05

+ +
+

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

  • @@ -759,23 +816,23 @@

    V1.4.0 2020-05-05

  • 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 pole-zero, noise, distortion, 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

-
-
-

V1.3.2 2019-03-11

+ +
+

V1.3.2 2019-03-11

  • support Ngspice 30 and Xyce 6.10

  • fixed NgSpice and Xyce support on Windows 10

  • bug fixes

-
-
-

V1.2.0 2018-06-07

+ +
+

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 @@ -787,7 +844,7 @@

    V1.2.0 2018-06-07

  • 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 node kwargs 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. save @device[parameter])

  • Implemented check for missing ground node

  • @@ -801,41 +858,41 @@

    V1.2.0 2018-06-07

  • Rebased WaveForm to UnitValues

-
  • Fixed node order so as to not confuse users Now PySpice matches SPICE order for two ports elements !

  • +
  • Fixed node order 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 model kwargs for BJT Notice: it must be passed exclusively as kwargs !

  • Fixed subcircuit nesting

  • Outsourced documentation generator to Pyterate

  • Updated setup.py for wheel

  • -
    -
    -

    V1.1.0 2017-09-06

    + +
    +

    V1.1.0 2017-09-06

    • Enhanced shared mode

    • Shared mode is now set as default on Linux

    -
    -
    -

    V1.0.0 2017-09-06

    + +
    +

    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

    -
    -
    -

    V0.4.2

    + +
    +

    V0.4.2

    • Fixed Spice parser for lower case device prefix.

    -
    -
    -

    V0.4.0 2017-07-31

    + +
    +

    V0.4.0 2017-07-31

      -
    • Git repository cleanup: filtered generated doc and useless files so as to shrink the repository size.

    • +
    • Git repository clean-up: filtered generated doc and useless files to shrink the repository size.

    • Improved documentation generator: Implemented format for 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_mV or compute the value of 1.2@u_kΩ / 2@u_mA. @@ -843,34 +900,34 @@

      V0.4.0 2017-07-31

    • Added the Simulation instance to the Analysis class.

    • Refactored simulation parameters as classes.

    -
    -
    -

    V0.3.2 2017-02-22

    + +
    +

    V0.3.2 2017-02-22

    • fixed CCCS and CCVS

    -
    -
    -

    V0.3.1 2017-02-22

    + +
    +

    V0.3.1 2017-02-22

    • fixed ngspice shared

    -
    -
    -

    V0.3.0 2015-12-08

    + +
    +

    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.

    -
    -
    -

    V0 2014-03-21

    + +
    +

    V0 2014-03-21

    Started project

    -
    -
    - + + + diff --git a/README.rst b/README.rst index 7448cf49b..5151a7294 100644 --- a/README.rst +++ b/README.rst @@ -43,6 +43,10 @@ .. |Tavis CI master| image:: https://travis-ci.com/FabriceSalvaire/PySpice.svg?branch=master :target: https://travis-ci.com/FabriceSalvaire/PySpice :alt: PySpice build status @travis-ci.org + +.. |Pyspice Test Workflow| image:: https://github.com/FabriceSalvaire/PySpice/actions/workflows/pyspice-test.yml/badge.svg?branch=devel + :target: https://github.com/FabriceSalvaire/PySpice/actions/workflows/pyspice-test.yml + :alt: Pyspice Test .. -*- Mode: rst -*- .. _CFFI: http://cffi.readthedocs.org/en/latest/ @@ -75,9 +79,9 @@ .. |Tikz| replace:: Tikz .. |Xyce| replace:: Xyce -===================================================================================== +====================================================================================== PySpice : Simulate Electronic Circuit using Python and the Ngspice / Xyce Simulators -===================================================================================== +====================================================================================== |Pypi License| |Pypi Python Version| @@ -89,25 +93,42 @@ |Tavis CI master| +|Pyspice Test Workflow| + **Quick Links** -* `Production Branch `_ * `Devel Branch `_ -* `Travis CI `_ +* `Production Branch `_ +* `Travis CI `_ but need free credits... + * `pyspice@conda-forge `_ * `conda-forge/pyspice `_ * `ngspice@conda-forge `_ + * `Ngspice `_ * `Ngspice Bug Tracker `_ * `Xyce of Sandia National Laboratories `_ -Brief Notes +2024 Update =========== -Thanks to `Discourse `_, PySpice now has a **Forum** hosted at https://pyspice.discourse.group - **Disclaimer: PySpice is developed on my free time actually, so I could be busy with other tasks and less reactive.** +The free Discourse forum was closed some time ago due to a lack of activity. +A HTML backup is stored in the directory `pyspice-discourse-backup`. + +**On HEAD** +* fixed the ngspice library loading for recent cffi +* fixed simulation aborting due to a message from newer ngspice +* fixes for Spice parser +* added support for Pint unit library +* implemented SpiceLibrary +* code cleanup but must check for typo... + +.. + Brief Notes + =========== + An issue was found with NgSpice Shared, we must `setlocale(LC_NUMERIC, "C");` see https://sourceforge.net/p/ngspice/bugs/490/ Overview @@ -162,7 +183,7 @@ pull requests blindly then there is a high risk this software will become a mess Credits ======= -Authors: `Fabrice Salvaire `_ and `contributors `_ +Authors: `Fabrice SALVAIRE `_ and `contributors `_ News ==== @@ -172,17 +193,58 @@ News .. no title here +Vx.y.0 (wishes) +---------------- + +* 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. +* Unit should be provided by a third party. We need a library that works well with Spice. + V1.6.0 (development release) ---------------------------- +* **New Simulation API** + + .. code-block:: python + + # 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 ".something ..." + simulation = simulator.simulation(circuit, temperature=25, nominal_temperature=25) + # define an 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 + +* The **Spice parser** was rewritten from scratch using the `PLY `_ + library, which is an implementation of lex and yacc parsing tools for Python. The LALR parser + generates an AST from a BNF grammar written from scratch using the Ngspice manual. Up to now, it + only requires a hack to handle the grammar, cf. XSpice vector syntax :code:`[1 -1 -2]` which + interfere with mathematical expression. PySpice is now able to parse completely and properly all + the examples from the Ngspice manual. However, the processing of the AST does actually the bare + minimum. * **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 + be used to perform any kind of processing 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. + writing of fastidious circuit. +* The most common PySpice parts can be imported from :code:`from PySpice import ...` +* Logging setup code clean-up V1.5.0 (production release) 2021-05-15 -------------------------------------- @@ -203,14 +265,14 @@ V1.5.0 (production release) 2021-05-15 * `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 +* Unit: add :code:`np.mean` 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 +conda-forge continuous integration platform, we can now run unit tests and the examples on these 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 @@ -218,24 +280,24 @@ platforms automatically. Hope this will make the software more robust and easie 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. + Note that theses two platforms do not download a binary from Ngspice since a compiler can easily be installed on these 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. +* Added a front-end website 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 +* removed :code:`@substitution@` in PySpice/__init__.py, beacause it breaks pip install from git * fixed some logging spams * fixed NonLinearVoltageSource * fixed Unicode issue with °C (° is Extended ASCII) * fixed ffi_string_utf8 for UnicodeDecodeError -* fixed logging formater for OSX (removed ANSI codes) +* fixed logging formatter 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 +* cir2py has been converted to an entry point to work on all platforms * updated Matplotlib subplots in examples * added a unit example * added a NMOS example (thanks to cyber-g) cf. #221 @@ -255,7 +317,7 @@ This release is yanked due to broken Windows support. * 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 pole-zero, noise, distortion, 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` @@ -281,7 +343,7 @@ V1.2.0 2018-06-07 * Implemented missing transmission line devices * Implemented high level current sources **Notice: Some classes were renamed !** -* Implemented node kwarg e.g. :code:`circuit.Q(1, base=1, collector=2, emitter=3, model='npn')` +* Implemented node kwargs e.g. :code:`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. :code:`save @device[parameter]`) * Implemented check for missing ground node @@ -294,9 +356,9 @@ V1.2.0 2018-06-07 * 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 node order 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 model kwargs for BJT **Notice: it must be passed exclusively as kwargs !** * Fixed subcircuit nesting * Outsourced documentation generator to |Pyterate|_ * Updated `setup.py` for wheel @@ -325,7 +387,7 @@ V0.4.2 V0.4.0 2017-07-31 ----------------- -* Git repository cleanup: filtered generated doc and useless files so as to shrink the repository size. +* Git repository clean-up: filtered generated doc and useless files to shrink the repository size. * Improved documentation generator: Implemented :code:`format` for RST content and Tikz figure. * Improved unit support: It implements now the International System of Units. And we can now use unit helper like :code:`u_mV` or compute the value of :code:`1.2@u_kΩ / 2@u_mA`. diff --git a/README.txt b/README.txt index 57adb79fe..5e77c534a 100644 --- a/README.txt +++ b/README.txt @@ -29,13 +29,26 @@ * `Ngspice Bug Tracker `_ * `Xyce of Sandia National Laboratories `_ -Brief Notes +2024 Update =========== -Thanks to `Discourse `_, PySpice now has a **Forum** hosted at https://pyspice.discourse.group - **Disclaimer: PySpice is developed on my free time actually, so I could be busy with other tasks and less reactive.** +The free Discourse forum was closed some time ago due to a lack of activity. +A HTML backup is stored in the directory `pyspice-discourse-backup`. + +**On Devel HEAD** +* fixed the ngspice library loading for recent cffi +* fixed simulation aborting due to a message from newer ngspice +* fixes for Spice parser +* added support for Pint unit library +* implemented SpiceLibrary +* code cleanup but must check for typo... + +.. + Brief Notes + =========== + An issue was found with NgSpice Shared, we must `setlocale(LC_NUMERIC, "C");` see https://sourceforge.net/p/ngspice/bugs/490/ Overview From fe08718d5a1a9af94576b5aef1fa81910f09b037 Mon Sep 17 00:00:00 2001 From: Fabrice SALVAIRE Date: Fri, 26 Jan 2024 03:18:15 +0100 Subject: [PATCH 2/2] readme --- README.html | 91 ++++++++++++++++------------------------------------- README.rst | 90 +++++++++++++--------------------------------------- README.txt | 1 + 3 files changed, 49 insertions(+), 133 deletions(-) diff --git a/README.html b/README.html index 8d69b6c50..4f53b4c8b 100644 --- a/README.html +++ b/README.html @@ -616,12 +616,11 @@

    PySpice : Simulate Electronic Circuit using Python and the Ngs

    Anaconda last version Anaconda donwloads

    PySpice build status @travis-ci.org

    -

    Pyspice Test

    Quick Links

      -
    • Devel Branch

    • Production Branch

    • -
    • Travis CI but need free credits...

    • +
    • Devel Branch

    • +
    • Travis CI

    • pyspice@conda-forge

    • conda-forge/pyspice

    • ngspice@conda-forge

    • @@ -634,13 +633,15 @@

      2024 Update

      Disclaimer: PySpice is developed on my free time actually, so I could be busy with other tasks and less reactive.

      The free Discourse forum was closed some time ago due to a lack of activity. A HTML backup is stored in the directory pyspice-discourse-backup.

      -

      On HEAD -* fixed the ngspice library loading for recent cffi -* fixed simulation aborting due to a message from newer ngspice -* fixes for Spice parser -* added support for Pint unit library -* implemented SpiceLibrary -* code cleanup but must check for typo...

      +

      On Devel HEAD

      +
        +
      • fixed the ngspice library loading for recent cffi

      • +
      • fixed simulation aborting due to a message from newer ngspice

      • +
      • fixes for Spice parser

      • +
      • added support for Pint unit library

      • +
      • implemented SpiceLibrary

      • +
      • code cleanup but must check for typo...

      • +

      An issue was found with NgSpice Shared, we must setlocale(LC_NUMERIC, "C"); see https://sourceforge.net/p/ngspice/bugs/490/

      @@ -690,61 +691,23 @@

      Pull Request Recommendation

      Credits

      -

      Authors: Fabrice SALVAIRE and contributors

      +

      Authors: Fabrice Salvaire and contributors

      News

      -
      -

      Vx.y.0 (wishes)

      -
        -
      • 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.

      • -
      • Unit should be provided by a third party. We need a library that works well with Spice.

      • -
      -

      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 ".something ..."
        -simulation = simulator.simulation(circuit, temperature=25, nominal_temperature=25)
        -# define an 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

      • -
      • The Spice parser was rewritten from scratch using the PLY -library, which is an implementation of lex and yacc parsing tools for Python. The LALR parser -generates an AST from a BNF grammar written from scratch using the Ngspice manual. Up to now, it -only requires a hack to handle the grammar, cf. XSpice vector syntax [1 -1 -2] which -interfere with mathematical expression. PySpice is now able to parse completely and properly all -the examples from the Ngspice manual. However, the processing of the AST does actually the bare -minimum.

      • +
        • 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 processing on a KiCad schema. It is +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 circuit.

        • -
        • The most common PySpice parts can be imported from from PySpice import ...

        • -
        • Logging setup code clean-up

        • +writing of fastidious cicruit.

      @@ -766,14 +729,14 @@

      V1.5.0 (production release) 2021-05-15

    • 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

    • +
    • Unit: add np.mean

    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 these +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

    • @@ -781,22 +744,22 @@

      V1.4.3 2020-07-04

      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 these platforms.

    • +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 website to keep older releases documentation available on the web.

    • +
    • 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

    • +
    • removed @substitution@ in PySpice/__init__.py, beacause it breaks pip install from git

    • fixed some logging spams

    • fixed NonLinearVoltageSource

    • fixed Unicode issue with °C (° is Extended ASCII)

    • fixed ffi_string_utf8 for UnicodeDecodeError

    • -
    • fixed logging formatter for OSX (removed ANSI codes)

    • +
    • 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 to work on all platforms

    • +
    • 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

    • @@ -816,7 +779,7 @@

      V1.4.0 2020-05-05

    • 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, distortion, transfer-function analyses (thanks to Peter Garrone) #191

    • +
    • 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

    • @@ -844,7 +807,7 @@

      V1.2.0 2018-06-07

    • Implemented missing transmission line devices

    • Implemented high level current sources Notice: Some classes were renamed !

    • -
    • Implemented node kwargs e.g. circuit.Q(1, base=1, collector=2, emitter=3, model='npn')

    • +
    • 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. save @device[parameter])

    • Implemented check for missing ground node

    • @@ -858,9 +821,9 @@

      V1.2.0 2018-06-07

    • Rebased WaveForm to UnitValues

    -
  • Fixed node order to not confuse users Now PySpice matches SPICE order for two ports elements !

  • +
  • 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 kwargs for BJT Notice: it must be passed exclusively as kwargs !

  • +
  • 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

  • @@ -892,7 +855,7 @@

    V0.4.2

    V0.4.0 2017-07-31

      -
    • Git repository clean-up: filtered generated doc and useless files to shrink the repository size.

    • +
    • Git repository cleanup: filtered generated doc and useless files so as to shrink the repository size.

    • Improved documentation generator: Implemented format for 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_mV or compute the value of 1.2@u_kΩ / 2@u_mA. diff --git a/README.rst b/README.rst index 5151a7294..d3a3102fe 100644 --- a/README.rst +++ b/README.rst @@ -43,10 +43,6 @@ .. |Tavis CI master| image:: https://travis-ci.com/FabriceSalvaire/PySpice.svg?branch=master :target: https://travis-ci.com/FabriceSalvaire/PySpice :alt: PySpice build status @travis-ci.org - -.. |Pyspice Test Workflow| image:: https://github.com/FabriceSalvaire/PySpice/actions/workflows/pyspice-test.yml/badge.svg?branch=devel - :target: https://github.com/FabriceSalvaire/PySpice/actions/workflows/pyspice-test.yml - :alt: Pyspice Test .. -*- Mode: rst -*- .. _CFFI: http://cffi.readthedocs.org/en/latest/ @@ -79,9 +75,9 @@ .. |Tikz| replace:: Tikz .. |Xyce| replace:: Xyce -====================================================================================== +===================================================================================== PySpice : Simulate Electronic Circuit using Python and the Ngspice / Xyce Simulators -====================================================================================== +===================================================================================== |Pypi License| |Pypi Python Version| @@ -93,18 +89,14 @@ |Tavis CI master| -|Pyspice Test Workflow| - **Quick Links** -* `Devel Branch `_ * `Production Branch `_ -* `Travis CI `_ but need free credits... - +* `Devel Branch `_ +* `Travis CI `_ * `pyspice@conda-forge `_ * `conda-forge/pyspice `_ * `ngspice@conda-forge `_ - * `Ngspice `_ * `Ngspice Bug Tracker `_ * `Xyce of Sandia National Laboratories `_ @@ -117,7 +109,8 @@ The free Discourse forum was closed some time ago due to a lack of activity. A HTML backup is stored in the directory `pyspice-discourse-backup`. -**On HEAD** +**On Devel HEAD** + * fixed the ngspice library loading for recent cffi * fixed simulation aborting due to a message from newer ngspice * fixes for Spice parser @@ -183,7 +176,7 @@ pull requests blindly then there is a high risk this software will become a mess Credits ======= -Authors: `Fabrice SALVAIRE `_ and `contributors `_ +Authors: `Fabrice Salvaire `_ and `contributors `_ News ==== @@ -193,58 +186,17 @@ News .. no title here -Vx.y.0 (wishes) ----------------- - -* 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. -* Unit should be provided by a third party. We need a library that works well with Spice. - V1.6.0 (development release) ---------------------------- -* **New Simulation API** - - .. code-block:: python - - # 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 ".something ..." - simulation = simulator.simulation(circuit, temperature=25, nominal_temperature=25) - # define an 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 - -* The **Spice parser** was rewritten from scratch using the `PLY `_ - library, which is an implementation of lex and yacc parsing tools for Python. The LALR parser - generates an AST from a BNF grammar written from scratch using the Ngspice manual. Up to now, it - only requires a hack to handle the grammar, cf. XSpice vector syntax :code:`[1 -1 -2]` which - interfere with mathematical expression. PySpice is now able to parse completely and properly all - the examples from the Ngspice manual. However, the processing of the AST does actually the bare - minimum. * **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 processing on a KiCad schema. It is + 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 circuit. -* The most common PySpice parts can be imported from :code:`from PySpice import ...` -* Logging setup code clean-up + writing of fastidious cicruit. V1.5.0 (production release) 2021-05-15 -------------------------------------- @@ -265,14 +217,14 @@ V1.5.0 (production release) 2021-05-15 * `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 :code:`np.mean` +* Unit: add np.mean 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 these +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 @@ -280,24 +232,24 @@ platforms automatically. Hope this will make the software more robust and easie 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 these platforms. + 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 website to keep older releases documentation available on the web. +* 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 :code:`@substitution@` in PySpice/__init__.py, beacause it breaks pip install from git +* removed @substitution@ in PySpice/__init__.py, beacause it breaks pip install from git * fixed some logging spams * fixed NonLinearVoltageSource * fixed Unicode issue with °C (° is Extended ASCII) * fixed ffi_string_utf8 for UnicodeDecodeError -* fixed logging formatter for OSX (removed ANSI codes) +* 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 to work on all platforms +* 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 @@ -317,7 +269,7 @@ This release is yanked due to broken Windows support. * 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, distortion, transfer-function analyses (thanks to Peter Garrone) #191 +* 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` @@ -343,7 +295,7 @@ V1.2.0 2018-06-07 * Implemented missing transmission line devices * Implemented high level current sources **Notice: Some classes were renamed !** -* Implemented node kwargs e.g. :code:`circuit.Q(1, base=1, collector=2, emitter=3, model='npn')` +* Implemented node kwarg e.g. :code:`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. :code:`save @device[parameter]`) * Implemented check for missing ground node @@ -356,9 +308,9 @@ V1.2.0 2018-06-07 * Added Numpy array support to unit, see `UnitValues` **Notice: this new feature could be buggy !!!** * Rebased `WaveForm` to `UnitValues` -* Fixed node order to not confuse users **Now PySpice matches SPICE order for two ports elements !** +* 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 kwargs for BJT **Notice: it must be passed exclusively as kwargs !** +* 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 @@ -387,7 +339,7 @@ V0.4.2 V0.4.0 2017-07-31 ----------------- -* Git repository clean-up: filtered generated doc and useless files to shrink the repository size. +* Git repository cleanup: filtered generated doc and useless files so as to shrink the repository size. * Improved documentation generator: Implemented :code:`format` for RST content and Tikz figure. * Improved unit support: It implements now the International System of Units. And we can now use unit helper like :code:`u_mV` or compute the value of :code:`1.2@u_kΩ / 2@u_mA`. diff --git a/README.txt b/README.txt index 5e77c534a..82305f155 100644 --- a/README.txt +++ b/README.txt @@ -38,6 +38,7 @@ The free Discourse forum was closed some time ago due to a lack of activity. A HTML backup is stored in the directory `pyspice-discourse-backup`. **On Devel HEAD** + * fixed the ngspice library loading for recent cffi * fixed simulation aborting due to a message from newer ngspice * fixes for Spice parser