Metadata-Version: 2.0
Name: PyOPUS
Version: 0.9
Summary: A simulation-based design optimization library
Home-page: http://fides.fe.uni-lj.si/pyopus/
Author: Árpád Bűrmen
Author-email: arpadb@fides.fe.uni-lj.si
License: GPL V3
Platform: Linux
Platform: Windows
Requires-Dist: numpy
Requires-Dist: scipy
Requires-Dist: matplotlib
Requires-Dist: greenlet
Requires-Dist: mpi4py
Requires-Dist: cvxopt
Requires-Dist: pyqtgraph
Requires-Dist: lxml
Requires-Dist: pyqt5


PyOPUS is a library for simulation-based optimization of arbitrary systems. 
It was developed with circuit optimization in mind. The library is the basis 
for the PyOPUS GUI that makes it possible to setup design automation tasks with 
ease. In the GUI you can also view the the results and plot the waveforms 
generated by the simulator. 

PyOPUS provides several optimization algorithms (Coordinate Search, 
Hooke-Jeeves, Nelder-Mead Simplex, Successive Approximation Simplex, PSADE 
(global), MADS, ...). Optimization algorithms can be fitted with plugins that 
are triggered at every function evaluation and have full access to the 
internals of the optimization algorithm. 

PyOPUS has a large library of optimization test functions that can be used for 
optimization algorithm development. The functions include benchmark sets by 
Moré-Garbow-Hillstrom, Lukšan-Vlček (nonsmooth problems), Karmitsa (nonsmooth 
problems), Moré-Wild, global optimization problems by Yao, Hedar, and Yang, 
problems used in the developement of MADS algorithms, and an interface to 
thousands of problems in the CUTEr/CUTEst collection. Benchmark results can 
be converted to data profiles that visualize the relative performance of 
optimization algorithms. 

The ``pyopus.simulator`` module currently supports SPICE OPUS, HSPICE, and 
SPECTRE (supports OP, DC, AC, TRAN, and NOISE analyses, as well as, collecting 
device properties like Vdsat). The interface is simple can be easily extended to 
support any simulator.

PyOPUS provides an extensible library of postprocessing functions which
enable you to easily extract performance measures like gain, bandwidth, rise
time, slew-rate, etc. from simulation results.
The collected performance measures can be further post-processed to obtain
a user-defined cost function which can be used for guiding the optimization
algorithms toward better circuits.

At a higher elvel of abstraction PyOPUS provides sensitivity analysis, 
parameter screening, worst case performance analysis, worst case distance 
analysis (deterministic approximation of parametric yield), and Monte Carlo 
analysis (statistical approximation of parametric yield). Designs can be 
sized efficiently across a large number of corners. PyOPUS fully automates 
the procedure for finding a circuit that exhibits the desired parametric yield. 
Most of these procedures can take advantage of parallel computing which 
significantly speeds up the process. 

Parallel computing is supported through the use of the MPI library. A 
cluster of computers is represented by a VirtualMachine object which
provides a simple interface to the underlying MPI library. Parallel programs 
can be written with the help of a simple cooperative multitasking OS. This 
OS can outsource function evaluations to computing nodes, but it can also 
perform all evaluations on a single processor. 
Writing parallel programs follows the UNIX philosophy. A function can be run 
remotely with the ``Spawn`` OS call. One or more remote functions can be 
waited on with the ``Join`` OS call. The OS is capable of running a parallel 
program on a single computing node using cooperative multitasking or on a set 
of multiple computing nodes using a VirtualMachine object. Parallelism can be 
introduced on multiple levels of the program (i.e. parallel performance 
evaluation across multiple corners, parallel optimization algorithms, solving 
multiple worst case performance problems in parallel, ...). 

PyOPUS provides a plotting mechanism based on MatPlotLib and wxPython with 
an interface and capabilities similar to those available in MATLAB.
The plots are handled by a separate thread so you can write your programs
just like in MATLAB. Professional quality plots can be 
easily exported to a large number of raster and vector formats for inclusion 
in your documents. The plotting capability is used in the ``pyopus.visual`` module 
that enables the programmer to visualize the simulation results after an 
optimization run or even during an optimization run. 


