Changelog for PyOPUS 0.12 (with respect to PyOPUS 0.11.2)
=========================================================
- Switched to Numpy 2
- Switched from % to f-strings. 
- Bugfixes in evaluator and design module. 
- Made demo/design/miller more consistent. 
- GUI now passes -oversubscribe to mpirun. 


Changelog for PyOPUS 0.11.2 (with respect to PyOPUS 0.11)
=========================================================
- Switched from setuptools to pyproject.toml and build. 
  Setuptools is still used as the backend. 
  The packages are built using the build frontend. 
- Instructions for using PyOPUS with venv Python virtual environments. 
  This is mandatory since Debian 12 if you want to install .whl files. 
- Linux version tested with Debian 12 Bookworm. 
- Switched to git. 
- Using setuptools_scm for version number extraction. 


Changelog for PyOPUS 0.11 (with respect to PyOPUS 0.10)
=======================================================
simulator
---------
- support for current output in Spice Opus noise analysis
- Ngspice simulator support
- Xyce simulator support
- tf analysis support for Spice Opus and Ngspice
- timeout support for HSPICE and Spectre

evaluator
---------
- analyses are sorted in PerformanceEvaluator to make it more deterministic
- XatIrange improved, more sensible defaults
- logarithmic normalization of measures
- improved debug() function

demo
----
- added a simple Ngspice example
- Miller OTA demo examples for Ngspice and Xyce
- GUI Miller OTA example for Ngspice and Xyce


Changelog for PyOPUS 0.10 (with respect to PyOPUS 0.9)
======================================================
simulator
---------
- spiceopus input file naming changed to <ID>.group_<n>.cir
- spiceopus output file naming changed to <ID>.job_<n>.<job name>.raw
- tf analysis support
- Ngspice simulator support

evaluator
---------
- changed the way corners are specified
- support for blank analyses which replace the None analysis
- collection of result files now supports abstract paths
- changed job naming to <corner>.<analysis>
- temporary results file name changed to <prefix><ID>.<job name>.<tmp code>
- collected results file name changed to <prefix><corner>.<analysis>.pck
- performance evaluator now allows complex results
- aggregator considers complex results from performance evaluator as failed

parallel
--------
- added support for function call delegation to spawner
- exception forwarding to spawner
- added support for persistent object storage

design
------
- delegation of database writes in parallel runs to spawner
- corner generator changed to accommodate new corner format
- updated wc and wcd analysis to new corner format

demo
----
- added a simple bipolar amplifier design demo
- added a simple bipolar amplifier design demo for gui
- simple Ngspice example

gui
---
- project file version set to 1.1, import for version 1.0 added
- support for new corner format 
- support for blank analyses
- trace styling
- task creation dialog
- result file format changed, old projects need to be rerun

plotter
-------
- import with 'from pyopus.plotter import interface as pyopl'
- no need to do an init()
- once the control window is closed, no plotting is possible until 
  the program ends

problems
--------
- simplified CUTEr interface, no need to define the C_INCLUDE_PATH and 
  LIBPATH environmental variables  

netlister
---------
Added support for KiCad 6. 
All demos are available in V5 and V6 format. 


Changelog for PyOPUS 0.9 (with respect to PyOPUS 0.8)
=====================================================
Installer:
- switched to wheel packages
- added dependencies
- added a shell script (pyog) for starting the GUI
- added a shell script (pyori) for starting the results database inspector

General changes
---------------
- improved exception handling
- added examples to documentation 
  (plotting, vm, parallelization, evaluation)
- ported to Python 3
- replaced distutils with setuptools
- added netlister module 

Documentation
-------------
- added a demo example for the GUI
- added full documentation for the GUI
- miller OTA demo examples for HSPICE and Spectre
- added documentation of the design module (nominal and corner-based design)
- added a KiCad -> Spice Opus netlisting and simulation demo

netlister
---------
- KiCad netlister for Spice Opus

misc
----
- improved logging
- added support for storing results in sqlite files 

wxmplplot
---------
- removed, see plotting module for replacement

plotting
--------
- added a MatPlotLib-based plotting module using PyQt5
- plot windows no longer support printing
  If needed, dump an eps/png file and print it manually. 
  
visual
--------
- joined with the plotting module

parallel
--------
- enumeration of vm objects
- local storage folders are now prefixed with username
- debugging and host identification in MPI module
- debugging in cooperative module
- removed obsolete evtdrvms module
- added support for MPI under Windows (via Microsoft MPI)
- debug messages tranported via MPI messages from workers to master where
  they are printed

simulator
---------
- SimulationResults objects introduced for storing and sharing imported
  simulation results

evaluator
---------
- performance evaluator now supports specifying a simulator with a class object
- head names must now be listed for corners (a corner is applied only to the 
  listed heads)
- removed obsolete cost module (replaced with aggregate)

problems
--------
- added CEC13 problems for global optimization

gui
---
- added a PyQt5-based GUI for setting up and running design tasks
- currently supports only CBD tasks
- log viewing
- results inspection

design
------
- cbd now can optimize across all corners at once
- cbd now supports storing results in a sqlite database
- evaluate-only mode for cbd


Changelog for PyOPUS 0.8 (with respect to PyOPUS 0.7)
=====================================================
general
-------
- converted all binary modules to NumPy 1.7 API

misc
----
- renamed id.py to identify.py
- added microthread id support
- added sobol.py for generating Sobol sequences, 
  includes a binary module
- added halton.py for generating Halton sequences
  includes a binary module

problems
--------
- all optimization test problems are now under the problems module
- added More-Wild test functions and data profile generation, 
  includes a binary module
- global optimization test problems are now in the glbc module, 
  new problems added (the Hedar set of problems)
- MADS test problems added, 
  includes a binary module (MDO and STYRENE), 
  depends on the lvns module (MAD6, HS114)
- Lukšan-Vlček problems, 
  includes binary modules
- Large scale nonsmooth test function (Karmitsa set), 
  includes a binary module
- Interface to CUTEr problems (LINUX only at present)

simulator
---------
- rawfile now supports importing spice raw files generated by Spectre
- added support for Cadence Spectre simulator (batch mode)

evaluator
---------
- cost module renamed to aggregate, CostEvaluator renamed to Aggregator
- performance module can distribute the evaluations of analyses in corners 
  across multiple computing nodes
- user can now specify python variables that are accessible during 
  the evaluation of save directives, analyses, and performance measures
- new auxiliary functions for parameter management (auxfunc)

parallel
--------
- removed support for PVM
- added support for MPI
- added a cooperative multitasking OS with task outsourcing
- evtdrvms and jobdispatch modules are now marked as obsolete, 
  will be removed in next release

design
------
- design automation module added
- added sesitivity analysis and parameter screening
- added worst case performance and worst case distance analysis
- added Monte Carlo analysis
- added sizing across corners
- added yield targeting

optimizer
---------
- added constrained optimizer
- splitted the plugin and annotator functionality
- moved RandomDelay and CostCollector to the optimizer module
- modified the mechanism for invoking remote evaluation
- added support for caching (works out of the box only for local runs)
- added support for filter-based point acceptance
- added the grid-restrained Nelder Mead algorithm
- removed the ppe optimizer, use the parallel.cooperative.cOS.dispatch method instead
- added mesh-adaptive direct search with quadratic programming (cvxopt based)


PyOPUS 0.10 depends on
---------------------
- NumPy
- SciPy
- MatPlotLib
- PyQt5
- pyqtgraph
- CVXOPT
- Greenlet
- MPI4py
- CUTEr compiled with -fPIC
