cma (version 0.9.92 $Revision: 2658 $)
index
cma.py

Module cma implements the CMA-ES, Covariance Matrix Adaptation Evolution 
Strategy, a stochastic optimizer for robust non-linear non-convex function 
minimization. 
 
CMA-ES searches for a minimizer (a solution x in R**n) of an
objective function f (cost function), such that f(x) is
minimal. Regarding f, only function values for candidate solutions
need to be available, gradients are not necessary. Even less
restrictive, only a passably reliable ranking of the candidate
solutions in each iteration is necessary. Some termination 
criteria however depend on actual f-values. 
 
Two interfaces are provided:
 
  - function `fmin(func, x0, sigma0,...)` 
        runs a complete minimization 
        of the objective function func with CMA-ES. 
 
  - class `CMAEvolutionStrategy
      allows for minimization such that the 
      control of the iteration loop remains with the user. 
 
 
Used packages: 
 
    - unavoidable: `numpy` (see `barecmaes2.py` if `numpy` is not 
      available), 
    - avoidable with small changes: `time`, `sys` 
    - optional: `matplotlib.pylab` (for `plot` etc., highly 
      recommended), `pprint` (pretty print), `pickle` (in class
      `Sections`), , `doctest`, `inspect`, `pygsl` (never by default)
 
Testing
-------
The code can be tested on a given system. Typing::
 
    python cma.py --test --quiet 
    
or in the Python shell ``ipython -pylab``::
 
    run cma.py --test --quiet
    
runs ``doctest.testmod(cma)`` showing only exceptions (ana not the 
tests that fail due to small differences in the output) and should 
run without complaints in about under two minutes. On some systems,
the pop up windows must be closed manually to continue and finish 
the test.  
 
Example
-------
::
 
    import cma
    help(cma)  # "this" help message, use cma? in ipython
    help(cma.fmin)
    help(cma.CMAEvolutionStrategy)
    help(cma.Options)
    cma.Options('tol')  # for display
    res = cma.fmin(cma.Fcts.tablet, 15 * [1], 1)
    res[0]  # best evaluated solution
    res[5]  # mean solution, presumably better with noise
    
:See: `fmin()`, `Options`, `CMAEvolutionStrategy
 
:Author: Nikolaus Hansen, 2008-2011
 
:License: GPL 2 and 3

 
Modules
       
numpy
matplotlib.pylab
sys
time

 
Classes
       
__builtin__.dict(__builtin__.object)
CMAStopDict
Options
__builtin__.object
BestSolution
BlancClass
BoundPenalty
CMAParameters
ElapsedTime
FitnessFunctions
GenoPhenoBase
GenoPheno
MathHelperFunctions
Misc
NoiseHandler
OOOptimizer
CMAEvolutionStrategy
OptimDataLogger
CMADataLogger
Rotation
Sections
numpy.ndarray(__builtin__.object)
Solution

 
class BestSolution(__builtin__.object)
    container to keep track of the best solution seen
 
  Methods defined here:
__init__(self, x=None, f=inf, evals=None)
initialize the best solution with `x`, `f`, and `evals`.
Better solutions have smaller `f`-values.
get(self)
return ``(x, f, evals)``
update(self, arx, arf=None, evals=None)
checks for better solutions in list `arx`, based on the smallest 
corresponding value in `arf`, alternatively, `update` may be called 
with a `BestSolution` instance like ``update(another_best_solution)``
in which case the better solution becomes the current best

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

 
class BlancClass(__builtin__.object)
    blanc container class for having a collection of attributes
 
  Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

 
class BoundPenalty(__builtin__.object)
    Computes the boundary penalty. Must be updated each iteration, 
using the `update` method. 
 
Details
------- 
The penalty computes like ``sum(w[i] * (x[i]-xfeas[i])**2)``, 
where `xfeas` is the closest feasible (in-bounds) solution from `x`.
The weight `w[i]` should be updated during each iteration using
the update method. 
 
This class uses `GenoPheno.into_bounds` in method `update` to access 
domain boundary values and repair. This inconsistency might be 
removed in future.
 
  Methods defined here:
__call__(self, x, bounds=None)
returns the boundary violation penalty for `x` ,where `x` is a 
single solution or a list or array of solutions. 
If `bounds` is not `None`, the values in `bounds` are used, see `__init__`
__init__(self, bounds)
Argument bounds can be `None` or `bounds[0]` and `bounds[1]` 
are lower  and upper domain boundaries, each is either `None` or 
a scalar or a list or array of appropriate size.
feasible_ratio(self, solutions)
counts for each coordinate the number of feasible values in
``solutions`` and returns an array of length ``len(solutions[0])``
with the ratios. 
 
`solutions` is a list or array of repaired `Solution` instances
update(self, function_values, es, bounds=None)
updates the weights for computing a boundary penalty. 
 
Arguments
---------
`function_values`
    all function values of recent population of solutions
`es`
    `CMAEvolutionStrategyobject instance, in particular the
    method `into_bounds` of the attribute `gp` of type `GenoPheno`
    is used. 
`bounds`
    not (yet) in use other than for ``bounds == [None, None]`` nothing
    is updated.  
    
Reference: Hansen et al 2009, A Method for Handling Uncertainty... 
IEEE TEC, with addendum at http://www.lri.fr/~hansen/TEC2009online.pdf

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

 
class CMADataLogger(OptimDataLogger)
    data logger for class `CMAEvolutionStrategy`. The logger is
identified by its name prefix and writes or reads according 
data files. 
 
Examples
======== 
::
 
    import cma
    es = cma.CMAEvolutionStrategy(...)
    data = cma.CMADataLogger().register(es)
    while not es.stop():
        ...
        data.add()  # add can also take an argument
 
    data.plot() # or a short cut can be used:
    cma.plot()  # plot data from logger with default name
    
    
    data2 = cma.CMADataLogger(another_filename_prefix).load()
    data2.plot()
    data2.disp()
 
::
 
    import cma
    from pylab import *
    res = cma.fmin(cma.Fcts.sphere, rand(10), 1e-0)
    dat = res[-1]  # the CMADataLogger
    dat.load()  # by "default" data are on disk
    semilogy(dat.f[:,0], dat.f[:,5])  # plot f versus iteration, see file header
    show()
    
Details
=======
After loading data, the logger has the attributes `xmean`, `xrecent`, `std`, `f`, and `D`, 
corresponding to xmean, xrecentbest, stddev, fit, and axlen filename trails. 
 
:See: `disp()`, `plot()`
 
 
Method resolution order:
CMADataLogger
OptimDataLogger
__builtin__.object

Methods defined here:
__init__(self, name_prefix='outcmaes', modulo=None)
initialize logging of data from a `CMAEvolutionStrategy` instance, 
default modulo expands to 1 == log with each call
add(self, es=None, more_data=[], modulo=None)
append some logging data from `CMAEvolutionStrategy` class instance `es`, 
if ``number_of_times_called % modulo`` equals to zero, never if ``modulo==0``. 
 
The sequence ``more_data`` must always have the same length.
closefig(self)
disp(self, idx=100)
displays selected data from (files written by) the class `CMADataLogger`.
 
Arguments
---------
   `idx` 
       indices corresponding to rows in the data file; 
       if idx is a scalar (int), the first two, then every idx-th, 
       and the last three rows are displayed. Too large index values are removed. 
       
Example
-------
>>> import cma, numpy as np
>>> res = cma.fmin(cma.fcts.elli, 7 * [0.1], 1, verb_disp=1e9)  # generate data
>>> assert res[1] < 1e-9 
>>> assert res[2] < 4400
>>> l = cma.CMADataLogger()  # == res[-1], logger with default name, "points to" above data 
>>> l.disp(0)  # only best
>>> l.disp([0,-1])  # first and last
>>> l.disp(20)  # some first/last and every 20-th line
>>> l.disp(np.r_[0:999999:100, -1]) # every 100-th and last
>>> l.disp(np.r_[0, -10:0]) # first and ten last
>>> cma.disp(l.name_prefix, np.r_[0::100, -10:])  # the same as l.disp(...)
 
Details
-------
The data line with the best f-value is displayed as last line. 
 
:See: `disp()`
downsampling(self, factor=10, first=3, switch=True)
rude downsampling of a `CMADataLogger` data file by `factor`, keeping 
also the first `first` entries. This function is a stump and subject
to future changes. 
 
Arguments
---------
   - `factor` -- downsampling factor
   - `first` -- keep first `first` entries
   - `switch` -- switch the new logger name to oldname+'down'
 
Details
-------
``self.name_prefix+'down'`` files are written
 
Example
-------
::
 
    import cma
    cma.downsampling()  # takes outcmaes* files
    cma.plot('outcmaesdown')
initialize(self, modulo=None)
reset logger, overwrite original files, `modulo`: log only every modulo call
load(self, filenameprefix=None)
loads data from files written and return a data dictionary, *not*
a prerequisite for using `plot()` or `disp()`. 
 
Argument `filenameprefix` is the filename prefix of data to be loaded (five files),
by default ``'outcmaes'``. 
 
Return data dictionary with keys `xrecent`, `xmean`, `f`, `D`, `std`
plot(self, fig=None, iabscissa=1, iteridx=None, plot_mean=True, foffset=1e-19, x_opt=None, fontsize=10)
plot data from a `CMADataLogger` (using the files written by the logger). 
 
Arguments
---------
    `fig`
        figure number, by default 325
    `iabscissa`
        ``0==plot`` versus iteration count,
        ``1==plot`` versus function evaluation number
    `iteridx`
        iteration indices to plot
        
Return `CMADataLogger` itself. 
 
Examples
--------
::
 
    import cma
    logger = cma.CMADataLogger()  # with default name
    # try to plot the "default logging" data (e.g. from previous fmin calls)
    logger.plot() # to continue you might need to close the pop-up window 
                  # once and call plot() again. 
                  # This behavior seems to disappear in subsequent 
                  # calls of plot(). Also using ipython with -pylab
                  # option might help. 
    cma.savefig('fig325.png')  # save current figure
    logger.closefig()
 
Dependencies: matlabplotlib/pylab.
register(self, es, append=False, modulo=None)
register a `CMAEvolutionStrategy` instance for logging, 
``append=True`` appends to previous data logged under the same name, 
by default previous data are overwritten.
save(self, nameprefix, switch=False)
saves logger data to a different set of files, for 
``switch=True`` also the loggers name prefix is switched to 
the new value

Static methods defined here:
plotdivers(dat, iabscissa, foffset)
helper function for `plot()` that plots all what is
in the upper left subplot like fitness, sigma, etc. 
 
Arguments
---------
    `iabscissa` in ``(0,1)`` 
        0==versus fevals, 1==versus iteration
    `foffset`
        offset to fitness for log-plot
        
 :See: `plot()`

Data and other attributes defined here:
default_prefix = 'outcmaes'
names = ('axlen', 'fit', 'stddev', 'xmean', 'xrecentbest')

Methods inherited from OptimDataLogger:
data(self)
return logged data in a dictionary (not implemented)

Data descriptors inherited from OptimDataLogger:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

 
class CMAEvolutionStrategy(OOOptimizer)
    CMA-ES stochastic optimizer class with ask-and-tell interface.
See `fmin` for the one-line-call functional interface.  
 
Calling sequence
================
``optim = CMAEvolutionStrategy(x0, sigma0, opts)``
returns a class instance. 
 
Arguments
---------
    `x0` 
        initial solution, starting point.
    `sigma0` 
        initial standard deviation.  The problem
        variables should have been scaled, such that a single
        standard deviation on all variables is useful and the
        optimum is expected to lie within about `x0` +- ``3*sigma0``.
        See also options `scaling_of_variables`. 
        Often one wants to check for solutions close to the initial 
        point. This allows for an easier check for consistency of
        the objective function and its interfacing with the optimizer.
        In this case, a much smaller `sigma0` is advisable. 
    `opts` 
        options, a dictionary with optional settings, 
        see class `Options`.
         
Main interface / usage
======================
The ask-and-tell interface is inherited from the generic `OOOptimizer
interface for iterative optimization algorithms (see there). With ::
 
    optim = CMAEvolutionStrategy(8 * [0.5], 0.2)
    
an object instance is generated. In each iteration ::
 
    solutions = optim.ask() 
 
is used to get new candidate solutions (possibly several times) and ::
 
    optim.tell(solutions, func_values) 
 
passes the respective function values to `optim`. Instead of `ask()`, 
the class `CMAEvolutionStrategy` also provides ::
 
    (solutions, func_values) = optim.ask_and_eval(objective_func) 
 
Therefore, after initialization, an entire optimization can be written 
in two lines like ::
 
    while not optim.stop(): 
        optim.tell(*optim.ask_and_eval(objective_func))
 
Without the freedom of executing additional lines within the iteration, 
the same reads in a single line as ::
 
    optim.optimize(objective_func)
 
Besides for termination criteria, in CMA-ES only 
the ranks of the `func_values` are relevant. 
 
Attributes and Properties
=========================
    - `inputargs` -- passed input arguments
    - `inopts` -- passed options
    - `opts` -- actually used options, some of them can be changed any  
      time, see class `Options
    - `popsize` -- population size lambda, number of candidate solutions 
      returned by `ask()`
    
Details
=======
The following two enhancements are turned off by default. 
 
**Active CMA** is implemented with option ``CMA_active`` and conducts 
an update of the covariance matrix with negative weights. The
exponential update is implemented, where from a mathematical
viewpoint positive definiteness is guarantied. The update is applied
after the default update and only before the covariance matrix is
decomposed, which limits the additional computational burden to be
at most a factor of three (typically smaller). A typical speed up 
factor (number of f-evaluations) is between 1.1 and two. 
 
References: Jastrebski and Arnold, CEC 2006, Glasmachers et al, GECCO 2010. 
 
**Selective mirroring** is implemented with option ``CMA_mirrors`` in 
the method ``get_mirror()``. Only the method `ask_and_eval()` will
then sample selectively mirrored vectors. In selective mirroring, only
the worst solutions are mirrored. With the default small number of mirrors, 
*pairwise mirroring* is implicite and therefore not explicitly implemented. 
 
References: Brockhoff et al, PPSN 2010, Auger et al, GECCO 2011. 
 
Examples
========
Super-short example, with output shown:
 
>>> import cma 
>>> # construct an object instance in 4-D, sigma0=1
>>> es = cma.CMAEvolutionStrategy(4 * [1], 1, {'seed':234})
(4_w,8)-CMA-ES (mu_w=2.6,w_1=52%) in dimension 4 (seed=234)
>>> 
>>> # iterate until termination
>>> while not es.stop(): 
...    X = es.ask()
...    es.tell(X, [cma.fcts.elli(x) for x in X])
...    es.disp()  # by default sparse, see option verb_disp
Iterat #Fevals   function value     axis ratio  sigma   minstd maxstd min:sec
    1       8 2.093015112685775e+04 1.0e+00 9.27e-01  9e-01  9e-01 0:0.0 
    2      16 4.964814235917688e+04 1.1e+00 9.54e-01  9e-01  1e+00 0:0.0 
    3      24 2.876682459926845e+05 1.2e+00 1.02e+00  9e-01  1e+00 0:0.0 
  100     800 6.809045875281943e-01 1.3e+02 1.41e-02  1e-04  1e-02 0:0.2 
  200    1600 2.473662150861846e-10 8.0e+02 3.08e-05  1e-08  8e-06 0:0.5 
  233    1864 2.766344961865341e-14 8.6e+02 7.99e-07  8e-11  7e-08 0:0.6 
>>>
>>> cma.pprint(es.result())
(Solution([ -1.98546755e-09,  -1.10214235e-09,   6.43822409e-11,
        -1.68621326e-11]),
 4.5119610261406537e-16,
 1666,
 1672,
 209,
 array([ -9.13545269e-09,  -1.45520541e-09,  -6.47755631e-11,
        -1.00643523e-11]),
 array([  3.20258681e-08,   3.15614974e-09,   2.75282215e-10,
         3.27482983e-11]))
>>>
>>> # help(es.result) shows
result(self) method of cma.CMAEvolutionStrategy instance
   return ``(xbest, f(xbest), evaluations_xbest, evaluations, iterations, pheno(xmean), effective_stds)``
 
Example with a data logger, lower bounds (at zero) and handling infeasible solutions:
 
>>> import cma
>>> import numpy as np
>>> es = cma.CMAEvolutionStrategy(10 * [0.2], 0.5, {'bounds': [0, np.inf]})
>>> logger = cma.CMADataLogger().register(es)
>>> while not es.stop():
...     fit, X = [], []
...     while len(X) < es.popsize:
...         curr_fit = np.NaN
...         while curr_fit is np.NaN:
...             x = es.ask(1)[0]    
...             curr_fit = cma.fcts.somenan(x, cma.fcts.elli) # might return np.NaN
...         X.append(x)
...         fit.append(curr_fit)
...     es.tell(X, fit)
...     logger.add()
...     es.disp()
<output omitted>
>>>
>>> assert es.result()[1] < 1e-9
>>> assert es.result()[2] < 9000  # by internal termination
>>> logger.plot()  # plot data
>>> cma.show()
>>> print('  *** if execution stalls close the figure window to continue (and check out ipython --pylab) ***')
 
Example implementing restarts with increasing popsize (IPOP), output is not displayed:
 
>>> import cma, numpy as np
>>> 
>>> # restart with increasing population size (IPOP)
>>> bestever = cma.BestSolution()
>>> for lam in 10 * 2**np.arange(7):  # 10, 20, 40, 80, ..., 10 * 2**6
...     es = cma.CMAEvolutionStrategy('6 - 8 * np.random.rand(9)',  # 9-D
...                                   5,         # initial std sigma0
...                                   {'popsize': lam, 
...                                    'verb_append': bestever.evalsall})   # pass options
...     logger = cma.CMADataLogger().register(es, append=bestever.evalsall) 
...     while not es.stop():
...         X = es.ask()    # get list of new solutions
...         fit = [cma.fcts.rastrigin(x) for x in X]  # evaluate each solution
...         es.tell(X, fit) # besides for termination only the ranking in fit is used
... 
...         # display some output
...         logger.add()  # add a "data point" to the log, writing in files
...         es.disp()  # uses option verb_disp with default 100
... 
...     print('termination:', es.stop())
...     cma.pprint(es.best.__dict__)
...     
...     bestever.update(es.best)
... 
...     # show a plot    
...     logger.plot();
...     if bestever.f < 1e-8:  # global optimum was hit
...         break
<output omitted>
>>> assert es.result()[1] < 1e-8
    
On the Rastrigin function, usually after five restarts the global optimum 
is located. 
    
The final example shows how to resume:
    
>>> import cma, pickle
>>> 
>>> es = cma.CMAEvolutionStrategy(12 * [0.1],  # a new instance, 12-D
...                               0.5)         # initial std sigma0
>>> logger = cma.CMADataLogger().register(es)
>>> es.optimize(cma.fcts.rosen, logger, iterations=100)
>>> logger.plot() 
>>> pickle.dump(es, open('saved-cma-object.pkl', 'w'))
>>> print('saved')
>>> del es, logger  # let's start fresh
>>>
>>> es = pickle.load(open('saved-cma-object.pkl'))
>>> print('resumed')
>>> logger = cma.CMADataLogger(es.opts['verb_filenameprefix']  # use same name
...                           ).register(es, True)  # True: append to old log data
>>> es.optimize(cma.fcts.rosen, logger, verb_disp=200)
>>> assert es.result()[2] < 15000
>>> cma.pprint(es.result())
>>> logger.plot()
 
Missing Features
================
Option ``randn`` to pass a random number generator. 
 
:See: `fmin()`, `Options`, `plot()`, `ask()`, `tell()`, `ask_and_eval()`
 
 
Method resolution order:
CMAEvolutionStrategy
OOOptimizer
__builtin__.object

Methods defined here:
__init__(self, x0, sigma0, inopts={})
see class `CMAEvolutionStrategy`
ask(self, number=None, xmean=None, sigma_fac=1)
get new candidate solutions, sampled from a multi-variate
normal distribution and transformed to f-representation
(phenotype) to be evaluated. 
   
Arguments
---------
    `number` 
        number of returned solutions, by default the
        population size ``popsize`` (AKA ``lambda``).
    `xmean` 
        distribution mean 
    `sigma` 
        multiplier for internal sample width (standard
        deviation)
 
Return
------
A list of N-dimensional candidate solutions to be evaluated
 
Example
-------
>>> import cma
>>> es = cma.CMAEvolutionStrategy([0,0,0,0], 0.3)
>>> while not es.stop() and es.best.f > 1e-6:  # my_desired_target_f_value
...     X = es.ask()  # get list of new solutions
...     fit = [cma.fcts.rosen(x) for x in X]  # call function rosen with each solution
...     es.tell(X, fit)  # feed values
 
:See: `ask_and_eval`, `ask_geno`, `tell`
ask_and_eval(self, func, args=(), number=None, xmean=None, sigma_fac=1, evaluations=1, aggregation=<function median>)
samples `number` solutions and evaluates them on `func`, where
each solution `s` is resampled until ``func(s) not in (numpy.NaN, None)``.  
    
Arguments
---------
    `func` 
        objective function
    `args` 
        additional parameters for `func`
    `number` 
        number of solutions to be sampled, by default
        population size ``popsize`` (AKA lambda)
    `xmean` 
        mean for sampling the solutions, by default ``self.mean``. 
    `sigma_fac` 
        multiplier for sampling width, standard deviation, for example
        to get a small perturbation of solution `xmean`
    `evaluations`
        number of evaluations for each sampled solution
    `aggregation`
        function that aggregates `evaluations` values to
        as single value. 
 
Return
------
``(X, fit)``, where
    X -- list of solutions
    fit -- list of respective function values
    
Details
-------
When ``func(x)`` returns `NaN` or `None` a new solution is sampled until
``func(x) not in (numpy.NaN, None)``.  The argument to `func` can be 
freely modified within `func`.
 
Depending on the ``CMA_mirrors`` option, some solutions are not sampled
independently but as mirrors of other bad solutions. This is a simple 
derandomization that can save 10-30% of the evaluations in particular 
with small populations, for example on the cigar function. 
 
Example
-------
>>> import cma
>>> x0, sigma0 = 8*[10], 1  # 8-D
>>> es = cma.CMAEvolutionStrategy(x0, sigma0) 
>>> while not es.stop():
...     X, fit = es.ask_and_eval(cma.fcts.elli)  # handles NaN with resampling
...     es.tell(X, fit)  # pass on fitness values
...     es.disp(20) # print every 20-th iteration
>>> print('terminated on ' + str(es.stop()))
<output omitted>
 
A single iteration step can be expressed in one line, such that
an entire optimization after initialization becomes
::
 
    while not es.stop():
        es.tell(*es.ask_and_eval(cma.fcts.elli))
ask_geno(self, number=None, xmean=None, sigma_fac=1)
get new candidate solutions in genotyp, sampled from a 
multi-variate normal distribution. 
   
Arguments are
    `number`
        number of returned solutions, by default the
        population size `popsize` (AKA lambda).
    `xmean` 
        distribution mean 
    `sigma_fac`
        multiplier for internal sample width (standard
        deviation)
 
`ask_geno` returns a list of N-dimensional candidate solutions 
in genotyp representation and is called by `ask`. 
 
:See: `ask`, `ask_and_eval`
disp(self, modulo=None)
prints some infos according to `disp_annotation()`, if
``iteration_counter % modulo == 0``
disp_annotation(self)
print annotation for `disp()`
feedForResume(self, X, function_values)
Given all "previous" candidate solutions and their respective 
function values, the state of a `CMAEvolutionStrategyobject 
can be reconstructed from this history. This is the purpose of 
function `feedForResume`.  
 
Arguments
---------
    X
      (all) solution points in chronological order, phenotypic 
      representation. The number of points must be a multiple
      of popsize. 
    function_values 
      respective objective function values
 
Details
-------
`feedForResume` can be called repeatedly with only parts of 
the history. The part must have the length of a multiple
of the population size. 
`feedForResume` feeds the history in popsize-chunks into `tell`.   
The state of the random number generator might not be 
reconstructed, but this would be only relevant for the future.        
 
Example
-------
::
 
    import cma
    
    # prepare 
    (x0, sigma0) = ... # initial values from previous trial
    X = ... # list of generated solutions from a previous trial
    f = ... # respective list of f-values
    
    # resume
    es = cma.CMAEvolutionStrategy(x0, sigma0)  
    es.feedForResume(X, f)
    
    # continue with func as objective function
    while not es.stop():
       X = es.ask()
       es.tell(X, [func(x) for x in X])
 
Credits to Dirk Bueche and Fabrice Marchal for the feeding idea.     
 
:See: class `CMAEvolutionStrategy` for a simple dump/load to resume
get_mirror(self, x)
return ``pheno(self.mean - (geno(x) - self.mean))``.
 
TODO: this implementation is yet experimental.
 
Selectively mirrored sampling improves to a moderate extend but 
overadditively with active CMA for quite understandable reasons. 
 
Optimal number of mirrors are suprisingly small: 1,2,3 for maxlam=7,13,20
however note that 3,6,10 are the respective maximal possible mirrors that
must be clearly suboptimal.
mahalanobisNorm(self, dx)
compute the Mahalanobis norm that is induced by the adapted covariance
matrix C times sigma**2.
 
Argument
--------
A *genotype* difference `dx`. 
 
Example
-------
>>> import cma, numpy
>>> es = cma.CMAEvolutionStrategy(numpy.ones(10), 1)
>>> xx = numpy.random.randn(2, 10)
>>> d = es.mahalanobisNorm(es.gp.geno(xx[0]-xx[1]))  
 
`d` is the distance "in" the true sample distribution,
sampled points have a typical distance of ``sqrt(2*es.N)``, 
where `N` is the dimension. In the example, `d` is the 
Euclidean distance, because C = I and sigma = 1.
mirror_idx_cov(self, f_values, idx1)
obsolete and subject to removal (TODO), 
return indices for negative ("active") update of the covariance matrix
assuming that ``f_values[idx1[i]]`` and ``f_values[-1-i]`` are
the corresponding mirrored values 
 
computes the index of the worse solution sorted by the f-value of the
better solution. 
 
TODO: when the actual mirror was rejected, it is better
to return idx1 instead of idx2. 
 
Remark: this function might not be necessary at all: if the worst solution
is the best mirrored, the covariance matrix updates cancel (cave: weights
and learning rates), which seems what is desirable. If the mirror is bad, 
as strong negative update is made, again what is desirable. 
And the fitness--step-length correlation is in part addressed by 
using flat weights.
mirror_penalized(self, f_values, idx)
obsolete and subject to removal (TODO), 
return modified f-values such that for each mirror one becomes worst. 
 
This function is useless when selective mirroring is applied with no
more than (lambda-mu)/2 solutions. 
 
Mirrors are leading and trailing values in ``f_values``.
readProperties(self)
reads dynamic parameters from property file (not implemented)
result(self)
return ``(xbest, f(xbest), evaluations_xbest, evaluations, iterations, pheno(xmean), effective_stds)``
stop(self, check=True)
return a dictionary with the termination status. 
With ``check==False``, the termination conditions are not checked and 
the status might not reflect the current situation.
tell(self, solutions, function_values, function_values_reevaluated=None, check_points=True, copy=False)
pass objective function values to prepare for next
iteration. This core procedure of the CMA-ES algorithm updates 
all state variables: two evolution paths, the distribution mean, 
the covariance matrix and a step-size. 
 
Arguments
---------
    `solutions` 
        list or array of candidate solution points (of
        type `cma.Solution` or `numpy.ndarray`), most presumably before 
        delivered by method `ask()` or `ask_and_eval()`.
    `function_values`
        list or array of objective function values 
        corresponding to the respective points. Beside for termination 
        decisions, only the ranking of values in `function_values`
        is used.
    `check_points`
        if ``True``, allows to savely pass solutions that are 
        not necessarily generated using `ask()`. Might just as well be a 
        list of indices to be checked in solutions. 
    `copy`
        ``solutions`` might be modified, if ``copy is False``
 
Details
-------
`tell()` updates the parameters of the multivariate
normal search distribtion, namely covariance matrix and
step-size and updates also the attributes `countiter` and 
`countevals`. To check the points for consistency is quadratic 
in the dimension (like sampling points). 
 
Bugs
----
The effect of changing the solutions delivered by `ask()` depends on whether 
boundary handling is applied. With boundary handling, modifications are 
disregarded. This is necessary to apply the default boundary handling that
uses unrepaired solutions but might change in future.   
 
Example
-------
::
 
    import cma
    func = cma.fcts.elli  # choose objective function
    es = cma.CMAEvolutionStrategy(cma.np.random.rand(10), 1)
    while not es.stop():
       X = es.ask()
       es.tell(X, [func(x) for x in X])
    es.result()  # where the result can be found
    
:See: class `CMAEvolutionStrategy`, `ask()`, `ask_and_eval()`, `fmin()`
updateBD(self)
update internal variables for sampling the distribution with the
current covariance matrix C. This method is O(N^3), if C is not diagonal.
update_exponential(self, Z, eta, BDpair=None)
exponential update of C that guarantees positive definiteness, that is, 
instead of the assignment ``C = C + eta * Z``,  
C gets C**.5 * exp(eta * C**-.5 * Z * C**-.5) * C**.5. 
 
Parameter Z should have expectation zero, e.g. sum(w[i] * z[i] * z[i].T) - C
if E z z.T = C. 
 
This function conducts two eigendecompositions, assuming that
B and D are not up to date, unless `BDpair` is given. Given BDpair, 
B is the eigensystem and D is the vector of sqrt(eigenvalues), one
eigendecomposition is omitted. 
 
Reference: Glasmachers et al 2010, Exponential Natural Evolution Strategies

Data descriptors defined here:
popsize
number of samples by default returned by` ask()`

Methods inherited from OOOptimizer:
optimize(self, objectivefct, logger=None, verb_disp=20, iterations=None)
find minimizer of `objectivefct` by iterating over `OOOptimizer` `self`  
with verbosity `verb_disp`, using `OptimDataLogger` `logger` with at  
most `iterations` iterations. ::
 
    return result() + (stop(), self, logger)
 
Example
------- 
>>> import cma
>>> res = cma.CMAEvolutionStrategy(7 * [0.1], 0.5).optimize(cma.fcts.rosen, None, 100) 
(4_w,9)-CMA-ES (mu_w=2.8,w_1=49%) in dimension 7 (seed=630721393)
Iterat #Fevals   function value     axis ratio  sigma   minstd maxstd min:sec
    1       9 3.163954777181882e+01 1.0e+00 4.12e-01  4e-01  4e-01 0:0.0 
    2      18 3.299006223906629e+01 1.0e+00 3.60e-01  3e-01  4e-01 0:0.0 
    3      27 1.389129389866704e+01 1.1e+00 3.18e-01  3e-01  3e-01 0:0.0 
  100     900 2.494847340045985e+00 8.6e+00 5.03e-02  2e-02  5e-02 0:0.3 
  200    1800 3.428234862999135e-01 1.7e+01 3.77e-02  6e-03  3e-02 0:0.5 
  300    2700 3.216640032470860e-04 5.6e+01 6.62e-03  4e-04  9e-03 0:0.8 
  400    3600 6.155215286199821e-12 6.6e+01 7.44e-06  1e-07  4e-06 0:1.1 
  438    3942 1.187372505161762e-14 6.0e+01 3.27e-07  4e-09  9e-08 0:1.2 
  438    3942 1.187372505161762e-14 6.0e+01 3.27e-07  4e-09  9e-08 0:1.2 
('termination by', {'tolfun': 1e-11})
('best f-value =', 1.1189867885201275e-14)
('solution =', Solution([ 1.        ,  1.        ,  1.        ,  0.99999999,  0.99999998,
        0.99999996,  0.99999992]))
>>> print(res[0])
[ 1.          1.          1.          0.99999999  0.99999998  0.99999996
  0.99999992]

Static methods inherited from OOOptimizer:
abstract()
marks a method as abstract, ie to be implemented by a subclass

Data descriptors inherited from OOOptimizer:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

 
class CMAParameters(__builtin__.object)
    strategy parameters like population size and learning rates.
 
Note: 
    contrary to `Options`, `CMAParameters` is not (yet) part of the 
    "user-interface" and subject to future changes (it might become
    a `collections.namedtuple`)
 
Example
------- 
>>> import cma
>>> es = cma.CMAEvolutionStrategy(20 * [0.1], 1)
(6_w,12)-CMA-ES (mu_w=3.7,w_1=40%) in dimension 20 (seed=504519190)  # the seed is "random" by default
>>>
>>> type(es.sp)  # sp contains the strategy parameters
<class 'cma.CMAParameters'>
>>>
>>> es.sp.disp()
{'CMA_on': True,
 'N': 20,
 'c1': 0.004181139918745593,
 'c1_sep': 0.034327992810300939,
 'cc': 0.17176721127681213,
 'cc_sep': 0.25259494835857677,
 'cmean': 1.0,
 'cmu': 0.0085149624979034746,
 'cmu_sep': 0.057796356229390715,
 'cs': 0.21434997799189287,
 'damps': 1.2143499779918929,
 'mu': 6,
 'mu_f': 6.0,
 'mueff': 3.7294589343030671,
 'popsize': 12,
 'rankmualpha': 0.3,
 'weights': array([ 0.40240294,  0.25338908,  0.16622156,  0.10437523,  0.05640348,
        0.01720771])}
>>>
>> es.sp == cma.CMAParameters(20, 12, cma.Options().evalall({'N': 20}))
True
 
:See: `Options`, `CMAEvolutionStrategy`
 
  Methods defined here:
__init__(self, N, opts, ccovfac=1, verbose=True)
Compute strategy parameters, mainly depending on
dimension and population size, by calling `set`
disp(self)
set(self, opts, popsize=None, ccovfac=1, verbose=True)
Compute strategy parameters as a function
of dimension and population size

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

 
class CMAStopDict(__builtin__.dict)
    keep and update a termination condition dictionary, which is
"usually" empty and returned by `CMAEvolutionStrategy.stop()`.
 
Details
-------
This could be a nested class, but nested classes cannot be serialized.  
 
:See: `stop()`
 
 
Method resolution order:
CMAStopDict
__builtin__.dict
__builtin__.object

Methods defined here:
__call__(self, es)
update the dictionary
__init__(self, d={})

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

Methods inherited from __builtin__.dict:
__cmp__(...)
x.__cmp__(y) <==> cmp(x,y)
__contains__(...)
D.__contains__(k) -> True if D has a key k, else False
__delitem__(...)
x.__delitem__(y) <==> del x[y]
__eq__(...)
x.__eq__(y) <==> x==y
__ge__(...)
x.__ge__(y) <==> x>=y
__getattribute__(...)
x.__getattribute__('name') <==> x.name
__getitem__(...)
x.__getitem__(y) <==> x[y]
__gt__(...)
x.__gt__(y) <==> x>y
__iter__(...)
x.__iter__() <==> iter(x)
__le__(...)
x.__le__(y) <==> x<=y
__len__(...)
x.__len__() <==> len(x)
__lt__(...)
x.__lt__(y) <==> x<y
__ne__(...)
x.__ne__(y) <==> x!=y
__repr__(...)
x.__repr__() <==> repr(x)
__setitem__(...)
x.__setitem__(i, y) <==> x[i]=y
__sizeof__(...)
D.__sizeof__() -> size of D in memory, in bytes
clear(...)
D.clear() -> None.  Remove all items from D.
copy(...)
D.copy() -> a shallow copy of D
get(...)
D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.
has_key(...)
D.has_key(k) -> True if D has a key k, else False
items(...)
D.items() -> list of D's (key, value) pairs, as 2-tuples
iteritems(...)
D.iteritems() -> an iterator over the (key, value) items of D
iterkeys(...)
D.iterkeys() -> an iterator over the keys of D
itervalues(...)
D.itervalues() -> an iterator over the values of D
keys(...)
D.keys() -> list of D's keys
pop(...)
D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
If key is not found, d is returned if given, otherwise KeyError is raised
popitem(...)
D.popitem() -> (k, v), remove and return some (key, value) pair as a
2-tuple; but raise KeyError if D is empty.
setdefault(...)
D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D
update(...)
D.update(E, **F) -> None.  Update D from dict/iterable E and F.
If E has a .keys() method, does:     for k in E: D[k] = E[k]
If E lacks .keys() method, does:     for (k, v) in E: D[k] = v
In either case, this is followed by: for k in F: D[k] = F[k]
values(...)
D.values() -> list of D's values
viewitems(...)
D.viewitems() -> a set-like object providing a view on D's items
viewkeys(...)
D.viewkeys() -> a set-like object providing a view on D's keys
viewvalues(...)
D.viewvalues() -> an object providing a view on D's values

Data and other attributes inherited from __builtin__.dict:
__hash__ = None
__new__ = <built-in method __new__ of type object>
T.__new__(S, ...) -> a new object with type S, a subtype of T
fromkeys = <built-in method fromkeys of type object>
dict.fromkeys(S[,v]) -> New dict with keys from S and values equal to v.
v defaults to None.

 
class ElapsedTime(__builtin__.object)
    32-bit C overflows after int(2**32/1e6) == 4294s about 72 min
 
  Methods defined here:
__call__(self)
__init__(self)

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

 
class FitnessFunctions(__builtin__.object)
    versatile container for test objective functions
 
  Methods defined here:
__init__(self)
cigar(self, x, rot=0)
Cigar test objective function
cigtab(self, y)
Cigtab test objective function
cornersphere(self, x)
Sphere (squared norm) test objective function
diffpow(self, x, rot=0)
Diffpow test objective function
elli(self, x, rot=0, xoffset=0, cond=1000000.0, actuator_noise=0.0, both=False)
Ellipsoid test objective function
elliconstraint(self, x, cfac=100000000.0, tough=True, cond=1000000.0)
ellipsoid test objective function with "constraints"
ellirot(self, x)
flat(self, x)
griewank(self, x)
lincon(self, x, theta=0.01)
ridge like linear function with one linear constraint
linear(self, x)
noise(self, x, func=<function sphere>, fac=10, expon=1)
noiseC(self, x, func=<function sphere>, fac=10, expon=0.8)
noisysphere(self, x, noise=5.0)
normalSkew(self, f)
optprob(self, x)
partsphere(self, x)
Sphere (squared norm) test objective function
rand(self, x)
Random test objective function
rastrigin(self, x)
Rastrigin test objective function
ridge(self, x, expo=2)
rosen(self, x)
Rosenbrock test objective function
rot(self, x, fun, rot=1, args=())
returns ``fun(rotation(x), *args)``, ie. `fun` applied to a rotated argument
schwefelmult(self, x, pen_fac=10000.0)
multimodal Schwefel function with domain -500..500
sectorsphere(self, x)
asymmetric Sphere (squared norm) test objective function
somenan(self, x, fun, p=0.1)
returns sometimes np.NaN, otherwise fun(x)
sphere(self, x)
Sphere (squared norm) test objective function
spherew(self, x)
Sphere (squared norm) with sum x_i = 1 test objective function
tablet(self, x, rot=0)
Tablet test objective function
twoaxes(self, y)
Cigtab test objective function

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

 
class GenoPheno(GenoPhenoBase)
    Genotype-phenotype transformation.
 
Method `pheno` provides the transformation from geno- to phenotype, 
that is from the internal representation to the representation used 
in the objective function. Method `geno` provides the "inverse" pheno- 
to genotype transformation. The geno-phenotype transformation comprises, 
in this order: 
 
   - insert fixed variables (with the phenotypic and therefore quite 
     possibly "wrong" values)
   - affine linear transformation (scaling and shift)
   - user-defined transformation
   - projection into feasible domain (boundaries) 
   - assign fixed variables again their original phenotypic value
 
By default all transformations are the identity. The boundary 
transformation is only applied, if the boundaries are given as argument to
the method `pheno` or `geno` respectively.
 
 
Method resolution order:
GenoPheno
GenoPhenoBase
__builtin__.object

Methods defined here:
__init__(self, dim, scaling=None, typical_x=None, bounds=None, fixed_values=None, tf=None)
return `GenoPheno` instance with fixed dimension `dim`.  
 
Keyword Arguments
-----------------
    `scaling`
        the diagonal of a scaling transformation matrix, multipliers
        in the genotyp-phenotyp transformation, see `typical_x`
    `typical_x`
        ``pheno = scaling*geno + typical_x``
    `bounds` (obsolete, might disappear) 
        list with two elements, 
        lower and upper bounds both can be a scalar or a "vector" 
        of length dim or `None`. Without effect, as `bounds` must
        be given as argument to `pheno()`. 
    `fixed_values` 
        a dictionary of variable indices and values, like ``{0:2.0, 2:1.1}``,
        that a not subject to change, negative indices are dropped 
        (they act like incommenting the index), values are phenotypic 
        values.  
    `tf` 
        list of two user-defined transformation functions, or `None`. 
 
        ``tf[0]`` is a function that transforms the internal representation
        as used by the optimizer into a solution as used by the 
        objective function. ``tf[1]`` does the back-transformation. 
        For example ::
        
            tf_0 = lambda x: [xi**2 for xi in x]
            tf_1 = lambda x: [abs(xi)**0.5 fox xi in x]
        
        or "equivalently" without the `lambda` construct ::
        
            def tf_0(x): 
                return [xi**2 for xi in x]
            def tf_1(x): 
                return [abs(xi)**0.5 fox xi in x]
        
        ``tf=[tf_0, tf_1]`` is a reasonable way to guaranty that only positive 
        values are used in the objective function.
         
Details
------- 
In future it might be possible to omit `tf_1`
geno(self, y, bounds=None, copy=True, copy_always=False)
maps the phenotypic input argument into the genotypic space. 
If `bounds` are given, first `y` is projected into the feasible
domain. In this case ``copy==False`` might still lead to a copy.
into_bounds(self, y, bounds=None, copy_never=False)
Argument `y` is a phenotypic vector,
return `y` put into boundaries, as a copy iff ``y != into_bounds(y)``. 
    
Note: this code is duplicated in `Solution.repair` and might
disappear in future.
pheno(self, x, copy=True, bounds=None)
maps the genotypic input argument into the phenotypic space, see
help for class `GenoPheno`

Data descriptors inherited from GenoPhenoBase:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

 
class GenoPhenoBase(__builtin__.object)
    abstract base class for genotyp-phenotype transformation, 
to be implemented. 
 
Example
-------
::
 
    import cma
    class Mygpt(cma.GenoPhenoBase):
        def pheno(self, x):
            return x  # identity for the time being
    gpt = Mygpt()
    optim = cma.CMAEvolutionStrategy(...)
    while not optim.stop():
        X = optim.ask()
        f = [func(gpt.pheno(x)) for x in X]
        optim.tell(X, f)
 
In case of a repair, we might pass the repaired solution into `tell()` 
(with check_points being True). 
 
TODO: check usecases in `CMAEvolutionStrategy` and implement option GenoPhenoBase
 
  Methods defined here:
pheno(self, x)

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

 
Mh = class MathHelperFunctions(__builtin__.object)
    static convenience math helper functions, if the function name 
is preceded with an "a", a numpy array is returned
 
  Static methods defined here:
aclamp(x, upper)
amax(vec, vec_or_scalar)
amin(vec_or_scalar, vec_or_scalar2)
apos(x, lower=0)
clips argument (scalar or array) from below at lower
expms(A)
matrix exponential for a symmetric matrix
max(vec, vec_or_scalar)
min(a, b)
norm(vec, expo=2)
prctile(data, p_vals=[0, 25, 50, 75, 100], sorted_=False)
``prctile(data, 50)`` returns the median, but p_vals can
also be a sequence.
 
Provides for small samples better values than matplotlib.mlab.prctile, 
however also slower.
sround(nb)
return stochastic round: floor(nb) + (rand()<remainder(nb))

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

 
class Misc(__builtin__.object)
     Static methods defined here:
eig(C)
eigendecomposition of a symmetric matrix, much slower than 
`numpy.linalg.eigh`, return ``(EVals, Basis)``, the eigenvalues 
and an orthonormal basis of the corresponding eigenvectors, where 
 
    ``Basis[i]``
        the i-th row of ``Basis`` 
    columns of ``Basis``, ``[Basis[j][i] for j in range(len(Basis))]``
        the i-th eigenvector with eigenvalue ``EVals[i]``
likelihood(x, m=None, Cinv=None, sigma=1, detC=None)
return likelihood of x for the normal density N(m, sigma**2 * Cinv**-1)
loglikelihood(self, x, previous=False)
return log-likelihood of `x` regarding the current sample distribution

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

Data and other attributes defined here:
MathHelperFunctions = <class 'cma.MathHelperFunctions'>
static convenience math helper functions, if the function name 
is preceded with an "a", a numpy array is returned

 
class NoiseHandler(__builtin__.object)
    Noise handling according to [Hansen et al 2009, A Method for Handling 
Uncertainty in Evolutionary Optimization...] 
 
The interface of this class is yet versatile and subject to changes. 
 
The attribute ``evaluations`` serves to control the noise via number of 
evaluations, for example with `ask_and_eval()`, see also parameter 
``maxevals`` and compare the example. 
 
Example
-------
>>> import cma, numpy as np
>>> func = cma.Fcts.noisysphere
>>> es = cma.CMAEvolutionStrategy(np.ones(10), 1)
>>> logger = cma.CMADataLogger().register(es)
>>> nh = cma.NoiseHandler(es.N, maxevals=[1, 30])
>>> while not es.stop():
...     X, fit = es.ask_and_eval(func, evaluations=nh.evaluations) 
...     es.tell(X, fit)  # prepare for next iteration
...     es.sigma *= nh(X, fit, func, es.ask)  # see method __call__
...     es.countevals += nh.evaluations_just_done  # this is a hack, not important though
...     logger.add(more_data = [nh.evaluations, nh.noiseS])  # add a data point 
...     es.disp()
...     # nh.maxevals = ...  it might be useful to start with smaller values and then increase
>>> print(es.stop())
>>> print(es.result()[-2])  # take mean value, the best solution is totally off
>>> assert sum(es.result()[-2]**2) < 1e-9
>>> print(X[np.argmin(fit)])  # not bad, but probably worse than the mean
>>> logger.plot()
 
The noise options of `fmin()` control a `NoiseHandler` instance similar to this
example. The command ``cma.Options('noise')`` lists in effect the parameters of 
`__init__` apart from ``aggregate``.  
 
Details
-------
The parameters reevals, theta, c_s, and alpha_t are set differently
than in the original publication, see method `__init__()`. For a
very small population size, say popsize <= 5, the measurement
technique based on rank changes is likely to fail.
 
Missing Features
----------------
In case no noise is found, ``self.lam_reeval`` should be adaptive
and get at least as low as 1 (however the possible savings from this
are rather limited). Another option might be to decide during the
first call by a quantitative analysis of fitness values whether
``lam_reeval`` is set to zero. More generally, an automatic noise
mode detection might also set the covariance matrix learning rates
to smaller values.
 
:See: `fmin()`, `ask_and_eval()`
 
  Methods defined here:
__call__(self, X, fit, func, ask=None, args=())
proceed with noise measurement, set anew attributes ``evaluations``
(proposed number of evaluations to "treat" noise) and ``evaluations_just_done`` 
and return a factor for increasing sigma.
 
Parameters
----------
    `X`
        a list/sequence/vector of solutions
    `fit`
        the respective list of function values
    `func`
        the objective function, ``fit[i]`` corresponds to ``func(X[i], *args)``
    `ask`
        a method to generate a new, slightly disturbed solution. The argument
        is mandatory if ``epsilon`` is not zero, see `__init__()`.
    `args`
        optional additional arguments to `func`
        
Details
-------
Calls the methods ``reeval()``, ``update_measure()`` and ``treat()`` in this order. 
``self.evaluations`` is adapted within the method `treat()`.
__init__(self, N, maxevals=10, aggregate=<function median>, reevals=None, epsilon=1e-07)
parameters are
 
`maxevals`
    maximal value for ``self.evaluations``, where
    ``self.evaluations`` function calls are aggregated for
    noise treatment. With ``maxevals == 0`` the noise
    handler is (temporarily) "switched off". If `maxevals`
    is a list, min value and (for >2 elements) median are
    used to define minimal and initial value of
    ``self.evaluations``. Choosing ``maxevals > 1`` is only
    reasonable, if also the original ``fit`` values (that
    are passed to `__call__`) are computed by aggregation of
    ``self.evaluations`` values (otherwise the values are
    not comparable), as it is done within `fmin()`.
`aggregate`
    function to aggregate single f-values to a 'fitness', e.g. 
    ``np.median``. 
`reevals`
    number of solutions to be reevaluated for noise measurement,
    can be a float, by default set to ``1.5 + popsize/20``, 
    zero switches noise handling off. 
`epsilon`
    multiplier for perturbation of the reevaluated solutions
     
:See: `fmin()`, `Options`, `CMAEvolutionStrategy.ask_and_eval()`
get_evaluations(self)
return ``self.evaluations``, the number of evalutions to get a single fitness measurement
indices(self, fit)
return the set of indices to be reevaluted for noise measurement,
taking the ``lam_reeval`` best from the first ``2 * lam_reeval + 2``
values. 
 
Given the first values are the earliest, this is a useful policy also 
with a time changing objective.
reeval(self, X, fit, func, ask, args=())
store two fitness lists, `fit` and ``fitre`` reevaluating some 
solutions in `X`. 
``self.evaluations`` evaluations are done for each reevaluated 
fitness value. 
See `__call__()`, where `reeval()` is called.
treat(self)
adapt self.evaluations and return ``sigma_fac in (1.0, self.alphasigma)``
update_measure(self)
updated noise level measure using two fitness lists ``self.fit`` and 
``self.fitre``, return ``self.noiseS, all_individual_measures``. 
 
Assumes that `self.idx` contains the indices where the fitness
lists differ

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

 
class OOOptimizer(__builtin__.object)
    "abstract" base class for an OO optimizer interface with methods 
`__init__`, `ask`, `tell`, `stop`, `result`, and `optimize`. Only 
`optimize` is fully implemented in this base class. 
 
Examples
--------
All examples minimize the function `elli`, the output is not shown.
(A preferred environment to execute all examples is ``ipython -pylab``.) 
First we need ::
 
    from cma import CMAEvolutionStrategyCMADataLogger  # CMAEvolutionStrategy derives from the OOOptimizer class
    elli = lambda x: sum(1e3**((i-1.)/(len(x)-1.)*x[i])**2 for i in range(len(x))) 
 
The shortest example uses the inherited method `OOOptimizer.optimize()`:: 
    
    res = CMAEvolutionStrategy(8 * [0.1], 0.5).optimize(elli)
 
The input parameters to `CMAEvolutionStrategy` are specific to this
inherited class. The remaining functionality is based on interface
defined by `OOOptimizer`. We might have a look at the result::
 
    print(res[0])  # best solution and 
    print(res[1])  # its function value
 
`res` is the return value from method
`CMAEvolutionStrategy.result()` appended with `None` (no logger).
In order to display more exciting output we rather do ::
 
    logger = CMADataLogger()  # derives from the abstract OptimDataLogger class
    res = CMAEvolutionStrategy(9 * [0.5], 0.3).optimize(elli, logger)
    logger.plot()  # if matplotlib is available, logger == res[-1]
 
or even shorter ::
 
    res = CMAEvolutionStrategy(9 * [0.5], 0.3).optimize(elli, CMADataLogger())
    res[-1].plot()  # if matplotlib is available
          
Virtually the same example can be written with an explicit loop
instead of using `optimize()`. This gives the necessary insight into
the `OOOptimizer` class interface and gives entire control over the
iteration loop::
 
    optim = CMAEvolutionStrategy(9 * [0.5], 0.3)  # a new CMAEvolutionStrategy instance calling CMAEvolutionStrategy.__init__()
    logger = CMADataLogger(optim)  # get a logger instance
 
    # this loop resembles optimize() 
    while not optim.stop(): # iterate
        X = optim.ask()     # get candidate solutions
        f = [elli(x) for x in X]  # evaluate solutions
        #  maybe do something else that needs to be done 
        optim.tell(X, f)    # do all the real work: prepare for next iteration
        optim.disp(20)      # display info every 20th iteration
        logger.add()        # log another "data line"
 
    # final output
    print('termination by', optim.stop())
    print('best f-value =', optim.result()[1])
    print('best solution =', optim.result()[0])
    logger.plot()  # if matplotlib is available
    raw_input('press enter to continue')  # prevents exiting and closing figures 
 
Details
-------
Most of the work is done in the method `tell(...)`. The method `result()` returns 
more useful output.
 
  Methods defined here:
__init__(self, xstart, **more_args)
abstract method, ``xstart`` is a mandatory argument
ask(self)
abstract method, AKA "get", deliver new candidate solution(s), a list of "vectors"
disp(self, modulo=None)
abstract method, display some iteration infos if ``self.iteration_counter % modulo == 0``
optimize(self, objectivefct, logger=None, verb_disp=20, iterations=None)
find minimizer of `objectivefct` by iterating over `OOOptimizer` `self`  
with verbosity `verb_disp`, using `OptimDataLogger` `logger` with at  
most `iterations` iterations. ::
 
    return result() + (stop(), self, logger)
 
Example
------- 
>>> import cma
>>> res = cma.CMAEvolutionStrategy(7 * [0.1], 0.5).optimize(cma.fcts.rosen, None, 100) 
(4_w,9)-CMA-ES (mu_w=2.8,w_1=49%) in dimension 7 (seed=630721393)
Iterat #Fevals   function value     axis ratio  sigma   minstd maxstd min:sec
    1       9 3.163954777181882e+01 1.0e+00 4.12e-01  4e-01  4e-01 0:0.0 
    2      18 3.299006223906629e+01 1.0e+00 3.60e-01  3e-01  4e-01 0:0.0 
    3      27 1.389129389866704e+01 1.1e+00 3.18e-01  3e-01  3e-01 0:0.0 
  100     900 2.494847340045985e+00 8.6e+00 5.03e-02  2e-02  5e-02 0:0.3 
  200    1800 3.428234862999135e-01 1.7e+01 3.77e-02  6e-03  3e-02 0:0.5 
  300    2700 3.216640032470860e-04 5.6e+01 6.62e-03  4e-04  9e-03 0:0.8 
  400    3600 6.155215286199821e-12 6.6e+01 7.44e-06  1e-07  4e-06 0:1.1 
  438    3942 1.187372505161762e-14 6.0e+01 3.27e-07  4e-09  9e-08 0:1.2 
  438    3942 1.187372505161762e-14 6.0e+01 3.27e-07  4e-09  9e-08 0:1.2 
('termination by', {'tolfun': 1e-11})
('best f-value =', 1.1189867885201275e-14)
('solution =', Solution([ 1.        ,  1.        ,  1.        ,  0.99999999,  0.99999998,
        0.99999996,  0.99999992]))
>>> print(res[0])
[ 1.          1.          1.          0.99999999  0.99999998  0.99999996
  0.99999992]
result(self)
abstract method, return ``(x, f(x), ...)``, that is, the minimizer, its function value, ...
stop(self)
abstract method, return satisfied termination conditions in a dictionary like 
``{'termination reason': value, ...}``, for example ``{'tolfun': 1e-12}``, or the empty 
dictionary ``{}``. The implementation of `stop()` should prevent an infinite loop.
tell(self, solutions, function_values)
abstract method, AKA "update", prepare for next iteration

Static methods defined here:
abstract()
marks a method as abstract, ie to be implemented by a subclass

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

 
class OptimDataLogger(__builtin__.object)
    "abstract" base class for a data logger that can be used with an `OOOptimizer`
 
  Methods defined here:
add(self, optim=None, more_data=[])
abstract method, add a "data point" from the state of `optim` into the 
logger, the argument `optim` can be omitted if it was `register()`-ed before
data(self)
return logged data in a dictionary (not implemented)
disp(self)
display some data trace (not implemented)
plot(self)
plot data (not implemented)
register(self, optim)
abstract method, register an optimizer `optim`, only needed if `add()` is 
called without a value for the `optim` argument

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

 
class Options(__builtin__.dict)
    ``Options()`` returns a dictionary with the available options and their
default values for function fmin and for class CMAEvolutionStrategy.
 
``Options(opts)`` returns the subset of recognized options in opts.  
 
``Options('pop')`` returns a subset of recognized options that contain
'pop' in there keyword name, value or description. 
 
Option values can be "written" in a string and, when passed to fmin
or CMAEvolutionStrategy, are evaluated using "N" and "popsize" as 
known values for dimension and population size (sample size, number 
of new solutions per iteration). All default option values are such
string. 
 
Details
-------
All Options are originally defined via the input arguments of 
`fmin()`.
 
Options starting with ``tol`` are termination "tolerances". 
 
For `tolstagnation`, the median over the first and the second half 
of at least `tolstagnation` iterations are compared for both, the
per-iteration best and per-iteration median function value. 
Some options are, as mentioned (`restarts`,...), only used with `fmin`.
    
Example
-------
::
 
    import cma
    cma.Options('tol')  # shortcut for cma.Options().match('tol')
    o = cma.Options()
    o.match('verb')
 
all options that contain 'tol' in their name or description. 
 
:See: `fmin`(), `CMAEvolutionStrategy`, `CMAParameters`
 
 
Method resolution order:
Options
__builtin__.dict
__builtin__.object

Methods defined here:
__call__(self, key, default=None, loc=None)
evaluate and return the value of option `key` on the fly, or
returns those options whose name or description contains `key`, 
case disregarded. 
 
Details
-------
Keys that contain `filename` are not evaluated.
For ``loc==None``, `self` is used as environment
but this does not define `N`. 
    
:See: `eval()`, `evalall()`
__init__(self, s=None, unchecked=False)
return an `Options` instance, either with the default options, 
if ``s is None``, or with all options whose name or description
contains `s`, if `s` is a string (case is disregarded), 
or with entries from dictionary `s` as options, not complemented 
with default options or settings
 
Returns: see above.
complement(self)
add all missing options with their default values
divCroot(self, mat)
return C**-1/2 times mat, where mat can be a vector or matrix
eval(self, key, default=None, loc=None)
Evaluates and sets the specified option value in 
environment `loc`. Many options need `N` to be defined in 
`loc`, some need `popsize`. 
 
Details
-------
Keys that contain 'filename' are not evaluated.
For `loc` is None, the self-dict is used as environment
    
:See: `evalall()`, `__call__`
evalall(self, loc=None)
Evaluates all option values in environment `loc`. 
 
:See: `eval()`
init(self, dict_or_str, val=None, warn=True)
initialize one or several options.  
 
Arguments
---------
    `dict_or_str`
        a dictionary if ``val is None``, otherwise a key. 
        If `val` is provided `dict_or_str` must be a valid key. 
    `val`
        value for key
 
Details
-------
Only known keys are accepted. Known keys are in `Options.defaults()`
match(self, s='')
return all options that match, in the name or the description, 
with string `s`, case is disregarded. 
 
Example: ``cma.Options().match('verb')`` returns the verbosity options.
pp(self)
printme(self, linebreak=80)
set(self, dic, val=None, warn=True)
set can assign settable options from `Options.settableOptionsList()`, 
use `init()` for the others. 
 
Arguments
---------
 
    `dic`
        either a dictionary or a key. In the latter
        case, val must be provided
    `val`
        value for key
    `warn`
        bool, print a warning if the option is not settable
        and therefore ommitted
        
This method will be most probably used with the ``opts`` attribute of 
a `CMAEvolutionStrategy` instance.
settable(self)
return the subset of those options that are settable at any
time. 
 
Settable options are in `settableOptionsList()`, but the 
list might be incomlete.
timesCroot(self, mat)
return C**0.5 times mat, where mat can be a vector or matrix.
Not functional, because _Croot=C**0.5 is never computed (should be in updateBD)

Static methods defined here:
defaults()
return a dictionary with default option values and description, 
calls `fmin([], [])`
settableOptionsList()
return list of options that can be set at any time (not only be 
initialized), however the list might not be entirely up to date. The 
string ' #v ' in the default value suggests an option to be settable 
(versatile).

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

Methods inherited from __builtin__.dict:
__cmp__(...)
x.__cmp__(y) <==> cmp(x,y)
__contains__(...)
D.__contains__(k) -> True if D has a key k, else False
__delitem__(...)
x.__delitem__(y) <==> del x[y]
__eq__(...)
x.__eq__(y) <==> x==y
__ge__(...)
x.__ge__(y) <==> x>=y
__getattribute__(...)
x.__getattribute__('name') <==> x.name
__getitem__(...)
x.__getitem__(y) <==> x[y]
__gt__(...)
x.__gt__(y) <==> x>y
__iter__(...)
x.__iter__() <==> iter(x)
__le__(...)
x.__le__(y) <==> x<=y
__len__(...)
x.__len__() <==> len(x)
__lt__(...)
x.__lt__(y) <==> x<y
__ne__(...)
x.__ne__(y) <==> x!=y
__repr__(...)
x.__repr__() <==> repr(x)
__setitem__(...)
x.__setitem__(i, y) <==> x[i]=y
__sizeof__(...)
D.__sizeof__() -> size of D in memory, in bytes
clear(...)
D.clear() -> None.  Remove all items from D.
copy(...)
D.copy() -> a shallow copy of D
get(...)
D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.
has_key(...)
D.has_key(k) -> True if D has a key k, else False
items(...)
D.items() -> list of D's (key, value) pairs, as 2-tuples
iteritems(...)
D.iteritems() -> an iterator over the (key, value) items of D
iterkeys(...)
D.iterkeys() -> an iterator over the keys of D
itervalues(...)
D.itervalues() -> an iterator over the values of D
keys(...)
D.keys() -> list of D's keys
pop(...)
D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
If key is not found, d is returned if given, otherwise KeyError is raised
popitem(...)
D.popitem() -> (k, v), remove and return some (key, value) pair as a
2-tuple; but raise KeyError if D is empty.
setdefault(...)
D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D
update(...)
D.update(E, **F) -> None.  Update D from dict/iterable E and F.
If E has a .keys() method, does:     for k in E: D[k] = E[k]
If E lacks .keys() method, does:     for (k, v) in E: D[k] = v
In either case, this is followed by: for k in F: D[k] = F[k]
values(...)
D.values() -> list of D's values
viewitems(...)
D.viewitems() -> a set-like object providing a view on D's items
viewkeys(...)
D.viewkeys() -> a set-like object providing a view on D's keys
viewvalues(...)
D.viewvalues() -> an object providing a view on D's values

Data and other attributes inherited from __builtin__.dict:
__hash__ = None
__new__ = <built-in method __new__ of type object>
T.__new__(S, ...) -> a new object with type S, a subtype of T
fromkeys = <built-in method fromkeys of type object>
dict.fromkeys(S[,v]) -> New dict with keys from S and values equal to v.
v defaults to None.

 
class Rotation(__builtin__.object)
    Rotation class that implements an orthogonal linear transformation, 
one for each dimension. Used to implement non-separable test functions. 
 
Example:
 
>>> import cma, numpy as np
>>> R = cma.Rotation()
>>> R2 = cma.Rotation() # another rotation
>>> x = np.array((1,2,3))
>>> print(R(R(x), inverse=1))
[ 1.  2.  3.]
 
  Methods defined here:
__call__(self, x, inverse=False)
Rotates the input array `x` with a fixed rotation matrix
(``self.dicMatrices['str(len(x))']``)
__init__(self)

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

Data and other attributes defined here:
dicMatrices = {}

 
class Sections(__builtin__.object)
    plot sections through an objective function. A first 
rational thing to do, when facing an (expensive) application. 
By default 6 points in each coordinate are evaluated. 
This class is still experimental. 
 
Examples
--------
 
>>> import cma, numpy as np
>>> s = cma.Sections(cma.Fcts.rosen, np.zeros(3)).do(plot=False)
>>> s.do(plot=False)  # evaluate the same points again, i.e. check for noise
>>> try:
...     s.plot()
... except: 
...     print('plotting failed: pylab package is missing?')
 
Details
-------
Data are saved after each function call during `do()`. The filename is attribute 
``name`` and by default ``str(func)``, see `__init__()`. 
 
A random (orthogonal) basis can be generated with ``cma.Rotation()(np.eye(3))``. 
 
The default name is unique in the function name, but it should be unique in all
parameters of `__init__()` but `plot_cmd` and `load`. 
 
``self.res`` is a dictionary with an entry for each "coordinate" ``i`` and with an 
entry ``'x'``, the middle point. Each entry ``i`` is again a dictionary with keys 
being different dx values and the value being a sequence of f-values.
For example ``self.res[2][0.1] == [0.01, 0.01]``, which is generated using the 
difference vector ``self.basis[2]`` like 
``self.res[2][dx] += func(self.res['x'] + dx * self.basis[2])``.  
            
:See: `__init__()`
 
  Methods defined here:
__init__(self, func, x, args=(), basis=None, name=None, plot_cmd=<function plot>, load=True)
Parameters
----------
    `func`
        objective function
    `x` 
        point in search space, middle point of the sections
    `args`
        arguments passed to `func`
    `basis`
        evaluated points are ``func(x + locations[j] * basis[i]) for i in len(basis) for j in len(locations)``, 
        see `do()` 
    `name`
        filename where to save the result
    `plot_cmd`
        command used to plot the data, typically matplotlib pylabs `plot` or `semilogy`
    `load`
        load previous data from file ``str(func) + '.pkl'``
do(self, repetitions=1, locations=array([-0.5, -0.3, -0.1, 0.1, 0.3, 0.5]), plot=True)
generates, plots and saves function values ``func(y)``, 
where ``y`` is 'close' to `x` (see `__init__()`). The data are stored in
the ``res`` attribute and the class instance is saved in a file 
with (the weired) name ``str(func)``. 
 
Parameters
----------
    `repetitions`
        for each point, only for noisy functions is >1 useful. For 
        ``repetitions==0`` only already generated data are plotted. 
    `locations`
        coordinated wise deviations from the middle point given in `__init__`
flattened(self)
return flattened data ``(x, f)`` such that for the sweep through 
coordinate ``i`` we have for data point ``j`` that ``f[i][j] == func(x[i][j])``
load(self, name=None)
load from file
plot(self, plot_cmd=None, tf=<function <lambda>>)
plot the data we have, return ``self``
save(self, name=None)
save to file

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

 
class Solution(numpy.ndarray)
    this class is a stump, but functional and in use: Solution represents 
a candidate solution (a vector of real numbers), for example returned by 
`cma.CMAEvolutionStrategy.ask()`. 
The class inherits from `numpy.ndarray` and can therefore be used as 
a `numpy` array. Additionally, the solution can be repaired based on domain 
boundaries. The input arguments to further available methods are subject to 
future changes.  
 
Attributes
----------
    - unrepaired 
        array, solution before the last call to repair() 
        in case of bounds, or current solution in case bounds are None, 
        or None in case repair was never called
    - isgeno 
        whether the solution represents a genotyp (internal
        representation in CMAEvolutionStrategy)
    - geno 
        array, solution during construction, genotype 
        representation, or None
 
TODO: add attributes for the f-value f and the nb of f-evaluations 
evals? 
 
Example
-------
 
    >>> import cma
    >>> x = cma.Solution([0, -2, 3])
    >>> x                         # is a float np.array
    Solution([ 0., -2.,  3.])
    >>> x.repair([0.5, None])     # set lower domain bound to 0.5
    Solution([ 0.5,  0.5,  3. ])
    >>> x                         # check that x was changed
    Solution([ 0.5,  0.5,  3. ])
    >>> x.unrepaired              # original values
    array([ 0., -2.,  3.])
    >>> x.isgeno                  # by default not the internal repr.
    False
 
 
Method resolution order:
Solution
numpy.ndarray
__builtin__.object

Methods defined here:
__init__(self, x, copy=False, geno=False, gp=None)
return `Solution` instance with value `x`. 
 
Arguments
---------
    `x`
        data vector
    `copy` 
        make a copy of `x`?
    `geno` 
        result represents a genotype?
    `gp` 
        if not `None` and ``geno==False`` a `cma.GenoPhenoobject 
        used to transform `x` to the phenotype
get_geno(self, gp)
return solution in "internal" representation.
Argument `gp`: `GenoPheno` class instance (subject to future changes)
get_pheno(self, gp)
return solution in original representation. 
 
TODO: consider name change
 
Argument `gp` -- `GenoPheno` class instance (subject to future changes)
repair(self, bounds, keep_unrepaired=True)
sets out-of-bounds components of the represented solution 
on the bounds.  
 
Arguments
---------
    `bounds` 
        can be `None` or ``[lb, ub]``, where `lb` and `ub`
        represent lower and upper domain bounds respectively that 
        can be `None` or a scalar or a list or array of length ``len(self)``
    `keep_unrepaired`    
        make a copy of the original values in case of bounds

Static methods defined here:
__new__(cls, data, copy=False, geno=False, gp=None)
return a new object instance of type `cls` == `cma.Solution`

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)

Methods inherited from numpy.ndarray:
__abs__(...)
x.__abs__() <==> abs(x)
__add__(...)
x.__add__(y) <==> x+y
__and__(...)
x.__and__(y) <==> x&y
__array__(...)
a.__array__(|dtype) -> reference if type unchanged, copy otherwise.
 
Returns either a new reference to self if dtype is not given or a new array
of provided data type if dtype is different from the current dtype of the
array.
__array_prepare__(...)
a.__array_prepare__(obj) -> Object of same type as ndarray object obj.
__array_wrap__(...)
a.__array_wrap__(obj) -> Object of same type as ndarray object a.
__contains__(...)
x.__contains__(y) <==> y in x
__copy__(...)
a.__copy__([order])
 
Return a copy of the array.
 
Parameters
----------
order : {'C', 'F', 'A'}, optional
    If order is 'C' (False) then the result is contiguous (default).
    If order is 'Fortran' (True) then the result has fortran order.
    If order is 'Any' (None) then the result has fortran order
    only if the array already is in fortran order.
__deepcopy__(...)
a.__deepcopy__() -> Deep copy of array.
 
Used if copy.deepcopy is called on an array.
__delitem__(...)
x.__delitem__(y) <==> del x[y]
__delslice__(...)
x.__delslice__(i, j) <==> del x[i:j]
 
Use of negative indices is not supported.
__div__(...)
x.__div__(y) <==> x/y
__divmod__(...)
x.__divmod__(y) <==> divmod(x, y)
__eq__(...)
x.__eq__(y) <==> x==y
__float__(...)
x.__float__() <==> float(x)
__floordiv__(...)
x.__floordiv__(y) <==> x//y
__ge__(...)
x.__ge__(y) <==> x>=y
__getitem__(...)
x.__getitem__(y) <==> x[y]
__getslice__(...)
x.__getslice__(i, j) <==> x[i:j]
 
Use of negative indices is not supported.
__gt__(...)
x.__gt__(y) <==> x>y
__hex__(...)
x.__hex__() <==> hex(x)
__iadd__(...)
x.__iadd__(y) <==> x+y
__iand__(...)
x.__iand__(y) <==> x&y
__idiv__(...)
x.__idiv__(y) <==> x/y
__ifloordiv__(...)
x.__ifloordiv__(y) <==> x//y
__ilshift__(...)
x.__ilshift__(y) <==> x<<y
__imod__(...)
x.__imod__(y) <==> x%y
__imul__(...)
x.__imul__(y) <==> x*y
__index__(...)
x[y:z] <==> x[y.__index__():z.__index__()]
__int__(...)
x.__int__() <==> int(x)
__invert__(...)
x.__invert__() <==> ~x
__ior__(...)
x.__ior__(y) <==> x|y
__ipow__(...)
x.__ipow__(y) <==> x**y
__irshift__(...)
x.__irshift__(y) <==> x>>y
__isub__(...)
x.__isub__(y) <==> x-y
__iter__(...)
x.__iter__() <==> iter(x)
__itruediv__(...)
x.__itruediv__(y) <==> x/y
__ixor__(...)
x.__ixor__(y) <==> x^y
__le__(...)
x.__le__(y) <==> x<=y
__len__(...)
x.__len__() <==> len(x)
__long__(...)
x.__long__() <==> long(x)
__lshift__(...)
x.__lshift__(y) <==> x<<y
__lt__(...)
x.__lt__(y) <==> x<y
__mod__(...)
x.__mod__(y) <==> x%y
__mul__(...)
x.__mul__(y) <==> x*y
__ne__(...)
x.__ne__(y) <==> x!=y
__neg__(...)
x.__neg__() <==> -x
__nonzero__(...)
x.__nonzero__() <==> x != 0
__oct__(...)
x.__oct__() <==> oct(x)
__or__(...)
x.__or__(y) <==> x|y
__pos__(...)
x.__pos__() <==> +x
__pow__(...)
x.__pow__(y[, z]) <==> pow(x, y[, z])
__radd__(...)
x.__radd__(y) <==> y+x
__rand__(...)
x.__rand__(y) <==> y&x
__rdiv__(...)
x.__rdiv__(y) <==> y/x
__rdivmod__(...)
x.__rdivmod__(y) <==> divmod(y, x)
__reduce__(...)
a.__reduce__()
 
For pickling.
__repr__(...)
x.__repr__() <==> repr(x)
__rfloordiv__(...)
x.__rfloordiv__(y) <==> y//x
__rlshift__(...)
x.__rlshift__(y) <==> y<<x
__rmod__(...)
x.__rmod__(y) <==> y%x
__rmul__(...)
x.__rmul__(y) <==> y*x
__ror__(...)
x.__ror__(y) <==> y|x
__rpow__(...)
y.__rpow__(x[, z]) <==> pow(x, y[, z])
__rrshift__(...)
x.__rrshift__(y) <==> y>>x
__rshift__(...)
x.__rshift__(y) <==> x>>y
__rsub__(...)
x.__rsub__(y) <==> y-x
__rtruediv__(...)
x.__rtruediv__(y) <==> y/x
__rxor__(...)
x.__rxor__(y) <==> y^x
__setitem__(...)
x.__setitem__(i, y) <==> x[i]=y
__setslice__(...)
x.__setslice__(i, j, y) <==> x[i:j]=y
 
Use  of negative indices is not supported.
__setstate__(...)
a.__setstate__(version, shape, dtype, isfortran, rawdata)
 
For unpickling.
 
Parameters
----------
version : int
    optional pickle version. If omitted defaults to 0.
shape : tuple
dtype : data-type
isFortran : bool
rawdata : string or list
    a binary string with the data (or a list if 'a' is an object array)
__str__(...)
x.__str__() <==> str(x)
__sub__(...)
x.__sub__(y) <==> x-y
__truediv__(...)
x.__truediv__(y) <==> x/y
__xor__(...)
x.__xor__(y) <==> x^y
all(...)
a.all(axis=None, out=None)
 
Returns True if all elements evaluate to True.
 
Refer to `numpy.all` for full documentation.
 
See Also
--------
numpy.all : equivalent function
any(...)
a.any(axis=None, out=None)
 
Returns True if any of the elements of `a` evaluate to True.
 
Refer to `numpy.any` for full documentation.
 
See Also
--------
numpy.any : equivalent function
argmax(...)
a.argmax(axis=None, out=None)
 
Return indices of the maximum values along the given axis.
 
Refer to `numpy.argmax` for full documentation.
 
See Also
--------
numpy.argmax : equivalent function
argmin(...)
a.argmin(axis=None, out=None)
 
Return indices of the minimum values along the given axis of `a`.
 
Refer to `numpy.argmin` for detailed documentation.
 
See Also
--------
numpy.argmin : equivalent function
argsort(...)
a.argsort(axis=-1, kind='quicksort', order=None)
 
Returns the indices that would sort this array.
 
Refer to `numpy.argsort` for full documentation.
 
See Also
--------
numpy.argsort : equivalent function
astype(...)
a.astype(t)
 
Copy of the array, cast to a specified type.
 
Parameters
----------
t : string or dtype
    Typecode or data-type to which the array is cast.
 
Examples
--------
>>> x = np.array([1, 2, 2.5])
>>> x
array([ 1. ,  2. ,  2.5])
 
>>> x.astype(int)
array([1, 2, 2])
byteswap(...)
a.byteswap(inplace)
 
Swap the bytes of the array elements
 
Toggle between low-endian and big-endian data representation by
returning a byteswapped array, optionally swapped in-place.
 
Parameters
----------
inplace: bool, optional
    If ``True``, swap bytes in-place, default is ``False``.
 
Returns
-------
out: ndarray
    The byteswapped array. If `inplace` is ``True``, this is
    a view to self.
 
Examples
--------
>>> A = np.array([1, 256, 8755], dtype=np.int16)
>>> map(hex, A)
['0x1', '0x100', '0x2233']
>>> A.byteswap(True)
array([  256,     1, 13090], dtype=int16)
>>> map(hex, A)
['0x100', '0x1', '0x3322']
 
Arrays of strings are not swapped
 
>>> A = np.array(['ceg', 'fac'])
>>> A.byteswap()
array(['ceg', 'fac'],
      dtype='|S3')
choose(...)
a.choose(choices, out=None, mode='raise')
 
Use an index array to construct a new array from a set of choices.
 
Refer to `numpy.choose` for full documentation.
 
See Also
--------
numpy.choose : equivalent function
clip(...)
a.clip(a_min, a_max, out=None)
 
Return an array whose values are limited to ``[a_min, a_max]``.
 
Refer to `numpy.clip` for full documentation.
 
See Also
--------
numpy.clip : equivalent function
compress(...)
a.compress(condition, axis=None, out=None)
 
Return selected slices of this array along given axis.
 
Refer to `numpy.compress` for full documentation.
 
See Also
--------
numpy.compress : equivalent function
conj(...)
a.conj()
 
Complex-conjugate all elements.
 
Refer to `numpy.conjugate` for full documentation.
 
See Also
--------
numpy.conjugate : equivalent function
conjugate(...)
a.conjugate()
 
Return the complex conjugate, element-wise.
 
Refer to `numpy.conjugate` for full documentation.
 
See Also
--------
numpy.conjugate : equivalent function
copy(...)
a.copy(order='C')
 
Return a copy of the array.
 
Parameters
----------
order : {'C', 'F', 'A'}, optional
    By default, the result is stored in C-contiguous (row-major) order in
    memory.  If `order` is `F`, the result has 'Fortran' (column-major)
    order.  If order is 'A' ('Any'), then the result has the same order
    as the input.
 
Examples
--------
>>> x = np.array([[1,2,3],[4,5,6]], order='F')
 
>>> y = x.copy()
 
>>> x.fill(0)
 
>>> x
array([[0, 0, 0],
       [0, 0, 0]])
 
>>> y
array([[1, 2, 3],
       [4, 5, 6]])
 
>>> y.flags['C_CONTIGUOUS']
True
cumprod(...)
a.cumprod(axis=None, dtype=None, out=None)
 
Return the cumulative product of the elements along the given axis.
 
Refer to `numpy.cumprod` for full documentation.
 
See Also
--------
numpy.cumprod : equivalent function
cumsum(...)
a.cumsum(axis=None, dtype=None, out=None)
 
Return the cumulative sum of the elements along the given axis.
 
Refer to `numpy.cumsum` for full documentation.
 
See Also
--------
numpy.cumsum : equivalent function
diagonal(...)
a.diagonal(offset=0, axis1=0, axis2=1)
 
Return specified diagonals.
 
Refer to `numpy.diagonal` for full documentation.
 
See Also
--------
numpy.diagonal : equivalent function
dot(...)
dump(...)
a.dump(file)
 
Dump a pickle of the array to the specified file.
The array can be read back with pickle.load or numpy.load.
 
Parameters
----------
file : str
    A string naming the dump file.
dumps(...)
a.dumps()
 
Returns the pickle of the array as a string.
pickle.loads or numpy.loads will convert the string back to an array.
 
Parameters
----------
None
fill(...)
a.fill(value)
 
Fill the array with a scalar value.
 
Parameters
----------
value : scalar
    All elements of `a` will be assigned this value.
 
Examples
--------
>>> a = np.array([1, 2])
>>> a.fill(0)
>>> a
array([0, 0])
>>> a = np.empty(2)
>>> a.fill(1)
>>> a
array([ 1.,  1.])
flatten(...)
a.flatten(order='C')
 
Return a copy of the array collapsed into one dimension.
 
Parameters
----------
order : {'C', 'F'}, optional
    Whether to flatten in C (row-major) or Fortran (column-major) order.
    The default is 'C'.
 
Returns
-------
y : ndarray
    A copy of the input array, flattened to one dimension.
 
See Also
--------
ravel : Return a flattened array.
flat : A 1-D flat iterator over the array.
 
Examples
--------
>>> a = np.array([[1,2], [3,4]])
>>> a.flatten()
array([1, 2, 3, 4])
>>> a.flatten('F')
array([1, 3, 2, 4])
getfield(...)
a.getfield(dtype, offset)
 
Returns a field of the given array as a certain type.
 
A field is a view of the array data with each itemsize determined
by the given type and the offset into the current array, i.e. from
``offset * dtype.itemsize`` to ``(offset+1) * dtype.itemsize``.
 
Parameters
----------
dtype : str
    String denoting the data type of the field.
offset : int
    Number of `dtype.itemsize`'s to skip before beginning the element view.
 
Examples
--------
>>> x = np.diag([1.+1.j]*2)
>>> x
array([[ 1.+1.j,  0.+0.j],
       [ 0.+0.j,  1.+1.j]])
>>> x.dtype
dtype('complex128')
 
>>> x.getfield('complex64', 0) # Note how this != x
array([[ 0.+1.875j,  0.+0.j   ],
       [ 0.+0.j   ,  0.+1.875j]], dtype=complex64)
 
>>> x.getfield('complex64',1) # Note how different this is than x
array([[ 0. +5.87173204e-39j,  0. +0.00000000e+00j],
       [ 0. +0.00000000e+00j,  0. +5.87173204e-39j]], dtype=complex64)
 
>>> x.getfield('complex128', 0) # == x
array([[ 1.+1.j,  0.+0.j],
       [ 0.+0.j,  1.+1.j]])
 
If the argument dtype is the same as x.dtype, then offset != 0 raises
a ValueError:
 
>>> x.getfield('complex128', 1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Need 0 <= offset <= 0 for requested type but received offset = 1
 
>>> x.getfield('float64', 0)
array([[ 1.,  0.],
       [ 0.,  1.]])
 
>>> x.getfield('float64', 1)
array([[  1.77658241e-307,   0.00000000e+000],
       [  0.00000000e+000,   1.77658241e-307]])
item(...)
a.item(*args)
 
Copy an element of an array to a standard Python scalar and return it.
 
Parameters
----------
\*args : Arguments (variable number and type)
 
    * none: in this case, the method only works for arrays
      with one element (`a.size == 1`), which element is
      copied into a standard Python scalar object and returned.
 
    * int_type: this argument is interpreted as a flat index into
      the array, specifying which element to copy and return.
 
    * tuple of int_types: functions as does a single int_type argument,
      except that the argument is interpreted as an nd-index into the
      array.
 
Returns
-------
z : Standard Python scalar object
    A copy of the specified element of the array as a suitable
    Python scalar
 
Notes
-----
When the data type of `a` is longdouble or clongdouble, item() returns
a scalar array object because there is no available Python scalar that
would not lose information. Void arrays return a buffer object for item(),
unless fields are defined, in which case a tuple is returned.
 
`item` is very similar to a[args], except, instead of an array scalar,
a standard Python scalar is returned. This can be useful for speeding up
access to elements of the array and doing arithmetic on elements of the
array using Python's optimized math.
 
Examples
--------
>>> x = np.random.randint(9, size=(3, 3))
>>> x
array([[3, 1, 7],
       [2, 8, 3],
       [8, 5, 3]])
>>> x.item(3)
2
>>> x.item(7)
5
>>> x.item((0, 1))
1
>>> x.item((2, 2))
3
itemset(...)
a.itemset(*args)
 
Insert scalar into an array (scalar is cast to array's dtype, if possible)
 
There must be at least 1 argument, and define the last argument
as *item*.  Then, ``a.itemset(*args)`` is equivalent to but faster
than ``a[args] = item``.  The item should be a scalar value and `args`
must select a single item in the array `a`.
 
Parameters
----------
\*args : Arguments
    If one argument: a scalar, only used in case `a` is of size 1.
    If two arguments: the last argument is the value to be set
    and must be a scalar, the first argument specifies a single array
    element location. It is either an int or a tuple.
 
Notes
-----
Compared to indexing syntax, `itemset` provides some speed increase
for placing a scalar into a particular location in an `ndarray`,
if you must do this.  However, generally this is discouraged:
among other problems, it complicates the appearance of the code.
Also, when using `itemset` (and `item`) inside a loop, be sure
to assign the methods to a local variable to avoid the attribute
look-up at each loop iteration.
 
Examples
--------
>>> x = np.random.randint(9, size=(3, 3))
>>> x
array([[3, 1, 7],
       [2, 8, 3],
       [8, 5, 3]])
>>> x.itemset(4, 0)
>>> x.itemset((2, 2), 9)
>>> x
array([[3, 1, 7],
       [2, 0, 3],
       [8, 5, 9]])
max(...)
a.max(axis=None, out=None)
 
Return the maximum along a given axis.
 
Refer to `numpy.amax` for full documentation.
 
See Also
--------
numpy.amax : equivalent function
mean(...)
a.mean(axis=None, dtype=None, out=None)
 
Returns the average of the array elements along given axis.
 
Refer to `numpy.mean` for full documentation.
 
See Also
--------
numpy.mean : equivalent function
min(...)
a.min(axis=None, out=None)
 
Return the minimum along a given axis.
 
Refer to `numpy.amin` for full documentation.
 
See Also
--------
numpy.amin : equivalent function
newbyteorder(...)
arr.newbyteorder(new_order='S')
 
Return the array with the same data viewed with a different byte order.
 
Equivalent to::
 
    arr.view(arr.dtype.newbytorder(new_order))
 
Changes are also made in all fields and sub-arrays of the array data
type.
 
 
 
Parameters
----------
new_order : string, optional
    Byte order to force; a value from the byte order specifications
    above. `new_order` codes can be any of::
 
     * 'S' - swap dtype from current to opposite endian
     * {'<', 'L'} - little endian
     * {'>', 'B'} - big endian
     * {'=', 'N'} - native order
     * {'|', 'I'} - ignore (no change to byte order)
 
    The default value ('S') results in swapping the current
    byte order. The code does a case-insensitive check on the first
    letter of `new_order` for the alternatives above.  For example,
    any of 'B' or 'b' or 'biggish' are valid to specify big-endian.
 
 
Returns
-------
new_arr : array
    New array object with the dtype reflecting given change to the
    byte order.
nonzero(...)
a.nonzero()
 
Return the indices of the elements that are non-zero.
 
Refer to `numpy.nonzero` for full documentation.
 
See Also
--------
numpy.nonzero : equivalent function
prod(...)
a.prod(axis=None, dtype=None, out=None)
 
Return the product of the array elements over the given axis
 
Refer to `numpy.prod` for full documentation.
 
See Also
--------
numpy.prod : equivalent function
ptp(...)
a.ptp(axis=None, out=None)
 
Peak to peak (maximum - minimum) value along a given axis.
 
Refer to `numpy.ptp` for full documentation.
 
See Also
--------
numpy.ptp : equivalent function
put(...)
a.put(indices, values, mode='raise')
 
Set ``a.flat[n] = values[n]`` for all `n` in indices.
 
Refer to `numpy.put` for full documentation.
 
See Also
--------
numpy.put : equivalent function
ravel(...)
a.ravel([order])
 
Return a flattened array.
 
Refer to `numpy.ravel` for full documentation.
 
See Also
--------
numpy.ravel : equivalent function
 
ndarray.flat : a flat iterator on the array.
repeat(...)
a.repeat(repeats, axis=None)
 
Repeat elements of an array.
 
Refer to `numpy.repeat` for full documentation.
 
See Also
--------
numpy.repeat : equivalent function
reshape(...)
a.reshape(shape, order='C')
 
Returns an array containing the same data with a new shape.
 
Refer to `numpy.reshape` for full documentation.
 
See Also
--------
numpy.reshape : equivalent function
resize(...)
a.resize(new_shape, refcheck=True)
 
Change shape and size of array in-place.
 
Parameters
----------
new_shape : tuple of ints, or `n` ints
    Shape of resized array.
refcheck : bool, optional
    If False, reference count will not be checked. Default is True.
 
Returns
-------
None
 
Raises
------
ValueError
    If `a` does not own its own data or references or views to it exist,
    and the data memory must be changed.
 
SystemError
    If the `order` keyword argument is specified. This behaviour is a
    bug in NumPy.
 
See Also
--------
resize : Return a new array with the specified shape.
 
Notes
-----
This reallocates space for the data area if necessary.
 
Only contiguous arrays (data elements consecutive in memory) can be
resized.
 
The purpose of the reference count check is to make sure you
do not use this array as a buffer for another Python object and then
reallocate the memory. However, reference counts can increase in
other ways so if you are sure that you have not shared the memory
for this array with another Python object, then you may safely set
`refcheck` to False.
 
Examples
--------
Shrinking an array: array is flattened (in the order that the data are
stored in memory), resized, and reshaped:
 
>>> a = np.array([[0, 1], [2, 3]], order='C')
>>> a.resize((2, 1))
>>> a
array([[0],
       [1]])
 
>>> a = np.array([[0, 1], [2, 3]], order='F')
>>> a.resize((2, 1))
>>> a
array([[0],
       [2]])
 
Enlarging an array: as above, but missing entries are filled with zeros:
 
>>> b = np.array([[0, 1], [2, 3]])
>>> b.resize(2, 3) # new_shape parameter doesn't have to be a tuple
>>> b
array([[0, 1, 2],
       [3, 0, 0]])
 
Referencing an array prevents resizing...
 
>>> c = a
>>> a.resize((1, 1))
Traceback (most recent call last):
...
ValueError: cannot resize an array that has been referenced ...
 
Unless `refcheck` is False:
 
>>> a.resize((1, 1), refcheck=False)
>>> a
array([[0]])
>>> c
array([[0]])
round(...)
a.round(decimals=0, out=None)
 
Return `a` with each element rounded to the given number of decimals.
 
Refer to `numpy.around` for full documentation.
 
See Also
--------
numpy.around : equivalent function
searchsorted(...)
a.searchsorted(v, side='left')
 
Find indices where elements of v should be inserted in a to maintain order.
 
For full documentation, see `numpy.searchsorted`
 
See Also
--------
numpy.searchsorted : equivalent function
setfield(...)
a.setfield(val, dtype, offset=0)
 
Put a value into a specified place in a field defined by a data-type.
 
Place `val` into `a`'s field defined by `dtype` and beginning `offset`
bytes into the field.
 
Parameters
----------
val : object
    Value to be placed in field.
dtype : dtype object
    Data-type of the field in which to place `val`.
offset : int, optional
    The number of bytes into the field at which to place `val`.
 
Returns
-------
None
 
See Also
--------
getfield
 
Examples
--------
>>> x = np.eye(3)
>>> x.getfield(np.float64)
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])
>>> x.setfield(3, np.int32)
>>> x.getfield(np.int32)
array([[3, 3, 3],
       [3, 3, 3],
       [3, 3, 3]])
>>> x
array([[  1.00000000e+000,   1.48219694e-323,   1.48219694e-323],
       [  1.48219694e-323,   1.00000000e+000,   1.48219694e-323],
       [  1.48219694e-323,   1.48219694e-323,   1.00000000e+000]])
>>> x.setfield(np.eye(3), np.int32)
>>> x
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])
setflags(...)
a.setflags(write=None, align=None, uic=None)
 
Set array flags WRITEABLE, ALIGNED, and UPDATEIFCOPY, respectively.
 
These Boolean-valued flags affect how numpy interprets the memory
area used by `a` (see Notes below). The ALIGNED flag can only
be set to True if the data is actually aligned according to the type.
The UPDATEIFCOPY flag can never be set to True. The flag WRITEABLE
can only be set to True if the array owns its own memory, or the
ultimate owner of the memory exposes a writeable buffer interface,
or is a string. (The exception for string is made so that unpickling
can be done without copying memory.)
 
Parameters
----------
write : bool, optional
    Describes whether or not `a` can be written to.
align : bool, optional
    Describes whether or not `a` is aligned properly for its type.
uic : bool, optional
    Describes whether or not `a` is a copy of another "base" array.
 
Notes
-----
Array flags provide information about how the memory area used
for the array is to be interpreted. There are 6 Boolean flags
in use, only three of which can be changed by the user:
UPDATEIFCOPY, WRITEABLE, and ALIGNED.
 
WRITEABLE (W) the data area can be written to;
 
ALIGNED (A) the data and strides are aligned appropriately for the hardware
(as determined by the compiler);
 
UPDATEIFCOPY (U) this array is a copy of some other array (referenced
by .base). When this array is deallocated, the base array will be
updated with the contents of this array.
 
All flags can be accessed using their first (upper case) letter as well
as the full name.
 
Examples
--------
>>> y
array([[3, 1, 7],
       [2, 0, 0],
       [8, 5, 9]])
>>> y.flags
  C_CONTIGUOUS : True
  F_CONTIGUOUS : False
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  UPDATEIFCOPY : False
>>> y.setflags(write=0, align=0)
>>> y.flags
  C_CONTIGUOUS : True
  F_CONTIGUOUS : False
  OWNDATA : True
  WRITEABLE : False
  ALIGNED : False
  UPDATEIFCOPY : False
>>> y.setflags(uic=1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: cannot set UPDATEIFCOPY flag to True
sort(...)
a.sort(axis=-1, kind='quicksort', order=None)
 
Sort an array, in-place.
 
Parameters
----------
axis : int, optional
    Axis along which to sort. Default is -1, which means sort along the
    last axis.
kind : {'quicksort', 'mergesort', 'heapsort'}, optional
    Sorting algorithm. Default is 'quicksort'.
order : list, optional
    When `a` is an array with fields defined, this argument specifies
    which fields to compare first, second, etc.  Not all fields need be
    specified.
 
See Also
--------
numpy.sort : Return a sorted copy of an array.
argsort : Indirect sort.
lexsort : Indirect stable sort on multiple keys.
searchsorted : Find elements in sorted array.
 
Notes
-----
See ``sort`` for notes on the different sorting algorithms.
 
Examples
--------
>>> a = np.array([[1,4], [3,1]])
>>> a.sort(axis=1)
>>> a
array([[1, 4],
       [1, 3]])
>>> a.sort(axis=0)
>>> a
array([[1, 3],
       [1, 4]])
 
Use the `order` keyword to specify a field to use when sorting a
structured array:
 
>>> a = np.array([('a', 2), ('c', 1)], dtype=[('x', 'S1'), ('y', int)])
>>> a.sort(order='y')
>>> a
array([('c', 1), ('a', 2)],
      dtype=[('x', '|S1'), ('y', '<i4')])
squeeze(...)
a.squeeze()
 
Remove single-dimensional entries from the shape of `a`.
 
Refer to `numpy.squeeze` for full documentation.
 
See Also
--------
numpy.squeeze : equivalent function
std(...)
a.std(axis=None, dtype=None, out=None, ddof=0)
 
Returns the standard deviation of the array elements along given axis.
 
Refer to `numpy.std` for full documentation.
 
See Also
--------
numpy.std : equivalent function
sum(...)
a.sum(axis=None, dtype=None, out=None)
 
Return the sum of the array elements over the given axis.
 
Refer to `numpy.sum` for full documentation.
 
See Also
--------
numpy.sum : equivalent function
swapaxes(...)
a.swapaxes(axis1, axis2)
 
Return a view of the array with `axis1` and `axis2` interchanged.
 
Refer to `numpy.swapaxes` for full documentation.
 
See Also
--------
numpy.swapaxes : equivalent function
take(...)
a.take(indices, axis=None, out=None, mode='raise')
 
Return an array formed from the elements of `a` at the given indices.
 
Refer to `numpy.take` for full documentation.
 
See Also
--------
numpy.take : equivalent function
tofile(...)
a.tofile(fid, sep="", format="%s")
 
Write array to a file as text or binary (default).
 
Data is always written in 'C' order, independent of the order of `a`.
The data produced by this method can be recovered using the function
fromfile().
 
Parameters
----------
fid : file or str
    An open file object, or a string containing a filename.
sep : str
    Separator between array items for text output.
    If "" (empty), a binary file is written, equivalent to
    ``file.write(a.tostring())``.
format : str
    Format string for text file output.
    Each entry in the array is formatted to text by first converting
    it to the closest Python type, and then using "format" % item.
 
Notes
-----
This is a convenience function for quick storage of array data.
Information on endianness and precision is lost, so this method is not a
good choice for files intended to archive data or transport data between
machines with different endianness. Some of these problems can be overcome
by outputting the data as text files, at the expense of speed and file
size.
tolist(...)
a.tolist()
 
Return the array as a (possibly nested) list.
 
Return a copy of the array data as a (nested) Python list.
Data items are converted to the nearest compatible Python type.
 
Parameters
----------
none
 
Returns
-------
y : list
    The possibly nested list of array elements.
 
Notes
-----
The array may be recreated, ``a = np.array(a.tolist())``.
 
Examples
--------
>>> a = np.array([1, 2])
>>> a.tolist()
[1, 2]
>>> a = np.array([[1, 2], [3, 4]])
>>> list(a)
[array([1, 2]), array([3, 4])]
>>> a.tolist()
[[1, 2], [3, 4]]
tostring(...)
a.tostring(order='C')
 
Construct a Python string containing the raw data bytes in the array.
 
Constructs a Python string showing a copy of the raw contents of
data memory. The string can be produced in either 'C' or 'Fortran',
or 'Any' order (the default is 'C'-order). 'Any' order means C-order
unless the F_CONTIGUOUS flag in the array is set, in which case it
means 'Fortran' order.
 
Parameters
----------
order : {'C', 'F', None}, optional
    Order of the data for multidimensional arrays:
    C, Fortran, or the same as for the original array.
 
Returns
-------
s : str
    A Python string exhibiting a copy of `a`'s raw data.
 
Examples
--------
>>> x = np.array([[0, 1], [2, 3]])
>>> x.tostring()
'\x00\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00'
>>> x.tostring('C') == x.tostring()
True
>>> x.tostring('F')
'\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00'
trace(...)
a.trace(offset=0, axis1=0, axis2=1, dtype=None, out=None)
 
Return the sum along diagonals of the array.
 
Refer to `numpy.trace` for full documentation.
 
See Also
--------
numpy.trace : equivalent function
transpose(...)
a.transpose(*axes)
 
Returns a view of the array with axes transposed.
 
For a 1-D array, this has no effect. (To change between column and
row vectors, first cast the 1-D array into a matrix object.)
For a 2-D array, this is the usual matrix transpose.
For an n-D array, if axes are given, their order indicates how the
axes are permuted (see Examples). If axes are not provided and
``a.shape = (i[0], i[1], ... i[n-2], i[n-1])``, then
``a.transpose().shape = (i[n-1], i[n-2], ... i[1], i[0])``.
 
Parameters
----------
axes : None, tuple of ints, or `n` ints
 
 * None or no argument: reverses the order of the axes.
 
 * tuple of ints: `i` in the `j`-th place in the tuple means `a`'s
   `i`-th axis becomes `a.transpose()`'s `j`-th axis.
 
 * `n` ints: same as an n-tuple of the same ints (this form is
   intended simply as a "convenience" alternative to the tuple form)
 
Returns
-------
out : ndarray
    View of `a`, with axes suitably permuted.
 
See Also
--------
ndarray.T : Array property returning the array transposed.
 
Examples
--------
>>> a = np.array([[1, 2], [3, 4]])
>>> a
array([[1, 2],
       [3, 4]])
>>> a.transpose()
array([[1, 3],
       [2, 4]])
>>> a.transpose((1, 0))
array([[1, 3],
       [2, 4]])
>>> a.transpose(1, 0)
array([[1, 3],
       [2, 4]])
var(...)
a.var(axis=None, dtype=None, out=None, ddof=0)
 
Returns the variance of the array elements, along given axis.
 
Refer to `numpy.var` for full documentation.
 
See Also
--------
numpy.var : equivalent function
view(...)
a.view(dtype=None, type=None)
 
New view of array with the same data.
 
Parameters
----------
dtype : data-type, optional
    Data-type descriptor of the returned view, e.g., float32 or int16.
    The default, None, results in the view having the same data-type
    as `a`.
type : Python type, optional
    Type of the returned view, e.g., ndarray or matrix.  Again, the
    default None results in type preservation.
 
Notes
-----
``a.view()`` is used two different ways:
 
``a.view(some_dtype)`` or ``a.view(dtype=some_dtype)`` constructs a view
of the array's memory with a different data-type.  This can cause a
reinterpretation of the bytes of memory.
 
``a.view(ndarray_subclass)`` or ``a.view(type=ndarray_subclass)`` just
returns an instance of `ndarray_subclass` that looks at the same array
(same shape, dtype, etc.)  This does not cause a reinterpretation of the
memory.
 
 
Examples
--------
>>> x = np.array([(1, 2)], dtype=[('a', np.int8), ('b', np.int8)])
 
Viewing array data using a different type and dtype:
 
>>> y = x.view(dtype=np.int16, type=np.matrix)
>>> y
matrix([[513]], dtype=int16)
>>> print type(y)
<class 'numpy.matrixlib.defmatrix.matrix'>
 
Creating a view on a structured array so it can be used in calculations
 
>>> x = np.array([(1, 2),(3,4)], dtype=[('a', np.int8), ('b', np.int8)])
>>> xv = x.view(dtype=np.int8).reshape(-1,2)
>>> xv
array([[1, 2],
       [3, 4]], dtype=int8)
>>> xv.mean(0)
array([ 2.,  3.])
 
Making changes to the view changes the underlying array
 
>>> xv[0,1] = 20
>>> print x
[(1, 20) (3, 4)]
 
Using a view to convert an array to a record array:
 
>>> z = x.view(np.recarray)
>>> z.a
array([1], dtype=int8)
 
Views share data:
 
>>> x[0] = (9, 10)
>>> z[0]
(9, 10)

Data descriptors inherited from numpy.ndarray:
T
Same as transpose(), except that self is returned if
self.ndim < 2.
 
Examples
--------
>>> x = np.array([[1.,2.],[3.,4.]])
>>> x
array([[ 1.,  2.],
       [ 3.,  4.]])
>>> x.T
array([[ 1.,  3.],
       [ 2.,  4.]])
>>> x = np.array([1.,2.,3.,4.])
>>> x
array([ 1.,  2.,  3.,  4.])
>>> x.T
array([ 1.,  2.,  3.,  4.])
__array_finalize__
None.
__array_interface__
Array protocol: Python side.
__array_priority__
Array priority.
__array_struct__
Array protocol: C-struct side.
base
Base object if memory is from some other object.
 
Examples
--------
The base of an array that owns its memory is None:
 
>>> x = np.array([1,2,3,4])
>>> x.base is None
True
 
Slicing creates a view, whose memory is shared with x:
 
>>> y = x[2:]
>>> y.base is x
True
ctypes
An object to simplify the interaction of the array with the ctypes
module.
 
This attribute creates an object that makes it easier to use arrays
when calling shared libraries with the ctypes module. The returned
object has, among others, data, shape, and strides attributes (see
Notes below) which themselves return ctypes objects that can be used
as arguments to a shared library.
 
Parameters
----------
None
 
Returns
-------
c : Python object
    Possessing attributes data, shape, strides, etc.
 
See Also
--------
numpy.ctypeslib
 
Notes
-----
Below are the public attributes of this object which were documented
in "Guide to NumPy" (we have omitted undocumented public attributes,
as well as documented private attributes):
 
* data: A pointer to the memory area of the array as a Python integer.
  This memory area may contain data that is not aligned, or not in correct
  byte-order. The memory area may not even be writeable. The array
  flags and data-type of this array should be respected when passing this
  attribute to arbitrary C-code to avoid trouble that can include Python
  crashing. User Beware! The value of this attribute is exactly the same
  as self._array_interface_['data'][0].
 
* shape (c_intp*self.ndim): A ctypes array of length self.ndim where
  the basetype is the C-integer corresponding to dtype('p') on this
  platform. This base-type could be c_int, c_long, or c_longlong
  depending on the platform. The c_intp type is defined accordingly in
  numpy.ctypeslib. The ctypes array contains the shape of the underlying
  array.
 
* strides (c_intp*self.ndim): A ctypes array of length self.ndim where
  the basetype is the same as for the shape attribute. This ctypes array
  contains the strides information from the underlying array. This strides
  information is important for showing how many bytes must be jumped to
  get to the next element in the array.
 
* data_as(obj): Return the data pointer cast to a particular c-types object.
  For example, calling self._as_parameter_ is equivalent to
  data_as(ctypes.c_void_p). Perhaps you want to use the data as a
  pointer to a ctypes array of floating-point data:
  data_as(ctypes.POINTER(ctypes.c_double)).
 
* shape_as(obj): Return the shape tuple as an array of some other c-types
  type. For example: shape_as(ctypes.c_short).
 
* strides_as(obj): Return the strides tuple as an array of some other
  c-types type. For example: strides_as(ctypes.c_longlong).
 
Be careful using the ctypes attribute - especially on temporary
arrays or arrays constructed on the fly. For example, calling
``(a+b).ctypes.data_as(ctypes.c_void_p)`` returns a pointer to memory
that is invalid because the array created as (a+b) is deallocated
before the next Python statement. You can avoid this problem using
either ``c=a+b`` or ``ct=(a+b).ctypes``. In the latter case, ct will
hold a reference to the array until ct is deleted or re-assigned.
 
If the ctypes module is not available, then the ctypes attribute
of array objects still returns something useful, but ctypes objects
are not returned and errors may be raised instead. In particular,
the object will still have the as parameter attribute which will
return an integer equal to the data attribute.
 
Examples
--------
>>> import ctypes
>>> x
array([[0, 1],
       [2, 3]])
>>> x.ctypes.data
30439712
>>> x.ctypes.data_as(ctypes.POINTER(ctypes.c_long))
<ctypes.LP_c_long object at 0x01F01300>
>>> x.ctypes.data_as(ctypes.POINTER(ctypes.c_long)).contents
c_long(0)
>>> x.ctypes.data_as(ctypes.POINTER(ctypes.c_longlong)).contents
c_longlong(4294967296L)
>>> x.ctypes.shape
<numpy.core._internal.c_long_Array_2 object at 0x01FFD580>
>>> x.ctypes.shape_as(ctypes.c_long)
<numpy.core._internal.c_long_Array_2 object at 0x01FCE620>
>>> x.ctypes.strides
<numpy.core._internal.c_long_Array_2 object at 0x01FCE620>
>>> x.ctypes.strides_as(ctypes.c_longlong)
<numpy.core._internal.c_longlong_Array_2 object at 0x01F01300>
data
Python buffer object pointing to the start of the array's data.
dtype
Data-type of the array's elements.
 
Parameters
----------
None
 
Returns
-------
d : numpy dtype object
 
See Also
--------
numpy.dtype
 
Examples
--------
>>> x
array([[0, 1],
       [2, 3]])
>>> x.dtype
dtype('int32')
>>> type(x.dtype)
<type 'numpy.dtype'>
flags
Information about the memory layout of the array.
 
Attributes
----------
C_CONTIGUOUS (C)
    The data is in a single, C-style contiguous segment.
F_CONTIGUOUS (F)
    The data is in a single, Fortran-style contiguous segment.
OWNDATA (O)
    The array owns the memory it uses or borrows it from another object.
WRITEABLE (W)
    The data area can be written to.  Setting this to False locks
    the data, making it read-only.  A view (slice, etc.) inherits WRITEABLE
    from its base array at creation time, but a view of a writeable
    array may be subsequently locked while the base array remains writeable.
    (The opposite is not true, in that a view of a locked array may not
    be made writeable.  However, currently, locking a base object does not
    lock any views that already reference it, so under that circumstance it
    is possible to alter the contents of a locked array via a previously
    created writeable view onto it.)  Attempting to change a non-writeable
    array raises a RuntimeError exception.
ALIGNED (A)
    The data and strides are aligned appropriately for the hardware.
UPDATEIFCOPY (U)
    This array is a copy of some other array. When this array is
    deallocated, the base array will be updated with the contents of
    this array.
 
FNC
    F_CONTIGUOUS and not C_CONTIGUOUS.
FORC
    F_CONTIGUOUS or C_CONTIGUOUS (one-segment test).
BEHAVED (B)
    ALIGNED and WRITEABLE.
CARRAY (CA)
    BEHAVED and C_CONTIGUOUS.
FARRAY (FA)
    BEHAVED and F_CONTIGUOUS and not C_CONTIGUOUS.
 
Notes
-----
The `flags` object can be accessed dictionary-like (as in ``a.flags['WRITEABLE']``),
or by using lowercased attribute names (as in ``a.flags.writeable``). Short flag
names are only supported in dictionary access.
 
Only the UPDATEIFCOPY, WRITEABLE, and ALIGNED flags can be changed by
the user, via direct assignment to the attribute or dictionary entry,
or by calling `ndarray.setflags`.
 
The array flags cannot be set arbitrarily:
 
- UPDATEIFCOPY can only be set ``False``.
- ALIGNED can only be set ``True`` if the data is truly aligned.
- WRITEABLE can only be set ``True`` if the array owns its own memory
  or the ultimate owner of the memory exposes a writeable buffer
  interface or is a string.
flat
A 1-D iterator over the array.
 
This is a `numpy.flatiter` instance, which acts similarly to, but is not
a subclass of, Python's built-in iterator object.
 
See Also
--------
flatten : Return a copy of the array collapsed into one dimension.
 
flatiter
 
Examples
--------
>>> x = np.arange(1, 7).reshape(2, 3)
>>> x
array([[1, 2, 3],
       [4, 5, 6]])
>>> x.flat[3]
4
>>> x.T
array([[1, 4],
       [2, 5],
       [3, 6]])
>>> x.T.flat[3]
5
>>> type(x.flat)
<type 'numpy.flatiter'>
 
An assignment example:
 
>>> x.flat = 3; x
array([[3, 3, 3],
       [3, 3, 3]])
>>> x.flat[[1,4]] = 1; x
array([[3, 1, 3],
       [3, 1, 3]])
imag
The imaginary part of the array.
 
Examples
--------
>>> x = np.sqrt([1+0j, 0+1j])
>>> x.imag
array([ 0.        ,  0.70710678])
>>> x.imag.dtype
dtype('float64')
itemsize
Length of one array element in bytes.
 
Examples
--------
>>> x = np.array([1,2,3], dtype=np.float64)
>>> x.itemsize
8
>>> x = np.array([1,2,3], dtype=np.complex128)
>>> x.itemsize
16
nbytes
Total bytes consumed by the elements of the array.
 
Notes
-----
Does not include memory consumed by non-element attributes of the
array object.
 
Examples
--------
>>> x = np.zeros((3,5,2), dtype=np.complex128)
>>> x.nbytes
480
>>> np.prod(x.shape) * x.itemsize
480
ndim
Number of array dimensions.
 
Examples
--------
>>> x = np.array([1, 2, 3])
>>> x.ndim
1
>>> y = np.zeros((2, 3, 4))
>>> y.ndim
3
real
The real part of the array.
 
Examples
--------
>>> x = np.sqrt([1+0j, 0+1j])
>>> x.real
array([ 1.        ,  0.70710678])
>>> x.real.dtype
dtype('float64')
 
See Also
--------
numpy.real : equivalent function
shape
Tuple of array dimensions.
 
Notes
-----
May be used to "reshape" the array, as long as this would not
require a change in the total number of elements
 
Examples
--------
>>> x = np.array([1, 2, 3, 4])
>>> x.shape
(4,)
>>> y = np.zeros((2, 3, 4))
>>> y.shape
(2, 3, 4)
>>> y.shape = (3, 8)
>>> y
array([[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]])
>>> y.shape = (3, 6)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: total size of new array must be unchanged
size
Number of elements in the array.
 
Equivalent to ``np.prod(a.shape)``, i.e., the product of the array's
dimensions.
 
Examples
--------
>>> x = np.zeros((3, 5, 2), dtype=np.complex128)
>>> x.size
30
>>> np.prod(x.shape)
30
strides
Tuple of bytes to step in each dimension when traversing an array.
 
The byte offset of element ``(i[0], i[1], ..., i[n])`` in an array `a`
is::
 
    offset = sum(np.array(i) * a.strides)
 
A more detailed explanation of strides can be found in the
"ndarray.rst" file in the NumPy reference guide.
 
Notes
-----
Imagine an array of 32-bit integers (each 4 bytes)::
 
  x = np.array([[0, 1, 2, 3, 4],
                [5, 6, 7, 8, 9]], dtype=np.int32)
 
This array is stored in memory as 40 bytes, one after the other
(known as a contiguous block of memory).  The strides of an array tell
us how many bytes we have to skip in memory to move to the next position
along a certain axis.  For example, we have to skip 4 bytes (1 value) to
move to the next column, but 20 bytes (5 values) to get to the same
position in the next row.  As such, the strides for the array `x` will be
``(20, 4)``.
 
See Also
--------
numpy.lib.stride_tricks.as_strided
 
Examples
--------
>>> y = np.reshape(np.arange(2*3*4), (2,3,4))
>>> y
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],
       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])
>>> y.strides
(48, 16, 4)
>>> y[1,1,1]
17
>>> offset=sum(y.strides * np.array((1,1,1)))
>>> offset/y.itemsize
17
 
>>> x = np.reshape(np.arange(5*6*7*8), (5,6,7,8)).transpose(2,3,1,0)
>>> x.strides
(32, 4, 224, 1344)
>>> i = np.array([3,5,2,2])
>>> offset = sum(i * x.strides)
>>> x[3,5,2,2]
813
>>> offset / x.itemsize
813

 
Functions
       
array(...)
array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)
 
Create an array.
 
Parameters
----------
object : array_like
    An array, any object exposing the array interface, an
    object whose __array__ method returns an array, or any
    (nested) sequence.
dtype : data-type, optional
    The desired data-type for the array.  If not given, then
    the type will be determined as the minimum type required
    to hold the objects in the sequence.  This argument can only
    be used to 'upcast' the array.  For downcasting, use the
    .astype(t) method.
copy : bool, optional
    If true (default), then the object is copied.  Otherwise, a copy
    will only be made if __array__ returns a copy, if obj is a
    nested sequence, or if a copy is needed to satisfy any of the other
    requirements (`dtype`, `order`, etc.).
order : {'C', 'F', 'A'}, optional
    Specify the order of the array.  If order is 'C' (default), then the
    array will be in C-contiguous order (last-index varies the
    fastest).  If order is 'F', then the returned array
    will be in Fortran-contiguous order (first-index varies the
    fastest).  If order is 'A', then the returned array may
    be in any order (either C-, Fortran-contiguous, or even
    discontiguous).
subok : bool, optional
    If True, then sub-classes will be passed-through, otherwise
    the returned array will be forced to be a base-class array (default).
ndmin : int, optional
    Specifies the minimum number of dimensions that the resulting
    array should have.  Ones will be pre-pended to the shape as
    needed to meet this requirement.
 
Examples
--------
>>> np.array([1, 2, 3])
array([1, 2, 3])
 
Upcasting:
 
>>> np.array([1, 2, 3.0])
array([ 1.,  2.,  3.])
 
More than one dimension:
 
>>> np.array([[1, 2], [3, 4]])
array([[1, 2],
       [3, 4]])
 
Minimum dimensions 2:
 
>>> np.array([1, 2, 3], ndmin=2)
array([[1, 2, 3]])
 
Type provided:
 
>>> np.array([1, 2, 3], dtype=complex)
array([ 1.+0.j,  2.+0.j,  3.+0.j])
 
Data-type consisting of more than one element:
 
>>> x = np.array([(1,2),(3,4)],dtype=[('a','<i4'),('b','<i4')])
>>> x['a']
array([1, 3])
 
Creating an array from sub-classes:
 
>>> np.array(np.mat('1 2; 3 4'))
array([[1, 2],
       [3, 4]])
 
>>> np.array(np.mat('1 2; 3 4'), subok=True)
matrix([[1, 2],
        [3, 4]])
disp(name=None, idx=None)
displays selected data from (files written by) the class `CMADataLogger`. 
 
The call ``cma.disp(name, idx)`` is a shortcut for ``cma.CMADataLogger(name).disp(idx)``.
 
Arguments
---------
    `name`
        name of the logger, filename prefix, `None` evaluates to 
        the default ``'outcmaes'``
    `idx`   
        indices corresponding to rows in the data file; by
        default the first five, then every 100-th, and the last
        10 rows. Too large index values are removed. 
 
Examples
--------
::
 
   import cma, numpy
   # assume some data are available from previous runs
   cma.disp(None,numpy.r_[0,-1])  # first and last
   cma.disp(None,numpy.r_[0:1e9:100,-1]) # every 100-th and last
   cma.disp(idx=numpy.r_[0,-10:0]) # first and ten last
   cma.disp(idx=numpy.r_[0:1e9:1e3,-10:0]) 
 
:See: `CMADataLogger.disp()`
dot(...)
dot(a, b)
 
Dot product of two arrays.
 
For 2-D arrays it is equivalent to matrix multiplication, and for 1-D
arrays to inner product of vectors (without complex conjugation). For
N dimensions it is a sum product over the last axis of `a` and
the second-to-last of `b`::
 
    dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])
 
Parameters
----------
a : array_like
    First argument.
b : array_like
    Second argument.
 
Returns
-------
output : ndarray
    Returns the dot product of `a` and `b`.  If `a` and `b` are both
    scalars or both 1-D arrays then a scalar is returned; otherwise
    an array is returned.
 
Raises
------
ValueError
    If the last dimension of `a` is not the same size as
    the second-to-last dimension of `b`.
 
See Also
--------
vdot : Complex-conjugating dot product.
tensordot : Sum products over arbitrary axes.
 
Examples
--------
>>> np.dot(3, 4)
12
 
Neither argument is complex-conjugated:
 
>>> np.dot([2j, 3j], [2j, 3j])
(-13+0j)
 
For 2-D arrays it's the matrix product:
 
>>> a = [[1, 0], [0, 1]]
>>> b = [[4, 1], [2, 2]]
>>> np.dot(a, b)
array([[4, 1],
       [2, 2]])
 
>>> a = np.arange(3*4*5*6).reshape((3,4,5,6))
>>> b = np.arange(3*4*5*6)[::-1].reshape((5,4,6,3))
>>> np.dot(a, b)[2,3,2,1,2,2]
499128
>>> sum(a[2,3,2,:] * b[1,2,:,2])
499128
fmin(func, x0, sigma0=None, args=(), CMA_active='False # exponential negative update, conducted after the original update', CMA_activefac='1 # learning rate multiplier for active update', CMA_cmean='1 # learning rate for the mean value', CMA_diagonal='0*100*N/sqrt(popsize) # nb of iterations with diagonal covariance matrix, True for always', CMA_eigenmethod='0 # 0=numpy-s eigh, -1=pygsl, otherwise cma.eig (slower)', CMA_mirrors='0 # values <0.5 are interpreted as fraction, va...s numbers (rounded), otherwise about 0.16 is used', CMA_mu='None # parents selection parameter, default is popsize // 2', CMA_on='True # False or 0 for no adaptation of the covariance matrix', CMA_rankmu='True # False or 0 for omitting rank-mu update of covariance matrix', CMA_rankmualpha='0.3 # factor of rank-mu update if mu=1, subject to removal, default might change to 0.0', CMA_dampfac='1 #v positive multiplier for step-size damping, 0.3 is close to optimal on the sphere', CMA_teststds='None # factors for non-isotropic initial distr. mainly for test purpose, see scaling_...', bounds='[None, None] # lower (=bounds[0]) and upper domain boundaries, each a scalar or a list/vector', fixed_variables='None # dictionary with index-value pairs like {0:1.1, 2:0.1} that are not optimized', ftarget='-inf #v target function value, minimization', incpopsize='2 # in fmin(): multiplier for increasing popsize before each restart', maxfevals='inf #v maximum number of function evaluations', maxiter='long(1e3*N**2/sqrt(popsize)) #v maximum number of iterations', mindx='0 #v minimal std in any direction, cave interference with tol*', minstd='0 #v minimal std in any coordinate direction, cave interference with tol*', noise_handling='False # maximal number of evaluations for noise treatment, only fmin', noise_reevals=' 1.5 + popsize/20 # number of solution to be reevaluated for noise measurement, only fmin', noise_eps='1e-7 # perturbation factor for noise handling reevaluations, only fmin', popsize='4+int(3*log(N)) # population size, AKA lambda, number of new solution per iteration', randn='np.random.standard_normal #v randn((lam, N)) must return an np.array of shape (lam, N)', restarts='0 # in fmin(): number of restarts', scaling_of_variables='None # scale for each variable, sigma0 is inter...iables and sigma is unchanged, default is ones(N)', seed='None # random number seed', termination_callback='None #v in fmin(): a function returning True fo...eration step and could be abused for side effects', tolfacupx='1e3 #v termination when step-size increases by ... were found far away from the initial solution x0', tolfun='1e-11 #v termination criterion: tolerance in function value, quite useful', tolfunhist='1e-12 #v termination criterion: tolerance in function value history', tolstagnation='int(100 * N**1.5 / popsize) #v termination if no improvement over tolstagnation iterations', tolx='1e-11 #v termination criterion: tolerance in x-changes', transformation='None # [t0, t1] are two mappings, t0 transforms...1 is the back transformation, see class GenoPheno', typical_x='None # used with scaling_of_variables', updatecovwait='None #v number of iterations without distribution update, name is subject to future changes', verb_append='0 # initial evaluation counter, if append, do not overwrite output files', verb_disp='100 #v verbosity: display console output every verb_disp iteration', verb_filenameprefix='outcmaes # output filenames prefix', verb_log='1 #v verbosity: write data to files every verb_...an be time critical on fast to evaluate functions', verb_plot='0 #v in fmin(): plot() is called every verb_plot iteration', verb_time='True #v output timings on console', vv="0 #? versatile variable for hacking purposes, value found in self.opts['vv']")
functional interface to the stochastic optimizer CMA-ES 
for non-convex function minimization. 
 
Calling Sequences
=================
    ``fmin([],[])``
        returns all optional arguments, that is,
        all keyword arguments to fmin with their default values 
        in a dictionary.
    ``fmin(func, x0, sigma0)``
        minimizes `func` starting at `x0` and with standard deviation 
        `sigma0` (step-size)
    ``fmin(func, x0, sigma0, ftarget=1e-5)``
        minimizes `func` up to target function value 1e-5
    ``fmin(func, x0, sigma0, args=('f',), **options)`` 
        minimizes `func` called with an additional argument ``'f'``. 
        `options` is a dictionary with additional keyword arguments, e.g.
        delivered by `Options()`. 
    ``fmin(func, x0, sigma0, **{'ftarget':1e-5, 'popsize':40})`` 
        the same as ``fmin(func, x0, sigma0, ftarget=1e-5, popsize=40)``
    ``fmin(func, esobj)``
        uses `CMAEvolutionStrategyobject
        instance `esobj` to optimize `func`
 
Arguments
========= 
    `func`
        function to be minimized. Called as
        ``func(x,*args)``. `x` is a one-dimensional `numpy.ndarray`. `func`
        can return `numpy.NaN`,
        which is interpreted as outright rejection of solution `x`
        and invokes an immediate resampling and (re-)evaluation
        of a new solution not counting as function evaluation. 
    `x0` 
        list or `numpy.ndarray`, initial guess of minimum solution
        or `cma.CMAEvolutionStrategyobject instance. In this case
        `sigma0` can be omitted.
    `sigma0`
        scalar, initial standard deviation in each coordinate.
        `sigma0` should be about 1/4 of the search domain width where the
        optimum is to be expected. The variables in `func` should be
        scaled such that they presumably have similar sensitivity.
        See also option `scaling_of_variables`. 
 
Keyword Arguments
=================
All arguments besides `args` and `verb_filenameprefix` are evaluated 
if they are of type `str`, see class `Options` for details.  
::
 
    args=() -- additional arguments for func, not in `cma.Options()`
    CMA_active='0  # exponential negative update, conducted after the original update'
    CMA_activefac='1  # learning rate multiplier for active update'
    CMA_cmean='1  # learning rate for the mean value'
    CMA_diagonal='0*100*N/sqrt(popsize)  # nb of iterations with diagonal covariance matrix, True for always' 
    CMA_eigenmethod='0  # 0=numpy-s eigh, -1=pygsl, otherwise cma.eig (slower)'
    CMA_mirrors='0  # values <0.5 are interpreted as fraction, values >1 as number 
            (rounded), otherwise about 0.16 is used'
    CMA_mu='None  # parents selection parameter, default is popsize // 2'
    CMA_on='True  # False or 0 for no adaptation of the covariance matrix'
    CMA_rankmu='True  # False or 0 for omitting rank-mu update of covariance matrix'
    CMA_rankmualpha='0.3  # factor of rank-mu update if mu=1, subject to removal or change to 0.0'
    CMA_dampfac='1  # positive multiplier for step-size damping, 0.3 is close to optimal on the sphere'
    CMA_teststds='None  # factors for non-isotropic initial distr. mainly for test purpose, see scaling_...'
    bounds='[None, None]  # lower (=bounds[0]) and upper domain boundaries, each a scalar or a list/vector'
    fixed_variables='None  # dictionary with index-value pairs like {0:1.1, 2:0.1} that are not optimized'
    ftarget='-inf  # target function value, minimization'
    incpopsize='2  # in fmin(): multiplier for increasing popsize before each restart'
    maxfevals='inf  # maximum number of function evaluations'
    maxiter='long(1e3*N**2/sqrt(popsize))  # maximum number of iterations'
    mindx='0  # minimal std in any direction, cave interference with tol*'
    minstd='0  # minimal std in any coordinate direction, cave interference with tol*'
    noise_handling='False  # maximal number of evaluations for noise treatment, only fmin'
    noise_reevals=' 1.5 + popsize/20  # number of solution to be reevaluated for noise measurement, only fmin'
    noise_eps='1e-7  # perturbation factor for noise handling reevaluations, only fmin'
    popsize='4+int(3*log(N))  # population size, AKA lambda, number of new solution per iteration'
    restarts='0  # in fmin(): number of restarts' 
    scaling_of_variables='None  # scale for each variable, sigma0 is interpreted w.r.t. this 
            scale, in that effective_sigma0 = sigma0*scaling. Internally the variables are  
            divided by scaling_of_variables and sigma is unchanged, default is ones(N)'
    seed='None  # random number seed'
    termination_callback='None  # in fmin(): a function returning True for termination, called after each 
        iteration step and could be abused for side effects'
    tolfacupx='1e3  # termination when step-size increases by tolfacupx (diverges). That is, the initial step-size 
            was chosen far too small and better solutions were found far away from the initial solution x0'
    tolfun='1e-11  # termination criterion: tolerance in function value, quite useful'
    tolfunhist='1e-12  # termination criterion: tolerance in function value history'
    tolstagnation='int(100 * N**1.5 / popsize)  # termination if no improvement over tolstagnation iterations'
    tolx='1e-11  # termination criterion: tolerance in x-changes'
    transformation='None  # [t0, t1] are two mappings, t0 transforms solutions from 
            CMA-representation to f-representation, t1 is the back transformation, 
            see class GenoPheno'
    typical_x='None  # used with scaling_of_variables'
    updatecovwait='None  # number of iterations without distribution update, name is subject to future changes' 
    verb_append='0  # initial evaluation counter, if append, do not overwrite output files' 
    verb_disp='100  # verbosity: display console output every verb_disp iteration'
    verb_filenameprefix='outcmaes  # output filenames prefix'
    verb_log='1  # verbosity: write data to files every verb_log iteration, writing 
            can be time critical on fast to evaluate functions'
    verb_plot='0  # in fmin(): plot() is called every verb_plot iteration'
    verb_time='True  # output timings on console'
    vv = '0  # versatile variable for hacking purposes, value found in self.opts['vv']'
    
Subsets of options can be displayed, for example like ``cma.Options('tol')``, see also class `Options`.  
    
Return
====== 
Similar to `OOOptimizer.optimize()` and/or `CMAEvolutionStrategy.optimize()`, return the 
list provided by `CMAEvolutionStrategy.result()` appended with an `OOOptimizer` and an 
`OptimDataLogger`::
 
    res = optim.result() + (optim.stop(), optim, logger)
 
where
    - ``res[0]`` (``xopt``) -- best evaluated solution 
    - ``res[1]`` (``fopt``) -- respective function value
    - ``res[2]`` (``evalsopt``) -- respective number of function evaluations
    - ``res[3]`` (``evals``) -- number of overall conducted objective function evaluations
    - ``res[4]`` (``iterations``) -- number of overall conducted iterations
    - ``res[5]`` (``xmean``) -- mean of the final sample distribution
    - ``res[6]`` (``stds``) -- effective stds of the final sample distribution
    - ``res[-3]`` (``stop``) -- termination condition(s) in a dictionary
    - ``res[-2]`` (``cmaes``) -- class `CMAEvolutionStrategy` instance
    - ``res[-1]`` (``logger``) -- class `CMADataLogger` instance
                                                                    
Details
=======
This function is an interface to the class `CMAEvolutionStrategy`. The
class can be used when full control over the iteration loop of the
optimizer is desired. 
 
The noise handling follows closely [Hansen et al 2009, A Method for Handling 
Uncertainty in Evolutionary Optimization...] in the measurement part, but the 
implemented treatment is slightly different: for ``noiseS > 0``, ``evaluations`` (time) 
and sigma are increased by ``alpha``. For ``noiseS < 0``, ``evaluations`` (time) is 
decreased by ``alpha**(1/4)``. The option ``noise_handling`` switches the 
uncertainty handling on/off and gives the maximal number of evaluations for a single
fitness computation. If ``noise_handling`` is a list, the smallest element
defines the minimal number and if the list has three elements, the median 
value is the start value for ``evaluations``. 
See also class `NoiseHandler`.  
 
Examples
========
The following example calls `fmin` optimizing the Rosenbrock function 
in 10-D with initial solution 0.1 and initial step-size 0.5. The
options are specified for the usage with the `doctest` module.
 
>>> import cma
>>> # cma.Options()  # returns all possible options
>>> options = {'CMA_diagonal':10, 'seed':1234, 'verb_time':0}
>>>
>>> res = cma.fmin(cma.fcts.rosen, [0.1] * 10, 0.5, **options)
(5_w,10)-CMA-ES (mu_w=3.2,w_1=45%) in dimension 10 (seed=1234)
   Covariance matrix is diagonal for 10 iterations (1/ccov=29.0)
Iterat #Fevals   function value     axis ratio  sigma   minstd maxstd min:sec
    1      10 1.264232686260072e+02 1.1e+00 4.40e-01  4e-01  4e-01 
    2      20 1.023929748193649e+02 1.1e+00 4.00e-01  4e-01  4e-01 
    3      30 1.214724267489674e+02 1.2e+00 3.70e-01  3e-01  4e-01 
  100    1000 6.366683525319511e+00 6.2e+00 2.49e-02  9e-03  3e-02 
  200    2000 3.347312410388666e+00 1.2e+01 4.52e-02  8e-03  4e-02 
  300    3000 1.027509686232270e+00 1.3e+01 2.85e-02  5e-03  2e-02 
  400    4000 1.279649321170636e-01 2.3e+01 3.53e-02  3e-03  3e-02 
  500    5000 4.302636076186532e-04 4.6e+01 4.78e-03  3e-04  5e-03 
  600    6000 6.943669235595049e-11 5.1e+01 5.41e-06  1e-07  4e-06 
  650    6500 5.557961334063003e-14 5.4e+01 1.88e-07  4e-09  1e-07 
termination on tolfun : 1e-11
final/bestever f-value = 5.55796133406e-14 2.62435631419e-14
mean solution:  [ 1.          1.00000001  1.          1.          1.          1.00000001
  1.00000002  1.00000003] ...
std deviation: [  3.91933872e-09   3.77927324e-09   4.00622859e-09   4.66059254e-09
   5.49661885e-09   7.43777452e-09   1.37972077e-08   2.60207658e-08] ...
>>> 
>>> print('current solutions fitness f(%s) = %f' % (str(res[0]), res[1])) 
current solutions fitness f([ 1.  1.  1.  1.  1.  1.  1.  1.  1.  1.]) = 2.62435631419e-14
>>> 
>>> print('best solutions fitness = %f' % (res[1]))
best solutions fitness = 2.62435631419e-14
>>> assert res[1] < 1e-12
 
The method ::
    
    cma.plot();  
    
(based on `matplotlib.pylab`) produces a plot of the run and, if necessary::
    
    cma.show()  
 
shows the plot in a window. To continue you might need to 
close the pop-up window. This behavior seems to disappear in 
subsequent calls of `cma.plot()` and is avoided by using
`ipython` with `-pylab` option. Finally ::
 
    cma.savefig('myfirstrun')  # savefig from matplotlib.pylab
 
will save the figure in a png.
 
:See: `CMAEvolutionStrategy`, `OOOptimizer.optimize(), `plot()`, `Options`, `scipy.optimize.fmin()`
main(argv=None)
provides a versatile interface to do some testing from the command line.
 
Usage: python cma.py [options | func dim sig0 [optkey optval][optkey optval]...]
Use option -t or --test to run the doctest, -t -v to get (much) verbosity
and -t -q to run it quietly with output only in case of errors. 
Use options --fcts and --doc for more infos or start ipython --pylab. 
 
Examples 
--------
A single run: python cma.py elli 10 1 
 
Run doctest: python cma.py --test --quiet
plot(name=None, fig=None, abscissa=1, iteridx=None, plot_mean=True, foffset=1e-19, x_opt=None, fontsize=None)
plot data from files written by a `CMADataLogger`, 
the call ``cma.plot(name, **argsdict)`` is a shortcut for 
``cma.CMADataLogger(name).plot(**argsdict)``
 
Arguments
---------
    `name` 
        name of the logger, filename prefix, None evaluates to 
        the default 'outcmaes'
    `fig`
        filename or figure number, or both as a tuple (any order)
    `abscissa`
        0==plot versus iteration count,
        1==plot versus function evaluation number
    `iteridx`
        iteration indices to plot
 
Return `None`
      
Examples
--------
::
 
   cma.plot();  # the optimization might be still 
                # running in a different shell
   cma.show()  # to continue you might need to close the pop-up window 
               # once and call cma.plot() again. 
               # This behavior seems to disappear in subsequent 
               # calls of cma.plot(). Also using ipython with -pylab
               # option might help. 
   cma.savefig('fig325.png')
   cma.close()
 
   cdl = cma.CMADataLogger().downsampling().plot()
   
Details
-------
Data from codes in other languages (C, Java, Matlab, Scilab) have the same 
format and can be plotted just the same. 
   
:See: `CMADataLogger`, `CMADataLogger.plot()`
pprint(to_be_printed)
nicely formated print
process_test(stream=None)
unitdoctest()
is used to describe test cases and might in future become helpful
as an experimental tutorial as well. The main testing feature at the
moment is by doctest with ``cma._test()`` or conveniently by 
``python cma.py --test``. Unfortunately, depending on the 
system, the results will slightly differ and many "failed" test cases
might be reported. 
 
A simple first overall test: 
    >>> import cma
    >>> res = cma.fmin(cma.fcts.elli, 3*[1], 1, CMA_diagonal=2, seed=1, verb_time=0)
    (3_w,7)-CMA-ES (mu_w=2.3,w_1=58%) in dimension 3 (seed=1)
       Covariance matrix is diagonal for 2 iterations (1/ccov=7.0)
    Iterat #Fevals   function value     axis ratio  sigma   minstd maxstd min:sec
        1       7 1.453161670768570e+04 1.2e+00 1.08e+00  1e+00  1e+00 
        2      14 3.281197961927601e+04 1.3e+00 1.22e+00  1e+00  2e+00 
        3      21 1.082851071704020e+04 1.3e+00 1.24e+00  1e+00  2e+00 
      100     700 8.544042012075362e+00 1.4e+02 3.18e-01  1e-03  2e-01 
      200    1400 5.691152415221861e-12 1.0e+03 3.82e-05  1e-09  1e-06 
      220    1540 3.890107746209078e-15 9.5e+02 4.56e-06  8e-11  7e-08 
    termination on tolfun : 1e-11
    final/bestever f-value = 3.89010774621e-15 2.52273602735e-15
    mean solution:  [ -4.63614606e-08  -3.42761465e-10   1.59957987e-11]
    std deviation: [  6.96066282e-08   2.28704425e-09   7.63875911e-11]
 
Test on the Rosenbrock function with 3 restarts. The first trial only
finds the local optimum, which happens in about 20% of the cases.
    >>> import cma
    >>> res = cma.fmin(cma.fcts.rosen, 4*[1],1, ftarget=1e-6, restarts=3, verb_time=0, verb_disp=500, seed=3)
    (4_w,8)-CMA-ES (mu_w=2.6,w_1=52%) in dimension 4 (seed=3)
    Iterat #Fevals   function value     axis ratio  sigma   minstd maxstd min:sec
        1       8 4.875315645656848e+01 1.0e+00 8.43e-01  8e-01  8e-01 
        2      16 1.662319948123120e+02 1.1e+00 7.67e-01  7e-01  8e-01 
        3      24 6.747063604799602e+01 1.2e+00 7.08e-01  6e-01  7e-01 
      184    1472 3.701428610430019e+00 4.3e+01 9.41e-07  3e-08  5e-08 
    termination on tolfun : 1e-11
    final/bestever f-value = 3.70142861043 3.70142861043
    mean solution:  [-0.77565922  0.61309336  0.38206284  0.14597202]
    std deviation: [  2.54211502e-08   3.88803698e-08   4.74481641e-08   3.64398108e-08]
    (8_w,16)-CMA-ES (mu_w=4.8,w_1=32%) in dimension 4 (seed=4)
    Iterat #Fevals   function value     axis ratio  sigma   minstd maxstd min:sec
        1    1489 2.011376859371495e+02 1.0e+00 8.90e-01  8e-01  9e-01 
        2    1505 4.157106647905128e+01 1.1e+00 8.02e-01  7e-01  7e-01 
        3    1521 3.548184889359060e+01 1.1e+00 1.02e+00  8e-01  1e+00 
      111    3249 6.831867555502181e-07 5.1e+01 2.62e-02  2e-04  2e-03 
    termination on ftarget : 1e-06
    final/bestever f-value = 6.8318675555e-07 1.18576673231e-07
    mean solution:  [ 0.99997004  0.99993938  0.99984868  0.99969505]
    std deviation: [ 0.00018973  0.00038006  0.00076479  0.00151402]
    >>> assert res[1] <= 1e-6
 
Notice the different termination conditions. Termination on the target 
function value ftarget prevents further restarts. 
 
Test of scaling_of_variables option
    >>> import cma
    >>> opts = cma.Options()
    >>> opts['seed'] = 456
    >>> opts['verb_disp'] = 0
    >>> opts['CMA_active'] = 1
    >>> # rescaling of third variable: for searching in  roughly
    >>> #   x0 plus/minus 1e3*sigma0 (instead of plus/minus sigma0)
    >>> opts.scaling_of_variables = [1, 1, 1e3, 1]
    >>> res = cma.fmin(cma.fcts.rosen, 4 * [0.1], 0.1, **opts)
    termination on tolfun : 1e-11
    final/bestever f-value = 2.68096173031e-14 1.09714829146e-14
    mean solution:  [ 1.00000001  1.00000002  1.00000004  1.00000007]
    std deviation: [  3.00466854e-08   5.88400826e-08   1.18482371e-07   2.34837383e-07]
 
The printed std deviations reflect the actual true value (not the one
in the internal representation which would be different). 
    
    :See: cma.main(), cma._test()

 
Data
        Fcts = <cma.FitnessFunctions object>
__docformat__ = 'reStructuredText'
__version__ = '0.9.92 $Revision: 2658 $'
division = _Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)
exp = <ufunc 'exp'>
fcts = <cma.FitnessFunctions object>
inf = inf
log = <ufunc 'log'>
rotate = <cma.Rotation object>
show = <matplotlib.backends.backend_tkagg.Show object>
sqrt = <ufunc 'sqrt'>
with_statement = _Feature((2, 5, 0, 'alpha', 1), (2, 6, 0, 'alpha', 0), 32768)