diff --git a/dist/PICOS-1.0.1.tar.gz b/dist/PICOS-1.0.1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..02a618a000442603e73055f640009e9e094c1dc5 Binary files /dev/null and b/dist/PICOS-1.0.1.tar.gz differ diff --git a/doc/full_html/1.0.2/dist/PICOS-1.0.2.tar.gz b/dist/PICOS-1.0.2.tar.gz similarity index 100% rename from doc/full_html/1.0.2/dist/PICOS-1.0.2.tar.gz rename to dist/PICOS-1.0.2.tar.gz diff --git a/doc/RELEASE_CHECK b/doc/RELEASE_CHECK deleted file mode 100644 index dd871f3a33cb02cbeec2d41441249a6ff5704881..0000000000000000000000000000000000000000 --- a/doc/RELEASE_CHECK +++ /dev/null @@ -1,15 +0,0 @@ - -lancer python ../../add_warning_notlast.py from directory /doc/full_html/x.x.x (former_version) -lancer script add_google_script directly from /doc -Changer CHANGE file -Creer dist file (python setup.py sdist) -> check that the doc is in the dist file ??? -make html (to copy dist) - -rsync to /www: -rsync -luzvr full_html/* opts1.zib.de:/www/Abt-Optimization/picos - - -Register on pypi (python setup.py register, username guillaume.sagnol) -sed -i 's/Picos 0\.1\.0/Picos 0\.1\.1/g' picos/*.py -et change version num dans conf.py and setup.py and __init__.py -make new directory in the full_html directory and update the symolic link "last" with the ".." trick \ No newline at end of file diff --git a/doc/TODO b/doc/TODO deleted file mode 100644 index 56fbaf6dcc44a0381c13f3ae510ab88c680394f3..0000000000000000000000000000000000000000 --- a/doc/TODO +++ /dev/null @@ -1,50 +0,0 @@ -website: ask Paul how to make redirections ? -dualize does not work on cplxsdp -solve re3 with solveviadual (pb matrice pas symmetrique -> but OK with A+A.H/2: check) -problem de rang avec cvxopt: remove constraints redondantes ? - - -add new contributors (Marco Dalai, Peter Wittek ?) -trace (AM^p) -robust -- uncertainty sets -read solution partially -fix some variables as constant - - - - - -solve_via_dual avec cvxopt -- something special to do (finir primalize()) -probleme qd solve problems 2 times in a row sequentially (test_cutting_plane.py avec mosek6, but only at zib (?)) -problem avec duals de gurobi pour probleme dsocp de test_picos.py (faire testSOCP5 ?). Bug gurobi -> min example ? -write_to_file --> scaled vars [mettre ds nom variable ?] -file reader -mps writer -dat-s writer with option to desymmetrize the matrices - - -Better Exception handling in _retrieve_matrix -quad expression of dimension>1 ? -QP avec cvxopt -doc populate et related properties (number_solutions,value_alt,...) - and options - * pool_size=None (solver default) : maximum number of computed - solutions in the solution pool. - * pool_gap = None (0%) : keeps only the solution - within this gap in the pool -duals avec zibopt ? -documenter dat-sx format ? -sqp method and related options: - * step_sqp=1 : 'first step length for the sequential quadratic programming procedure' - * harmonic_steps=True : step at the ith step of the sqp procedure is step_sqp/i] -no string mode. -generaliser les inplace operators (avoid seelfcopy as much as possible) - - -lancer script add_google_script -Changer CHANGE file -Creer dist file (python setup.py sdist) -move to /www, and change root-index with 3 and $sed -i 's/href="/href="v013\//g' index.html -Register on pypi (python setup.py register, username guillaume.sagnol) -sed -i 's/Picos 0\.1\.0/Picos 0\.1\.1/g' picos/*.py -et change version num dans conf.py and setup.py and __init__.py diff --git a/doc/_build/html/index.html b/doc/_build/html/index.html deleted file mode 100644 index 5230b7a6a21dd5230290508ad1433a429affa712..0000000000000000000000000000000000000000 --- a/doc/_build/html/index.html +++ /dev/null @@ -1,337 +0,0 @@ - - - - - - - - - - PICOS: A Python Interface for Conic Optimization Solvers — picos 1.1.0 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - - -
-
-
- -
-
-
- -
-

PICOS: A Python Interface for Conic Optimization Solvers

-_images/picos_big_trans.gif -

Welcome to the documentation of PICOS, -a user-friendly python interface to many linear and conic optimization solvers, -see more about PICOS in the introduction.

-

The latest version can be downloaded here, -and can be installed by following these instructions.

-

This documentation contains a tutorial and some examples, -which should already be enough for a quick start with PICOS. To go deeper, -have a look at the picos reference, which provides information -on every function of PICOS.

-

News

-
-
    -
  • -
    30 Jan. 15: Picos 1.0.2 Released
    -
    -
    Major release with following new functionalities:
    -
      -
    • Support (read and write) for .cbf problem files (conic benchmark format ), which should be the standard for (mixed integer) conic optimization problems, cf. write_to_file and import_cbf .
    • -
    • Improved support for complex SDP (more efficient implementation of to_real() , corrected bug in the implementation of the scalar product for Hermitian matrices and the conjugate of a complex expression, support for equality constraints involving complex coefficients)
    • -
    • Support for inequalities involving the sum of k largest elements of an affine expression, or the k largest eigenvalues of a symmetric matrix expression, cf. the functions sum_k_largest() , sum_k_smallest() , sum_k_largest_lambda(), sum_k_smallest_lambda(), lambda_max() and lambda_min() .
    • -
    • Support for inequalities involving the L_{p,q}- norm of an affine expresison, cf. norm() .
    • -
    • New vtype for antisymmetric matrix variables ( vtype = antisym).
    • -
    • Constraints can be specified as membership in a Set . Sets can be created by the functions ball() , simplex(), and truncated_simplex() .
    • -
    • New functions maximize and maximize to specify the objective function of a problem and solve it.
    • -
    -
    -
    And many thanks to Petter Wittek for the following improvements, who were motivated by the use of PICOS in the package ncpol2sdpa for optimization over noncommutative polynomials:
    -
      -
    • More efficient implementation of the writer to the sparse - SDPA file format (write_to_file)
    • -
    • Hadamard (elementwise) product of affine expression is implemented, as an overload of the ^ operator, cf. an example here .
    • -
    • Partial transposition of an Affine Expression, cf. partial_transpose() or the Tx attribute.
    • -
    -
    -
    -
    -
    -
  • -
  • -
    19 Jul. 13: Picos 1.0.0 Released
    -

    with Semidefinite Programming Interface for MOSEK 7.0 !!!

    -
    -
    -
  • -
  • Former changes are listed here.

    -
  • -
-
-

PICOS Documentation contents

- -
-
-

Indices and tables

- -
- - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/doc/add_google_script.py b/doc/add_google_script.py deleted file mode 100644 index b2223f3af8cc863526fa8f638831f15a902a35c1..0000000000000000000000000000000000000000 --- a/doc/add_google_script.py +++ /dev/null @@ -1,45 +0,0 @@ -import os -files = os.popen('ls full_html/last/*.html').readlines() -files = [f[:-1] for f in files if f[:6] not in ('search','py-mod','genind')] - -for f in files: - fi=open(f,'r') - fitmp=open(f+'tmp','w') - line = fi.readline() - while '' not in line: - fitmp.write(line) - line = fi.readline() - - fitmp.write('\n') - fitmp.write('\n') - fitmp.write(' \n") - fitmp.write('\n') - while line: - if 'tar.gz' in line: - vsplit=line.split('tar.gz') - version=vsplit[0].split('PICOS')[1][1:-1] - vsplit=version.split('.') - ocstring=('''onClick="javascript: _gaq.push(['_trackPageview', '/downloads/version''' - +str(vsplit[0]) +str(vsplit[1]) +str(vsplit[2]) - + '''']);"''') - indtar = line.index('tar.gz') + 7 - line = line[:indtar]+' '+ocstring+line[indtar:] - fitmp.write(line) - line = fi.readline() - - fi.close() - fitmp.close() - os.system('mv '+f+'tmp '+f) - diff --git a/doc/add_warning_notlast.py b/doc/add_warning_notlast.py deleted file mode 100644 index d3fd2995c71fa28dd81bdb5b27f3c2927b7ed9a8..0000000000000000000000000000000000000000 --- a/doc/add_warning_notlast.py +++ /dev/null @@ -1,42 +0,0 @@ -#newlines =['', - #'
', - #'

Warning

', - #'

You are consulting the doc of a former version of PICOS.', - #'The latest version is HERE.

', - #'
' - #] - -newlines = [ -'
', -'
', -'

Warning

', -'

You are consulting the doc of a former version of PICOS. The', -' latest version is HERE.

', -'
'] - -import os -files = os.popen('ls *.html').readlines() -files = [f[:-1] for f in files if f[:6] not in ('search','py-mod','genind')] - -for f in files: - print f - fi=open(f,'r') - fitmp=open(f+'tmp','w') - line = fi.readline() - #while '' not in line: - while '
' not in line: - fitmp.write(line) - line = fi.readline() - - for ln in newlines: - fitmp.write(ln) - - line = fi.readline() - while line: - fitmp.write(line) - line = fi.readline() - - fi.close() - fitmp.close() - os.system('mv '+f+'tmp '+f) - diff --git a/doc/full_html/0.1.2/.buildinfo b/doc/full_html/0.1.2/.buildinfo deleted file mode 100644 index 5516f1d4a9102bbf2585f4d1c5eacc9e1bbac053..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/.buildinfo +++ /dev/null @@ -1,4 +0,0 @@ -# Sphinx build info version 1 -# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: beb97d53a22f7e7a57996db44bfe9314 -tags: fbb0d17656682115ca4d033fb2f83ba1 diff --git a/doc/full_html/0.1.2/.directory b/doc/full_html/0.1.2/.directory deleted file mode 100644 index 53563f387919b8dffe63bc38b596ca9508ba8a44..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/.directory +++ /dev/null @@ -1,10 +0,0 @@ -[Dolphin] -AdditionalInfoV2=Details_Size,Details_Date,CustomizedDetails -ShowPreview=true -Sorting=1 -Timestamp=2012,12,8,23,56,18 -Version=2 -ViewMode=1 - -[Settings] -ShowDotFiles=true diff --git a/doc/full_html/0.1.2/_images/graphs-1.png b/doc/full_html/0.1.2/_images/graphs-1.png deleted file mode 100644 index 10b851e8914ee8b89a0c408d0dd9b2afa2cae52f..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/graphs-1.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/0205436a398d5f1ad9c8590c96cfaff52557e5ce.png b/doc/full_html/0.1.2/_images/math/0205436a398d5f1ad9c8590c96cfaff52557e5ce.png deleted file mode 100644 index fe3f55e10c5fe1a69fb6a75fd609c8247e59e8b0..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/0205436a398d5f1ad9c8590c96cfaff52557e5ce.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/027f4a11d6090f9eac0ce2488df6384dad1263ea.png b/doc/full_html/0.1.2/_images/math/027f4a11d6090f9eac0ce2488df6384dad1263ea.png deleted file mode 100644 index 9d66efc2b853fe27483db337fa80e3f3d95f08a6..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/027f4a11d6090f9eac0ce2488df6384dad1263ea.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/03044418633c182d8c1b7cb386ad3454b50b6238.png b/doc/full_html/0.1.2/_images/math/03044418633c182d8c1b7cb386ad3454b50b6238.png deleted file mode 100644 index eabab99d092d4299d2f019c78e3c082cbb8126a8..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/03044418633c182d8c1b7cb386ad3454b50b6238.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/035e03179f6f46dec9ccff6add1ffb999d17f465.png b/doc/full_html/0.1.2/_images/math/035e03179f6f46dec9ccff6add1ffb999d17f465.png deleted file mode 100644 index 71c67711ca8ebaf6a0b2c455f11c44d99463a258..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/035e03179f6f46dec9ccff6add1ffb999d17f465.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/03b552622038cd329971eb0cba9465c82a2a3f03.png b/doc/full_html/0.1.2/_images/math/03b552622038cd329971eb0cba9465c82a2a3f03.png deleted file mode 100644 index 3c96fb7565f2b7b815ef5eb0661ec18425b55b51..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/03b552622038cd329971eb0cba9465c82a2a3f03.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/041b2af51c2ec9fc8dc8e83c6467dd5e38743cf9.png b/doc/full_html/0.1.2/_images/math/041b2af51c2ec9fc8dc8e83c6467dd5e38743cf9.png deleted file mode 100644 index 096fa07fe9e0946c5cde4218f96684eb7991ccb5..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/041b2af51c2ec9fc8dc8e83c6467dd5e38743cf9.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/06acf47e50e768a09f2c2b8247436c0ffda5a3a6.png b/doc/full_html/0.1.2/_images/math/06acf47e50e768a09f2c2b8247436c0ffda5a3a6.png deleted file mode 100644 index 59dd0ae1ab536fa966520a0f75bc763c653984d8..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/06acf47e50e768a09f2c2b8247436c0ffda5a3a6.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/08cc89c84bdea19f40253477e3644d2be147ddd5.png b/doc/full_html/0.1.2/_images/math/08cc89c84bdea19f40253477e3644d2be147ddd5.png deleted file mode 100644 index b55ebdacc864e60a8b5da028286a02c1f38a879c..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/08cc89c84bdea19f40253477e3644d2be147ddd5.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/0911893437321069e516a0b5827ffaab90b0172e.png b/doc/full_html/0.1.2/_images/math/0911893437321069e516a0b5827ffaab90b0172e.png deleted file mode 100644 index 09048854d528b7ec51e77f2349489a8d21f5fba2..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/0911893437321069e516a0b5827ffaab90b0172e.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/09962f49bab64d6173b8e4304637eb66f2c02151.png b/doc/full_html/0.1.2/_images/math/09962f49bab64d6173b8e4304637eb66f2c02151.png deleted file mode 100644 index cb5de0e2607957296f2e3ba45dc2d1818a1e1d52..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/09962f49bab64d6173b8e4304637eb66f2c02151.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/0d01dba25c8a7ab26ece8dc4b9a4ad47ad2120c1.png b/doc/full_html/0.1.2/_images/math/0d01dba25c8a7ab26ece8dc4b9a4ad47ad2120c1.png deleted file mode 100644 index e204c2624668a0d2c2dae8200e83962b6d08ab58..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/0d01dba25c8a7ab26ece8dc4b9a4ad47ad2120c1.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/0e3d8d04c8f040f23e451c31b909c6e60b761610.png b/doc/full_html/0.1.2/_images/math/0e3d8d04c8f040f23e451c31b909c6e60b761610.png deleted file mode 100644 index 1d65ab8af7976f703a47d1d68be8c70e56bcc2e7..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/0e3d8d04c8f040f23e451c31b909c6e60b761610.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/0e3efd9b14723a92c2ae891fe27780d5f8e2b215.png b/doc/full_html/0.1.2/_images/math/0e3efd9b14723a92c2ae891fe27780d5f8e2b215.png deleted file mode 100644 index d147f4efd6dfe643703a5f00bee26ba9a1e91adb..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/0e3efd9b14723a92c2ae891fe27780d5f8e2b215.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/0f0d7f7827c5685e73c8921bd5659a133f55cc5a.png b/doc/full_html/0.1.2/_images/math/0f0d7f7827c5685e73c8921bd5659a133f55cc5a.png deleted file mode 100644 index acf21b4b37dd96568659bafea79ca256d1a6687b..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/0f0d7f7827c5685e73c8921bd5659a133f55cc5a.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/0ff86250244d339d301e1531f4883dbab401cb53.png b/doc/full_html/0.1.2/_images/math/0ff86250244d339d301e1531f4883dbab401cb53.png deleted file mode 100644 index 6826e6f785812f4fad9f0065aa53cf3f42996bcf..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/0ff86250244d339d301e1531f4883dbab401cb53.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/101b03e5a9978c9644a0e1f28b837b3be1b78335.png b/doc/full_html/0.1.2/_images/math/101b03e5a9978c9644a0e1f28b837b3be1b78335.png deleted file mode 100644 index 2a67d0b5221bb879eca9f35dbd349377c528833f..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/101b03e5a9978c9644a0e1f28b837b3be1b78335.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/111aacbe2b7f456d6b13c33b493c9cd7d208c425.png b/doc/full_html/0.1.2/_images/math/111aacbe2b7f456d6b13c33b493c9cd7d208c425.png deleted file mode 100644 index ff267b1dba4c97224877ff5b8ed35178ab9c7958..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/111aacbe2b7f456d6b13c33b493c9cd7d208c425.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/112cd325ed787c45c2cd755b54f466c9d57e3235.png b/doc/full_html/0.1.2/_images/math/112cd325ed787c45c2cd755b54f466c9d57e3235.png deleted file mode 100644 index f83e6675c63cab4a34023de992536596e3fc13e3..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/112cd325ed787c45c2cd755b54f466c9d57e3235.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/13cb5facb45cd50855a21c84bbf976599b8534b8.png b/doc/full_html/0.1.2/_images/math/13cb5facb45cd50855a21c84bbf976599b8534b8.png deleted file mode 100644 index 9b8bfe1b39c366da8da594150c1cf00ef19847bc..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/13cb5facb45cd50855a21c84bbf976599b8534b8.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/15e666d53eb918bbcae7d5e63296c87b0f6da75d.png b/doc/full_html/0.1.2/_images/math/15e666d53eb918bbcae7d5e63296c87b0f6da75d.png deleted file mode 100644 index b1a47e0f9617c6e03ec29f7a27136bc9ddb01fe5..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/15e666d53eb918bbcae7d5e63296c87b0f6da75d.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/174fadd07fd54c9afe288e96558c92e0c1da733a.png b/doc/full_html/0.1.2/_images/math/174fadd07fd54c9afe288e96558c92e0c1da733a.png deleted file mode 100644 index 78341a609e73154499a1900b5c1a26ccc5e57f36..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/174fadd07fd54c9afe288e96558c92e0c1da733a.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/17f1a4f73d201a5442e33b9259bd0861b694e1eb.png b/doc/full_html/0.1.2/_images/math/17f1a4f73d201a5442e33b9259bd0861b694e1eb.png deleted file mode 100644 index 698d5bcd3ca1a39f151d99b94fcc007c60694910..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/17f1a4f73d201a5442e33b9259bd0861b694e1eb.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/187b5d05e3a3837f0959d2eea18ac55cfd037a9d.png b/doc/full_html/0.1.2/_images/math/187b5d05e3a3837f0959d2eea18ac55cfd037a9d.png deleted file mode 100644 index 18ee83b38616306e5128a925cbda18d978b72328..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/187b5d05e3a3837f0959d2eea18ac55cfd037a9d.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/1889779de8896a49cfe4432ed2fd26c39098390a.png b/doc/full_html/0.1.2/_images/math/1889779de8896a49cfe4432ed2fd26c39098390a.png deleted file mode 100644 index 12400e746add62050567efc4ce7cb5c4d43cf1e8..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/1889779de8896a49cfe4432ed2fd26c39098390a.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/1bf4c58489dab081f845077b9bf05c3ca464ae2e.png b/doc/full_html/0.1.2/_images/math/1bf4c58489dab081f845077b9bf05c3ca464ae2e.png deleted file mode 100644 index 2b100533b5521168d109eb34beea28bffa4473fb..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/1bf4c58489dab081f845077b9bf05c3ca464ae2e.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/1da5689d11201e2ea7327bdf00fd4a6958d6f147.png b/doc/full_html/0.1.2/_images/math/1da5689d11201e2ea7327bdf00fd4a6958d6f147.png deleted file mode 100644 index 505bb13d635c3012d3eed739400c1564264a0980..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/1da5689d11201e2ea7327bdf00fd4a6958d6f147.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/1fd45a26db7ff1e97c758439f49a189edabbc5ef.png b/doc/full_html/0.1.2/_images/math/1fd45a26db7ff1e97c758439f49a189edabbc5ef.png deleted file mode 100644 index 2a6740c1e346469f1bbb2547327a80880b4b402c..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/1fd45a26db7ff1e97c758439f49a189edabbc5ef.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/2092a1a4bcbedc9c19637fb7ca48a202ac3f0626.png b/doc/full_html/0.1.2/_images/math/2092a1a4bcbedc9c19637fb7ca48a202ac3f0626.png deleted file mode 100644 index f780af7012af425cfc83104e613bced5b152c1dd..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/2092a1a4bcbedc9c19637fb7ca48a202ac3f0626.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/21645837ed2b5defed08c2d9b3ae9a6b8c10e017.png b/doc/full_html/0.1.2/_images/math/21645837ed2b5defed08c2d9b3ae9a6b8c10e017.png deleted file mode 100644 index 325caf4012c643105b98256839df3d582da3fab8..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/21645837ed2b5defed08c2d9b3ae9a6b8c10e017.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/2478ba04d06e73259abe7a4c21b9fb0b51010a63.png b/doc/full_html/0.1.2/_images/math/2478ba04d06e73259abe7a4c21b9fb0b51010a63.png deleted file mode 100644 index 940af42a83a7a494e596663d6af1afc3f89d5df4..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/2478ba04d06e73259abe7a4c21b9fb0b51010a63.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/2541e641e55d43b6fec1ebd96780a3e47113d497.png b/doc/full_html/0.1.2/_images/math/2541e641e55d43b6fec1ebd96780a3e47113d497.png deleted file mode 100644 index 03bd277fd16a811cfc567594242481410f4408d2..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/2541e641e55d43b6fec1ebd96780a3e47113d497.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/26e4056a8fe2c8b12c34c20e0e65df046a5cf2a5.png b/doc/full_html/0.1.2/_images/math/26e4056a8fe2c8b12c34c20e0e65df046a5cf2a5.png deleted file mode 100644 index e9bc39952436eb36e11c964e11a5fe53756c0326..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/26e4056a8fe2c8b12c34c20e0e65df046a5cf2a5.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/26eeb5258ca5099acf8fe96b2a1049c48c89a5e6.png b/doc/full_html/0.1.2/_images/math/26eeb5258ca5099acf8fe96b2a1049c48c89a5e6.png deleted file mode 100644 index e9c6cfb313ecd088b8b70be8f8c622675d3cf18e..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/26eeb5258ca5099acf8fe96b2a1049c48c89a5e6.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/2744600189f7f1df31756f2022b2d5212ef1c767.png b/doc/full_html/0.1.2/_images/math/2744600189f7f1df31756f2022b2d5212ef1c767.png deleted file mode 100644 index ac3f8e32685d954b64701ff6543220ef4ac4f595..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/2744600189f7f1df31756f2022b2d5212ef1c767.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/27a1344ac0ae7a58600fcc8b354dec747982e7d4.png b/doc/full_html/0.1.2/_images/math/27a1344ac0ae7a58600fcc8b354dec747982e7d4.png deleted file mode 100644 index b135368ab0b862f9f5f8c894f94a32add2f2002d..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/27a1344ac0ae7a58600fcc8b354dec747982e7d4.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/288395b0f28b57e978d7aed8097121acf1e9c171.png b/doc/full_html/0.1.2/_images/math/288395b0f28b57e978d7aed8097121acf1e9c171.png deleted file mode 100644 index 1a7dde0e5627f71b61b9f780eb5cee1f7c391fa4..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/288395b0f28b57e978d7aed8097121acf1e9c171.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/292cbf21f8069205bbbbd13a0c5fc44ac0b0fe45.png b/doc/full_html/0.1.2/_images/math/292cbf21f8069205bbbbd13a0c5fc44ac0b0fe45.png deleted file mode 100644 index a1b358b77d2a613cf23a0c02d2e0ecc248bd8bdc..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/292cbf21f8069205bbbbd13a0c5fc44ac0b0fe45.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/2b4948db3b70d781ad4be7585f0ade4b1d0ba1f1.png b/doc/full_html/0.1.2/_images/math/2b4948db3b70d781ad4be7585f0ade4b1d0ba1f1.png deleted file mode 100644 index e1f67e80c173b25a2420866fb448fa176df30a92..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/2b4948db3b70d781ad4be7585f0ade4b1d0ba1f1.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/2dd49662787421a2ae15602912ef190a43785091.png b/doc/full_html/0.1.2/_images/math/2dd49662787421a2ae15602912ef190a43785091.png deleted file mode 100644 index 38dedd4a41dcbf38e590f11c0d30cec0a114cb01..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/2dd49662787421a2ae15602912ef190a43785091.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/2fc88b027cd234e0ccfc8411682cd96ef11b3a42.png b/doc/full_html/0.1.2/_images/math/2fc88b027cd234e0ccfc8411682cd96ef11b3a42.png deleted file mode 100644 index 2058ebe9e9f8213fffda7541f687860f3d690b30..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/2fc88b027cd234e0ccfc8411682cd96ef11b3a42.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/2fe6613e2dde4fecbf359c282aa4bc8483146b03.png b/doc/full_html/0.1.2/_images/math/2fe6613e2dde4fecbf359c282aa4bc8483146b03.png deleted file mode 100644 index 60f1788331e5fd103fb261cc3c120b39201a8c28..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/2fe6613e2dde4fecbf359c282aa4bc8483146b03.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/319593f7ae7122d7910bdf87a156b25f7588f1ad.png b/doc/full_html/0.1.2/_images/math/319593f7ae7122d7910bdf87a156b25f7588f1ad.png deleted file mode 100644 index eb62220326bf7679e1436182f7d03a1f31c3366f..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/319593f7ae7122d7910bdf87a156b25f7588f1ad.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/32b7854606e6ffd3e5ac499153fc4ef354ae0feb.png b/doc/full_html/0.1.2/_images/math/32b7854606e6ffd3e5ac499153fc4ef354ae0feb.png deleted file mode 100644 index bed67b3d89df1090972a11da91ee565e264f2199..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/32b7854606e6ffd3e5ac499153fc4ef354ae0feb.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/34857b3ba74ce5cd8607f3ebd23e9015908ada71.png b/doc/full_html/0.1.2/_images/math/34857b3ba74ce5cd8607f3ebd23e9015908ada71.png deleted file mode 100644 index 765c1f7d5b5ff9e5aa5e97f2b124b80dffc13b39..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/34857b3ba74ce5cd8607f3ebd23e9015908ada71.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/3487bcb0a8f4c79304b4cccfca01ae4b74096f76.png b/doc/full_html/0.1.2/_images/math/3487bcb0a8f4c79304b4cccfca01ae4b74096f76.png deleted file mode 100644 index 5c179ee7afc351a9e13c26644ab07e77c4618732..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/3487bcb0a8f4c79304b4cccfca01ae4b74096f76.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/367df31f7f4f8db0dbf09d7379d92521687f5ce2.png b/doc/full_html/0.1.2/_images/math/367df31f7f4f8db0dbf09d7379d92521687f5ce2.png deleted file mode 100644 index be468c2eaeceb0259e64f07953d31649791adbc6..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/367df31f7f4f8db0dbf09d7379d92521687f5ce2.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/37f2659e7eb57020040af080d776b62a225d8dce.png b/doc/full_html/0.1.2/_images/math/37f2659e7eb57020040af080d776b62a225d8dce.png deleted file mode 100644 index 3829aaa94ae7c11c62e0a9979a010faccfd117f9..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/37f2659e7eb57020040af080d776b62a225d8dce.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/3878477f1e6eb287541ab8147b063578fb9a70ed.png b/doc/full_html/0.1.2/_images/math/3878477f1e6eb287541ab8147b063578fb9a70ed.png deleted file mode 100644 index 26edc73d06742f9951e8a781e7976f98488c5a05..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/3878477f1e6eb287541ab8147b063578fb9a70ed.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/388e638c5babbe1dbda8ba920371ca3d17c59598.png b/doc/full_html/0.1.2/_images/math/388e638c5babbe1dbda8ba920371ca3d17c59598.png deleted file mode 100644 index 744951cded65d3fbaa31ba9be9f905caec8d3d38..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/388e638c5babbe1dbda8ba920371ca3d17c59598.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/38acd08d8bad2e52bb3478f51d5d11dc0cb8209c.png b/doc/full_html/0.1.2/_images/math/38acd08d8bad2e52bb3478f51d5d11dc0cb8209c.png deleted file mode 100644 index 391236797acb492cd1c361c449f976fbce9485d0..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/38acd08d8bad2e52bb3478f51d5d11dc0cb8209c.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/39fe567d85dc7608ff0ff44e0ff2c6ebb9977383.png b/doc/full_html/0.1.2/_images/math/39fe567d85dc7608ff0ff44e0ff2c6ebb9977383.png deleted file mode 100644 index f25253115062d573800ba5e71e8f44fd8dac43ff..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/39fe567d85dc7608ff0ff44e0ff2c6ebb9977383.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/3c68042f7674ccf1f4325cc80ddf01b1d46d4f3f.png b/doc/full_html/0.1.2/_images/math/3c68042f7674ccf1f4325cc80ddf01b1d46d4f3f.png deleted file mode 100644 index a621227424b12474e898242f98a05b335ba8b5f9..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/3c68042f7674ccf1f4325cc80ddf01b1d46d4f3f.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/3e528443cd2fb44453e65fc68c74581129c4f80e.png b/doc/full_html/0.1.2/_images/math/3e528443cd2fb44453e65fc68c74581129c4f80e.png deleted file mode 100644 index 73464bad5a9fcaf26b04a9646412c21bafe8252d..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/3e528443cd2fb44453e65fc68c74581129c4f80e.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/3e7eb4d9735f3330b421b7a81110a887c109ac38.png b/doc/full_html/0.1.2/_images/math/3e7eb4d9735f3330b421b7a81110a887c109ac38.png deleted file mode 100644 index 4dd64c3250b2394e949bd2faa382517bed9e51d9..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/3e7eb4d9735f3330b421b7a81110a887c109ac38.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/3e99f44155fab2bc93b0fd985e66b3e624363e95.png b/doc/full_html/0.1.2/_images/math/3e99f44155fab2bc93b0fd985e66b3e624363e95.png deleted file mode 100644 index 4eb31c77ad3c6b56866c9c64651179060d3e338d..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/3e99f44155fab2bc93b0fd985e66b3e624363e95.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/3fd6a0125d04e7128be4f0662fc8a3f8b6904fdc.png b/doc/full_html/0.1.2/_images/math/3fd6a0125d04e7128be4f0662fc8a3f8b6904fdc.png deleted file mode 100644 index fa7177a16dab5cdb0cbe27e9366cbc1139a9e48c..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/3fd6a0125d04e7128be4f0662fc8a3f8b6904fdc.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/407286c30c0232a6973389c8717b6d95df5e0cdd.png b/doc/full_html/0.1.2/_images/math/407286c30c0232a6973389c8717b6d95df5e0cdd.png deleted file mode 100644 index df947ab2eab1f5ab089fdf878ea87f5c87fe4573..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/407286c30c0232a6973389c8717b6d95df5e0cdd.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/40a48e7758c43bdfe35de8dcc993bb7da1f1fbe1.png b/doc/full_html/0.1.2/_images/math/40a48e7758c43bdfe35de8dcc993bb7da1f1fbe1.png deleted file mode 100644 index 94f4cd285cca2fe1944a13e509d4c1b0afe9cd15..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/40a48e7758c43bdfe35de8dcc993bb7da1f1fbe1.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/40dea4d11c0fe8c6eb5352c1aa4394df6e8b7721.png b/doc/full_html/0.1.2/_images/math/40dea4d11c0fe8c6eb5352c1aa4394df6e8b7721.png deleted file mode 100644 index 198624e56490ce95f5f3db261fb1fa0db9745e70..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/40dea4d11c0fe8c6eb5352c1aa4394df6e8b7721.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/41ad9ce57138aa3cb8f147af4cc31315436204d6.png b/doc/full_html/0.1.2/_images/math/41ad9ce57138aa3cb8f147af4cc31315436204d6.png deleted file mode 100644 index 1fdae0937e08162b3ea98162871ea2fe6e336515..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/41ad9ce57138aa3cb8f147af4cc31315436204d6.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/44785f09e8270acafc2f0beb66f0517981a36529.png b/doc/full_html/0.1.2/_images/math/44785f09e8270acafc2f0beb66f0517981a36529.png deleted file mode 100644 index b912c098305290638b06c5a175ea9602df904dd8..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/44785f09e8270acafc2f0beb66f0517981a36529.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/44c7d6694d5aa7017736081296513da18a5b6fe7.png b/doc/full_html/0.1.2/_images/math/44c7d6694d5aa7017736081296513da18a5b6fe7.png deleted file mode 100644 index 3635aeeef32eb1ad9effd3b84e2753f096075205..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/44c7d6694d5aa7017736081296513da18a5b6fe7.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/452224e3440f874528cad4bb1e4ef336f65a9604.png b/doc/full_html/0.1.2/_images/math/452224e3440f874528cad4bb1e4ef336f65a9604.png deleted file mode 100644 index 9cba9a27db68bc40352fe59f87f30c898c7abcdd..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/452224e3440f874528cad4bb1e4ef336f65a9604.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/462a81c0c475a3b8892b62685e25198c7cb7dd22.png b/doc/full_html/0.1.2/_images/math/462a81c0c475a3b8892b62685e25198c7cb7dd22.png deleted file mode 100644 index 049c1594ba4cfe08ecc90b006bae0986088ba7c5..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/462a81c0c475a3b8892b62685e25198c7cb7dd22.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/46cf6c10d12c3ac5308405380a2289e49c88f2bd.png b/doc/full_html/0.1.2/_images/math/46cf6c10d12c3ac5308405380a2289e49c88f2bd.png deleted file mode 100644 index 282be840fbb93e22c312c1d70c904c94894b70e3..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/46cf6c10d12c3ac5308405380a2289e49c88f2bd.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/46e7ae1f57785a72342e86ee7dbe86cd7c43bd68.png b/doc/full_html/0.1.2/_images/math/46e7ae1f57785a72342e86ee7dbe86cd7c43bd68.png deleted file mode 100644 index 3fd96505f19bc516b85ab9c00e4f5a232aacaa2e..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/46e7ae1f57785a72342e86ee7dbe86cd7c43bd68.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/4786df712440fd96f76979525b17ada98c777e2f.png b/doc/full_html/0.1.2/_images/math/4786df712440fd96f76979525b17ada98c777e2f.png deleted file mode 100644 index 7632b8bf968ac515c7108c44fe731547f54fbdd4..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/4786df712440fd96f76979525b17ada98c777e2f.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/48ab1ef745e637b9d69d28dd06ced0ff57c506f9.png b/doc/full_html/0.1.2/_images/math/48ab1ef745e637b9d69d28dd06ced0ff57c506f9.png deleted file mode 100644 index ad9cd448b2dc9e3fecd3b8a3455b3911f47fa542..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/48ab1ef745e637b9d69d28dd06ced0ff57c506f9.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/48c9d81bf9d341f5aeb13210067281bf867f67d1.png b/doc/full_html/0.1.2/_images/math/48c9d81bf9d341f5aeb13210067281bf867f67d1.png deleted file mode 100644 index 243611cecf5e4d09163fdd670b26134c785ec076..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/48c9d81bf9d341f5aeb13210067281bf867f67d1.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/4a104de5008bdafad2137f95bc4b841e6016d269.png b/doc/full_html/0.1.2/_images/math/4a104de5008bdafad2137f95bc4b841e6016d269.png deleted file mode 100644 index 1c7a4e57a574fc4ce3c15da10498f4ae64f111fa..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/4a104de5008bdafad2137f95bc4b841e6016d269.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/4ab3471bbbf5da665179b63390590cd77dac7163.png b/doc/full_html/0.1.2/_images/math/4ab3471bbbf5da665179b63390590cd77dac7163.png deleted file mode 100644 index 910c5b608725170c2248d9e2aa233e0d32dfee58..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/4ab3471bbbf5da665179b63390590cd77dac7163.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/4c3a50c2a92611f87463b221e30671e8911580e3.png b/doc/full_html/0.1.2/_images/math/4c3a50c2a92611f87463b221e30671e8911580e3.png deleted file mode 100644 index 3c7a8ad6e98343817f86116dde211f346d135580..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/4c3a50c2a92611f87463b221e30671e8911580e3.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/4df336e82fd511be8f09b20d495766f975031ff3.png b/doc/full_html/0.1.2/_images/math/4df336e82fd511be8f09b20d495766f975031ff3.png deleted file mode 100644 index 4a3acef8f3482e4540b9ed7f33a9e2c3d46c37ed..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/4df336e82fd511be8f09b20d495766f975031ff3.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/50f162c5895311f243c71121b337f944bea06166.png b/doc/full_html/0.1.2/_images/math/50f162c5895311f243c71121b337f944bea06166.png deleted file mode 100644 index 46008d71853588604105c76c20c12b5905a133ac..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/50f162c5895311f243c71121b337f944bea06166.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/51621617a5071920561ee54ed8b1e4ff9c5f002f.png b/doc/full_html/0.1.2/_images/math/51621617a5071920561ee54ed8b1e4ff9c5f002f.png deleted file mode 100644 index 73f982126f91a4f1958f863ceed69be484fe8b26..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/51621617a5071920561ee54ed8b1e4ff9c5f002f.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/51da37d984564162c87710ca27bea422f657fb73.png b/doc/full_html/0.1.2/_images/math/51da37d984564162c87710ca27bea422f657fb73.png deleted file mode 100644 index 097552469e02bac1817c392c1b0d16e2e2f60285..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/51da37d984564162c87710ca27bea422f657fb73.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/52b52345302de88c57d78b05c107817c76739aa3.png b/doc/full_html/0.1.2/_images/math/52b52345302de88c57d78b05c107817c76739aa3.png deleted file mode 100644 index 76eabbf28f8b272610065d2627e80ff0ee18fe4e..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/52b52345302de88c57d78b05c107817c76739aa3.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/52e8ed7a3ba22130ad3984eb2cd413406475a689.png b/doc/full_html/0.1.2/_images/math/52e8ed7a3ba22130ad3984eb2cd413406475a689.png deleted file mode 100644 index 7143f55fa6c7208bc8d80c57a2a9a03948c42673..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/52e8ed7a3ba22130ad3984eb2cd413406475a689.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/53654b401cac0a9ea8c12f91cddd56775f964e9c.png b/doc/full_html/0.1.2/_images/math/53654b401cac0a9ea8c12f91cddd56775f964e9c.png deleted file mode 100644 index 54274ea1ee22c76c788c3f0af57ff2bc530d27ae..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/53654b401cac0a9ea8c12f91cddd56775f964e9c.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/536651be189729d5088e89472d611e3a335c46d7.png b/doc/full_html/0.1.2/_images/math/536651be189729d5088e89472d611e3a335c46d7.png deleted file mode 100644 index 97e9b4e256dbc4317ffbb99434eca7c668a22b7e..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/536651be189729d5088e89472d611e3a335c46d7.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/582482956cfa0e430a52950573fa02b290bae124.png b/doc/full_html/0.1.2/_images/math/582482956cfa0e430a52950573fa02b290bae124.png deleted file mode 100644 index 2ccde3b65c646176c195e633bcce51aa5e42a6b6..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/582482956cfa0e430a52950573fa02b290bae124.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/5861598a7dd5f255928e739518a3e252679d5fd3.png b/doc/full_html/0.1.2/_images/math/5861598a7dd5f255928e739518a3e252679d5fd3.png deleted file mode 100644 index c98350c9f4d6fd15d64f0208bbf4820b11c8b84d..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/5861598a7dd5f255928e739518a3e252679d5fd3.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/5a77a6985be9df2826eee65a654fa5e9bc2c69f8.png b/doc/full_html/0.1.2/_images/math/5a77a6985be9df2826eee65a654fa5e9bc2c69f8.png deleted file mode 100644 index a7428396f686165ae6a7fe997b70ad4f18efc62f..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/5a77a6985be9df2826eee65a654fa5e9bc2c69f8.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/5d1e4485dc90c450e8c76826516c1b2ccb8fce16.png b/doc/full_html/0.1.2/_images/math/5d1e4485dc90c450e8c76826516c1b2ccb8fce16.png deleted file mode 100644 index 54e486f412736ffa41aec503768dacbef31b0681..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/5d1e4485dc90c450e8c76826516c1b2ccb8fce16.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/5f61118f2ae912f86e683687c005145b5eb54aec.png b/doc/full_html/0.1.2/_images/math/5f61118f2ae912f86e683687c005145b5eb54aec.png deleted file mode 100644 index 9275135f5eb04d0f2b18aa75834d3f49234479fb..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/5f61118f2ae912f86e683687c005145b5eb54aec.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/60231b2990b31f4eb4f6668e09a2930f58924090.png b/doc/full_html/0.1.2/_images/math/60231b2990b31f4eb4f6668e09a2930f58924090.png deleted file mode 100644 index 3029534a0bbbc85185f104db2d3e1833e43f0b24..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/60231b2990b31f4eb4f6668e09a2930f58924090.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/603c11f1079ac46c3e1dc1b5d1bcf5def34be9b5.png b/doc/full_html/0.1.2/_images/math/603c11f1079ac46c3e1dc1b5d1bcf5def34be9b5.png deleted file mode 100644 index 6d9d482b60e171df5cc1fa3fbe909646dfa273e1..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/603c11f1079ac46c3e1dc1b5d1bcf5def34be9b5.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/605f4fa582c70cccd626a1f0184c68685bf971fc.png b/doc/full_html/0.1.2/_images/math/605f4fa582c70cccd626a1f0184c68685bf971fc.png deleted file mode 100644 index 464f5d1e1534afe3e003b8bd1323f817f252552b..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/605f4fa582c70cccd626a1f0184c68685bf971fc.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/632847344cd68b05688442d3939fb171d8f50cfc.png b/doc/full_html/0.1.2/_images/math/632847344cd68b05688442d3939fb171d8f50cfc.png deleted file mode 100644 index a0b02daad25ad2b0f72d336449fcff07ec8de37e..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/632847344cd68b05688442d3939fb171d8f50cfc.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/660ba721ce34a3f8c99c0d7997a572d25255fb91.png b/doc/full_html/0.1.2/_images/math/660ba721ce34a3f8c99c0d7997a572d25255fb91.png deleted file mode 100644 index 9e177c821265bf67072815a6d249e6fff37dcc49..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/660ba721ce34a3f8c99c0d7997a572d25255fb91.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/68e5702d7dd8a5616497a873e03f2f21654e62a5.png b/doc/full_html/0.1.2/_images/math/68e5702d7dd8a5616497a873e03f2f21654e62a5.png deleted file mode 100644 index 9039438abda76f40cb6f2017ba32407ab773959a..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/68e5702d7dd8a5616497a873e03f2f21654e62a5.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/69702dfa8d47e83b874fdec9adde518de584b6f7.png b/doc/full_html/0.1.2/_images/math/69702dfa8d47e83b874fdec9adde518de584b6f7.png deleted file mode 100644 index edeabe31d0215bc409bee1af7901e003b5ef8bd5..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/69702dfa8d47e83b874fdec9adde518de584b6f7.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/69bd63f386b912ebe4c41fb0502044635773ffca.png b/doc/full_html/0.1.2/_images/math/69bd63f386b912ebe4c41fb0502044635773ffca.png deleted file mode 100644 index 21be1404db6b4e05674e74b2c4dfcccd7c43a6da..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/69bd63f386b912ebe4c41fb0502044635773ffca.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/69f2f47d28b4bb43333d96cbb480ed70f7989406.png b/doc/full_html/0.1.2/_images/math/69f2f47d28b4bb43333d96cbb480ed70f7989406.png deleted file mode 100644 index 7b5e3a79f582e66659c772615f86778193178e50..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/69f2f47d28b4bb43333d96cbb480ed70f7989406.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/6a47ca0fe7cb276abc022af6ac88ddae1a9d6894.png b/doc/full_html/0.1.2/_images/math/6a47ca0fe7cb276abc022af6ac88ddae1a9d6894.png deleted file mode 100644 index 42256e04738a1cbc49cb5806f3817dc57f50ddbb..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/6a47ca0fe7cb276abc022af6ac88ddae1a9d6894.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/6b3395df6a85d1214ac8fc8b217e2ab24a9af6b0.png b/doc/full_html/0.1.2/_images/math/6b3395df6a85d1214ac8fc8b217e2ab24a9af6b0.png deleted file mode 100644 index 6f7c08863b67d3b524a8f129998b596a4fe10652..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/6b3395df6a85d1214ac8fc8b217e2ab24a9af6b0.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/6e6ceb79ebc4bf613298e0144eae25dd73de9be3.png b/doc/full_html/0.1.2/_images/math/6e6ceb79ebc4bf613298e0144eae25dd73de9be3.png deleted file mode 100644 index f404764f73941e83b8395dcd466a6aadecb6059d..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/6e6ceb79ebc4bf613298e0144eae25dd73de9be3.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/6e9f7352092532efd062cbd86189470657cce606.png b/doc/full_html/0.1.2/_images/math/6e9f7352092532efd062cbd86189470657cce606.png deleted file mode 100644 index 824adb865fdc26828c5b994061211eda594987a7..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/6e9f7352092532efd062cbd86189470657cce606.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/6f275542b36567f56ee2fb37ffe616818e7558a1.png b/doc/full_html/0.1.2/_images/math/6f275542b36567f56ee2fb37ffe616818e7558a1.png deleted file mode 100644 index 2ccde3b65c646176c195e633bcce51aa5e42a6b6..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/6f275542b36567f56ee2fb37ffe616818e7558a1.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/7091c13a49746077368e77aab7c23b06b82190f3.png b/doc/full_html/0.1.2/_images/math/7091c13a49746077368e77aab7c23b06b82190f3.png deleted file mode 100644 index 519308e91764094d81680cb2e50a618278c90887..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/7091c13a49746077368e77aab7c23b06b82190f3.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/721a890f8ccfffd11e0ebf16f74b6e1d10a46c06.png b/doc/full_html/0.1.2/_images/math/721a890f8ccfffd11e0ebf16f74b6e1d10a46c06.png deleted file mode 100644 index 26dc0ac1207f7a3aa1ace80bafcca9c65dff8f1a..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/721a890f8ccfffd11e0ebf16f74b6e1d10a46c06.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/728aeb2c796bde4f89da29ec41675e8f0cae53f4.png b/doc/full_html/0.1.2/_images/math/728aeb2c796bde4f89da29ec41675e8f0cae53f4.png deleted file mode 100644 index 2c3ead364ffb3a187f495f0155362ed57bebee41..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/728aeb2c796bde4f89da29ec41675e8f0cae53f4.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/733721fc85744f4af6765cb0e95c647dd3a8ef63.png b/doc/full_html/0.1.2/_images/math/733721fc85744f4af6765cb0e95c647dd3a8ef63.png deleted file mode 100644 index 0589dd5a0a5b71dfb74567891b9e4d45dc0801e1..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/733721fc85744f4af6765cb0e95c647dd3a8ef63.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/7350f84748e86eb3a82f456a63b703bc6dbcc1a6.png b/doc/full_html/0.1.2/_images/math/7350f84748e86eb3a82f456a63b703bc6dbcc1a6.png deleted file mode 100644 index 126b070e03ecfe54d73557faa531f2b0b415ec7e..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/7350f84748e86eb3a82f456a63b703bc6dbcc1a6.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/73dc6cb8d9450b6a13ba28272620d4613bf66c85.png b/doc/full_html/0.1.2/_images/math/73dc6cb8d9450b6a13ba28272620d4613bf66c85.png deleted file mode 100644 index 431ae3cf13a52fbbfc0b29b8bdf9dbb8153cc5c1..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/73dc6cb8d9450b6a13ba28272620d4613bf66c85.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/74949574eb3bb72bd595192b9685db088e6a44bd.png b/doc/full_html/0.1.2/_images/math/74949574eb3bb72bd595192b9685db088e6a44bd.png deleted file mode 100644 index d996be06dda43bc4ba74fa956a610b38c47faf9e..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/74949574eb3bb72bd595192b9685db088e6a44bd.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/74d3885c5a6ae8fae26f36aa460859dc093665f8.png b/doc/full_html/0.1.2/_images/math/74d3885c5a6ae8fae26f36aa460859dc093665f8.png deleted file mode 100644 index 9e43e7ece4964db3a35e5463aeee7f0395bc9746..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/74d3885c5a6ae8fae26f36aa460859dc093665f8.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/74f4008768812f46db4b252c9e69cf98c5faaa4b.png b/doc/full_html/0.1.2/_images/math/74f4008768812f46db4b252c9e69cf98c5faaa4b.png deleted file mode 100644 index 44594c993533a26bbba01d26b3c315d9e551824a..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/74f4008768812f46db4b252c9e69cf98c5faaa4b.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/7532b41a34c9ca592694135d1de65eeb8d9ce036.png b/doc/full_html/0.1.2/_images/math/7532b41a34c9ca592694135d1de65eeb8d9ce036.png deleted file mode 100644 index cc09e8a6d8609a5a74c6fea773f79622e52a1402..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/7532b41a34c9ca592694135d1de65eeb8d9ce036.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/756e52cb9954c54da144c18c1fb06e231d87aa3f.png b/doc/full_html/0.1.2/_images/math/756e52cb9954c54da144c18c1fb06e231d87aa3f.png deleted file mode 100644 index 8bc0343898351816b7fec15d8316c8bf44eecad2..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/756e52cb9954c54da144c18c1fb06e231d87aa3f.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/76063aa08c1f586d9ea98e7009fb0404f54ed3bb.png b/doc/full_html/0.1.2/_images/math/76063aa08c1f586d9ea98e7009fb0404f54ed3bb.png deleted file mode 100644 index 224b4aaf09d36f779f955a859d13f3b5f29ae83a..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/76063aa08c1f586d9ea98e7009fb0404f54ed3bb.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/76b88995165d4c79d899d31a093a9fc185630d3d.png b/doc/full_html/0.1.2/_images/math/76b88995165d4c79d899d31a093a9fc185630d3d.png deleted file mode 100644 index a4bd7ecb0777f2dd55f28ac7b79de04dc20c6bc3..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/76b88995165d4c79d899d31a093a9fc185630d3d.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/76dc0ec8b06a04d12c70eccf5a33c27588f4085f.png b/doc/full_html/0.1.2/_images/math/76dc0ec8b06a04d12c70eccf5a33c27588f4085f.png deleted file mode 100644 index 157061b2a9f41659104ab99483ff30e767d0e38a..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/76dc0ec8b06a04d12c70eccf5a33c27588f4085f.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/770fc4aefd5d511759ef15ab08a9afd28b42800e.png b/doc/full_html/0.1.2/_images/math/770fc4aefd5d511759ef15ab08a9afd28b42800e.png deleted file mode 100644 index bf88693eb5567151049fd50c07e680e088b4b066..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/770fc4aefd5d511759ef15ab08a9afd28b42800e.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/77affdf4c30d71ead9a79cfb27b3dc85f44520c5.png b/doc/full_html/0.1.2/_images/math/77affdf4c30d71ead9a79cfb27b3dc85f44520c5.png deleted file mode 100644 index 85a427a19e3741f36ceffa07493eca34c19ee349..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/77affdf4c30d71ead9a79cfb27b3dc85f44520c5.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/77eba4d6a9461a4dfdecb60b12e0472ec136f9fa.png b/doc/full_html/0.1.2/_images/math/77eba4d6a9461a4dfdecb60b12e0472ec136f9fa.png deleted file mode 100644 index c1375f6aa77388e64f1e6cd5273a95c2e8a9cc85..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/77eba4d6a9461a4dfdecb60b12e0472ec136f9fa.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/7c1a6f421491f31fc1f5a1da9d6e11be54b09101.png b/doc/full_html/0.1.2/_images/math/7c1a6f421491f31fc1f5a1da9d6e11be54b09101.png deleted file mode 100644 index 9f8ad21dabd12db1aeedc982d9cf23ff863d8bfa..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/7c1a6f421491f31fc1f5a1da9d6e11be54b09101.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/804c2a40bf1101a7e26843d6e43619381dfbc2f6.png b/doc/full_html/0.1.2/_images/math/804c2a40bf1101a7e26843d6e43619381dfbc2f6.png deleted file mode 100644 index e2cde1a3f653b53fb2ca24d7778fdebf0ea09ec8..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/804c2a40bf1101a7e26843d6e43619381dfbc2f6.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/822939254fcde39c04fe5abcb737ead6762e893c.png b/doc/full_html/0.1.2/_images/math/822939254fcde39c04fe5abcb737ead6762e893c.png deleted file mode 100644 index ae5c20a83317847744ed638b4f09c5d1bc22ea2e..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/822939254fcde39c04fe5abcb737ead6762e893c.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/847e2894f3593071d0c02bca82bf37524344ec47.png b/doc/full_html/0.1.2/_images/math/847e2894f3593071d0c02bca82bf37524344ec47.png deleted file mode 100644 index f81669fac0b5072a0c85c372dd99d83424507acb..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/847e2894f3593071d0c02bca82bf37524344ec47.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/851a8555eb17a0ef7f5176c07139a221d76fe070.png b/doc/full_html/0.1.2/_images/math/851a8555eb17a0ef7f5176c07139a221d76fe070.png deleted file mode 100644 index 66384106215dea628e45a524c842899adea751b8..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/851a8555eb17a0ef7f5176c07139a221d76fe070.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/851db7deb83939dcd20d339dc327c33d825ccb8f.png b/doc/full_html/0.1.2/_images/math/851db7deb83939dcd20d339dc327c33d825ccb8f.png deleted file mode 100644 index 9d7cc23b35921256c241cf38521e58277ff6e369..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/851db7deb83939dcd20d339dc327c33d825ccb8f.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/859ccf4cd60c7bc6b8fa1afc9a42dc811a826d6f.png b/doc/full_html/0.1.2/_images/math/859ccf4cd60c7bc6b8fa1afc9a42dc811a826d6f.png deleted file mode 100644 index 37bb60861f322d90c221b611d26e766d51380123..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/859ccf4cd60c7bc6b8fa1afc9a42dc811a826d6f.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/8685e3b49272b59cf1aa243cbdd44a5c446ae619.png b/doc/full_html/0.1.2/_images/math/8685e3b49272b59cf1aa243cbdd44a5c446ae619.png deleted file mode 100644 index f56bcabb14b40fe4aa20fac635cb659a336c50ac..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/8685e3b49272b59cf1aa243cbdd44a5c446ae619.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/8d09f0f289835cc992c2a7832999151e4f2cb2da.png b/doc/full_html/0.1.2/_images/math/8d09f0f289835cc992c2a7832999151e4f2cb2da.png deleted file mode 100644 index bd130feaeb2aaf0ce5b075bd9c4afed7eac28923..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/8d09f0f289835cc992c2a7832999151e4f2cb2da.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/8f93a56a4013dba6d035ba4deb803ff492aab2e6.png b/doc/full_html/0.1.2/_images/math/8f93a56a4013dba6d035ba4deb803ff492aab2e6.png deleted file mode 100644 index bba3e6d167562ff8a703d7ed14fa45856c581550..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/8f93a56a4013dba6d035ba4deb803ff492aab2e6.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/916acdd86edd03a3c06f9b61eee41d2c30a754d7.png b/doc/full_html/0.1.2/_images/math/916acdd86edd03a3c06f9b61eee41d2c30a754d7.png deleted file mode 100644 index 2657d7d15631360abae35b048bad98bca676d3eb..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/916acdd86edd03a3c06f9b61eee41d2c30a754d7.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/930b741f3f6a8ddb8d01a6b649666bacfbdec7c2.png b/doc/full_html/0.1.2/_images/math/930b741f3f6a8ddb8d01a6b649666bacfbdec7c2.png deleted file mode 100644 index 20a22a57cc7e50aed0b94685c16fa0c443d5f61b..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/930b741f3f6a8ddb8d01a6b649666bacfbdec7c2.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/937e5860e38ca76557819086105006f324a844f0.png b/doc/full_html/0.1.2/_images/math/937e5860e38ca76557819086105006f324a844f0.png deleted file mode 100644 index 8bbbfa6d9256d78a38aabc08967bd149e32d84dc..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/937e5860e38ca76557819086105006f324a844f0.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/93c7561eb887f4c63aabb9648101eabaf6acc077.png b/doc/full_html/0.1.2/_images/math/93c7561eb887f4c63aabb9648101eabaf6acc077.png deleted file mode 100644 index 5b82c4377442929dd2854aa5d26093b31ef2bd89..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/93c7561eb887f4c63aabb9648101eabaf6acc077.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/947d6d029cf8dc6c1b828da4e6e880ea71de0488.png b/doc/full_html/0.1.2/_images/math/947d6d029cf8dc6c1b828da4e6e880ea71de0488.png deleted file mode 100644 index 2e79a8e55756f8ad2b880827c37142787bd7da53..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/947d6d029cf8dc6c1b828da4e6e880ea71de0488.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/94c12cff064140ef57e9e8302fac1de6bb7fab22.png b/doc/full_html/0.1.2/_images/math/94c12cff064140ef57e9e8302fac1de6bb7fab22.png deleted file mode 100644 index b242b55e786da2838b593e506f6ca9c3c5910edf..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/94c12cff064140ef57e9e8302fac1de6bb7fab22.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/94f22fca0dc0c33f83098b8aa265bc1b21a7276c.png b/doc/full_html/0.1.2/_images/math/94f22fca0dc0c33f83098b8aa265bc1b21a7276c.png deleted file mode 100644 index 06288e7d5c11d82d92832cfdfc924c8b8cfa770b..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/94f22fca0dc0c33f83098b8aa265bc1b21a7276c.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/96ab646de7704969b91c76a214126b45f2b07b25.png b/doc/full_html/0.1.2/_images/math/96ab646de7704969b91c76a214126b45f2b07b25.png deleted file mode 100644 index 2def5a6a3fe9bb5a79cefea848c0603fb96ae76d..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/96ab646de7704969b91c76a214126b45f2b07b25.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/97f765207ca35ed15a641f558e88bdea6ae1d5c8.png b/doc/full_html/0.1.2/_images/math/97f765207ca35ed15a641f558e88bdea6ae1d5c8.png deleted file mode 100644 index e6b808f5248ee538f7ad063b930074ddf90c0fbf..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/97f765207ca35ed15a641f558e88bdea6ae1d5c8.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/9a263201f4384113169f71374051e2c33a53cfe0.png b/doc/full_html/0.1.2/_images/math/9a263201f4384113169f71374051e2c33a53cfe0.png deleted file mode 100644 index 65e741ca166934f90f87a3e44691715f85979baa..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/9a263201f4384113169f71374051e2c33a53cfe0.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/9a47645bd95da6a56799cdd214807f5d7e0dff87.png b/doc/full_html/0.1.2/_images/math/9a47645bd95da6a56799cdd214807f5d7e0dff87.png deleted file mode 100644 index af24a25985450aec1981b6c7195a6749b1dc8f9b..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/9a47645bd95da6a56799cdd214807f5d7e0dff87.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/9a708f400b86caf68aba2aa714e1078376e6741e.png b/doc/full_html/0.1.2/_images/math/9a708f400b86caf68aba2aa714e1078376e6741e.png deleted file mode 100644 index 3b125c64c1e20d24e5220edd11e04627eaa6cced..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/9a708f400b86caf68aba2aa714e1078376e6741e.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/9ad99798ec4c38e165cf517cb9e02b1c9e824103.png b/doc/full_html/0.1.2/_images/math/9ad99798ec4c38e165cf517cb9e02b1c9e824103.png deleted file mode 100644 index 0dc345f1daaadb2804d1bd0b96949fe3ad8c9257..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/9ad99798ec4c38e165cf517cb9e02b1c9e824103.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/9be73110dd697dda15a0b60207da2a10dd912b29.png b/doc/full_html/0.1.2/_images/math/9be73110dd697dda15a0b60207da2a10dd912b29.png deleted file mode 100644 index aa9e2fa75cf1e1d6c2e620f83a0e652ef831e88e..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/9be73110dd697dda15a0b60207da2a10dd912b29.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/9d5dd0ac58d152c64868c9b03f54f0f5ca5445c5.png b/doc/full_html/0.1.2/_images/math/9d5dd0ac58d152c64868c9b03f54f0f5ca5445c5.png deleted file mode 100644 index e7ba689a131ae6bc10fb3dfc854f499585645c3a..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/9d5dd0ac58d152c64868c9b03f54f0f5ca5445c5.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/9dc6325052d3769629d243b172d324cff48db715.png b/doc/full_html/0.1.2/_images/math/9dc6325052d3769629d243b172d324cff48db715.png deleted file mode 100644 index 47ca24de0e8eae796cab4565226f755ccebeea9c..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/9dc6325052d3769629d243b172d324cff48db715.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/9df68fe44cf5413883076e1acaba0102dce9551c.png b/doc/full_html/0.1.2/_images/math/9df68fe44cf5413883076e1acaba0102dce9551c.png deleted file mode 100644 index db130b23aab8b86d68312b50318d8b5a1fa4f246..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/9df68fe44cf5413883076e1acaba0102dce9551c.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/9e594c9879b30f4daeb4e64fd7d6c01fb81b2045.png b/doc/full_html/0.1.2/_images/math/9e594c9879b30f4daeb4e64fd7d6c01fb81b2045.png deleted file mode 100644 index 780463ea83ec98db1dfe88f5e5932830e065002d..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/9e594c9879b30f4daeb4e64fd7d6c01fb81b2045.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/9efa656211538d43b003650cd82d3f54deee0aee.png b/doc/full_html/0.1.2/_images/math/9efa656211538d43b003650cd82d3f54deee0aee.png deleted file mode 100644 index 90a1717d326ff7754db7a527c9208fce79e1c533..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/9efa656211538d43b003650cd82d3f54deee0aee.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/a029c3b2364a3dfdb841715fc1af0042d1b776b4.png b/doc/full_html/0.1.2/_images/math/a029c3b2364a3dfdb841715fc1af0042d1b776b4.png deleted file mode 100644 index 5b8f5977416d974fa98a0186df33bac30100d63c..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/a029c3b2364a3dfdb841715fc1af0042d1b776b4.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/a06071e58abdaf00d6fc79dbd63dd09e02ed7a75.png b/doc/full_html/0.1.2/_images/math/a06071e58abdaf00d6fc79dbd63dd09e02ed7a75.png deleted file mode 100644 index 35cb9d3ac26eb5ce994452e7623198fa62ffa9bd..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/a06071e58abdaf00d6fc79dbd63dd09e02ed7a75.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/a07af1da8d222c26180a0175b913edeb030b853d.png b/doc/full_html/0.1.2/_images/math/a07af1da8d222c26180a0175b913edeb030b853d.png deleted file mode 100644 index 1b818fabc799e04a8b06bf609470da14e43a092f..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/a07af1da8d222c26180a0175b913edeb030b853d.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/a0d694008b8221ca97d2004ec27cc2e4fc6ce006.png b/doc/full_html/0.1.2/_images/math/a0d694008b8221ca97d2004ec27cc2e4fc6ce006.png deleted file mode 100644 index f9c1f882af806880a3fc51440253bc4fe363388e..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/a0d694008b8221ca97d2004ec27cc2e4fc6ce006.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/a1141c616f0273794821495ace5b14541beea719.png b/doc/full_html/0.1.2/_images/math/a1141c616f0273794821495ace5b14541beea719.png deleted file mode 100644 index dcbeeb4617037293a9793299b0aeeae69f3fa1a7..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/a1141c616f0273794821495ace5b14541beea719.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/a125df469c0ee390734edc8353378b9873139317.png b/doc/full_html/0.1.2/_images/math/a125df469c0ee390734edc8353378b9873139317.png deleted file mode 100644 index f1a451e7b7ba69a0dbeb5d01d3184b0514f9eb65..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/a125df469c0ee390734edc8353378b9873139317.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/a140b16b83304db74b5f809e0ee729663f0aa733.png b/doc/full_html/0.1.2/_images/math/a140b16b83304db74b5f809e0ee729663f0aa733.png deleted file mode 100644 index 284a60a854711eb2983a2a3b7fde7c5704dc5fec..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/a140b16b83304db74b5f809e0ee729663f0aa733.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/a2e1f607b77ff710116e7d69a6c91d0439b5d168.png b/doc/full_html/0.1.2/_images/math/a2e1f607b77ff710116e7d69a6c91d0439b5d168.png deleted file mode 100644 index 400269d1250f94e4d23d2a24ed16b90a2d9a9653..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/a2e1f607b77ff710116e7d69a6c91d0439b5d168.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/a35780a1a1cbcccc8cbf952e0803bda36818cd39.png b/doc/full_html/0.1.2/_images/math/a35780a1a1cbcccc8cbf952e0803bda36818cd39.png deleted file mode 100644 index 48d5273969384998f931ccdd9b35ad62c063b356..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/a35780a1a1cbcccc8cbf952e0803bda36818cd39.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/a3ffd60202fc88be17b4dd8bb6c1e90903ee74c5.png b/doc/full_html/0.1.2/_images/math/a3ffd60202fc88be17b4dd8bb6c1e90903ee74c5.png deleted file mode 100644 index b388d8658af8e80df766292b27dc202558fb13c4..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/a3ffd60202fc88be17b4dd8bb6c1e90903ee74c5.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/a5c34923cba96bbd8499afac27e57fa85004c1dd.png b/doc/full_html/0.1.2/_images/math/a5c34923cba96bbd8499afac27e57fa85004c1dd.png deleted file mode 100644 index 1aabc15b8c1a50ceadfda0197fa5307c183611d5..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/a5c34923cba96bbd8499afac27e57fa85004c1dd.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/a6e48461a63e835d60db5ec199d901c5ea4d573b.png b/doc/full_html/0.1.2/_images/math/a6e48461a63e835d60db5ec199d901c5ea4d573b.png deleted file mode 100644 index 041ca692437c9c9add46bec31f8d13a9df33d88f..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/a6e48461a63e835d60db5ec199d901c5ea4d573b.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/a6e8bca2ddca8039c8ba833e2c852bdf01f87bbd.png b/doc/full_html/0.1.2/_images/math/a6e8bca2ddca8039c8ba833e2c852bdf01f87bbd.png deleted file mode 100644 index 1bd603c7483d400f60880dc765bedfad769cdd36..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/a6e8bca2ddca8039c8ba833e2c852bdf01f87bbd.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/a95100d2569739fc14e402c556fecc172be9fd31.png b/doc/full_html/0.1.2/_images/math/a95100d2569739fc14e402c556fecc172be9fd31.png deleted file mode 100644 index 5ecf36cd7e11f3b79cd12f9c0830acb2d775f56a..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/a95100d2569739fc14e402c556fecc172be9fd31.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/a9c9c2e1b1a07bff14afe44b1289dcfed06f4f6a.png b/doc/full_html/0.1.2/_images/math/a9c9c2e1b1a07bff14afe44b1289dcfed06f4f6a.png deleted file mode 100644 index dbe073594392b5d6efe8aafd79f3a624c10be237..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/a9c9c2e1b1a07bff14afe44b1289dcfed06f4f6a.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/a9ef91d463b62a5ae5c8b02d2d6c294bbad28142.png b/doc/full_html/0.1.2/_images/math/a9ef91d463b62a5ae5c8b02d2d6c294bbad28142.png deleted file mode 100644 index fec3be2b5211de660351f324f91bd2a3125d8ec0..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/a9ef91d463b62a5ae5c8b02d2d6c294bbad28142.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/aa410b7f0e64112e727eda03602b98741017d15f.png b/doc/full_html/0.1.2/_images/math/aa410b7f0e64112e727eda03602b98741017d15f.png deleted file mode 100644 index cdfe84fc91357ac2937edb3220c4dd598156c521..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/aa410b7f0e64112e727eda03602b98741017d15f.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/ac01350aa90bc253863c1af006cf90d9f78ebe18.png b/doc/full_html/0.1.2/_images/math/ac01350aa90bc253863c1af006cf90d9f78ebe18.png deleted file mode 100644 index 9d67b1448c348ea3685debe272f47ee5f8a0356a..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/ac01350aa90bc253863c1af006cf90d9f78ebe18.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/b056ceaea9b9802c449700bc5df2c30f4463987c.png b/doc/full_html/0.1.2/_images/math/b056ceaea9b9802c449700bc5df2c30f4463987c.png deleted file mode 100644 index 2f2f9d91fe0244c7b5257e4723863b696f2d276a..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/b056ceaea9b9802c449700bc5df2c30f4463987c.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/b05c9cfa8b496431395abbc6476eaa5b330ab593.png b/doc/full_html/0.1.2/_images/math/b05c9cfa8b496431395abbc6476eaa5b330ab593.png deleted file mode 100644 index 1472a4994964dafcf867b865ee1dfa3e0963c681..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/b05c9cfa8b496431395abbc6476eaa5b330ab593.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/b06af29e2e95ed9dc5dfbb7a042e39ebf08941f7.png b/doc/full_html/0.1.2/_images/math/b06af29e2e95ed9dc5dfbb7a042e39ebf08941f7.png deleted file mode 100644 index e8a65a71d935f560d429541345c80f993b1755ce..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/b06af29e2e95ed9dc5dfbb7a042e39ebf08941f7.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/b1cfdae4b04a25b200affbabf0645f7ce0f82b0b.png b/doc/full_html/0.1.2/_images/math/b1cfdae4b04a25b200affbabf0645f7ce0f82b0b.png deleted file mode 100644 index 8894cab805904d884c8706b95c01904c9c63c05d..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/b1cfdae4b04a25b200affbabf0645f7ce0f82b0b.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/b390ca4ba94f0c0554f011f42146956b39a735c0.png b/doc/full_html/0.1.2/_images/math/b390ca4ba94f0c0554f011f42146956b39a735c0.png deleted file mode 100644 index 2edcdab9d2f4cafb410d3ac9bea693527c4aea99..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/b390ca4ba94f0c0554f011f42146956b39a735c0.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/b457d014d0d6a4169ddc98340c7a56ca4de788dc.png b/doc/full_html/0.1.2/_images/math/b457d014d0d6a4169ddc98340c7a56ca4de788dc.png deleted file mode 100644 index 5b0b8a140b801f43a7badeb1853f0bed39106454..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/b457d014d0d6a4169ddc98340c7a56ca4de788dc.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/b52fc22395808d801cdfd3119c311a8522f7ec2d.png b/doc/full_html/0.1.2/_images/math/b52fc22395808d801cdfd3119c311a8522f7ec2d.png deleted file mode 100644 index 01466d84577e1e5f846a52b8a7dcfb884245ab3f..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/b52fc22395808d801cdfd3119c311a8522f7ec2d.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/b53ba18a059ca8928e5423e92b2c14979b3ec159.png b/doc/full_html/0.1.2/_images/math/b53ba18a059ca8928e5423e92b2c14979b3ec159.png deleted file mode 100644 index 13c48d4ed6ec69ac2552eedbcc31a22fc36937bd..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/b53ba18a059ca8928e5423e92b2c14979b3ec159.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/b5da8201c5a82f213f1b70e5895242c435d51caa.png b/doc/full_html/0.1.2/_images/math/b5da8201c5a82f213f1b70e5895242c435d51caa.png deleted file mode 100644 index 6f2530f9a72192d1fdc6163f5711cad3d0d026b2..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/b5da8201c5a82f213f1b70e5895242c435d51caa.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/b5ead614df1f0eb8ea1f1d64f277d1f6f1e31b66.png b/doc/full_html/0.1.2/_images/math/b5ead614df1f0eb8ea1f1d64f277d1f6f1e31b66.png deleted file mode 100644 index 723e1f82536c82ba9a81c438342370f38c008f23..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/b5ead614df1f0eb8ea1f1d64f277d1f6f1e31b66.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/b6410d309724a0a863dbc72243945d720376d7cf.png b/doc/full_html/0.1.2/_images/math/b6410d309724a0a863dbc72243945d720376d7cf.png deleted file mode 100644 index f58cc291a272a22e403e92460c8bd5703ae47585..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/b6410d309724a0a863dbc72243945d720376d7cf.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/b6d4dca7148efdbd28a438a71982603a99461287.png b/doc/full_html/0.1.2/_images/math/b6d4dca7148efdbd28a438a71982603a99461287.png deleted file mode 100644 index 55e86324f7cc138dca05d4437ce577ab4f935713..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/b6d4dca7148efdbd28a438a71982603a99461287.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/b883af5aa0d7577400222ee2fff56b9fa2e7c4b9.png b/doc/full_html/0.1.2/_images/math/b883af5aa0d7577400222ee2fff56b9fa2e7c4b9.png deleted file mode 100644 index dfb0c296b98b6bea25567e29b1096623b5e8b453..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/b883af5aa0d7577400222ee2fff56b9fa2e7c4b9.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/b95e36ad4591d371a5f761eacfd7ed9d9079bc6c.png b/doc/full_html/0.1.2/_images/math/b95e36ad4591d371a5f761eacfd7ed9d9079bc6c.png deleted file mode 100644 index 3ef2f35054a24f61cd36273b4c72e41738fe9ff1..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/b95e36ad4591d371a5f761eacfd7ed9d9079bc6c.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/ba48837cbe425e0a603921abb6d4be1caf212c15.png b/doc/full_html/0.1.2/_images/math/ba48837cbe425e0a603921abb6d4be1caf212c15.png deleted file mode 100644 index efe1b2e9c60b89566267892d9ad4a52ffb23469a..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/ba48837cbe425e0a603921abb6d4be1caf212c15.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/ba64ae6298db613466ef3fde9075e21ae8337762.png b/doc/full_html/0.1.2/_images/math/ba64ae6298db613466ef3fde9075e21ae8337762.png deleted file mode 100644 index 12b6141ae4f5c39e12dc932027f0505f24dee41f..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/ba64ae6298db613466ef3fde9075e21ae8337762.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/bac4dbe1c696d11e8dc43dd7f613199b2120daa1.png b/doc/full_html/0.1.2/_images/math/bac4dbe1c696d11e8dc43dd7f613199b2120daa1.png deleted file mode 100644 index cf9acca0bfa6ef0f6c362550221ae6664a6da2e9..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/bac4dbe1c696d11e8dc43dd7f613199b2120daa1.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/be3653123b5af2b70aa19b8001a18ee49a228d0a.png b/doc/full_html/0.1.2/_images/math/be3653123b5af2b70aa19b8001a18ee49a228d0a.png deleted file mode 100644 index ac07232096359c775754654882dde1564a102c67..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/be3653123b5af2b70aa19b8001a18ee49a228d0a.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/be93f3eb3739dcd8fd1093eebc4f46ba3a96fc71.png b/doc/full_html/0.1.2/_images/math/be93f3eb3739dcd8fd1093eebc4f46ba3a96fc71.png deleted file mode 100644 index 6b7dbc66fc40ee5a6aabae51c26217e3382be515..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/be93f3eb3739dcd8fd1093eebc4f46ba3a96fc71.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/befb72c6192d42cdd90540769993d922d3e9b3c0.png b/doc/full_html/0.1.2/_images/math/befb72c6192d42cdd90540769993d922d3e9b3c0.png deleted file mode 100644 index 2de9fc89235421bf42f4f3b99d588b943de7698d..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/befb72c6192d42cdd90540769993d922d3e9b3c0.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/bf55b0fcce0907a58d78344a6ca1a17eac01d8f4.png b/doc/full_html/0.1.2/_images/math/bf55b0fcce0907a58d78344a6ca1a17eac01d8f4.png deleted file mode 100644 index d057ee32de8eb35acda495e6bca265588dacb6c6..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/bf55b0fcce0907a58d78344a6ca1a17eac01d8f4.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/c250b4d2ec0642123804c34d741ee35231312e4e.png b/doc/full_html/0.1.2/_images/math/c250b4d2ec0642123804c34d741ee35231312e4e.png deleted file mode 100644 index ca1f8d848e407c669b99b4f06e07178895ced73b..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/c250b4d2ec0642123804c34d741ee35231312e4e.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/c2c6f69bac750a18a58766e5c5abf4a6c75d498a.png b/doc/full_html/0.1.2/_images/math/c2c6f69bac750a18a58766e5c5abf4a6c75d498a.png deleted file mode 100644 index fad2cc4b0117888879baf2393edc7c683e42e292..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/c2c6f69bac750a18a58766e5c5abf4a6c75d498a.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/c3d38f82f48ef9e81c04d49354293305b0067afc.png b/doc/full_html/0.1.2/_images/math/c3d38f82f48ef9e81c04d49354293305b0067afc.png deleted file mode 100644 index 6d85cd4ab60904120484cdce2788e95023b4f132..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/c3d38f82f48ef9e81c04d49354293305b0067afc.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/c4bb44d936c765a1f5a8bec94d19dbe1ade13f1b.png b/doc/full_html/0.1.2/_images/math/c4bb44d936c765a1f5a8bec94d19dbe1ade13f1b.png deleted file mode 100644 index 9e62528225b017537daae6dfef940887faca85d7..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/c4bb44d936c765a1f5a8bec94d19dbe1ade13f1b.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/c66c5a193225934366307245d6bbcaaa86f16a72.png b/doc/full_html/0.1.2/_images/math/c66c5a193225934366307245d6bbcaaa86f16a72.png deleted file mode 100644 index f56e1a70e542fd30f1b30a3eaaa6c7fed3393561..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/c66c5a193225934366307245d6bbcaaa86f16a72.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/c6b2f43441214d134d814f5448be8c738793aabd.png b/doc/full_html/0.1.2/_images/math/c6b2f43441214d134d814f5448be8c738793aabd.png deleted file mode 100644 index 432b302dbf0389d00f3886572abd85044a0efc98..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/c6b2f43441214d134d814f5448be8c738793aabd.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/c6d03244781e9de05a8c7e9bc240d6e4f21f321d.png b/doc/full_html/0.1.2/_images/math/c6d03244781e9de05a8c7e9bc240d6e4f21f321d.png deleted file mode 100644 index 181683149333023b567696fcef2e60b8e1ab8398..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/c6d03244781e9de05a8c7e9bc240d6e4f21f321d.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/c7d380d9c8e4240300cafe1faf69885b3ab810e7.png b/doc/full_html/0.1.2/_images/math/c7d380d9c8e4240300cafe1faf69885b3ab810e7.png deleted file mode 100644 index a5ab3a45873df81cfdf01894de87ed21fcd8606d..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/c7d380d9c8e4240300cafe1faf69885b3ab810e7.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/c8892b371e22398d57f229c1d9bc5bc3de909048.png b/doc/full_html/0.1.2/_images/math/c8892b371e22398d57f229c1d9bc5bc3de909048.png deleted file mode 100644 index b4994c21bad9241d0327bd17c6fd80b870428a68..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/c8892b371e22398d57f229c1d9bc5bc3de909048.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/c9ef56e80463e6896aeefd472a49260cf725cb98.png b/doc/full_html/0.1.2/_images/math/c9ef56e80463e6896aeefd472a49260cf725cb98.png deleted file mode 100644 index 56c4038c0ba61072b12acf75ed604ea290ad78b5..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/c9ef56e80463e6896aeefd472a49260cf725cb98.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/cbcf542abd108a2c2ce0cca5b7898d19433a2bfa.png b/doc/full_html/0.1.2/_images/math/cbcf542abd108a2c2ce0cca5b7898d19433a2bfa.png deleted file mode 100644 index b8cfa86d842a99744dd8b33432bd4a875ba1ce68..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/cbcf542abd108a2c2ce0cca5b7898d19433a2bfa.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/ccfba7df4c9cc750aea40eaf35e606a7eb09a181.png b/doc/full_html/0.1.2/_images/math/ccfba7df4c9cc750aea40eaf35e606a7eb09a181.png deleted file mode 100644 index de64cdf1dd271125ef8c649faa7040527ddfcf14..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/ccfba7df4c9cc750aea40eaf35e606a7eb09a181.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/ce79b7bcc1c30e06000c4830c068fac6d32dbb06.png b/doc/full_html/0.1.2/_images/math/ce79b7bcc1c30e06000c4830c068fac6d32dbb06.png deleted file mode 100644 index 760b3619f8bec6ecd5feb1ddbb807e5a4926b075..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/ce79b7bcc1c30e06000c4830c068fac6d32dbb06.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/ce7f4f7ed2ac2a4bad2ae4b93a29ad699b08119c.png b/doc/full_html/0.1.2/_images/math/ce7f4f7ed2ac2a4bad2ae4b93a29ad699b08119c.png deleted file mode 100644 index 03d77b2450fac364ae6f6fefd268396f8591ba2f..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/ce7f4f7ed2ac2a4bad2ae4b93a29ad699b08119c.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/ce9ca249d9104dc30ecbff218d0359027f4834de.png b/doc/full_html/0.1.2/_images/math/ce9ca249d9104dc30ecbff218d0359027f4834de.png deleted file mode 100644 index 24d06bddb131ea62a1d64f4ab666b843ca1a6aa3..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/ce9ca249d9104dc30ecbff218d0359027f4834de.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/d0834965759561404c7bf0e14362825441373003.png b/doc/full_html/0.1.2/_images/math/d0834965759561404c7bf0e14362825441373003.png deleted file mode 100644 index 12c56d12f20f908b89716b3f2f896388f8ea45f4..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/d0834965759561404c7bf0e14362825441373003.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/d16d27cdce04e2aebb243e4f7061a39f2847d90e.png b/doc/full_html/0.1.2/_images/math/d16d27cdce04e2aebb243e4f7061a39f2847d90e.png deleted file mode 100644 index 976f6d37b50ba027f11e3ad381107267e0dda856..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/d16d27cdce04e2aebb243e4f7061a39f2847d90e.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/d16f8a26fe54b2ef2cf9b682eb70f854b27ca16d.png b/doc/full_html/0.1.2/_images/math/d16f8a26fe54b2ef2cf9b682eb70f854b27ca16d.png deleted file mode 100644 index c7b3487be8270622c54e50a1f60663a0c37bf8f0..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/d16f8a26fe54b2ef2cf9b682eb70f854b27ca16d.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/d30df074a22c99e349f9be2236a936494992f5d1.png b/doc/full_html/0.1.2/_images/math/d30df074a22c99e349f9be2236a936494992f5d1.png deleted file mode 100644 index fbd82653785f0871ca84d6481351850c202115f3..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/d30df074a22c99e349f9be2236a936494992f5d1.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/d4f515d8575ae94bb24d4686dab3b6aa84d51d39.png b/doc/full_html/0.1.2/_images/math/d4f515d8575ae94bb24d4686dab3b6aa84d51d39.png deleted file mode 100644 index d16c2096141875e268b01a66809ddeec7d027aa5..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/d4f515d8575ae94bb24d4686dab3b6aa84d51d39.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/d79f7b166b40d8ee6cbff20e543afeada0e962af.png b/doc/full_html/0.1.2/_images/math/d79f7b166b40d8ee6cbff20e543afeada0e962af.png deleted file mode 100644 index ee731eee9037240ada547bf0ec08d3bcef2ab08f..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/d79f7b166b40d8ee6cbff20e543afeada0e962af.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/db0f05af17a329d387f5234730350c6227d4ca0d.png b/doc/full_html/0.1.2/_images/math/db0f05af17a329d387f5234730350c6227d4ca0d.png deleted file mode 100644 index 43dd35b5b2348a7cd9862aefe4e91bcc4da43791..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/db0f05af17a329d387f5234730350c6227d4ca0d.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/db9bf89f27bf302cee5310476a4971dc845b4095.png b/doc/full_html/0.1.2/_images/math/db9bf89f27bf302cee5310476a4971dc845b4095.png deleted file mode 100644 index c7049c0552a17a2f3db1773ec777c4e141604d7d..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/db9bf89f27bf302cee5310476a4971dc845b4095.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/dd2c0e0a0617d6227232d0880c3af23cdd4c97dd.png b/doc/full_html/0.1.2/_images/math/dd2c0e0a0617d6227232d0880c3af23cdd4c97dd.png deleted file mode 100644 index a42e2f9026d3b0b85ed01103b05668351fb0fccb..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/dd2c0e0a0617d6227232d0880c3af23cdd4c97dd.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/de4dd7c3b9228b9fc434b8a85ca63bfc094f971c.png b/doc/full_html/0.1.2/_images/math/de4dd7c3b9228b9fc434b8a85ca63bfc094f971c.png deleted file mode 100644 index 76581ec62ef81223b2d8f9d4880fdf9eba5c521e..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/de4dd7c3b9228b9fc434b8a85ca63bfc094f971c.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/dfadab52b4b2aacf21527aac1a15d56e503ebd24.png b/doc/full_html/0.1.2/_images/math/dfadab52b4b2aacf21527aac1a15d56e503ebd24.png deleted file mode 100644 index 42e00b37b63eea18e8aa1effab49efe3f6292386..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/dfadab52b4b2aacf21527aac1a15d56e503ebd24.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/e0d2bf360290fd61d1c1557e763f2622363b3d35.png b/doc/full_html/0.1.2/_images/math/e0d2bf360290fd61d1c1557e763f2622363b3d35.png deleted file mode 100644 index 17ac98423fd711e54e2901d1b5939ceefb6f025b..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/e0d2bf360290fd61d1c1557e763f2622363b3d35.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/e39fe8c9cf97d1f7fa0d52599ad08114d980ae5f.png b/doc/full_html/0.1.2/_images/math/e39fe8c9cf97d1f7fa0d52599ad08114d980ae5f.png deleted file mode 100644 index 9a871129add6ee3c03e342a16aeb9843cf876975..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/e39fe8c9cf97d1f7fa0d52599ad08114d980ae5f.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/e3dae1481ecab520a20a42250c020820288c3bab.png b/doc/full_html/0.1.2/_images/math/e3dae1481ecab520a20a42250c020820288c3bab.png deleted file mode 100644 index 1452ad551c1a2e4bf37ef76dcb15c551268d1b20..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/e3dae1481ecab520a20a42250c020820288c3bab.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/e51c87e11413f6ed1e52fcbab71f5a0a8afafacc.png b/doc/full_html/0.1.2/_images/math/e51c87e11413f6ed1e52fcbab71f5a0a8afafacc.png deleted file mode 100644 index e68564a221fde701e3a9b1f12c4763b84fd39f72..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/e51c87e11413f6ed1e52fcbab71f5a0a8afafacc.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/e573709933fadac51804e6d9c5350ea59e896f00.png b/doc/full_html/0.1.2/_images/math/e573709933fadac51804e6d9c5350ea59e896f00.png deleted file mode 100644 index 25701b56a0b77a577479fb1349c447db77c1f6ef..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/e573709933fadac51804e6d9c5350ea59e896f00.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/e75357f2d8c8407da3c37e1fa3524fbe8490e3f1.png b/doc/full_html/0.1.2/_images/math/e75357f2d8c8407da3c37e1fa3524fbe8490e3f1.png deleted file mode 100644 index 844376d1aa88c14a8f33817d34e5b2f8982cf15a..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/e75357f2d8c8407da3c37e1fa3524fbe8490e3f1.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/e7baca06eeb8ee3250e3466e1f418f720684099c.png b/doc/full_html/0.1.2/_images/math/e7baca06eeb8ee3250e3466e1f418f720684099c.png deleted file mode 100644 index c79b2fe02c76be65972a882d5e33381031caae27..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/e7baca06eeb8ee3250e3466e1f418f720684099c.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/e7cfe28a2bf8ef5c58f5846c94770f9be1953302.png b/doc/full_html/0.1.2/_images/math/e7cfe28a2bf8ef5c58f5846c94770f9be1953302.png deleted file mode 100644 index ac0b6efa7699fc45ffe3b67ed7fab4d2c0d7d403..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/e7cfe28a2bf8ef5c58f5846c94770f9be1953302.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/e809f220a3dcc25a10864259b04071cb3ee05788.png b/doc/full_html/0.1.2/_images/math/e809f220a3dcc25a10864259b04071cb3ee05788.png deleted file mode 100644 index 562702502a8176b4ea41db21d2c326a25d13d64c..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/e809f220a3dcc25a10864259b04071cb3ee05788.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/e896f5aea29c7ac1595c31541e2d3fed7c87d876.png b/doc/full_html/0.1.2/_images/math/e896f5aea29c7ac1595c31541e2d3fed7c87d876.png deleted file mode 100644 index 84e4c37a24f354ae76bcd1dfccd2d06fa379f67a..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/e896f5aea29c7ac1595c31541e2d3fed7c87d876.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/ead8235623e7b545256d14519b7833be36893bd5.png b/doc/full_html/0.1.2/_images/math/ead8235623e7b545256d14519b7833be36893bd5.png deleted file mode 100644 index 4f573d76d4160f64bece6ce74cae46dbdf4034d1..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/ead8235623e7b545256d14519b7833be36893bd5.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/ebcca5d699966d2799d6dd335140b5ab842fe7c0.png b/doc/full_html/0.1.2/_images/math/ebcca5d699966d2799d6dd335140b5ab842fe7c0.png deleted file mode 100644 index 3e5fbdc44d5ec05246240cfcdd68574bd3a34c39..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/ebcca5d699966d2799d6dd335140b5ab842fe7c0.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/edd05b659fd1f803f152ed123d1313e7aea563bb.png b/doc/full_html/0.1.2/_images/math/edd05b659fd1f803f152ed123d1313e7aea563bb.png deleted file mode 100644 index a13141971bcc7a6a3a68f437f7471fc2012ed05a..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/edd05b659fd1f803f152ed123d1313e7aea563bb.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/ee21d50927635285a83d96195c76eec91b7936d7.png b/doc/full_html/0.1.2/_images/math/ee21d50927635285a83d96195c76eec91b7936d7.png deleted file mode 100644 index de64cdf1dd271125ef8c649faa7040527ddfcf14..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/ee21d50927635285a83d96195c76eec91b7936d7.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/eebf70fcf658581dcfac10c62e242e154619c037.png b/doc/full_html/0.1.2/_images/math/eebf70fcf658581dcfac10c62e242e154619c037.png deleted file mode 100644 index 903ce7c2f691a13c03adffecb0a0659341c0894a..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/eebf70fcf658581dcfac10c62e242e154619c037.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/efb58deef19694b14420d011ef7a612b1a1557e6.png b/doc/full_html/0.1.2/_images/math/efb58deef19694b14420d011ef7a612b1a1557e6.png deleted file mode 100644 index 6e24241424ea0c19636bcdc84da77f3b4f0ef445..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/efb58deef19694b14420d011ef7a612b1a1557e6.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/f06fb5af37e4ee7d45df1f7c06a5deab4257132f.png b/doc/full_html/0.1.2/_images/math/f06fb5af37e4ee7d45df1f7c06a5deab4257132f.png deleted file mode 100644 index 40e1af9a0c1c8463303aa8af735b3b0dd1f06026..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/f06fb5af37e4ee7d45df1f7c06a5deab4257132f.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/f07a8edca68bdddf9289e4309dea38f744af60f8.png b/doc/full_html/0.1.2/_images/math/f07a8edca68bdddf9289e4309dea38f744af60f8.png deleted file mode 100644 index 93c4efd03353793689cab729482895a846322773..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/f07a8edca68bdddf9289e4309dea38f744af60f8.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/f1f5f81a94c28c6332fe2be0dad3d3cd2ea6542f.png b/doc/full_html/0.1.2/_images/math/f1f5f81a94c28c6332fe2be0dad3d3cd2ea6542f.png deleted file mode 100644 index 747abbba3650455a14c0413eaf2670e4641b7bf4..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/f1f5f81a94c28c6332fe2be0dad3d3cd2ea6542f.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/f2f9d73da808ab8a59749858ed749c3d2cdaed7f.png b/doc/full_html/0.1.2/_images/math/f2f9d73da808ab8a59749858ed749c3d2cdaed7f.png deleted file mode 100644 index d3f29f2b29a139c2d60f124424b066cfc271fb59..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/f2f9d73da808ab8a59749858ed749c3d2cdaed7f.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/f35ed903c95a48a58e0a8e696b5f575515e31367.png b/doc/full_html/0.1.2/_images/math/f35ed903c95a48a58e0a8e696b5f575515e31367.png deleted file mode 100644 index 08a1a4bcd86aad67e25fc8a85f37b7096252c6f4..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/f35ed903c95a48a58e0a8e696b5f575515e31367.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/f37bba504894945c07a32f5496d74299a37aa51c.png b/doc/full_html/0.1.2/_images/math/f37bba504894945c07a32f5496d74299a37aa51c.png deleted file mode 100644 index 7ae4844f5376c5435053202405b18d5baf37d380..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/f37bba504894945c07a32f5496d74299a37aa51c.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/f4f1ed58163d85323da9aa501a061fe05954ff7a.png b/doc/full_html/0.1.2/_images/math/f4f1ed58163d85323da9aa501a061fe05954ff7a.png deleted file mode 100644 index d946d5355c154529cafea87b044b43f6d75e0ff1..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/f4f1ed58163d85323da9aa501a061fe05954ff7a.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/f503c6411fc20d42100d24aaafd0cca58e9412b9.png b/doc/full_html/0.1.2/_images/math/f503c6411fc20d42100d24aaafd0cca58e9412b9.png deleted file mode 100644 index a444238288911ae9dd16efd9b0db4f13e69badb1..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/f503c6411fc20d42100d24aaafd0cca58e9412b9.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/f51a24c13c63bde268c9288806ec1f21ad6d3ca7.png b/doc/full_html/0.1.2/_images/math/f51a24c13c63bde268c9288806ec1f21ad6d3ca7.png deleted file mode 100644 index 8aa57f5dc89b2a793eb3ea63d4050fe1b6b061e4..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/f51a24c13c63bde268c9288806ec1f21ad6d3ca7.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/f702ef29dc76591c032c583eff6b81deca3b564b.png b/doc/full_html/0.1.2/_images/math/f702ef29dc76591c032c583eff6b81deca3b564b.png deleted file mode 100644 index 8ad526c4dfa36170a7a602bf38f1af3555e830be..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/f702ef29dc76591c032c583eff6b81deca3b564b.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/f7d487353ad46311dbe60e1d74c3403579ed5dde.png b/doc/full_html/0.1.2/_images/math/f7d487353ad46311dbe60e1d74c3403579ed5dde.png deleted file mode 100644 index c9a6341755c84532f91039d79aba813dbe65d24d..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/f7d487353ad46311dbe60e1d74c3403579ed5dde.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/f8e48315e8d698a435613a59b3eca2f5dd27f6a1.png b/doc/full_html/0.1.2/_images/math/f8e48315e8d698a435613a59b3eca2f5dd27f6a1.png deleted file mode 100644 index 3092ed6e7252d063655776b6fba542cec78894e2..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/f8e48315e8d698a435613a59b3eca2f5dd27f6a1.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/fa2fa899f0afb05d6837885523503a2d4df434f9.png b/doc/full_html/0.1.2/_images/math/fa2fa899f0afb05d6837885523503a2d4df434f9.png deleted file mode 100644 index 5757fee114088063b2f1f7774bb8da6ddde5722e..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/fa2fa899f0afb05d6837885523503a2d4df434f9.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/fc38592c1b6aa86cd81a2c139f430500d5769222.png b/doc/full_html/0.1.2/_images/math/fc38592c1b6aa86cd81a2c139f430500d5769222.png deleted file mode 100644 index 63b285b4cab5da0a4b51cf7917d8a19409928386..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/fc38592c1b6aa86cd81a2c139f430500d5769222.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/fc97ef67268cd4e91bacdf12b8901d7036c9a056.png b/doc/full_html/0.1.2/_images/math/fc97ef67268cd4e91bacdf12b8901d7036c9a056.png deleted file mode 100644 index 3d31065f2845636fa0f4df15699bb589fe7c99be..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/fc97ef67268cd4e91bacdf12b8901d7036c9a056.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/fcb9664a20601be22db0ad1cb371b509ebff2243.png b/doc/full_html/0.1.2/_images/math/fcb9664a20601be22db0ad1cb371b509ebff2243.png deleted file mode 100644 index df515c751b9dab4af7bd5ef05837efeeab723089..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/fcb9664a20601be22db0ad1cb371b509ebff2243.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/fdc82bd5573eeb5a7eb3e936804d29e228612380.png b/doc/full_html/0.1.2/_images/math/fdc82bd5573eeb5a7eb3e936804d29e228612380.png deleted file mode 100644 index 32b8ed76898e91649a80721ac0f587abcac5c9e7..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/fdc82bd5573eeb5a7eb3e936804d29e228612380.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/fdfd9b84e32a56f39b510b1cec00a0363b46cacd.png b/doc/full_html/0.1.2/_images/math/fdfd9b84e32a56f39b510b1cec00a0363b46cacd.png deleted file mode 100644 index eec717d98ac35faa3d149d623541389b91e2471b..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/fdfd9b84e32a56f39b510b1cec00a0363b46cacd.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/fe2ec9b89b5b4c612108a4b038aa733d403712ee.png b/doc/full_html/0.1.2/_images/math/fe2ec9b89b5b4c612108a4b038aa733d403712ee.png deleted file mode 100644 index 645cf6187b77270fd4af0f8a7ce1ee3c810bea21..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/fe2ec9b89b5b4c612108a4b038aa733d403712ee.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/fe8742a5c8740bebb644bf5f3fdcadae1a4ecf0c.png b/doc/full_html/0.1.2/_images/math/fe8742a5c8740bebb644bf5f3fdcadae1a4ecf0c.png deleted file mode 100644 index 36588254e8e9220a6c92d7a642425f9999c6a7a5..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/fe8742a5c8740bebb644bf5f3fdcadae1a4ecf0c.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/fea68d0936bf53e57bdb3d020d9f6c90ef9b3e73.png b/doc/full_html/0.1.2/_images/math/fea68d0936bf53e57bdb3d020d9f6c90ef9b3e73.png deleted file mode 100644 index 7d2d68bd2f86c04d8eb90f6cebbbebab18c0938c..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/fea68d0936bf53e57bdb3d020d9f6c90ef9b3e73.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/math/fefc2e771ac259d4b5634835ab740a108a7a6424.png b/doc/full_html/0.1.2/_images/math/fefc2e771ac259d4b5634835ab740a108a7a6424.png deleted file mode 100644 index eee88bca206ad6a594a35ba6edb077e7e322cf3d..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/math/fefc2e771ac259d4b5634835ab740a108a7a6424.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-0ea25586b0.png b/doc/full_html/0.1.2/_images/mathmpl/math-0ea25586b0.png deleted file mode 100644 index 4545938223a097bb6dff9a02fbbbfc4720e7a134..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-0ea25586b0.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-0f9527139f.png b/doc/full_html/0.1.2/_images/mathmpl/math-0f9527139f.png deleted file mode 100644 index d5a834205afacc932cf0342a23b6595874fd7661..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-0f9527139f.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-11cd45cfb8.png b/doc/full_html/0.1.2/_images/mathmpl/math-11cd45cfb8.png deleted file mode 100644 index f7ed785c672dd56521e14c8ab3a672546bdc877c..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-11cd45cfb8.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-13db63e40c.png b/doc/full_html/0.1.2/_images/mathmpl/math-13db63e40c.png deleted file mode 100644 index dfb53b7b54b767737018dad46a73239de4686e74..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-13db63e40c.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-1922d1ceaa.png b/doc/full_html/0.1.2/_images/mathmpl/math-1922d1ceaa.png deleted file mode 100644 index 233c049aea8afd0bedb8f124fdabf07dceb007d3..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-1922d1ceaa.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-1bd6b4e1ba.png b/doc/full_html/0.1.2/_images/mathmpl/math-1bd6b4e1ba.png deleted file mode 100644 index deccf9d05b1cc03e83fe77d9382856569a814c1c..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-1bd6b4e1ba.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-1e9993fab9.png b/doc/full_html/0.1.2/_images/mathmpl/math-1e9993fab9.png deleted file mode 100644 index d9b0ce8051a10278b83040de0cc18d346bc1608f..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-1e9993fab9.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-22d6296c0a.png b/doc/full_html/0.1.2/_images/mathmpl/math-22d6296c0a.png deleted file mode 100644 index 28e8444f61066f189fd4f2b27052b11011a734cd..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-22d6296c0a.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-23b99dd91c.png b/doc/full_html/0.1.2/_images/mathmpl/math-23b99dd91c.png deleted file mode 100644 index d05040a86df9d990984f59105febea3130fcabe6..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-23b99dd91c.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-295368e724.png b/doc/full_html/0.1.2/_images/mathmpl/math-295368e724.png deleted file mode 100644 index cd2a0d2fb97dfd9677e220ccbc73fea81622bbf7..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-295368e724.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-296b3d368b.png b/doc/full_html/0.1.2/_images/mathmpl/math-296b3d368b.png deleted file mode 100644 index 29de30b21b67aa6b024581e30608f1ff73eb2268..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-296b3d368b.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-29b1e51f42.png b/doc/full_html/0.1.2/_images/mathmpl/math-29b1e51f42.png deleted file mode 100644 index e6a0694719c19fcaf311d46204cf688315eec972..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-29b1e51f42.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-2d3399a23a.png b/doc/full_html/0.1.2/_images/mathmpl/math-2d3399a23a.png deleted file mode 100644 index 79d5bf4cfc3170706031f280fd4a47e65ad0079e..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-2d3399a23a.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-316b65649e.png b/doc/full_html/0.1.2/_images/mathmpl/math-316b65649e.png deleted file mode 100644 index c4358ff50f336f19fe0e1565b2c9be27bab56c9c..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-316b65649e.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-38d1cf4923.png b/doc/full_html/0.1.2/_images/mathmpl/math-38d1cf4923.png deleted file mode 100644 index a204ea6c720f6f87e97e8a1534a26eb21e5bf259..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-38d1cf4923.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-3954eedc31.png b/doc/full_html/0.1.2/_images/mathmpl/math-3954eedc31.png deleted file mode 100644 index 1f22ee1b436121e09f5fca15dd1618242d8233d4..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-3954eedc31.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-3c26935775.png b/doc/full_html/0.1.2/_images/mathmpl/math-3c26935775.png deleted file mode 100644 index 4989409cca0c65b835dd095867bc8998a2f96d80..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-3c26935775.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-3c290f7d3c.png b/doc/full_html/0.1.2/_images/mathmpl/math-3c290f7d3c.png deleted file mode 100644 index ec90a399b3b5de2db5e7a76c46e5dee719f1c7a9..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-3c290f7d3c.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-457123afc0.png b/doc/full_html/0.1.2/_images/mathmpl/math-457123afc0.png deleted file mode 100644 index cff6410a3b74e488625b96da02da6074a9bcaa53..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-457123afc0.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-47734f75f1.png b/doc/full_html/0.1.2/_images/mathmpl/math-47734f75f1.png deleted file mode 100644 index 155ed05eb9bbb81eb0da64601bea1ecbf1f259ae..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-47734f75f1.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-4e155c67a6.png b/doc/full_html/0.1.2/_images/mathmpl/math-4e155c67a6.png deleted file mode 100644 index ddf090f85f556ac437246e7cf55ef0da199f4449..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-4e155c67a6.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-4f4f21d34c.png b/doc/full_html/0.1.2/_images/mathmpl/math-4f4f21d34c.png deleted file mode 100644 index 0b62d14ba2f1b2177015c37672aec7796775486d..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-4f4f21d34c.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-4f5a43d9a5.png b/doc/full_html/0.1.2/_images/mathmpl/math-4f5a43d9a5.png deleted file mode 100644 index 232e1e5b172fb2f3e74ba45c6057cb13672c1515..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-4f5a43d9a5.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-52b9fcd4b7.png b/doc/full_html/0.1.2/_images/mathmpl/math-52b9fcd4b7.png deleted file mode 100644 index 97e5e26e7ef3a53da1e32886d21b5ae6416775f3..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-52b9fcd4b7.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-5a27c3b824.png b/doc/full_html/0.1.2/_images/mathmpl/math-5a27c3b824.png deleted file mode 100644 index 61a15efd04b393f3df8abb1a41c48babe910cc98..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-5a27c3b824.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-5c65a354b4.png b/doc/full_html/0.1.2/_images/mathmpl/math-5c65a354b4.png deleted file mode 100644 index b2f10f2f65ddedcc0290dc3d25b4cc21b347fb2d..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-5c65a354b4.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-5d0c220d31.png b/doc/full_html/0.1.2/_images/mathmpl/math-5d0c220d31.png deleted file mode 100644 index 6cfecdca53ed788bd7275c6b7bfb8f0899ce06cc..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-5d0c220d31.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-5dc8912759.png b/doc/full_html/0.1.2/_images/mathmpl/math-5dc8912759.png deleted file mode 100644 index b04dcc15aa24378b79244bb2d5075404b61a2030..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-5dc8912759.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-61f22d04ac.png b/doc/full_html/0.1.2/_images/mathmpl/math-61f22d04ac.png deleted file mode 100644 index 2b497643b267b652d7c8bad6daa6d5d4259b195c..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-61f22d04ac.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-6339a1bee6.png b/doc/full_html/0.1.2/_images/mathmpl/math-6339a1bee6.png deleted file mode 100644 index c4a5a74f7b14193440a020e873ebde4dcc3001ed..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-6339a1bee6.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-6922bfd22f.png b/doc/full_html/0.1.2/_images/mathmpl/math-6922bfd22f.png deleted file mode 100644 index 7f2667e95dbad00460b433f1b7820245eb45935d..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-6922bfd22f.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-71e8e4ff57.png b/doc/full_html/0.1.2/_images/mathmpl/math-71e8e4ff57.png deleted file mode 100644 index ab752f70d69141afe7a094b6b93d141f4c343d78..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-71e8e4ff57.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-7334df5644.png b/doc/full_html/0.1.2/_images/mathmpl/math-7334df5644.png deleted file mode 100644 index 558c47ae6548cd124265d525a0d74b6626b70d0b..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-7334df5644.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-7616e091ad.png b/doc/full_html/0.1.2/_images/mathmpl/math-7616e091ad.png deleted file mode 100644 index 7e20da873be3aa641c54304ffd1c1336236df019..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-7616e091ad.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-7caa77429f.png b/doc/full_html/0.1.2/_images/mathmpl/math-7caa77429f.png deleted file mode 100644 index 45c43a620244db5da4ea221a46efccc630ce14e1..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-7caa77429f.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-7ef0f29d44.png b/doc/full_html/0.1.2/_images/mathmpl/math-7ef0f29d44.png deleted file mode 100644 index 7f8cf9e3667abe8fa790cf50bd7b6fb79a552727..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-7ef0f29d44.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-81965a7141.png b/doc/full_html/0.1.2/_images/mathmpl/math-81965a7141.png deleted file mode 100644 index 31e9f0cf7cb19714bd5fcd9c735b6f8f996249e1..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-81965a7141.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-830dc4dda1.png b/doc/full_html/0.1.2/_images/mathmpl/math-830dc4dda1.png deleted file mode 100644 index f67d7d7928cb1c79fa21a5ab4cf3fa1f4cfe9e31..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-830dc4dda1.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-8e101db7ad.png b/doc/full_html/0.1.2/_images/mathmpl/math-8e101db7ad.png deleted file mode 100644 index 3b261b33ea84f57a3078a7dbcfc74c4270f0a9c3..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-8e101db7ad.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-92e60c12f1.png b/doc/full_html/0.1.2/_images/mathmpl/math-92e60c12f1.png deleted file mode 100644 index 47bb8e48b0da0cf0dd6f5bdccd795ee7b06880b0..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-92e60c12f1.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-939d347d75.png b/doc/full_html/0.1.2/_images/mathmpl/math-939d347d75.png deleted file mode 100644 index c7f0834f0b44b987e7f2f25a1fc0eb11529939d2..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-939d347d75.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-9880c5c2f8.png b/doc/full_html/0.1.2/_images/mathmpl/math-9880c5c2f8.png deleted file mode 100644 index 9b3265fb0aed1202a8b0fd60decb44f186f888eb..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-9880c5c2f8.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-9bcea31d5f.png b/doc/full_html/0.1.2/_images/mathmpl/math-9bcea31d5f.png deleted file mode 100644 index c8ee77fdf852a32b7a644a13e0a88e80f8ca3c71..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-9bcea31d5f.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-a04b877576.png b/doc/full_html/0.1.2/_images/mathmpl/math-a04b877576.png deleted file mode 100644 index dc8cc3a42f76db27adc694a8abc1abf64941381d..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-a04b877576.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-a07da5781a.png b/doc/full_html/0.1.2/_images/mathmpl/math-a07da5781a.png deleted file mode 100644 index 8a9fd53a4bd06385c7115f798d8767b6237d5c25..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-a07da5781a.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-ae2c30f034.png b/doc/full_html/0.1.2/_images/mathmpl/math-ae2c30f034.png deleted file mode 100644 index cf41a3f0928831f2f68a9a6a3869564b0fec4606..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-ae2c30f034.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-ae7023d9db.png b/doc/full_html/0.1.2/_images/mathmpl/math-ae7023d9db.png deleted file mode 100644 index 578b3e30347150a925eaf2206927d18acafd3074..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-ae7023d9db.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-b5c035b1f6.png b/doc/full_html/0.1.2/_images/mathmpl/math-b5c035b1f6.png deleted file mode 100644 index c333a98d4bb2f17c0c6461c30e91472bfeb45c42..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-b5c035b1f6.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-bc2667671b.png b/doc/full_html/0.1.2/_images/mathmpl/math-bc2667671b.png deleted file mode 100644 index 558c47ae6548cd124265d525a0d74b6626b70d0b..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-bc2667671b.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-c276174279.png b/doc/full_html/0.1.2/_images/mathmpl/math-c276174279.png deleted file mode 100644 index 168bd143646ef1ebcbdd1006743961802bc8a48e..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-c276174279.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-c41a307a3f.png b/doc/full_html/0.1.2/_images/mathmpl/math-c41a307a3f.png deleted file mode 100644 index f9b71a172ef6934dd5e07cff20a60d1c79b57bcc..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-c41a307a3f.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-c86b439e21.png b/doc/full_html/0.1.2/_images/mathmpl/math-c86b439e21.png deleted file mode 100644 index c6aa8a83a7014d88a755e049803a535003f68296..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-c86b439e21.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-cbfc89179e.png b/doc/full_html/0.1.2/_images/mathmpl/math-cbfc89179e.png deleted file mode 100644 index 9bfe00278c91320f587fdd9442e2f8dae8cee0bb..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-cbfc89179e.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-cd4f26c22f.png b/doc/full_html/0.1.2/_images/mathmpl/math-cd4f26c22f.png deleted file mode 100644 index 77877efe26edea0bebe052dbded58dd5a47705eb..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-cd4f26c22f.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-d32c92b8d7.png b/doc/full_html/0.1.2/_images/mathmpl/math-d32c92b8d7.png deleted file mode 100644 index 0cf5742a47fa141cf91ccddbe925ada105471aa9..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-d32c92b8d7.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-d4d6f90214.png b/doc/full_html/0.1.2/_images/mathmpl/math-d4d6f90214.png deleted file mode 100644 index 90afdf18b908acc1ef3fe23c82b6872d92456c31..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-d4d6f90214.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-d7034cb864.png b/doc/full_html/0.1.2/_images/mathmpl/math-d7034cb864.png deleted file mode 100644 index df5c95ebafc9ab4c41b7d2cfa2170cd271cd617b..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-d7034cb864.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-dc0ec9c070.png b/doc/full_html/0.1.2/_images/mathmpl/math-dc0ec9c070.png deleted file mode 100644 index b39312fa4bf1083682e6848f8f4c6e1507aaa121..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-dc0ec9c070.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-dc5041b0fe.png b/doc/full_html/0.1.2/_images/mathmpl/math-dc5041b0fe.png deleted file mode 100644 index 906e0a58ad81431de48f3a2b3bca623aa836e8e0..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-dc5041b0fe.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-e2cd1f267c.png b/doc/full_html/0.1.2/_images/mathmpl/math-e2cd1f267c.png deleted file mode 100644 index fe5140d0d2cf2ea67f73501f8d07b85040967004..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-e2cd1f267c.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-e7b31363a1.png b/doc/full_html/0.1.2/_images/mathmpl/math-e7b31363a1.png deleted file mode 100644 index 0854f3eef19a03128826c11decd6c81ca1f52aed..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-e7b31363a1.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-e9a32e94da.png b/doc/full_html/0.1.2/_images/mathmpl/math-e9a32e94da.png deleted file mode 100644 index e9d0d2af6b1ff668fe9540d4e9bc4fe774c74fdf..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-e9a32e94da.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-ec58ded507.png b/doc/full_html/0.1.2/_images/mathmpl/math-ec58ded507.png deleted file mode 100644 index 740d1d73e278bd4ac950019a8d46f51981d67cee..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-ec58ded507.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-ee1164607d.png b/doc/full_html/0.1.2/_images/mathmpl/math-ee1164607d.png deleted file mode 100644 index d6a32950a79153fab5341428c72cdc5f021733dd..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-ee1164607d.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-f083286645.png b/doc/full_html/0.1.2/_images/mathmpl/math-f083286645.png deleted file mode 100644 index e2bbc0d8b4a81648b71fa01940e3cd11ecedab66..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-f083286645.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-f0e596f1a0.png b/doc/full_html/0.1.2/_images/mathmpl/math-f0e596f1a0.png deleted file mode 100644 index cb38adea5c6b57f5c4b94e411f28226334302669..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-f0e596f1a0.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-f2b627d641.png b/doc/full_html/0.1.2/_images/mathmpl/math-f2b627d641.png deleted file mode 100644 index 9cd360dd036112018f6bdb2a66117b393b8ce496..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-f2b627d641.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-f5f8c5e9bd.png b/doc/full_html/0.1.2/_images/mathmpl/math-f5f8c5e9bd.png deleted file mode 100644 index b11f7653b767530fd28afc93be2690bd500f09e9..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-f5f8c5e9bd.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mathmpl/math-fcd94b83ce.png b/doc/full_html/0.1.2/_images/mathmpl/math-fcd94b83ce.png deleted file mode 100644 index ef82cdc3e29856d843a4919f1ec66763083c5b03..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mathmpl/math-fcd94b83ce.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/maxcut.png b/doc/full_html/0.1.2/_images/maxcut.png deleted file mode 100644 index b5773fe9ae7ce7ec0957d8d89c691565da598607..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/maxcut.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/maxflow.png b/doc/full_html/0.1.2/_images/maxflow.png deleted file mode 100644 index 17a1970d250a7fb844305309b1ce923f04c59cfb..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/maxflow.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/mincut.png b/doc/full_html/0.1.2/_images/mincut.png deleted file mode 100644 index ab41f298433ee2bc37de18701f2ef2880b2b79c4..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/mincut.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_images/multicut.png b/doc/full_html/0.1.2/_images/multicut.png deleted file mode 100644 index b39467ee42b30140cd24dd169048103f08d061f7..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_images/multicut.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_sources/api.txt b/doc/full_html/0.1.2/_sources/api.txt deleted file mode 100644 index daf8d540d895c715ff173b5a1720356074f1f9bb..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/_sources/api.txt +++ /dev/null @@ -1,13 +0,0 @@ -.. _api: - -************* -The PICOS API -************* - -.. toctree:: - :maxdepth: 2 - - problem.rst - tools.rst - expression.rst - constraint.rst diff --git a/doc/full_html/0.1.2/_sources/constraint.txt b/doc/full_html/0.1.2/_sources/constraint.txt deleted file mode 100644 index 6124f489d6bc0d8931b8e4c5011150beb18cd08d..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/_sources/constraint.txt +++ /dev/null @@ -1,8 +0,0 @@ -.. _constraint: - -========== -Constraint -========== - -.. autoclass:: picos.Constraint - :members: \ No newline at end of file diff --git a/doc/full_html/0.1.2/_sources/download.txt b/doc/full_html/0.1.2/_sources/download.txt deleted file mode 100644 index e9097e8adb40da3b4034f3399ee98b5f8ed03a4b..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/_sources/download.txt +++ /dev/null @@ -1,17 +0,0 @@ -.. _download: - -======== -Download -======== - -The latest version of PICOS can be downloaded here: - - `picos-0.1.1 `_ - -Installation instructions are explained -:ref:`here `. - - -**Older versions** - - `picos-0.1.0 `_ \ No newline at end of file diff --git a/doc/full_html/0.1.2/_sources/examples.txt b/doc/full_html/0.1.2/_sources/examples.txt deleted file mode 100644 index 07ad7636f0e5e95f0adad6cdfc56892c7054cda8..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/_sources/examples.txt +++ /dev/null @@ -1,12 +0,0 @@ -.. _examples: - -******** -Examples -******** - -.. toctree:: - :maxdepth: 3 - - optdes.rst - graphs.rst - diff --git a/doc/full_html/0.1.2/_sources/expression.txt b/doc/full_html/0.1.2/_sources/expression.txt deleted file mode 100644 index ee2d51ebc02da127e15b01cb883edcd54e9ebea8..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/_sources/expression.txt +++ /dev/null @@ -1,41 +0,0 @@ -.. _expression: - -========== -Expression -========== - -.. autoclass:: picos.Expression - - -AffinExp -======== - -.. autoclass:: picos.AffinExp - :members: - - -Variable -"""""""" - -.. _variable: - -.. autoclass:: picos.Variable - :members: - -Norm -==== - -.. autoclass:: picos.Norm - :members: - -QuadExp -======= - -.. autoclass:: picos.QuadExp - :members: - -LogSumExp -========= - -.. autoclass:: picos.LogSumExp - :members: diff --git a/doc/full_html/0.1.2/_sources/graphs.txt b/doc/full_html/0.1.2/_sources/graphs.txt deleted file mode 100644 index 97a1cef88e9077b993ce46196eafc369d61e8a7b..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/_sources/graphs.txt +++ /dev/null @@ -1,705 +0,0 @@ -.. _graphs: - -********************** -Cut problems in graphs -********************** - -The code below initializes the graph used in all the examples of this page. -It should be run prior to any of the codes presented in this page. -The packages `networkx `_ -and `matplotlib `_ -are recquired. - -We use an arbitrary graph generated by the LCF generator of the networkx package. -The graph is deterministic, so that we can run doctest and check -the output. We also use a kind of arbitrary sequence for the edge capacities. - - -.. testcode:: - - import picos as pic - import networkx as nx - - #number of nodes - N=20 - - #Generate a graph with LCF notation (you can change the values below to obtain another graph!) - G=nx.LCF_graph(N,[1,3,14],5) - G=nx.DiGraph(G) #edges are bidirected - - #generate edge capacities - c={} - for i,e in enumerate(G.edges()): - c[e]=((-2)**i)%17 #an arbitrary sequence of numbers - - -Max-flow, Min-cut (LP) -====================== - -Max-flow -'''''''' - -Given a directed graph :math:`G(V,E)`, -with a capacity :math:`c(e)` on each edge :math:`e \in E`, -a source node :math:`s` and a sink node :math:`t`, the **max-flow** problem is -to find a flow from :math:`s` to :math:`t` of maximum value. Recall that a flow -:math:`s` to :math:`t` is a mapping from :math:`E` to :math:`\mathbb{R}^+` -such that: - - * the capacity of each edge is respected: :math:`\forall e \in E,\ f(e) \leq c(e)` - - * the flow is conserved at each non-terminal node: - :math:`\forall n \in V \setminus \{s,t\},\ \sum_{(i,n)\in E} f((i,n)) = \sum_{(n,j)\in E} f((n,j))` - -Its value is defined as the volume passing from :math:`s` to :math:`t`: - -.. math:: - - \mathrm{value} (f) = \sum_{(s,j)\in E} f((s,j)) - \sum_{(i,s)\in E} f((i,s)) = \sum_{(i,t)\in E} f((i,t)) - \sum_{(t,j)\in E} f((t,j)). - -This problem clearly has a linear programming formulation, which -we solve below for ``s=16`` and ``t=10``: - -.. testcode:: - - maxflow=pic.Problem() - #source and sink nodes - s=16 - t=10 - - #convert the capacities as a picos expression - cc=pic.new_param('c',c) - - #flow variable - f={} - for e in G.edges(): - f[e]=maxflow.add_variable('f[{0}]'.format(e),1) - - - #flow value - F=maxflow.add_variable('F',1) - - #upper bound on the flows - maxflow.add_list_of_constraints( - [f[e]0 for e in G.edges()], #list of constraints - [('e',2)], #e is a double index (origin and desitnation of the edges) - 'edges' #set the index belongs to - ) - - #objective - maxflow.set_objective('max',F) - - #solve the problem - print maxflow - maxflow.solve(verbose=0) - - print 'The optimal flow has value {0}'.format(F) - - -.. testoutput:: - :options: +NORMALIZE_WHITESPACE - - --------------------- - optimization problem (LP): - 61 variables, 140 affine constraints - - f : dict of 60 variables, (1, 1), continuous - F : (1, 1), continuous - - maximize F - such that - f[e] < c[e] for all e in edges - Σ_{p in pred(i)} f[(p, i)] = Σ_{j in succ(i)} f[(i, j)] for all i in nodes-(s,t) - Σ_{p in pred(s)} f[(p, 16)] + F = Σ_{j in succ(s)} f[(16, j)] - Σ_{p in pred(t)} f[(p, 10)] = Σ_{j in succ(t)} f[(10, j)] + F - f[e] > 0 for all e in edges - --------------------- - The optimal flow has value 15.0 - -Let us now draw the maximum flow: - -.. testcode:: - - #display the graph - import pylab - fig=pylab.figure(figsize=(11,8)) - - node_colors=['w']*N - node_colors[s]='g' #source is green - node_colors[t]='b' #sink is blue - - pos=nx.spring_layout(G) - #edges - nx.draw_networkx(G,pos, - edgelist=[e for e in G.edges() if f[e].value[0]>0], - node_color=node_colors) - - - labels={e:'{0}/{1}'.format(f[e],c[e]) for e in G.edges() if f[e].value[0]>0} - #flow label - nx.draw_networkx_edge_labels(G, pos, - edge_labels=labels) - - #hide axis - fig.gca().axes.get_xaxis().set_ticks([]) - fig.gca().axes.get_yaxis().set_ticks([]) - - pylab.show() - -.. plot:: pyplots/maxflow.py - -The graph shows the source in blue, the sink in green, -and the value of the flow together with the capacity on each edge. - -Min-cut -''''''' - -Given a directed graph :math:`G(V,E)`, -with a capacity :math:`c(e)` on each edge :math:`e \in E`, -a source node :math:`s` and a sink node :math:`t`, the **min-cut** problem is -to find a partition of the nodes in two sets :math:`(S,T)`, such that -:math:`s\in S`, :math:`t \in T`, and the total capacity of the cut, -:math:`\mathrm{capacity}(S,T)=\sum_{(i,j)\in E \cap S \times T} c((i,j)),` is minimized. - -It can be seen that binary solutions :math:`d\in\{0,1\}^E,\ p\in\{0,1\}^V` -of the following linear program yield a minimum cut: - -.. math:: - :nowrap: - - \begin{center} - \begin{eqnarray*} - &\underset{\substack{d \in \mathbb{R}^E\\ - p \in \mathbb{R}^V}} - {\mbox{minimize}} - & \sum_{e \in E} c(e) d(e)\\ - &\mbox{subject to} & \forall (i,j) \in E,\ d((i,j)) \geq p(i)-p(j)\\ - & & p(s) = 1\\ - & & p(t) = 0\\ - & & \forall n \in V,\ p(n) \geq 0\\ - & & \forall e \in E,\ d(e) \geq 0 - \end{eqnarray*} - \end{center} - -Remarkably, this LP is the dual of the max-flow LP, and the -max-flow-min-cut theorem (also known as Ford-Fulkerson theorem :ref:`[1] `) -states that the capacity of the minimum cut is equal to the -value of the maximum flow. This means that the above LP always has -an optimal solution in which :math:`d` is binary. -In fact, the matrix defining this LP is *totally unimodular*, from -which we know that every extreme point of the polyhedron defining the -feasible region is integral, and hence the simplex algorithm -will return a minimum cut. - -We solve the mincut problem below, for ``s=16`` and ``t=10``: - -.. testcode:: - - mincut=pic.Problem() - - #source and sink nodes - s=16 - t=10 - - #convert the capacities as a picos expression - cc=pic.new_param('c',c) - - #cut variable - d={} - for e in G.edges(): - d[e]=mincut.add_variable('d[{0}]'.format(e),1) - - #potentials - p=mincut.add_variable('p',N) - - #potential inequalities - mincut.add_list_of_constraints( - [d[i,j] > p[i]-p[j] - for (i,j) in G.edges()], #list of constraints - ['i','j'],'edges') #indices and set they belong to - - #one-potential at source - mincut.add_constraint(p[s]==1) - #zero-potential at sink - mincut.add_constraint(p[t]==0) - - #nonnegativity - mincut.add_constraint(p>0) - mincut.add_list_of_constraints( - [d[e]>0 for e in G.edges()], #list of constraints - [('e',2)], #e is a double index (origin and desitnation of the edges) - 'edges' #set the index belongs to - ) - - #objective - mincut.set_objective('min', - pic.sum([cc[e]*d[e] for e in G.edges()], - [('e',2)],'edges') - ) - - print mincut - mincut.solve(verbose=0) - - print 'The minimal cut has capacity {0}'.format(mincut.obj_value()) - - cut=[e for e in G.edges() if d[e].value[0]==1] - S =[n for n in G.nodes() if p[n].value[0]==1] - T =[n for n in G.nodes() if p[n].value[0]==0] - - print 'the partition of the nodes is: ' - print 'S: {0}'.format(S) - print 'T: {0}'.format(T) - -.. testoutput:: - :options: +NORMALIZE_WHITESPACE - - --------------------- - optimization problem (LP): - 80 variables, 142 affine constraints - - d : dict of 60 variables, (1, 1), continuous - p : (20, 1), continuous - - minimize Σ_{e in edges} c[e]*d[e] - such that - d[(i, j)] > p[i] -p[j] for all (i,j) in edges - p[16] = 1.0 - p[10] = 0 - p > |0| - d[e] > 0 for all e in edges - --------------------- - The minimal cut has capacity 15.0 - the partition of the nodes is: - S: [15, 16, 17, 18] - T: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19] - - -Note that the minimum-cut could also habe been found by using the dual variables -of the maxflow LP: - - >>> #capacited flow constraint - >>> capaflow=maxflow.get_constraint((0,)) - >>> dualcut=[e for i,e in enumerate(G.edges()) if capaflow[i].dual[0]==1] - >>> #flow conservation constraint - >>> consflow=maxflow.get_constraint((1,)) - >>> Sdual = [s]+ [n for i,n in - ... enumerate([n for n in G.nodes() if n not in (s,t)]) - ... if consflow[i].dual[0]==1] - >>> Tdual = [t]+ [n for i,n in - ... enumerate([n for n in G.nodes() if n not in (s,t)]) - ... if consflow[i].dual[0]==0] - >>> cut == dualcut - True - >>> set(S) == set(Sdual) - True - >>> set(T) == set(Tdual) - True - -Let us now draw the maximum flow: - -.. testcode:: - - import pylab - fig=pylab.figure(figsize=(11,8)) - - node_colors=['w']*N - node_colors[s]='g' #source is green - node_colors[t]='b' #sink is blue - - pos=nx.spring_layout(G) - #edges (not in the cut) - nx.draw_networkx(G,pos, - edgelist=[e for e in G.edges() if e not in cut], - node_color=node_colors) - - #edges of the cut - nx.draw_networkx_edges(G,pos, - edgelist=cut, - edge_color='r') - - #hide axis - fig.gca().axes.get_xaxis().set_ticks([]) - fig.gca().axes.get_yaxis().set_ticks([]) - - pylab.show() - -.. plot:: pyplots/mincut.py - -On this graph, the source in blue, the sink in green, -and the edges defining the cut are marked in red. - -Multicut (MIP) -============== - -Multicut is a generalization of the mincut problem, in which several pairs -of nodes must be disconnected. The goal is to find a cut of minimal -capacity, such that for all pair :math:`(s,t) \in \mathcal{P}=\{(s_1,t_1),\ldots,(s_k,t_k))\}`, -there is no path from :math:`s` to `t` in the graph where the edges of the cut -have been removed. - -We can obtain a MIP formulation of the multicut problem -by doing a small modification the *mincut* LP. -The idea is to introduce a different potential for every node -which is the source of a pair in :math:`\mathcal{P}`: - -.. math:: - - \forall s \in \mathcal{S}=\{s\in V: \exists t \in V\ (s,t)\in\mathcal{P}\}, - p_s \in \mathbb{R}^V, - -and to force the cut variable to be binary. - -.. math:: - :nowrap: - - \begin{center} - \begin{eqnarray*} - &\underset{\substack{y \in \{0,1\}^E\\ - \forall s \in \mathcal{S},\ p_s \in \mathbb{R}^V}} - {\mbox{minimize}} - & \sum_{e \in E} c(e) y(e)\\ - &\mbox{subject to} & \forall (i,j),s \in E\times\mathcal{S},\ y((i,j)) \geq p_s(i)-p_s(j)\\ - & & \forall s \in \mathcal{S},\ p_s(s) = 1\\ - & & \forall (s,t) \in \mathcal{P},\ p_s(t) = 0\\ - & & \forall (s,n) \in \mathcal{S} \times V,\ p_s(n) \geq 0 - \end{eqnarray*} - \end{center} - -Unlike the mincut problem, the LP obtained by relaxing the integer constraint -:math:`y \in \{0,1\}^E` is not guaranteed to have an integral solution (see e.g. :ref:`[2] `). -We solve the multicut problem below, for the terminal pairs -:math:`\mathcal{P}=\{(0,12),(1,5),(1,19),(2,11),(3,4),(3,9),(3,18),(6,15),(10,14)\}`. - -.. testcode:: - - multicut=pic.Problem() - - #pairs to be separated - pairs=[(0,12),(1,5),(1,19),(2,11),(3,4),(3,9),(3,18),(6,15),(10,14)] - - #source and sink nodes - s=16 - t=10 - - #convert the capacities as a picos expression - cc=pic.new_param('c',c) - - #list of sources - sources=set([p[0] for p in pairs]) - - - #cut variable - y={} - for e in G.edges(): - y[e]=multicut.add_variable('y[{0}]'.format(e),1,vtype='binary') - - #potentials (one for each source) - p={} - for s in sources: - p[s]=multicut.add_variable('p[{0}]'.format(s),N) - - #potential inequalities - multicut.add_list_of_constraints( - [y[i,j]>p[s][i]-p[s][j] - for s in sources - for (i,j) in G.edges()], #list of constraints - ['i','j','s'],'edges x sources')#indices and set they belong to - - #one-potentials at source - multicut.add_list_of_constraints( - [p[s][s]==1 for s in sources], - 's','sources') - - #zero-potentials at sink - multicut.add_list_of_constraints( - [p[s][t]==0 for (s,t) in pairs], - ['s','t'],'pairs') - - #nonnegativity - multicut.add_list_of_constraints( - [p[s]>0 for s in sources], - 's','sources') - - #objective - multicut.set_objective('min', - pic.sum([cc[e]*y[e] for e in G.edges()], - [('e',2)],'edges') - ) - - print multicut - multicut.solve(verbose=0) - - print 'The minimal multicut has capacity {0}'.format(multicut.obj_value()) - - cut=[e for e in G.edges() if y[e].value[0]==1] - - print 'The edges forming the cut are: ' - print cut - -.. testoutput:: - :options: +NORMALIZE_WHITESPACE - - --------------------- - optimization problem (MIP): - 180 variables, 495 affine constraints - - y : dict of 60 variables, (1, 1), binary - p : dict of 6 variables, (20, 1), continuous - - minimize Σ_{e in edges} c[e]*y[e] - such that - y[(i, j)] > p[s][i] -p[s][j] for all (i,j,s) in edges x sources - p[s][s] = 1.0 for all s in sources - p[s][t] = 0 for all (s,t) in pairs - p[s] > |0| for all s in sources - --------------------- - The minimal multicut has capacity 49.0 - The edges forming the cut are: - [(1, 0), (1, 4), (2, 16), - (2, 8), (3, 4), (5, 11), - (7, 8), (9, 8), (10, 11), - (13, 16), (13, 12), - (13, 14), (17, 16)] - -Let us now draw the multicut: - -.. testcode:: - - import pylab - - fig=pylab.figure(figsize=(11,8)) - - #pairs of dark and light colors - colors=[('Yellow','#FFFFE0'), - ('#888888','#DDDDDD'), - ('Dodgerblue','Aqua'), - ('DarkGreen','GreenYellow'), - ('DarkViolet','Violet'), - ('SaddleBrown','Peru'), - ('Red','Tomato'), - ('DarkGoldenRod','Gold'), - ] - - node_colors=['w']*N - for i,s in enumerate(sources): - node_colors[s]=colors[i][0] - for t in [t for (s0,t) in pairs if s0==s]: - node_colors[t]=colors[i][1] - - pos=nx.spring_layout(G) - nx.draw_networkx(G,pos, - edgelist=[e for e in G.edges() if e not in cut], - node_color=node_colors) - - nx.draw_networkx_edges(G,pos, - edgelist=cut, - edge_color='r') - - #hide axis - fig.gca().axes.get_xaxis().set_ticks([]) - fig.gca().axes.get_yaxis().set_ticks([]) - - pylab.show() - -.. plot:: pyplots/multicut.py - -On this graph, the pairs of terminal nodes are denoted by -dark and light colors of the same shade (e.g. dark vs. light green -for the pairs (3,4),(3,9), and (3,18)), and the edges defining the -cut are marked in red. - -Maxcut relaxation (SDP) -======================= - -The goal of the **maxcut** problem is to find -a partition (S,T) of the nodes of an *undirected* graph G(V,E), -such that the capacity of the cut, -:math:`\mathrm{capacity}(S,T)=\sum_{\{i,j\} \in E \cap (S \Delta T)} c((i,j)),` -is maximized. - -Goemans and Williamson have designed a famous 0.878-approximation -algorithm :ref:`[3] ` for this NP-hard problem based on semidefinite programming. -The idea is to introduce a variable :math:`x \in \{-1,1\}^V` where -:math:`x(n)` takes the value +1 or -1 depending on wheter :math:`n \in S` -or :math:`n \in T`. Then, it can be seen that the value of the cut -is equal to :math:`\frac{1}{4} x^T L x`, where :math:`L` is the Laplacian -of the graph. If we define the matrix :math:`X=xx^T`, which is positive -semidefinite of rank 1, we obtain an SDP by relaxing the -rank-one constraint on :math:`X` : - -.. math:: - :nowrap: - - \begin{center} - \begin{eqnarray*} - &\underset{X \in \mathbb{S}_{|V|}} - {\mbox{maximize}} - & \frac{1}{4} \langle L, X \rangle \\ - &\mbox{subject to} & \mbox{diag}(X) = \mathbf{1}\\ - & & X \succeq 0 - \end{eqnarray*} - \end{center} - -Then, Goemans and Williamson have shown that if we project the solution :math:`X` -onto a random hyperplan, we obtain a cut whose expected capacity is at least -0.878 times the optimum. Below is a simple implementation of their algorithm: - -.. testcode:: - - import cvxopt as cvx - import cvxopt.lapack - import numpy as np - - #make G undirected - G=nx.Graph(G) - - #allocate weights to the edges - for (i,j) in G.edges(): - G[i][j]['weight']=c[i,j]+c[j,i] - - - maxcut = pic.Problem() - X=maxcut.add_variable('X',(N,N),'symmetric') - - #Laplacian of the graph - L=pic.new_param('L',1/4.*nx.laplacian(G)) - - #ones on the diagonal - maxcut.add_constraint(pic.tools.diag_vect(X)==1) - #X positive semidefinite - maxcut.add_constraint(X>>0) - - #objective - maxcut.set_objective('max',L|X) - - print maxcut - maxcut.solve(verbose = 0) - - print 'bound from the SDP relaxation: {0}'.format(maxcut.obj_value()) - - #---------------------------# - #RANDOM PROJECTION ALGORITHM# - #---------------------------# - - #Cholesky factorization - V=X.value - - cvxopt.lapack.potrf(V) - for i in range(N): - for j in range(i+1,N): - V[i,j]=0 - - #random projection algorithm - #Repeat 100 times or until we are within a factor .878 of the SDP optimal value - count=0 - obj_sdp=maxcut.obj_value() - obj=0 - while (count <100 or obj<.878*obj_sdp): - r=cvx.normal(20,1) - x=cvx.matrix(np.sign(V*r)) - o=(x.T*L*x).value[0] - if o>obj: - x_cut=x - obj=o - count+=1 - - print 'value of the cut: {0}'.format(obj) - S1=[n for n in range(N) if x[n]<0] - S2=[n for n in range(N) if x[n]>0] - cut = [(i,j) for (i,j) in G.edges() if x[i]*x[j]<0] - - #we comment this because the output in unpredicatable for doctest: - #print 'partition of the nodes:' - #print 'S1: {0}'.format(S1) - #print 'S2: {0}'.format(S2) - -.. testoutput:: - :options: +NORMALIZE_WHITESPACE, +ELLIPSIS - - --------------------- - optimization problem (SDP): - 210 variables, 20 affine constraints, 210 vars in 1 SD cones - - X : (20, 20), symmetric - - maximize 〈 L | X 〉 - such that - diag(X) = |1| - X ≽ |0| - --------------------- - bound from the SDP relaxation: 478.2074... - value of the cut: 471.0 - -Let us now draw this cut: - -.. testcode:: - - #display the cut - import pylab - - fig=pylab.figure(figsize=(11,8)) - - pos=nx.spring_layout(G) - - node_colors=[('g' if n in S1 else 'b') for n in range(N)] - - nx.draw_networkx(G,pos, - edgelist=[e for e in G.edges() if e not in cut], - node_color=node_colors) - - nx.draw_networkx_edges(G,pos, - edgelist=cut, - edge_color='r') - - #hide axis - fig.gca().axes.get_xaxis().set_ticks([]) - fig.gca().axes.get_yaxis().set_ticks([]) - - pylab.show() - -.. plot:: pyplots/maxcut.py - -On this graph, the red edges are those defining the cut, and the nodes -are blue or green depending on the partition they belong to. - -.. _graph_refs: - -References -========== - - 1. "Maximal Flow through a Network", LR Ford Jr and DR Fulkerson, - *Canadian journal of mathematics*, 1956. - - 2. "Analysis of LP relaxations for multiway and multicut problems", - D.Bertsimas, C.P. Teo and R. Vohra, - *Networks*, 34(2), p. *102-114*, 1999. - - 3. "Improved approximation algorithms for maximum cut and satisfiability problems using semidefinite programming", - M.X. Goemans and D.P. Williamson, - *Journal of the ACM*, 42(6), p. *1115-1145*, 1995. diff --git a/doc/full_html/0.1.2/_sources/index.txt b/doc/full_html/0.1.2/_sources/index.txt deleted file mode 100644 index 5ae96cd3cc75d6490bec22008507f955945e89b2..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/_sources/index.txt +++ /dev/null @@ -1,51 +0,0 @@ -.. picos documentation master file, created by - sphinx-quickstart on Thu Mar 1 10:03:01 2012. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -.. |br| raw:: html - -
- -PICOS: A Python Interface for Conic Optimization Solvers -======================================================== - -.. _contents: - -**News** - - * 08 Dec. 12: **Picos** :ref:`0.1.1 ` **Released** |br| - Major changes: - * Picos now interfaces GUROBI ! - * You can specify an initial solution to *warm-start* mixed integer optimizers. - * Minor bugs with quadratic expressions corrected - * It's possible to return a reference to a constraint added - with add_constraint() - - -**PICOS Documentation contents** - -Welcome to the documentation of PICOS. -The latest version can be downloaded :ref:`here `, -and can be installed by following :ref:`these instructions `. -This documentation contains a :ref:`tutorial ` and some :ref:`examples `, -which should already be enough for a quick start with PICOS. To go deeper, -have a look at the :ref:`picos reference `, which provides information -on every function of PICOS. - -.. toctree:: - :maxdepth: 2 - - intro - tuto - examples - api - download - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` - diff --git a/doc/full_html/0.1.2/_sources/intro.txt b/doc/full_html/0.1.2/_sources/intro.txt deleted file mode 100644 index 8366e6ffce3d3ba87b15b8a0f3e0f6ee7449a4db..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/_sources/intro.txt +++ /dev/null @@ -1,346 +0,0 @@ -.. _intro: - -************ -Introduction -************ - -PICOS is a user friendly interface -to several conic and integer programming solvers, -very much like `YALMIP `_ under -`MATLAB `_. - -The main motivation for PICOS is to have the possibility to -enter an optimization problem as a *high level model*, -and to be able to solve it with several *different solvers*. -Multidimensional and matrix variables are handled in a natural fashion, -which makes it painless to formulate a SDP or a SOCP. -This is very useful for educational purposes, -and to quickly implement some models and -test their validity on simple examples. - -Furthermore, with PICOS you can take advantage of the -python programming language to read and write data, -construct a list of constraints by using python list comprehensions, -take slices of multidimensional variables, etc. - -It must also be said that PICOS is only a unified interface to other -already existing interfaces of optimization solvers. So you have -to install some additional packages each time you want to use PICOS with a new solver -(see :ref:`a list of supported solvers `, and the :ref:`packages you will -have to install ` to use them). Furthermore, since PICOS is just another -interface layer, one should expect an overhead due to PICOS in the solution time. - -Here is a very simple example of the usage of PICOS: - ->>> import picos as pic ->>> prob = pic.Problem() ->>> x = prob.add_variable('x',1, vtype='integer') #scalar integer variable ->>> prob.add_constraint(x<5.2) #x less or equal to 5.2 ->>> prob.set_objective('max',x) #maximize x ->>> print prob #doctest: +NORMALIZE_WHITESPACE ---------------------- -optimization problem (MIP): -1 variables, 1 affine constraints -x : (1, 1), integer - maximize x -such that - x < 5.2 ---------------------- ->>> sol = prob.solve(solver='zibopt',verbose=0) #solve using the ZIB optimization suite ->>> print x #optimal value of x #doctest: +NORMALIZE_WHITESPACE -5.0 - - -Currently, PICOS can handle the following class of -optimzation problems. A list of currently -interfaced solvers can be found :ref:`here `. - - * Linear Programming (**LP**) - * Mixed Integer Programming (**MIP**) - * Convex Quadratically constrained Quadratic Programming (**convex QCQP**) - * Second Order Cone Programming (**SOCP**) - * Semidefinite Programming (**SDP**) - * General Quadratically constrained Quadratic Programming (**QCQP**) - * Mixed Integer Quadratic Programming (**MIQP**) - - -There exists a number of similar projects, so we provide a (non-exhausive) list -below, explaining their main differences with PICOS: - - * `CVXPY `_: - - This is a python interface - that can be used to solve any convex optimization - problem. However, CVXPY interfaces only the open - source solver `cvxopt `_ for disciplined convex programming (**DCP**) - - * `Numberjack `_: - - This python package also provides an interface to the integer programming solver `scip `_, - as well as satisfiability (**SAT**) and constraint programming solvers (**CP**). - - * `OpenOpt `_: - - This is probably the most complete - optimization suite written in python, handling a lot of problem types - and interfacing many opensource and commercial solvers. However, - the user has to transform every optimization problem into - a canonical form himself, and this is what we want to avoid with PICOS. - - * `puLP `_: - - A user-friendly interface to a bunch of **LP** and **MIP** solvers. - - * `PYOMO `_: - - A modelling language for optimization problems, *a la* AMPL. - - * `pyOpt `_: - - A user-friendly package to formulate and solve general nonlinear constrained - optimization problems. Several open-source and commercial solvers are interfaced. - - * `python-zibopt `_: - - This is a user-friendly interface to the `ZIB optimization suite `_ - for solving mixed integer programs (**MIP**). PICOS - provides an interface to this interface. - - - - -First Example -============= - -We give below a simple example of the use of PICOS, to solve -an SOCP which arises in *optimal experimental design*. -More examples can be found :ref:`here `. -Given some observation matrices :math:`A_1,\ldots,A_s`, -with :math:`A_i \in \mathbb{R}^{m \times l_i}`, -and a coefficient matrix :math:`K \in \mathbb{R}^{m \times r}`, -the problem to solve is: - -.. math:: - :nowrap: - - \begin{center} - \begin{eqnarray*} - &\underset{\substack{\mu \in \mathbb{R}^s\\ - \forall i \in [s],\ Z_i \in \mathbb{R}^{l_i \times r}}}{\mbox{minimize}} - & \sum_{i=1}^s \mu_i\\ - &\mbox{subject to} & \sum_{i=1}^s A_i Z_i = K\\ - & & \forall i \in [s],\ \Vert Z_i \Vert_F \leq \mu_i, - \end{eqnarray*} - \end{center} - -where :math:`\Vert M \Vert_F := \sqrt{\mbox{trace} M M^T}` denotes the -Frobenius norm of -:math:`M`. This problem can be entered and solved as follows with PICOS: - -.. testcode:: - - import picos as pic - import cvxopt as cvx - - #generate data - A = [ cvx.sparse([[1 ,2 ,0 ], - [2 ,0 ,0 ]]), - cvx.sparse([[0 ,2 ,2 ]]), - cvx.sparse([[0 ,2 ,-1], - [-1,0 ,2 ], - [0 ,1 ,0 ]]) - ] - K = cvx.sparse([[1 ,1 ,1 ], - [1 ,-5,-5]]) - - #size of the data - s = len(A) - m = A[0].size[0] - l = [ Ai.size[1] for Ai in A ] - r = K.size[1] - - #creates a problem and the optimization variables - prob = pic.Problem() - mu = prob.add_variable('mu',s) - Z = [prob.add_variable('Z[' + str(i) + ']', (l[i],r)) - for i in range(s)] - - #convert the constants into params of the problem - A = pic.new_param('A',A) - K = pic.new_param('K',K) - - #add the constraints - prob.add_constraint( pic.sum([ A[i]*Z[i] for i in range(s)], #summands - 'i', #name of the index - '[s]' #set to which the index belongs - ) == K - ) - prob.add_list_of_constraints( [ abs(Z[i]) < mu[i] for i in range(s)], #constraints - 'i', #index of the constraints - '[s]' #set to which the index belongs - ) - - #sets the objective - prob.set_objective('min', 1 | mu ) # scalar product of the vector of all ones with mu - - #display the problem - print prob - - #call to the solver cvxopt - sol = prob.solve(solver='cvxopt', verbose = 0) - - #show the value of the optimal variable - print '\n mu =' - print mu - - #show the dual variable of the equality constraint - print'\nThe optimal dual variable of the' - print prob.get_constraint(0) - print 'is :' - print prob.get_constraint(0).dual - -This generates the output: - -.. testoutput:: - :options: +NORMALIZE_WHITESPACE - - --------------------- - optimization problem (SOCP): - 15 variables, 6 affine constraints, 15 vars in 3 SO cones - - mu : (3, 1), continuous - Z : list of 3 variables, different sizes, continuous - - minimize 〈 |1| | mu 〉 - such that - Σ_{i in [s]} A[i]*Z[i] = K - ||Z[i]|| < mu[i] for all i in [s] - --------------------- - - mu = - [ 6.60e-01] - [ 2.42e+00] - [ 1.64e-01] - - - The optimal dual variable of the - # (3x2)-affine constraint : Σ_{i in [s]} A[i]*Z[i] = K # - is : - [-3.41e-01] - [ 9.16e-02] - [-1.88e-01] - [-3.52e-01] - [ 2.32e-01] - [ 2.59e-01] - - - - -.. _solvers: - -Solvers -======= - -Below is a list of the solvers currently interfaced by PICOS. -We have indicated the classes of optimization problems that -the solver can handle via PICOS. Note however -that the solvers listed below might have other -features that are *not handled by PICOS*. - - * `cvxopt `_ (LP, SOCP, SDP, GP) - * `smcp `_ (LP, SOCP, SDP) - * `mosek `_ (LP, MIP, (MI)SOCP, convex QCQP, MIQP) - * `cplex `_ (LP, MIP, (MI)SOCP, convex QCQP, MIQP) - * `gurobi `_ (LP, MIP, (MI)SOCP, convex QCQP, MIQP) - * `zibopt `_ (`soplex `_ + - `scip `_ : LP, MIP, MIQP, general QCQP). - - -To use one of these solver, make sure that the python interface to this solver is correctly -installed and linked in your ``PYTHONPATH`` variable. The sites of the solvers -give instructions to do this, except for *zibopt*, for which you must install -a separate interface: `python-zibopt `_. -To check your installation, you can simply verify that -``import cvxopt`` (resp. ``smcp``, ``mosek``, ``cplex``, ``zibopt``, ``gurobipy``) does -not raise an ``ImportError``. The command - ->>> import picos;picos.tools.available_solvers() #doctest: +SKIP - -returns the list of correctly installed solvers. - - - -.. _requirements: - -Requirements -============ - -PICOS has two dependencies: `numpy `_ -and -`cvxopt `_. (cvxopt is needed even if you -do not use the cvxopt solvers, because picos relies on the -:func:`sparse matrices ` defined in cvxopt.) - -In addition, you must install separately the python interfaces to each :ref:`solver ` -you want to use. - -Installation -============ - -After having :ref:`downloaded ` the latest version of picos, -and extracted it in the directory of your choice, -you can install it by typing the following line as root in a terminal: - -.. code-block:: guess - - $ python setup.py install - -If you do not have administrator rights, you can also do a local -installation of picos with the *prefix scheme*. For example: - -.. code-block:: guess - - $ python setup.py install --prefix ~/python - -and make sure that ``$HOME'/python/lib/python2.x/site-packages/'`` -is in your ``PYTHONPATH`` variable. - -To test your installation, you can run the test file: - -.. code-block:: guess - - $ python picos/test_picos.py - -This will generate a table with a list of results -for each available solver and class of optimization problems. - -License -======= - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - -Author and contributors -======================= - - * Author: Picos initial author and current primary developer is: - - `Guillaume Sagnol `_, - - * Contributors: People who contributed to Picos and their contributions - (in no particular order) are: - - * Bertrand Omont - - * `Elmar Swarat `_ - diff --git a/doc/full_html/0.1.2/_sources/optdes.txt b/doc/full_html/0.1.2/_sources/optdes.txt deleted file mode 100644 index 8d5eb97d38ea091ee82c3e6ff4fad40e05981d84..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/_sources/optdes.txt +++ /dev/null @@ -1,1054 +0,0 @@ -.. _optdes: - -***************************************** -Examples from Optimal Experimental Design -***************************************** - -Optimal experimental design is a theory -at the interface of statistics and optimization, -which studies how to allocate some experimental -effort within a set of available expeiments. -The goal is to allow for the best possible -estimation of an unknown parameter :math:`\theta`. -In what follows, we assume the standard linear model with -multiresponse experiments: the :math:`i^{\textrm{th}}` -experiment gives a multidimensional observation that -can be written as :math:`y_i = A_i^T \theta+\epsilon_i`, -where :math:`y_i` is of dimension :math:`l_i`, -:math:`A_i` is a :math:`m \times l_i-` matrix, -and the noise vectors :math:`\epsilon_i` are i.i.d. with a unit variance. - -Several optimization criterions exist, leading to different SDP, SOCP and LP -formulations. -As such, optimal experimental design problens are natural examples for problems -in conic optimization. For a review of the different formulations -and more references, see :ref:`[1] `. - -The code below initializes the data used in all the examples of this page. -It should be run prior to any of the codes presented in this page. - -.. testcode:: - - import cvxopt as cvx - import picos as pic - - #---------------------------------# - # First generate some data : # - # _ a list of 8 matrices A # - # _ a vector c # - #---------------------------------# - A=[ cvx.matrix([[1,0,0,0,0], - [0,3,0,0,0], - [0,0,1,0,0]]), - cvx.matrix([[0,0,2,0,0], - [0,1,0,0,0], - [0,0,0,1,0]]), - cvx.matrix([[0,0,0,2,0], - [4,0,0,0,0], - [0,0,1,0,0]]), - cvx.matrix([[1,0,0,0,0], - [0,0,2,0,0], - [0,0,0,0,4]]), - cvx.matrix([[1,0,2,0,0], - [0,3,0,1,2], - [0,0,1,2,0]]), - cvx.matrix([[0,1,1,1,0], - [0,3,0,1,0], - [0,0,2,2,0]]), - cvx.matrix([[1,2,0,0,0], - [0,3,3,0,5], - [1,0,0,2,0]]), - cvx.matrix([[1,0,3,0,1], - [0,3,2,0,0], - [1,0,0,2,0]]) - ] - - c = cvx.matrix([1,2,3,4,5]) - -c-optimality, multi-response: SOCP -================================== - -We compute the c-optimal design (``c=[1,2,3,4,5]``) -for the observation matrices ``A[i].T`` from the variable ``A`` defined above. -The results below suggest that we should allocate 12.8% of the -experimental effort on experiment #5, and 87.2% on experiment #7. - -Primal Problem -'''''''''''''' - -The SOCP for multiresponse c-optimal design is: - -.. math:: - :nowrap: - - \begin{center} - \begin{eqnarray*} - &\underset{\substack{\mu \in \mathbb{R}^s\\ - \forall i \in [s],\ z_i \in \mathbb{R}^{l_i}}}{\mbox{minimize}} - & \sum_{i=1}^s \mu_i\\ - &\mbox{subject to} & \sum_{i=1}^s A_i z_i = c\\ - & & \forall i \in [s],\ \Vert z_i \Vert_2 \leq \mu_i, - \end{eqnarray*} - \end{center} - - -.. testcode:: - - #create the problem, variables and params - prob_primal_c=pic.Problem() - AA=[cvx.sparse(a,tc='d') for a in A] #each AA[i].T is a 3 x 5 observation matrix - s=len(AA) - AA=pic.new_param('A',AA) - cc=pic.new_param('c',c) - z=[prob_primal_c.add_variable('z['+str(i)+']',AA[i].size[1]) for i in range(s)] - mu=prob_primal_c.add_variable('mu',s) - - #define the constraints and objective function - prob_primal_c.add_list_of_constraints( - [abs(z[i])> cc*cc.T ) - prob_SDP_c_primal.add_constraint(mu>0) - prob_SDP_c_primal.set_objective('min',1|mu) - - #solve the problem and retrieve the weights of the optimal design - print prob_SDP_c_primal - prob_SDP_c_primal.solve(verbose=0) - w=mu.value - w=w/sum(w) #normalize mu to get the optimal weights - print - print 'The optimal deign is:' - print w - -.. testoutput:: - :options: +NORMALIZE_WHITESPACE, +ELLIPSIS - - --------------------- - optimization problem (SDP): - 8 variables, 8 affine constraints, 15 vars in 1 SD cones - - mu : (8, 1), continuous - - minimize 〈 |1| | mu 〉 - such that - Σ_{i in [s]} mu[i]*A[i]*A[i].T ≽ c*c.T - mu > |0| - --------------------- - - The optimal deign is: - [...] - [...] - [...] - [...] - [ 1.28e-01] - [...] - [ 8.72e-01] - [...] - -Dual Problem -'''''''''''' - -This is only to check that we obtain the same solution with the dual problem, -and to provide one additional example in this doc: - -.. math:: - :nowrap: - - \begin{center} - \begin{eqnarray*} - &\underset{X \in \mathbb{R}^{m \times m}}{\mbox{maximize}} - & c^T X c\\ - &\mbox{subject to} & \forall i \in [s],\ \langle A_i A_i^T,\ X \rangle \leq 1,\\ - & & X \succeq 0. - \end{eqnarray*} - \end{center} - - -.. testcode:: - - #create the problem, variables and params - prob_SDP_c_dual=pic.Problem() - AA=[cvx.sparse(a,tc='d') for a in A] #each AA[i].T is a 3 x 5 observation matrix - s=len(AA) - AA=pic.new_param('A',AA) - cc=pic.new_param('c',c) - m =c.size[0] - X=prob_SDP_c_dual.add_variable('X',(m,m),vtype='symmetric') - - #define the constraints and objective function - prob_SDP_c_dual.add_list_of_constraints( - [(AA[i]*AA[i].T | X ) <1 for i in range(s)], #constraints - 'i', #index - '[s]' #set to which the index belongs - ) - prob_SDP_c_dual.add_constraint(X>>0) - prob_SDP_c_dual.set_objective('max', cc.T*X*cc) - - #solve the problem and retrieve the weights of the optimal design - print prob_SDP_c_dual - prob_SDP_c_dual.solve(verbose=0,solver='smcp') - mu = [cons.dual[0] for cons in prob_SDP_c_dual.get_constraint((0,))] #Lagrangian duals of the SOC constraints - mu = cvx.matrix(mu) - w=mu/sum(mu) #normalize mu to get the optimal weights - print - print 'The optimal deign is:' - print w - print 'and the optimal positive semidefinite matrix X is' - print X - - -.. testoutput:: - :options: +NORMALIZE_WHITESPACE, +ELLIPSIS - - --------------------- - optimization problem (SDP): - 15 variables, 8 affine constraints, 15 vars in 1 SD cones - - X : (5, 5), symmetric - - maximize c.T*X*c - such that - 〈 A[i]*A[i].T | X 〉 < 1.0 for all i in [s] - X ≽ |0| - --------------------- - - The optimal deign is: - [...] - [...] - [...] - [...] - [ 1.28e-01] - [...] - [ 8.72e-01] - [...] - - and the optimal positive semidefinite matrix X is - [ 5.92e-03 8.98e-03 2.82e-03 -3.48e-02 -1.43e-02] - [ 8.98e-03 1.36e-02 4.27e-03 -5.28e-02 -2.17e-02] - [ 2.82e-03 4.27e-03 1.34e-03 -1.66e-02 -6.79e-03] - [-3.48e-02 -5.28e-02 -1.66e-02 2.05e-01 8.39e-02] - [-1.43e-02 -2.17e-02 -6.79e-03 8.39e-02 3.44e-02] - -A-optimality: SOCP -================== - -We compute the A-optimal design -for the observation matrices ``A[i].T`` defined in the preambule. -The optimal design allocates -24.9% on experiment #3, -14.2% on experiment #4, -8.51% on experiment #5, -12.1% on experiment #6, -13.2% on experiment #7, -and 27.0% on experiment #8. - - [ 2.49e-01] - [ 1.42e-01] - [ 8.51e-02] - [ 1.21e-01] - [ 1.32e-01] - [ 2.70e-01] - -Primal Problem -'''''''''''''' - -The SOCP for the A-optimal design problem is: - -.. math:: - :nowrap: - - \begin{center} - \begin{eqnarray*} - &\underset{\substack{\mu \in \mathbb{R}^s\\ - \forall i \in [s],\ Z_i \in \mathbb{R}^{l_i \times m}}}{\mbox{minimize}} - & \sum_{i=1}^s \mu_i\\ - &\mbox{subject to} & \sum_{i=1}^s A_i Z_i = I\\ - & & \forall i \in [s],\ \Vert Z_i \Vert_F \leq \mu_i, - \end{eqnarray*} - \end{center} - - -.. testcode:: - - #create the problem, variables and params - prob_primal_A=pic.Problem() - AA=[cvx.sparse(a,tc='d') for a in A] #each AA[i].T is a 3 x 5 observation matrix - s=len(AA) - AA=pic.new_param('A',AA) - Z=[prob_primal_A.add_variable('Z['+str(i)+']',AA[i].T.size) for i in range(s)] - mu=prob_primal_A.add_variable('mu',s) - - #define the constraints and objective function - prob_primal_A.add_list_of_constraints( - [abs(Z[i])`, in which integer constraints may be added. -This allows us to formulate the exact D-optimal problem as a MISOCP. -For :math:`N=20`, -we obtain the following N-exact D-optimal design: -:math:`\mathbf{n}=[0,0,5,1,0,1,6,7]`: - -.. testcode:: - - #create the problem, variables and params - prob_exact_D = pic.Problem() - L=prob_exact_D.add_variable('L',(m,m)) - V=[prob_exact_D.add_variable('V['+str(i)+']',AA[i].T.size) for i in range(s)] - T=prob_exact_D.add_variable('T',(s,m)) - n=prob_exact_D.add_variable('n',s,'integer') - N = pic.new_param('N',20) - #additional variables to handle the product of the diagonal elements of L - u={} - for k in ['01','23','4.','0123','4...','01234']: - u[k] = prob_exact_D.add_variable('u['+k+']',1) - - - #define the constraints and objective function - prob_exact_D.add_constraint( - pic.sum([AA[i]*V[i] - for i in range(s)],'i','[s]') - == L) - #L is lower triangular - prob_exact_D.add_list_of_constraints( [L[i,j] == 0 - for i in range(m) - for j in range(i+1,m)],['i','j'],'upper triangle') - - prob_exact_D.add_list_of_constraints([abs(V[i][:,k])**2`_", G. Sagnol, - *Journal of Statistical Planning and Inference*, - 141(5), p. *1684-1708*, 2011. - - 2. "`SOC-representability of the D-criterion of optimal experimental design`", - R. Harman and G. Sagnol, Draft. \ No newline at end of file diff --git a/doc/full_html/0.1.2/_sources/problem.txt b/doc/full_html/0.1.2/_sources/problem.txt deleted file mode 100644 index f40e9f25795b05473012077ada3bb30d39d6a194..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/_sources/problem.txt +++ /dev/null @@ -1,8 +0,0 @@ -.. _problem: - -======= -Problem -======= - -.. autoclass:: picos.Problem - :members: \ No newline at end of file diff --git a/doc/full_html/0.1.2/_sources/tools.txt b/doc/full_html/0.1.2/_sources/tools.txt deleted file mode 100644 index 21b160c98a53dc1f4e16a2b0852dd18efe3af0d5..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/_sources/tools.txt +++ /dev/null @@ -1,8 +0,0 @@ -.. _tools: - -=========== -picos.tools -=========== - -.. automodule:: picos.tools - :members: available_solvers, diag, diag_vect, eval_dict, lse, new_param, sum, _retrieve_matrix \ No newline at end of file diff --git a/doc/full_html/0.1.2/_sources/tuto.txt b/doc/full_html/0.1.2/_sources/tuto.txt deleted file mode 100644 index 4be8ea031675726ccfdba325ff7c8852f41e6843..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/_sources/tuto.txt +++ /dev/null @@ -1,922 +0,0 @@ -.. _tuto: - -******** -Tutorial -******** - -First of all, let us import the PICOS module and cvxopt - - >>> import picos as pic - >>> import cvxopt as cvx - -We now generate some arbitrary data, that we will use in this tutorial. - - >>> pairs = [(0,2), (1,4), (1,3), (3,2), (0,4),(2,4)] #a list of pairs - >>> A = [] - >>> b = ( [0 ,2 ,0 ,3 ], #a tuple of 5 lists, each of length 4 - ... [1 ,1 ,0 ,5 ], - ... [-1,0 ,2 ,4 ], - ... [0 ,0 ,-2,-1], - ... [1 ,1 ,0 ,0 ] - ... ) - >>> for i in range(5): - ... A.append(cvx.matrix(range(i-3,i+5),(2,4))) #A is a list of 2x4 matrices - >>> D={'Peter': 12, - ... 'Bob' : 4, - ... 'Betty': 7, - ... 'Elisa': 14 - ... } - -Let us now create an instance P of an optimization problem - - >>> prob = pic.Problem() #create a Problem instance - -========= -Variables -========= - - -We will now create the variables of our optimization problem. This is done -by calling the method :func:`add_variable() `. -This function adds an instance of the class :class:`Variable ` -in the dictionary ``prob.variables``, and returns a reference -to the freshly added variable. -As we will next see, we -can use -this :class:`Variable ` -to form affine and quadratic expressions. - - >>> t = prob.add_variable('t',1) #a scalar - >>> x = prob.add_variable('x',4) #a column vector - >>> Y = prob.add_variable('Y',(2,4)) #a matrix - >>> Z = [] - >>> for i in range(5): - ... Z.append( prob.add_variable('Z[{0}]'.format(i),(4,2)) )# a list of 5 matrices - >>> w={} - >>> for p in pairs: #a dictionary of (scalar) binary variables, indexed by our pairs - ... w[p] = prob.add_variable('w[{0}]'.format(p),1 , vtype='binary') - -Now, if we try to display a variable, here is what we get: - - >>> w[2,4] - # variable w[(2, 4)]:(1 x 1),binary # - >>> Y - # variable Y:(2 x 4),continuous # - -Also note the use of the -attributes :attr:`name `, :attr:`value `, -:attr:`size `, and :attr:`vtype `: - - >>> w[2,4].vtype - 'binary' - >>> x.vtype - 'continuous' - >>> x.vtype='integer' - >>> x - # variable x:(4 x 1),integer # - >>> x.size - (4, 1) - >>> Z[1].value = A[0].T - >>> Z[0].is_valued() - False - >>> Z[1].is_valued() - True - >>> Z[2].name - 'Z[2]' - -================== -Affine Expressions -================== - -We will now use our variables to create some affine expressions, -which are stored as instance of the class :class:`AffinExp `, -and will be the -core to define an optimization problem. Most python operators have been overloaded -to work with instances of :class:`AffinExp ` -(a list of available overloaded operators can be found in the -doc of :class:`AffinExp `). For example, -you can form the sum of two variables by writing: - - >>> Z[0]+Z[3] - # (4 x 2)-affine expression: Z[0] + Z[3] # - -The transposition of an affine expression is done by appending ``.T``: - - >>> x - # variable x:(4 x 1),integer # - >>> x.T - # (1 x 4)-affine expression: x.T # - -Parameters as constant affine expressions ------------------------------------------ - -It is also possible to form affine expressions by using parameters -stored in data structures such as a ``list`` or a :func:`cvxopt matrix ` -(In fact, any type that is recognizable by the function :func:`_retrieve_matrix() `). - - >>> x + b[0] - # (4 x 1)-affine expression: x + [ 4 x 1 MAT ] # - >>> x.T + b[0] - # (1 x 4)-affine expression: x.T + [ 1 x 4 MAT ] # - >>> A[0] * Z[0] + A[4] * Z[4] - # (2 x 2)-affine expression: [ 2 x 4 MAT ]*Z[0] + [ 2 x 4 MAT ]*Z[4] # - -In the above example, you see that the list ``b[0]`` was correctly converted into -a :math:`4 \times 1` vector in the first expression, and into -a :math:`1 \times 4` vector in the second one. This is because the overloaded -operators always try to convert the data into matrices of the appropriate size. - -If you want to have better-looking string representations of your affine expressions, -you will need to convert the parameters into constant affine expressions. This can be done -thanks to the function :func:`new_param() `: - - >>> A = pic.new_param('A',A) #this creates a list of constant affine expressions [A[0],...,A[4]] - >>> b = pic.new_param('b',b) #this creates a list of constant affine expressions [b[0],...,b[4]] - >>> D = pic.new_param('D',D) #this creates a dictionary of constant AffExpr, indexed by 'Peter', 'Bob', ... - >>> alpha = pic.new_param('alpha',12) #a scalar parameter - - >>> alpha - # (1 x 1)-affine expression: alpha # - >>> D['Betty'] - # (1 x 1)-affine expression: D[Betty] # - >>> b #doctest: +NORMALIZE_WHITESPACE - [# (4 x 1)-affine expression: b[0] #, - # (4 x 1)-affine expression: b[1] #, - # (4 x 1)-affine expression: b[2] #, - # (4 x 1)-affine expression: b[3] #, - # (4 x 1)-affine expression: b[4] #] - >>> print b[0] - [ 0.00e+00] - [ 2.00e+00] - [ 0.00e+00] - [ 3.00e+00] - - -The above example also illustrates that when a *valued* affine expression ``exp`` is printed, -it is its value that is displayed. For a non-valued affine expression, **__repr__** -and **__str__** produce the same result, a string of the form ``'# (size)-affine expression: string-representation #'``. -Note that the constant affine expressions, as ``b[0]`` in the above example, -are always *valued*. -To assign a value to a non-constant :class:`AffinExp `, -you must set the :attr:`value ` property of -every variable involved in the affine expression. - - - >>> x_minus_1 = x - 1 - >>> x_minus_1 #note that 1 was recognized as the (4x1)-vector with all ones - # (4 x 1)-affine expression: x -|1| # - >>> print x_minus_1 - # (4 x 1)-affine expression: x -|1| # - >>> x_minus_1.is_valued() - False - >>> x.value = [0,1,2,-1] - >>> x_minus_1.is_valued() - True - >>> print x_minus_1 - [-1.00e+00] - [ 0.00e+00] - [ 1.00e+00] - [-2.00e+00] - - -We also point out that :func:`new_param() ` -converts lists into vectors and lists of lists into matrices (given -in row major order). -In contrast, tuples are converted into list of affine expressions: - - >>> pic.new_param('vect',[1,2,3]) # [1,2,3] is converted into a vector of dimension 3 - # (3 x 1)-affine expression: vect # - >>> pic.new_param('mat',[[1,2,3],[4,5,6]]) # [[1,2,3],[4,5,6]] is converted into a (2x3)-matrix - # (2 x 3)-affine expression: mat # - >>> pic.new_param('list_of_scalars',(1,2,3)) # (1,2,3) is converted into a list of 3 scalar parameters #doctest: +NORMALIZE_WHITESPACE - [# (1 x 1)-affine expression: list_of_scalars[0] #, - # (1 x 1)-affine expression: list_of_scalars[1] #, - # (1 x 1)-affine expression: list_of_scalars[2] #] - >>> pic.new_param('list_of_vectors',([1,2,3],[4,5,6])) # ([1,2,3],[4,5,6]) is converted into a list of 2 vector parameters #doctest: +NORMALIZE_WHITESPACE - [# (3 x 1)-affine expression: list_of_vectors[0] #, - # (3 x 1)-affine expression: list_of_vectors[1] #] - -Overloaded operators --------------------- - -OK, so now we have some variables (``t``, ``x``, ``w``, ``Y``, and ``Z``) -and some parameters (``A``, ``b``, ``D`` and ``alpha``). Let us create some -affine expressions with them. - - >>> A[0] * Z[0] #left multiplication - # (2 x 2)-affine expression: A[0]*Z[0] # - >>> Z[0] * A[0] #right multiplication - # (4 x 4)-affine expression: Z[0]*A[0] # - >>> A[1] * Z[0] * A[2] #left and right multiplication - # (2 x 4)-affine expression: A[1]*Z[0]*A[2] # - >>> alpha*Y #scalar multiplication - # (2 x 4)-affine expression: alpha*Y # - >>> t/b[1][3] - D['Bob'] #division by a scalar and substraction - # (1 x 1)-affine expression: t / b[1][3] -D[Bob] # - >>> ( b[2] | x ) #dot product - # (1 x 1)-affine expression: 〈 b[2] | x 〉 # - >>> ( A[3] | Y ) #generalized dot product for matrices: (A|B)=trace(A*B.T) - # (1 x 1)-affine expression: 〈 A[3] | Y 〉 # - -We can also take some subelements of affine expressions, by using -the standard syntax of python slices: - - >>> b[1][1:3] #2d and 3rd elements of b[1] - # (2 x 1)-affine expression: b[1][1:3] # - >>> Y[1,:] #2d row of Y - # (1 x 4)-affine expression: Y[1,:] # - >>> x[-1] #last element of x - # (1 x 1)-affine expression: x[-1] # - >>> A[2][:,1:3]*Y[:,-2::-2] #extended slicing with (negative) steps is allowed - # (2 x 2)-affine expression: A[2][:,1:3]*( Y[:,-2::-2] ) # - -In the last example, we keep only the second and third columns of ``A[2]``, and -the columns of ``Y`` with an even index, considered in the reverse order. -To concatenate affine expressions, the operators ``//`` and ``&`` have been -overloaded: - - >>> (b[1] & b[2] & x & A[0].T*A[0]*x) // x.T #vertical (//) and horizontal (&) concatenation - # (5 x 4)-affine expression: [b[1],b[2],x,A[0].T*A[0]*x;x.T] # - -When a scalar is added/substracted to a matrix or a vector, we interprete it -as an elementwise addition of the scalar to every element of the matrix or vector. - - >>> 5*x - alpha - # (4 x 1)-affine expression: 5*x + |-alpha| # - -.. Warning:: - Note that the string representation ``'|-alpha|'`` does not stand for the - absolute value of ``-alpha``, but for the vector whose all terms are ``-alpha``. - -Summing Affine Expressions --------------------------- - -You can take the advantage of python syntax to create sums of affine expressions: - - >>> sum([A[i]*Z[i] for i in range(5)]) - # (2 x 2)-affine expression: A[0]*Z[0] + A[1]*Z[1] + A[2]*Z[2] + A[3]*Z[3] + A[4]*Z[4] # - -This works, but you might have very long string representations if there are a lot -of summands. So you'd better use -the function :func:`picos.sum() `): - - >>> pic.sum([A[i]*Z[i] for i in range(5)],'i','[5]') - # (2 x 2)-affine expression: Σ_{i in [5]} A[i]*Z[i] # - -It is also possible to sum over several indices - - >>> pic.sum([A[i][1,j] + b[j].T*Z[i] for i in range(5) for j in range(4)],['i','j'],'[5]x[4]') - # (1 x 2)-affine expression: Σ_{i,j in [5]x[4]} |A[i][1,j]| + b[j].T*Z[i] # - -A more complicated example, given in two variants: in the first one, -``p`` is a tuple index representing a pair, while in the second case -we explicitely say that the pairs are of the form ``(p0,p1)``: - - >>> pic.sum([w[p]*b[p[1]-1][p[0]] for p in pairs],('p',2),'pairs') - # (1 x 1)-affine expression: Σ_{p in pairs} w[p]*b[p__1-1][p__0] # - >>> pic.sum([w[p0,p1]*b[p1-1][p0] for (p0,p1) in pairs],['p0','p1'],'pairs') - # (1 x 1)-affine expression: Σ_{p0,p1 in pairs} w[(p0, p1)]*b[p1-1][p0] # - -It is also possible to sum over string indices (*see the documentation of* :func:`sum() `): - - >>> pic.sum([D[name] for name in D],'name','people_list') - # (1 x 1)-affine expression: Σ_{name in people_list} D[name] # - - -Objective function ------------------- - -The objective function of the problem -can be defined with the function -:func:`set_objective() `. -Its first argument should be ``'max'``, ``'min'`` or -``'find'`` (*for feasibility problems*), -and the second argument should be a scalar expression: - - >>> prob.set_objective('max',( A[0] | Y )-t) - >>> print prob #doctest: +NORMALIZE_WHITESPACE - --------------------- - optimization problem (MIP): - 59 variables, 0 affine constraints - - w : dict of 6 variables, (1, 1), binary - Z : list of 5 variables, (4, 2), continuous - t : (1, 1), continuous - Y : (2, 4), continuous - x : (4, 1), integer - - maximize 〈 A[0] | Y 〉 -t - such that - [] - --------------------- - -With this example, you see what happens when a problem is printed: -the list of optimization variables is displayed, then the objective function -and finally a list of constraints (in the case above, there is no constraint). - -============================ -Norm of an affine Expression -============================ - -The norm of an affine expression is an overload of the ``abs()`` function. -If ``x`` is an affine expression, ``abs(x)`` is its Euclidean norm :math:`\sqrt{x^T x}`. - - >>> abs(x) - # norm of a (4 x 1)- expression: ||x|| # - -In the case where the affine expression is a matrix, ``abs()`` returns its -Frobenius norm, defined as :math:`\Vert M \Vert_F := \sqrt{\operatorname{trace} (M^T M)}`. - - >>> abs(Z[1]-2*A[0].T) - # norm of a (4 x 2)- expression: ||Z[1] -2*A[0].T|| # - -Note that the absolute value of a scalar expression is stored as a norm: - - >>> abs(t) - # norm of a (1 x 1)- expression: ||t|| # - -However, a scalar constraint of the form :math:`|a^T x + b| \leq c^T x + d` -is handled as two linear constraints by PICOS, and so a problem with the latter -constraint -can be solved even if you do not have a SOCP solver available. -Besides, note that the string representation of an absolute value uses the double bar notation. -(Recall that the single bar notation ``|t|`` is used to denote the vector -whose all values are ``t``). - - -===================== -Quadratic Expressions -===================== - -Quadratic expressions can be formed in several ways: - - >>> t**2 - x[1]*x[2] + 2*t - alpha #sum of linear and quadratic terms - #quadratic expression: t**2 -x[1]*x[2] + 2.0*t -alpha # - >>> (x[1]-2) * (t+4) #product of two affine expressions - #quadratic expression: ( x[1] -2.0 )*( t + 4.0 ) # - >>> Y[0,:]*x #Row vector multiplied by column vector - #quadratic expression: Y[0,:]*x # - >>> (x +2 | Z[1][:,1]) #scalar product of affine expressions - #quadratic expression: 〈 x + |2.0| | Z[1][:,1] 〉 # - >>> abs(x)**2 #recall that abs(x) is the euclidean norm of x - #quadratic expression: ||x||**2 # - >>> (t & alpha) * A[1] * x #quadratic form - #quadratic expression: [t,alpha]*A[1]*x # - -It is not possible (yet) to make a multidimensional quadratic expression. - -=========== -Constraints -=========== - -A constraint takes the form of two expressions separated by a relation operator. - -Linear (in)equalities ---------------------- - -Linear (in)equalities are understood elementwise. **The strict operators** -``<`` **and** ``>`` **denote weak inequalities** (*less or equal than* -and *larger or equal than*). For example: - - >>> (1|x) < 2 #sum of the x[i] less or equal than 2 - # (1x1)-affine constraint: 〈 |1| | x 〉 < 2.0 # - >>> Z[0] * A[0] > b[1]*b[2].T #A 4x4-elementwise inequality - # (4x4)-affine constraint: Z[0]*A[0] > b[1]*b[2].T # - >>> pic.sum([A[i]*Z[i] for i in range(5)],'i','[5]') == 0 #A 2x2 equality. The RHS is the all-zero matrix - # (2x2)-affine constraint: Σ_{i in [5]} A[i]*Z[i] = |0| # - -Constraints can be added in the problem with the function -:func:`add_constraint() `: - - >>> for i in range(1,5): - ... prob.add_constraint(Z[i]==Z[i-1]+Y.T) - >>> print prob #doctest: +NORMALIZE_WHITESPACE - --------------------- - optimization problem (MIP): - 59 variables, 32 affine constraints - - w : dict of 6 variables, (1, 1), binary - Z : list of 5 variables, (4, 2), continuous - t : (1, 1), continuous - Y : (2, 4), continuous - x : (4, 1), integer - - maximize 〈 A[0] | Y 〉 -t - such that - Z[1] = Z[0] + Y.T - Z[2] = Z[1] + Y.T - Z[3] = Z[2] + Y.T - Z[4] = Z[3] + Y.T - --------------------- - -The constraints of the problem can then be accessed with the function -:func:`get_constraint() `: - - >>> prob.get_constraint(2) #constraints are numbered from 0 - # (4x2)-affine constraint: Z[3] = Z[2] + Y.T # - -An alternative is to pass the constraint with the option ``ret = True``, -which has the effect to return a reference to the constraint you want to add. -In particular, this reference can be useful to access the optimal dual variable -of the constraint, once the problem will have been solved. - - >>> mycons = prob.add_constraint(Z[4]+Z[0] == Y.T, ret = True) - >>> print mycons - # (4x2)-affine constraint : Z[4] + Z[0] = Y.T # - -Groupping constraints ---------------------- - -In order to have a more compact string representation of the problem, -it is advised to use the function :func:`add_list_of_constraints() `, -which works similarly as the function :func:`sum() `. - - >>> prob.remove_all_constraints() #we first remove the 4 constraints precedently added - >>> prob.add_constraint(Y>0) #a single constraint - >>> prob.add_list_of_constraints([Z[i]==Z[i-1]+Y.T for i in range(1,5)],'i','1...4') #the same list of constraints as above - >>> print prob #doctest: +NORMALIZE_WHITESPACE - --------------------- - optimization problem (MIP): - 59 variables, 40 affine constraints - - w : dict of 6 variables, (1, 1), binary - Z : list of 5 variables, (4, 2), continuous - t : (1, 1), continuous - Y : (2, 4), continuous - x : (4, 1), integer - - maximize 〈 A[0] | Y 〉 -t - such that - Y > |0| - Z[i] = Z[i-1] + Y.T for all i in 1...4 - --------------------- - -Now, the constraint ``Z[3] = Z[2] + Y.T``, which has been entered -in 4th position, can either be accessed by ``prob.get_constraint(3)`` (``3`` because -constraints are numbered from ``0``), or by - - >>> prob.get_constraint((1,2)) - # (4x2)-affine constraint: Z[3] = Z[2] + Y.T # - -where ``(1,2)`` means *the 3rd constraint of the 2d group of constraints*, -with zero-based numbering. - -Similarly, the constraint ``Y > |0|`` can be accessed by -``prob.get_constraint(0)`` (first constraint), -``prob.get_constraint((0,0))`` (first constraint of the first group), or -``prob.get_constraint((0,))`` (unique constraint of the first group). - -Quadratic constraints ---------------------- - -Quadratic inequalities are entered in the following way: - - >>> t**2 > 2*t - alpha + x[1]*x[2] - #Quadratic constraint -t**2 + 2.0*t -alpha + x[1]*x[2] < 0 # - >>> (t & alpha) * A[1] * x + (x +2 | Z[1][:,1]) < 3*(1|Y)-alpha - #Quadratic constraint [t,alpha]*A[1]*x + 〈 x + |2.0| | Z[1][:,1] 〉 -(3.0*〈 |1| | Y 〉 -alpha) < 0 # - -Note that PICOS does not check the convexity of convex constraints. -It is the solver which will raise an Exception if it does not support -non-convex quadratics. - -Second Order Cone Constraints ------------------------------ - -There are two types of second order cone constraints supported in PICOS. - - * The constraints of the type :math:`\Vert x \Vert \leq t`, where :math:`t` - is a scalar affine expression and :math:`x` is - a multidimensional affine expression (possibly a matrix, in which case the - norm is Frobenius). This inequality forces - the vector :math:`[x;t]` to belong to a Lorrentz-Cone (also called - *ice-cream cone*) - * The constraints of the type :math:`\Vert x \Vert^2 \leq t u,\ t \geq 0`, where - :math:`t` and :math:`u` are scalar affine expressions and - :math:`x` is a multidimensional affine expression, which constrain - the vector :math:`[x,t,u]` inside a rotated version of the Lorretz cone. - When a constraint of the form ``abs(x)**2 < t*u`` is passed to PICOS, **it - is implicitely assumed that** ``t`` **is nonnegative**, and the constraint is - handled as the equivalent, standard ice-cream cone constraint - :math:`\Vert \ [2x,t-u]\ \Vert \leq t+u`. - -A few examples: - - >>> abs(x) < (2|x-1) #A simple ice-cream cone constraint - # (4x1)-SOC constraint: ||x|| < 〈 |2.0| | x -|1| 〉 # - >>> abs(Y+Z[0].T) < t+alpha #SOC constraint with Frobenius norm - # (2x4)-SOC constraint: ||Y + Z[0].T|| < t + alpha # - >>> abs(Z[1][:,0])**2 < (2*t-alpha)*(x[2]-x[-1]) #Rotated SOC constraint - # (4x1)-Rotated SOC constraint: ||Z[1][:,0]||^2 < ( 2.0*t -alpha)( x[2] -(x[-1])) # - >>> t**2 < D['Elisa']+t #t**2 is understood as the squared norm of [t] - # (1x1)-Rotated SOC constraint: ||t||^2 < D[Elisa] + t # - >>> 1 < (t-1)*(x[2]+x[3]) #1 is understood as the squared norm of [1] - # (1x1)-Rotated SOC constraint: 1.0 < ( t -1.0)( x[2] + x[3]) # - -Semidefinite Constraints -------------------------- - -Linear matrix inequalities (LMI) can be entered thanks to an overload of the operators -``<<`` and ``>>``. For example, the LMI - -.. math:: - :nowrap: - - \begin{equation*} - \sum_{i=0}^3 x_i b_i b_i^T \succeq b_4 b_4^T, - \end{equation*} - -where :math:`\succeq` is used to denote the Löwner ordering, -is passed to PICOS by writing: - - >>> pic.sum([x[i]*b[i]*b[i].T for i in range(4)],'i','0...3') >> b[4]*b[4].T - # (4x4)-LMI constraint Σ_{i in 0...3} x[i]*b[i]*b[i].T ≽ b[4]*b[4].T # - -Note the difference with - - >>> pic.sum([x[i]*b[i]*b[i].T for i in range(4)],'i','0...3') > b[4]*b[4].T - # (4x4)-affine constraint: Σ_{i in 0...3} x[i]*b[i]*b[i].T > b[4]*b[4].T # - -which yields an elementwise inequality. - - -For convenience, it is possible to add a symmetric matrix variable ``X``, -by specifying the option ``vtype=symmetric``. This has the effect to -store all the affine expressions which depend on ``X`` as a function -of its lower triangular elements only. - - >>> sdp = pic.Problem() - >>> X = sdp.add_variable('X',(4,4),vtype='symmetric') - >>> sdp.add_constraint(X >> 0) - >>> print sdp #doctest: +NORMALIZE_WHITESPACE - --------------------- - optimization problem (SDP): - 10 variables, 0 affine constraints, 10 vars in 1 SD cones - - X : (4, 4), symmetric - - find vars - such that - X ≽ |0| - --------------------- - -In this example, you see indeed that the problem has 10=(4*5)/2 variables, -which correspond to the lower triangular elements of ``X``. - -.. Warning:: - When a constraint of the form ``A >> B`` is passed to PICOS, it is not - assumed that A-B is symmetric. Instead, the symmetric matrix whose lower - triangular elements are those of A-B is forced to be positive semidefnite. - So, in the cases where A-B is not implicitely forced to be symmetric, you - should add a constraint of the form ``A-B==(A-B).T`` in the problem. - -========================= -Write a Problem to a file -========================= - -It is possible to write a problem to a file, thanks to the -function :func:`write_to_file() `. -Several file formats and file writers are available, have a look at the doc -of :func:`write_to_file() ` for more explanations. - -Below is a *hello world* example, which writes a simple MIP to a **.lp** file: - - -.. testcode:: - - import picos as pic - prob = pic.Problem() - y = prob.add_variable('y',1, vtype='integer') - x = prob.add_variable('x',1) - prob.add_constraint(x>1.5) - prob.add_constraint(y-x>0.7) - prob.set_objective('min',y) - #let first picos display the problem - print prob - print - #now write the problem to a .lp file... - prob.write_to_file('helloworld.lp') - print - #and display the content of the freshly created file: - print open('helloworld.lp').read() - -Generated output: - -.. testoutput:: - :options: +NORMALIZE_WHITESPACE - - --------------------- - optimization problem (MIP): - 2 variables, 2 affine constraints - - y : (1, 1), integer - x : (1, 1), continuous - - minimize y - such that - x > 1.5 - y -x > 0.7 - --------------------- - - writing problem in helloworld.lp... - done. - - \* file helloworld.lp generated by picos*\ - Minimize - obj : 1 y - Subject To - in0 : -1 y+ 1 x <= -0.7 - Bounds - y free - 1.5 <= x<= +inf - Generals - y - Binaries - End - - - -.. testcleanup:: - - import os - os.system('rm -f helloworld.lp') - -=============== -Solve a Problem -=============== - -To solve a problem, you have to use the method :func:`solve() ` -of the class :class:`Problem `. This method accepts several -options. In particular the solver can be specified by passing -an option of the form ``solver='solver_name'``. For a list of available -parameters with their default values, see the doc of the function -:func:`set_all_options_to_default() `. - -Once a problem has been solved, the optimal values of the variables are -accessible with the :attr:`value ` property. -Depending on the solver, you -can also obtain the slack and the optimal dual variables -of the constraints thanks to the properties -:attr:`dual` and -:attr:`slack` of the class -:class:`Constraint `. -See the doc of :attr:`dual` for more explanations -on the dual variables for second order cone programs (SOCP) and -semidefinite programs (SDP). - -The class :class:`Problem ` also has -two interesting properties: :attr:`type `, which -indicates the class of the optimization problem ('LP', 'SOCP', 'MIP', 'SDP',...), -and :attr:`status `, which indicates if the -problem has been solved (the default is ``'unsolved'``; after a call to -:func:`solve() ` this property can take the value of any -code returned by a solver, such as ``'optimal'``, ``'unbounded'``, ``'near-optimal'``, -``'primal infeasible'``, ``'unknown'``, ...). - - -Below is a simple example, to solve the linear programm: - -.. math:: - :nowrap: - - \begin{center} - $\begin{array}{ccc} - \underset{x \in \mathbb{R}^2}{\mbox{minimize}} - & 0.5 x_1 + x_2 &\\ - \mbox{subject to} & x_1 &\geq x_2\\ - & \left[ - \begin{array}{cc} - 1 & 0\\ - 1 & 1 - \end{array} - \right] x &\leq - \left[ - \begin{array}{c} 3 \\4 \end{array} - \right]. - \end{array}$ - \end{center} - -More examples can be found :ref:`here `. - -.. testcode:: - - P = pic.Problem() - A = pic.new_param('A', cvx.matrix([[1,1],[0,1]]) ) - x = P.add_variable('x',2) - P.add_constraint(x[0]>x[1]) - P.add_constraint(A*x<[3,4]) - objective = 0.5 * x[0] + x[1] - P.set_objective('max', objective) - - #display the problem and solve it - print P - print 'type: '+P.type - print 'status: '+P.status - P.solve(solver='cvxopt',verbose=False) - print 'status: '+P.status - - #--------------------# - # objective value # - #--------------------# - - print 'the optimal value of this problem is:' - print P.obj_value() #"print objective" would also work, because objective is valued - - #--------------------# - # optimal variable # - #--------------------# - x_opt = x.value - print 'The solution of the problem is:' - print x_opt #"print x" would also work, since x is now valued - print - - #--------------------# - # slacks and duals # - #--------------------# - c0=P.get_constraint(0) - print 'The dual of the constraint' - print c0 - print 'is:' - print c0.dual - print 'And its slack is:' - print c0.slack - print - - c1=P.get_constraint(1) - print 'The dual of the constraint' - print c1 - print 'is:' - print c1.dual - print 'And its slack is:' - print c1.slack - -.. testoutput:: - :options: +NORMALIZE_WHITESPACE - - --------------------- - optimization problem (LP): - 2 variables, 3 affine constraints - - x : (2, 1), continuous - - maximize 0.5*x[0] + x[1] - such that - x[0] > x[1] - A*x < [ 2 x 1 MAT ] - --------------------- - type: LP - status: unsolved - status: optimal - - the optimal value of this problem is: - 3.0000000002 - The solution of the problem is: - [ 2.00e+00] - [ 2.00e+00] - - - The dual of the constraint - # (1x1)-affine constraint : x[0] > x[1] # - is: - [ 2.50e-01] - - And its slack is: - [ 1.83e-09] - - - The dual of the constraint - # (2x1)-affine constraint : A*x < [ 2 x 1 MAT ] # - is: - [ 4.56e-10] - [ 7.50e-01] - - And its slack is: - [ 1.00e+00] - [-8.71e-10] - - -.. _noteduals: - -A note on dual variables ------------------------- - -For second order cone constraints of the form :math:`\Vert \mathbf{x} \Vert \leq t`, -where :math:`\mathbf{x}` is a vector of dimension :math:`n`, -the dual variable is a vector of dimension :math:`n+1` of the form -:math:`[\lambda; \mathbf{z}]`, where the :math:`n-` dimensional vector -:math:`\mathbf{z}` satisfies :math:`\Vert \mathbf{z} \Vert \leq \lambda`. - -Since *rotated* second order cone constraints of the form -:math:`\Vert \mathbf{x} \Vert^2 \leq t u,\ t \geq 0`, -are handled as the equivalent ice-cream constraint -:math:`\Vert [2 \mathbf{x}; t-u ] \Vert \leq t+u`, -the dual is given with respect to this reformulated, standard SOC constraint. - -In general, a linear problem with second order cone constraints (both standard and rotated) -and semidefinite constraints can be written under the form: - -.. math:: - :nowrap: - - \begin{center} - $\begin{array}{cclc} - \underset{\mathbf{x} \in \mathbb{R}^n}{\mbox{minimize}} - & \mathbf{c}^T \mathbf{x} & &\\ - \mbox{subject to} & A^e \mathbf{x} + \mathbf{b^e} & = 0 &\\ - & A^l \mathbf{x} + \mathbf{b^l} & \leq 0 &\\ - & \Vert A^s_i \mathbf{x} + \mathbf{b^s_i} \Vert &\leq \mathbf{f^s_i}^T \mathbf{x} +d^s_i, & \forall i \in I\\ - & \Vert A^r_j \mathbf{x} + \mathbf{b^r_j} \Vert^2 &\leq (\mathbf{f^{r_1}_j}^T \mathbf{x} +d^{r_1}_j) (\mathbf{f^{r_2}_j}^T \mathbf{x} +d^{r_2}_j), & \forall j \in J\\ - & 0 & \leq \mathbf{f^{r_1}_j}^T \mathbf{x} +d^{r_1}_j, & \forall j \in J\\ - & \sum_{i=1}^n x_i M_i & \succeq M_0 - \end{array}$ - \end{center} - -where - - * :math:`\mathbf{c}, \big\{\mathbf{f^s_i}\big\}_{i\in I}, \big\{\mathbf{f^{r_1}_j}\big\}_{j \in J}, \big\{\mathbf{f^{r_2}_j}\big\}_{j \in J}` - are vectors of dimension :math:`n`; - - * :math:`\big\{d^s_i\big\}_{i \in I}, \big\{d^{r_1}_j\big\}_{j \in J}, \big\{d^{r_2}_j\big\}_{j \in J}` - are scalars; - - * :math:`\big\{\mathbf{b^s_i}\big\}_{i\in I}` are vectors of dimension :math:`n^s_i` and - :math:`\big\{A^s_i\big\}_{i\in I}` are matrices of size :math:`n^s_i \times n`; - - * :math:`\big\{\mathbf{b^r_j}\big\}_{j\in J}` are vectors of dimension :math:`n^r_j` and - :math:`\big\{A^r_j\big\}_{j\in J}` are matrices of size :math:`n^r_j \times n`; - - * :math:`\mathbf{b^e}` is a vector of dimension :math:`n^e` and - :math:`A^e` is a matrix of size :math:`n^e \times n`; - - * :math:`\mathbf{b^l}` is a vector of dimension :math:`n^l` and - :math:`A^l` is a matrix of size :math:`n^l \times n`; - - * :math:`\big\{M_k\big\}_{k=0,\ldots,n}` are :math:`m \times m` symmetric - matrices (:math:`M_k \in :math:`\mathbb{S}_m`). - -Its dual problem can be written as: - -.. math:: - :nowrap: - - \begin{center} - $\begin{array}{cll} - \mbox{maximize} & \mathbf{b^e}^T \mathbf{\mu^e} - + \mathbf{b^l}^T \mathbf{\mu^l} & - + \sum_{i\in I} \big( \mathbf{b^s_i}^T \mathbf{z^s_i} - d^s_i \lambda_i \big) - + \sum_{j\in J} \big( \mathbf{b^r_j}^T \mathbf{z^r_j} - d^{r_1}_j \alpha_j - d^{r_2}_j \beta_j \big) - + \langle M_0, X \rangle\\ - \mbox{subject to} & c + {A^e}^T \mathbf{\mu^e} + {A^l}^T \mathbf{\mu^l} & - + \sum_{i\in I} \big( {A^s_i}^T \mathbf{z^s_i} -\lambda_i \mathbf{f^s_i} \big) - + \sum_{j\in J} \big( {A^r_j}^T \mathbf{z^r_j} -\alpha_j \mathbf{f^{r_1}_j} - \beta_j \mathbf{f^{r_2}_j} \big) - = \mathcal{M} \bullet X \\ - & \mu_l \geq 0 &\\ - & \Vert \mathbf{z^s_i} \Vert \leq \lambda_i, &\forall i \in I\\ - & \Vert \mathbf{z^r_j} \Vert^2 \leq 4 \alpha_j \beta_j, &\forall j \in J\\ - & \ \ 0 \ \ \ \leq \alpha_j, &\forall j \in J\\ - & X \succeq 0 - \end{array}$ - \end{center} - -where :math:`\mathcal{M} \bullet X` stands for the vector of dimension :math:`n` -with :math:`\langle M_i, X \rangle` on the :math:`i` th coordinate, and the dual variables -are - - * :math:`\mu^e \in \mathbb{R}^{n_e}` - - * :math:`\mu^l \in \mathbb{R}^{n_l}` - - * :math:`z^s_i \in \mathbb{R}^{n^s_i},\ \forall i \in I` - - * :math:`\lambda_i \in \mathbb{R},\ \forall i \in I` - - * :math:`z^r_j \in \mathbb{R}^{n^r_j},\ \forall j \in J` - - * :math:`(\alpha_j,\beta_j) \in \mathbb{R}^2,\ \forall j \in J` - - * :math:`X \in \mathbb{S}_m` - -When quering the dual of a constraint of the above primal problem, **picos will -return** - - * :math:`\mu^e` for the constraint :math:`A^e \mathbf{x} + \mathbf{b^e} = 0`; - - * :math:`\mu^l` for the constraint :math:`A^l \mathbf{x} + \mathbf{b^l} \geq 0`; - - * The :math:`(n^s_i+1)-` dimensional vector :math:`\mu^s_i\ :=\ [\lambda_i;\mathbf{z^s_i}]\ ` for the constraint - - :math:`\Vert A^s_i \mathbf{x} + \mathbf{b^s_i} \Vert \leq \mathbf{f^s_i}^T \mathbf{x} +d^s_i`; - - * The :math:`(n^r_j+2)-` dimensional vector :math:`\mu^r_j\:=\ \frac{1}{2}[\ (\beta_j+\alpha_j) ;\ \mathbf{z^r_j} ;\ (\beta_j-\alpha_j)\ ]\ ` for the constraint - - :math:`\Vert A^r_j \mathbf{x} + \mathbf{b^r_j} \Vert^2 \leq (\mathbf{f^{r_1}_j}^T \mathbf{x} +d^{r_1}_j) (\mathbf{f^{r_2}_j}^T \mathbf{x} +d^{r_2}_j)` - - In other words, if the dual vector returned by picos is of the form - :math:`\mu^r_j\ = [\sigma^1_j;\mathbf{u_j};\sigma^2_j]`, where :math:`\mathbf{u_j}` is of dimension :math:`n^r_j`, - then the dual variables of the rotated conic constraint - are :math:`\alpha_j = \sigma^1_j - \sigma^2_j,\ \beta_j = \sigma^1_j + \sigma^2_j` - and :math:`\mathbf{z^r_j} = 2 \mathbf{u_j}`; - - * The symmetric positive definite matrix :math:`X` for the constraint - - :math:`\sum_{i=1}^n x_i M_i \succeq M_0`. diff --git a/doc/full_html/0.1.2/_sources/variable.txt b/doc/full_html/0.1.2/_sources/variable.txt deleted file mode 100644 index df1104fa71b5b84c1f2bb2f3c2a331cd20d4a7f7..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/_sources/variable.txt +++ /dev/null @@ -1,8 +0,0 @@ -.. _variable: - -======== -Variable -======== - -.. autoclass:: picos.Variable - :members: \ No newline at end of file diff --git a/doc/full_html/0.1.2/_static/ajax-loader.gif b/doc/full_html/0.1.2/_static/ajax-loader.gif deleted file mode 100644 index 61faf8cab23993bd3e1560bff0668bd628642330..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_static/ajax-loader.gif and /dev/null differ diff --git a/doc/full_html/0.1.2/_static/basic.css b/doc/full_html/0.1.2/_static/basic.css deleted file mode 100644 index f0379f359b558408e03f5199557280c3a18cec10..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/_static/basic.css +++ /dev/null @@ -1,540 +0,0 @@ -/* - * basic.css - * ~~~~~~~~~ - * - * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/* -- main layout ----------------------------------------------------------- */ - -div.clearer { - clear: both; -} - -/* -- relbar ---------------------------------------------------------------- */ - -div.related { - width: 100%; - font-size: 90%; -} - -div.related h3 { - display: none; -} - -div.related ul { - margin: 0; - padding: 0 0 0 10px; - list-style: none; -} - -div.related li { - display: inline; -} - -div.related li.right { - float: right; - margin-right: 5px; -} - -/* -- sidebar --------------------------------------------------------------- */ - -div.sphinxsidebarwrapper { - padding: 10px 5px 0 10px; -} - -div.sphinxsidebar { - float: left; - width: 230px; - margin-left: -100%; - font-size: 90%; -} - -div.sphinxsidebar ul { - list-style: none; -} - -div.sphinxsidebar ul ul, -div.sphinxsidebar ul.want-points { - margin-left: 20px; - list-style: square; -} - -div.sphinxsidebar ul ul { - margin-top: 0; - margin-bottom: 0; -} - -div.sphinxsidebar form { - margin-top: 10px; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - -div.sphinxsidebar input[type="text"] { - width: 170px; -} - -div.sphinxsidebar input[type="submit"] { - width: 30px; -} - -img { - border: 0; -} - -/* -- search page ----------------------------------------------------------- */ - -ul.search { - margin: 10px 0 0 20px; - padding: 0; -} - -ul.search li { - padding: 5px 0 5px 20px; - background-image: url(file.png); - background-repeat: no-repeat; - background-position: 0 7px; -} - -ul.search li a { - font-weight: bold; -} - -ul.search li div.context { - color: #888; - margin: 2px 0 0 30px; - text-align: left; -} - -ul.keywordmatches li.goodmatch a { - font-weight: bold; -} - -/* -- index page ------------------------------------------------------------ */ - -table.contentstable { - width: 90%; -} - -table.contentstable p.biglink { - line-height: 150%; -} - -a.biglink { - font-size: 1.3em; -} - -span.linkdescr { - font-style: italic; - padding-top: 5px; - font-size: 90%; -} - -/* -- general index --------------------------------------------------------- */ - -table.indextable { - width: 100%; -} - -table.indextable td { - text-align: left; - vertical-align: top; -} - -table.indextable dl, table.indextable dd { - margin-top: 0; - margin-bottom: 0; -} - -table.indextable tr.pcap { - height: 10px; -} - -table.indextable tr.cap { - margin-top: 10px; - background-color: #f2f2f2; -} - -img.toggler { - margin-right: 3px; - margin-top: 3px; - cursor: pointer; -} - -div.modindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -div.genindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -/* -- general body styles --------------------------------------------------- */ - -a.headerlink { - visibility: hidden; -} - -h1:hover > a.headerlink, -h2:hover > a.headerlink, -h3:hover > a.headerlink, -h4:hover > a.headerlink, -h5:hover > a.headerlink, -h6:hover > a.headerlink, -dt:hover > a.headerlink { - visibility: visible; -} - -div.body p.caption { - text-align: inherit; -} - -div.body td { - text-align: left; -} - -.field-list ul { - padding-left: 1em; -} - -.first { - margin-top: 0 !important; -} - -p.rubric { - margin-top: 30px; - font-weight: bold; -} - -img.align-left, .figure.align-left, object.align-left { - clear: left; - float: left; - margin-right: 1em; -} - -img.align-right, .figure.align-right, object.align-right { - clear: right; - float: right; - margin-left: 1em; -} - -img.align-center, .figure.align-center, object.align-center { - display: block; - margin-left: auto; - margin-right: auto; -} - -.align-left { - text-align: left; -} - -.align-center { - text-align: center; -} - -.align-right { - text-align: right; -} - -/* -- sidebars -------------------------------------------------------------- */ - -div.sidebar { - margin: 0 0 0.5em 1em; - border: 1px solid #ddb; - padding: 7px 7px 0 7px; - background-color: #ffe; - width: 40%; - float: right; -} - -p.sidebar-title { - font-weight: bold; -} - -/* -- topics ---------------------------------------------------------------- */ - -div.topic { - border: 1px solid #ccc; - padding: 7px 7px 0 7px; - margin: 10px 0 10px 0; -} - -p.topic-title { - font-size: 1.1em; - font-weight: bold; - margin-top: 10px; -} - -/* -- admonitions ----------------------------------------------------------- */ - -div.admonition { - margin-top: 10px; - margin-bottom: 10px; - padding: 7px; -} - -div.admonition dt { - font-weight: bold; -} - -div.admonition dl { - margin-bottom: 0; -} - -p.admonition-title { - margin: 0px 10px 5px 0px; - font-weight: bold; -} - -div.body p.centered { - text-align: center; - margin-top: 25px; -} - -/* -- tables ---------------------------------------------------------------- */ - -table.docutils { - border: 0; - border-collapse: collapse; -} - -table.docutils td, table.docutils th { - padding: 1px 8px 1px 5px; - border-top: 0; - border-left: 0; - border-right: 0; - border-bottom: 1px solid #aaa; -} - -table.field-list td, table.field-list th { - border: 0 !important; -} - -table.footnote td, table.footnote th { - border: 0 !important; -} - -th { - text-align: left; - padding-right: 5px; -} - -table.citation { - border-left: solid 1px gray; - margin-left: 1px; -} - -table.citation td { - border-bottom: none; -} - -/* -- other body styles ----------------------------------------------------- */ - -ol.arabic { - list-style: decimal; -} - -ol.loweralpha { - list-style: lower-alpha; -} - -ol.upperalpha { - list-style: upper-alpha; -} - -ol.lowerroman { - list-style: lower-roman; -} - -ol.upperroman { - list-style: upper-roman; -} - -dl { - margin-bottom: 15px; -} - -dd p { - margin-top: 0px; -} - -dd ul, dd table { - margin-bottom: 10px; -} - -dd { - margin-top: 3px; - margin-bottom: 10px; - margin-left: 30px; -} - -dt:target, .highlighted { - background-color: #fbe54e; -} - -dl.glossary dt { - font-weight: bold; - font-size: 1.1em; -} - -.field-list ul { - margin: 0; - padding-left: 1em; -} - -.field-list p { - margin: 0; -} - -.refcount { - color: #060; -} - -.optional { - font-size: 1.3em; -} - -.versionmodified { - font-style: italic; -} - -.system-message { - background-color: #fda; - padding: 5px; - border: 3px solid red; -} - -.footnote:target { - background-color: #ffa; -} - -.line-block { - display: block; - margin-top: 1em; - margin-bottom: 1em; -} - -.line-block .line-block { - margin-top: 0; - margin-bottom: 0; - margin-left: 1.5em; -} - -.guilabel, .menuselection { - font-family: sans-serif; -} - -.accelerator { - text-decoration: underline; -} - -.classifier { - font-style: oblique; -} - -abbr, acronym { - border-bottom: dotted 1px; - cursor: help; -} - -/* -- code displays --------------------------------------------------------- */ - -pre { - overflow: auto; - overflow-y: hidden; /* fixes display issues on Chrome browsers */ -} - -td.linenos pre { - padding: 5px 0px; - border: 0; - background-color: transparent; - color: #aaa; -} - -table.highlighttable { - margin-left: 0.5em; -} - -table.highlighttable td { - padding: 0 0.5em 0 0.5em; -} - -tt.descname { - background-color: transparent; - font-weight: bold; - font-size: 1.2em; -} - -tt.descclassname { - background-color: transparent; -} - -tt.xref, a tt { - background-color: transparent; - font-weight: bold; -} - -h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { - background-color: transparent; -} - -.viewcode-link { - float: right; -} - -.viewcode-back { - float: right; - font-family: sans-serif; -} - -div.viewcode-block:target { - margin: -1px -10px; - padding: 0 10px; -} - -/* -- math display ---------------------------------------------------------- */ - -img.math { - vertical-align: middle; -} - -div.body div.math p { - text-align: center; -} - -span.eqno { - float: right; -} - -/* -- printout stylesheet --------------------------------------------------- */ - -@media print { - div.document, - div.documentwrapper, - div.bodywrapper { - margin: 0 !important; - width: 100%; - } - - div.sphinxsidebar, - div.related, - div.footer, - #top-link { - display: none; - } -} \ No newline at end of file diff --git a/doc/full_html/0.1.2/_static/comment-bright.png b/doc/full_html/0.1.2/_static/comment-bright.png deleted file mode 100644 index 551517b8c83b76f734ff791f847829a760ad1903..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_static/comment-bright.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_static/comment-close.png b/doc/full_html/0.1.2/_static/comment-close.png deleted file mode 100644 index 09b54be46da3f0d4a5061da289dc91d8a2cdbc9c..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_static/comment-close.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_static/comment.png b/doc/full_html/0.1.2/_static/comment.png deleted file mode 100644 index 92feb52b8824c6b0f59b658b1196c61de9162a95..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_static/comment.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_static/default.css b/doc/full_html/0.1.2/_static/default.css deleted file mode 100644 index 21f3f5098d74ca71c6c3f917a765fb6bf78b4dea..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/_static/default.css +++ /dev/null @@ -1,256 +0,0 @@ -/* - * default.css_t - * ~~~~~~~~~~~~~ - * - * Sphinx stylesheet -- default theme. - * - * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -@import url("basic.css"); - -/* -- page layout ----------------------------------------------------------- */ - -body { - font-family: sans-serif; - font-size: 100%; - background-color: #11303d; - color: #000; - margin: 0; - padding: 0; -} - -div.document { - background-color: #1c4e63; -} - -div.documentwrapper { - float: left; - width: 100%; -} - -div.bodywrapper { - margin: 0 0 0 230px; -} - -div.body { - background-color: #ffffff; - color: #000000; - padding: 0 20px 30px 20px; -} - -div.footer { - color: #ffffff; - width: 100%; - padding: 9px 0 9px 0; - text-align: center; - font-size: 75%; -} - -div.footer a { - color: #ffffff; - text-decoration: underline; -} - -div.related { - background-color: #133f52; - line-height: 30px; - color: #ffffff; -} - -div.related a { - color: #ffffff; -} - -div.sphinxsidebar { -} - -div.sphinxsidebar h3 { - font-family: 'Trebuchet MS', sans-serif; - color: #ffffff; - font-size: 1.4em; - font-weight: normal; - margin: 0; - padding: 0; -} - -div.sphinxsidebar h3 a { - color: #ffffff; -} - -div.sphinxsidebar h4 { - font-family: 'Trebuchet MS', sans-serif; - color: #ffffff; - font-size: 1.3em; - font-weight: normal; - margin: 5px 0 0 0; - padding: 0; -} - -div.sphinxsidebar p { - color: #ffffff; -} - -div.sphinxsidebar p.topless { - margin: 5px 10px 10px 10px; -} - -div.sphinxsidebar ul { - margin: 10px; - padding: 0; - color: #ffffff; -} - -div.sphinxsidebar a { - color: #98dbcc; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - - - -/* -- hyperlink styles ------------------------------------------------------ */ - -a { - color: #355f7c; - text-decoration: none; -} - -a:visited { - color: #355f7c; - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - - - -/* -- body styles ----------------------------------------------------------- */ - -div.body h1, -div.body h2, -div.body h3, -div.body h4, -div.body h5, -div.body h6 { - font-family: 'Trebuchet MS', sans-serif; - background-color: #f2f2f2; - font-weight: normal; - color: #20435c; - border-bottom: 1px solid #ccc; - margin: 20px -20px 10px -20px; - padding: 3px 0 3px 10px; -} - -div.body h1 { margin-top: 0; font-size: 200%; } -div.body h2 { font-size: 160%; } -div.body h3 { font-size: 140%; } -div.body h4 { font-size: 120%; } -div.body h5 { font-size: 110%; } -div.body h6 { font-size: 100%; } - -a.headerlink { - color: #c60f0f; - font-size: 0.8em; - padding: 0 4px 0 4px; - text-decoration: none; -} - -a.headerlink:hover { - background-color: #c60f0f; - color: white; -} - -div.body p, div.body dd, div.body li { - text-align: justify; - line-height: 130%; -} - -div.admonition p.admonition-title + p { - display: inline; -} - -div.admonition p { - margin-bottom: 5px; -} - -div.admonition pre { - margin-bottom: 5px; -} - -div.admonition ul, div.admonition ol { - margin-bottom: 5px; -} - -div.note { - background-color: #eee; - border: 1px solid #ccc; -} - -div.seealso { - background-color: #ffc; - border: 1px solid #ff6; -} - -div.topic { - background-color: #eee; -} - -div.warning { - background-color: #ffe4e4; - border: 1px solid #f66; -} - -p.admonition-title { - display: inline; -} - -p.admonition-title:after { - content: ":"; -} - -pre { - padding: 5px; - background-color: #eeffcc; - color: #333333; - line-height: 120%; - border: 1px solid #ac9; - border-left: none; - border-right: none; -} - -tt { - background-color: #ecf0f3; - padding: 0 1px 0 1px; - font-size: 0.95em; -} - -th { - background-color: #ede; -} - -.warning tt { - background: #efc2c2; -} - -.note tt { - background: #d6d6d6; -} - -.viewcode-back { - font-family: sans-serif; -} - -div.viewcode-block:target { - background-color: #f4debf; - border-top: 1px solid #ac9; - border-bottom: 1px solid #ac9; -} \ No newline at end of file diff --git a/doc/full_html/0.1.2/_static/doctools.js b/doc/full_html/0.1.2/_static/doctools.js deleted file mode 100644 index d4619fdfb10d95e06dbcb92107cc64c34f709eaf..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/_static/doctools.js +++ /dev/null @@ -1,247 +0,0 @@ -/* - * doctools.js - * ~~~~~~~~~~~ - * - * Sphinx JavaScript utilities for all documentation. - * - * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/** - * select a different prefix for underscore - */ -$u = _.noConflict(); - -/** - * make the code below compatible with browsers without - * an installed firebug like debugger -if (!window.console || !console.firebug) { - var names = ["log", "debug", "info", "warn", "error", "assert", "dir", - "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", - "profile", "profileEnd"]; - window.console = {}; - for (var i = 0; i < names.length; ++i) - window.console[names[i]] = function() {}; -} - */ - -/** - * small helper function to urldecode strings - */ -jQuery.urldecode = function(x) { - return decodeURIComponent(x).replace(/\+/g, ' '); -} - -/** - * small helper function to urlencode strings - */ -jQuery.urlencode = encodeURIComponent; - -/** - * This function returns the parsed url parameters of the - * current request. Multiple values per key are supported, - * it will always return arrays of strings for the value parts. - */ -jQuery.getQueryParameters = function(s) { - if (typeof s == 'undefined') - s = document.location.search; - var parts = s.substr(s.indexOf('?') + 1).split('&'); - var result = {}; - for (var i = 0; i < parts.length; i++) { - var tmp = parts[i].split('=', 2); - var key = jQuery.urldecode(tmp[0]); - var value = jQuery.urldecode(tmp[1]); - if (key in result) - result[key].push(value); - else - result[key] = [value]; - } - return result; -}; - -/** - * small function to check if an array contains - * a given item. - */ -jQuery.contains = function(arr, item) { - for (var i = 0; i < arr.length; i++) { - if (arr[i] == item) - return true; - } - return false; -}; - -/** - * highlight a given string on a jquery object by wrapping it in - * span elements with the given class name. - */ -jQuery.fn.highlightText = function(text, className) { - function highlight(node) { - if (node.nodeType == 3) { - var val = node.nodeValue; - var pos = val.toLowerCase().indexOf(text); - if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) { - var span = document.createElement("span"); - span.className = className; - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - node.parentNode.insertBefore(span, node.parentNode.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling)); - node.nodeValue = val.substr(0, pos); - } - } - else if (!jQuery(node).is("button, select, textarea")) { - jQuery.each(node.childNodes, function() { - highlight(this); - }); - } - } - return this.each(function() { - highlight(this); - }); -}; - -/** - * Small JavaScript module for the documentation. - */ -var Documentation = { - - init : function() { - this.fixFirefoxAnchorBug(); - this.highlightSearchWords(); - this.initIndexTable(); - }, - - /** - * i18n support - */ - TRANSLATIONS : {}, - PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; }, - LOCALE : 'unknown', - - // gettext and ngettext don't access this so that the functions - // can safely bound to a different name (_ = Documentation.gettext) - gettext : function(string) { - var translated = Documentation.TRANSLATIONS[string]; - if (typeof translated == 'undefined') - return string; - return (typeof translated == 'string') ? translated : translated[0]; - }, - - ngettext : function(singular, plural, n) { - var translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated == 'undefined') - return (n == 1) ? singular : plural; - return translated[Documentation.PLURALEXPR(n)]; - }, - - addTranslations : function(catalog) { - for (var key in catalog.messages) - this.TRANSLATIONS[key] = catalog.messages[key]; - this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); - this.LOCALE = catalog.locale; - }, - - /** - * add context elements like header anchor links - */ - addContextElements : function() { - $('div[id] > :header:first').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this headline')). - appendTo(this); - }); - $('dt[id]').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this definition')). - appendTo(this); - }); - }, - - /** - * workaround a firefox stupidity - */ - fixFirefoxAnchorBug : function() { - if (document.location.hash && $.browser.mozilla) - window.setTimeout(function() { - document.location.href += ''; - }, 10); - }, - - /** - * highlight the search words provided in the url in the text - */ - highlightSearchWords : function() { - var params = $.getQueryParameters(); - var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; - if (terms.length) { - var body = $('div.body'); - window.setTimeout(function() { - $.each(terms, function() { - body.highlightText(this.toLowerCase(), 'highlighted'); - }); - }, 10); - $('') - .appendTo($('#searchbox')); - } - }, - - /** - * init the domain index toggle buttons - */ - initIndexTable : function() { - var togglers = $('img.toggler').click(function() { - var src = $(this).attr('src'); - var idnum = $(this).attr('id').substr(7); - $('tr.cg-' + idnum).toggle(); - if (src.substr(-9) == 'minus.png') - $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); - else - $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); - }).css('display', ''); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { - togglers.click(); - } - }, - - /** - * helper function to hide the search marks again - */ - hideSearchWords : function() { - $('#searchbox .highlight-link').fadeOut(300); - $('span.highlighted').removeClass('highlighted'); - }, - - /** - * make the url absolute - */ - makeURL : function(relativeURL) { - return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; - }, - - /** - * get the current relative url - */ - getCurrentURL : function() { - var path = document.location.pathname; - var parts = path.split(/\//); - $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { - if (this == '..') - parts.pop(); - }); - var url = parts.join('/'); - return path.substring(url.lastIndexOf('/') + 1, path.length - 1); - } -}; - -// quick alias for translations -_ = Documentation.gettext; - -$(document).ready(function() { - Documentation.init(); -}); diff --git a/doc/full_html/0.1.2/_static/down-pressed.png b/doc/full_html/0.1.2/_static/down-pressed.png deleted file mode 100644 index 6f7ad782782e4f8e39b0c6e15c7344700cdd2527..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_static/down-pressed.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_static/down.png b/doc/full_html/0.1.2/_static/down.png deleted file mode 100644 index 3003a88770de3977d47a2ba69893436a2860f9e7..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_static/down.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_static/file.png b/doc/full_html/0.1.2/_static/file.png deleted file mode 100644 index d18082e397e7e54f20721af768c4c2983258f1b4..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_static/file.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_static/jquery.js b/doc/full_html/0.1.2/_static/jquery.js deleted file mode 100644 index 7c243080233761859937d52195b670602731a379..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/_static/jquery.js +++ /dev/null @@ -1,154 +0,0 @@ -/*! - * jQuery JavaScript Library v1.4.2 - * http://jquery.com/ - * - * Copyright 2010, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2010, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Sat Feb 13 22:33:48 2010 -0500 - */ -(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, -Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& -(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, -a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== -"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, -function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
a"; -var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, -parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= -false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= -s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, -applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; -else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, -a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== -w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, -cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= -c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); -a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, -function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); -k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), -C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= -e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& -f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; -if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", -e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, -"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, -d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, -e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); -t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| -g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, -CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, -g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, -text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, -setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= -h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== -"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, -h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& -q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; -if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); -(function(){var g=s.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: -function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= -{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== -"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", -d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? -a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== -1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= -c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, -wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, -prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, -this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); -return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, -""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); -return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", -""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= -c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? -c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= -function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= -Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, -"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= -a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= -a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== -"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, -serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), -function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, -global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& -e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? -"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== -false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= -false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", -c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| -d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); -g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== -1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== -"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; -if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== -"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| -c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; -this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= -this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, -e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
"; -a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); -c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, -d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- -f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": -"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in -e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/doc/full_html/0.1.2/_static/minus.png b/doc/full_html/0.1.2/_static/minus.png deleted file mode 100644 index da1c5620d10c047525a467a425abe9ff5269cfc2..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_static/minus.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_static/plus.png b/doc/full_html/0.1.2/_static/plus.png deleted file mode 100644 index b3cb37425ea68b39ffa7b2e5fb69161275a87541..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/_static/plus.png and /dev/null differ diff --git a/doc/full_html/0.1.2/_static/pygments.css b/doc/full_html/0.1.2/_static/pygments.css deleted file mode 100644 index 1a14f2ae1abd2bed71fc76bee7a0d49bc6fcbc01..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/_static/pygments.css +++ /dev/null @@ -1,62 +0,0 @@ -.highlight .hll { background-color: #ffffcc } -.highlight { background: #eeffcc; } -.highlight .c { color: #408090; font-style: italic } /* Comment */ -.highlight .err { border: 1px solid #FF0000 } /* Error */ -.highlight .k { color: #007020; font-weight: bold } /* Keyword */ -.highlight .o { color: #666666 } /* Operator */ -.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #007020 } /* Comment.Preproc */ -.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ -.highlight .gd { color: #A00000 } /* Generic.Deleted */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .gr { color: #FF0000 } /* Generic.Error */ -.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ -.highlight .gi { color: #00A000 } /* Generic.Inserted */ -.highlight .go { color: #303030 } /* Generic.Output */ -.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ -.highlight .gt { color: #0040D0 } /* Generic.Traceback */ -.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ -.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ -.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ -.highlight .kp { color: #007020 } /* Keyword.Pseudo */ -.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #902000 } /* Keyword.Type */ -.highlight .m { color: #208050 } /* Literal.Number */ -.highlight .s { color: #4070a0 } /* Literal.String */ -.highlight .na { color: #4070a0 } /* Name.Attribute */ -.highlight .nb { color: #007020 } /* Name.Builtin */ -.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ -.highlight .no { color: #60add5 } /* Name.Constant */ -.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ -.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ -.highlight .ne { color: #007020 } /* Name.Exception */ -.highlight .nf { color: #06287e } /* Name.Function */ -.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ -.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ -.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ -.highlight .nv { color: #bb60d5 } /* Name.Variable */ -.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ -.highlight .mf { color: #208050 } /* Literal.Number.Float */ -.highlight .mh { color: #208050 } /* Literal.Number.Hex */ -.highlight .mi { color: #208050 } /* Literal.Number.Integer */ -.highlight .mo { color: #208050 } /* Literal.Number.Oct */ -.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ -.highlight .sc { color: #4070a0 } /* Literal.String.Char */ -.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ -.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ -.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ -.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ -.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ -.highlight .sx { color: #c65d09 } /* Literal.String.Other */ -.highlight .sr { color: #235388 } /* Literal.String.Regex */ -.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ -.highlight .ss { color: #517918 } /* Literal.String.Symbol */ -.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ -.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ -.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ -.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ -.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/doc/full_html/0.1.2/_static/searchtools.js b/doc/full_html/0.1.2/_static/searchtools.js deleted file mode 100644 index 663be4c909bac88c941735e8af0a223fc0743198..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/_static/searchtools.js +++ /dev/null @@ -1,560 +0,0 @@ -/* - * searchtools.js_t - * ~~~~~~~~~~~~~~~~ - * - * Sphinx JavaScript utilties for the full-text search. - * - * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/** - * helper function to return a node containing the - * search summary for a given text. keywords is a list - * of stemmed words, hlwords is the list of normal, unstemmed - * words. the first one is used to find the occurance, the - * latter for highlighting it. - */ - -jQuery.makeSearchSummary = function(text, keywords, hlwords) { - var textLower = text.toLowerCase(); - var start = 0; - $.each(keywords, function() { - var i = textLower.indexOf(this.toLowerCase()); - if (i > -1) - start = i; - }); - start = Math.max(start - 120, 0); - var excerpt = ((start > 0) ? '...' : '') + - $.trim(text.substr(start, 240)) + - ((start + 240 - text.length) ? '...' : ''); - var rv = $('
').text(excerpt); - $.each(hlwords, function() { - rv = rv.highlightText(this, 'highlighted'); - }); - return rv; -} - - -/** - * Porter Stemmer - */ -var Stemmer = function() { - - var step2list = { - ational: 'ate', - tional: 'tion', - enci: 'ence', - anci: 'ance', - izer: 'ize', - bli: 'ble', - alli: 'al', - entli: 'ent', - eli: 'e', - ousli: 'ous', - ization: 'ize', - ation: 'ate', - ator: 'ate', - alism: 'al', - iveness: 'ive', - fulness: 'ful', - ousness: 'ous', - aliti: 'al', - iviti: 'ive', - biliti: 'ble', - logi: 'log' - }; - - var step3list = { - icate: 'ic', - ative: '', - alize: 'al', - iciti: 'ic', - ical: 'ic', - ful: '', - ness: '' - }; - - var c = "[^aeiou]"; // consonant - var v = "[aeiouy]"; // vowel - var C = c + "[^aeiouy]*"; // consonant sequence - var V = v + "[aeiou]*"; // vowel sequence - - var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 - var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 - var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 - var s_v = "^(" + C + ")?" + v; // vowel in stem - - this.stemWord = function (w) { - var stem; - var suffix; - var firstch; - var origword = w; - - if (w.length < 3) - return w; - - var re; - var re2; - var re3; - var re4; - - firstch = w.substr(0,1); - if (firstch == "y") - w = firstch.toUpperCase() + w.substr(1); - - // Step 1a - re = /^(.+?)(ss|i)es$/; - re2 = /^(.+?)([^s])s$/; - - if (re.test(w)) - w = w.replace(re,"$1$2"); - else if (re2.test(w)) - w = w.replace(re2,"$1$2"); - - // Step 1b - re = /^(.+?)eed$/; - re2 = /^(.+?)(ed|ing)$/; - if (re.test(w)) { - var fp = re.exec(w); - re = new RegExp(mgr0); - if (re.test(fp[1])) { - re = /.$/; - w = w.replace(re,""); - } - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1]; - re2 = new RegExp(s_v); - if (re2.test(stem)) { - w = stem; - re2 = /(at|bl|iz)$/; - re3 = new RegExp("([^aeiouylsz])\\1$"); - re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re2.test(w)) - w = w + "e"; - else if (re3.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - else if (re4.test(w)) - w = w + "e"; - } - } - - // Step 1c - re = /^(.+?)y$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(s_v); - if (re.test(stem)) - w = stem + "i"; - } - - // Step 2 - re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step2list[suffix]; - } - - // Step 3 - re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step3list[suffix]; - } - - // Step 4 - re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; - re2 = /^(.+?)(s|t)(ion)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - if (re.test(stem)) - w = stem; - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1] + fp[2]; - re2 = new RegExp(mgr1); - if (re2.test(stem)) - w = stem; - } - - // Step 5 - re = /^(.+?)e$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - re2 = new RegExp(meq1); - re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) - w = stem; - } - re = /ll$/; - re2 = new RegExp(mgr1); - if (re.test(w) && re2.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - - // and turn initial Y back to y - if (firstch == "y") - w = firstch.toLowerCase() + w.substr(1); - return w; - } -} - - -/** - * Search Module - */ -var Search = { - - _index : null, - _queued_query : null, - _pulse_status : -1, - - init : function() { - var params = $.getQueryParameters(); - if (params.q) { - var query = params.q[0]; - $('input[name="q"]')[0].value = query; - this.performSearch(query); - } - }, - - loadIndex : function(url) { - $.ajax({type: "GET", url: url, data: null, success: null, - dataType: "script", cache: true}); - }, - - setIndex : function(index) { - var q; - this._index = index; - if ((q = this._queued_query) !== null) { - this._queued_query = null; - Search.query(q); - } - }, - - hasIndex : function() { - return this._index !== null; - }, - - deferQuery : function(query) { - this._queued_query = query; - }, - - stopPulse : function() { - this._pulse_status = 0; - }, - - startPulse : function() { - if (this._pulse_status >= 0) - return; - function pulse() { - Search._pulse_status = (Search._pulse_status + 1) % 4; - var dotString = ''; - for (var i = 0; i < Search._pulse_status; i++) - dotString += '.'; - Search.dots.text(dotString); - if (Search._pulse_status > -1) - window.setTimeout(pulse, 500); - }; - pulse(); - }, - - /** - * perform a search for something - */ - performSearch : function(query) { - // create the required interface elements - this.out = $('#search-results'); - this.title = $('

' + _('Searching') + '

').appendTo(this.out); - this.dots = $('').appendTo(this.title); - this.status = $('

').appendTo(this.out); - this.output = $('
'); - } - // Prettify the comment rating. - comment.pretty_rating = comment.rating + ' point' + - (comment.rating == 1 ? '' : 's'); - // Make a class (for displaying not yet moderated comments differently) - comment.css_class = comment.displayed ? '' : ' moderate'; - // Create a div for this comment. - var context = $.extend({}, opts, comment); - var div = $(renderTemplate(commentTemplate, context)); - - // If the user has voted on this comment, highlight the correct arrow. - if (comment.vote) { - var direction = (comment.vote == 1) ? 'u' : 'd'; - div.find('#' + direction + 'v' + comment.id).hide(); - div.find('#' + direction + 'u' + comment.id).show(); - } - - if (opts.moderator || comment.text != '[deleted]') { - div.find('a.reply').show(); - if (comment.proposal_diff) - div.find('#sp' + comment.id).show(); - if (opts.moderator && !comment.displayed) - div.find('#cm' + comment.id).show(); - if (opts.moderator || (opts.username == comment.username)) - div.find('#dc' + comment.id).show(); - } - return div; - } - - /** - * A simple template renderer. Placeholders such as <%id%> are replaced - * by context['id'] with items being escaped. Placeholders such as <#id#> - * are not escaped. - */ - function renderTemplate(template, context) { - var esc = $(document.createElement('div')); - - function handle(ph, escape) { - var cur = context; - $.each(ph.split('.'), function() { - cur = cur[this]; - }); - return escape ? esc.text(cur || "").html() : cur; - } - - return template.replace(/<([%#])([\w\.]*)\1>/g, function() { - return handle(arguments[2], arguments[1] == '%' ? true : false); - }); - } - - /** Flash an error message briefly. */ - function showError(message) { - $(document.createElement('div')).attr({'class': 'popup-error'}) - .append($(document.createElement('div')) - .attr({'class': 'error-message'}).text(message)) - .appendTo('body') - .fadeIn("slow") - .delay(2000) - .fadeOut("slow"); - } - - /** Add a link the user uses to open the comments popup. */ - $.fn.comment = function() { - return this.each(function() { - var id = $(this).attr('id').substring(1); - var count = COMMENT_METADATA[id]; - var title = count + ' comment' + (count == 1 ? '' : 's'); - var image = count > 0 ? opts.commentBrightImage : opts.commentImage; - var addcls = count == 0 ? ' nocomment' : ''; - $(this) - .append( - $(document.createElement('a')).attr({ - href: '#', - 'class': 'sphinx-comment-open' + addcls, - id: 'ao' + id - }) - .append($(document.createElement('img')).attr({ - src: image, - alt: 'comment', - title: title - })) - .click(function(event) { - event.preventDefault(); - show($(this).attr('id').substring(2)); - }) - ) - .append( - $(document.createElement('a')).attr({ - href: '#', - 'class': 'sphinx-comment-close hidden', - id: 'ah' + id - }) - .append($(document.createElement('img')).attr({ - src: opts.closeCommentImage, - alt: 'close', - title: 'close' - })) - .click(function(event) { - event.preventDefault(); - hide($(this).attr('id').substring(2)); - }) - ); - }); - }; - - var opts = { - processVoteURL: '/_process_vote', - addCommentURL: '/_add_comment', - getCommentsURL: '/_get_comments', - acceptCommentURL: '/_accept_comment', - deleteCommentURL: '/_delete_comment', - commentImage: '/static/_static/comment.png', - closeCommentImage: '/static/_static/comment-close.png', - loadingImage: '/static/_static/ajax-loader.gif', - commentBrightImage: '/static/_static/comment-bright.png', - upArrow: '/static/_static/up.png', - downArrow: '/static/_static/down.png', - upArrowPressed: '/static/_static/up-pressed.png', - downArrowPressed: '/static/_static/down-pressed.png', - voting: false, - moderator: false - }; - - if (typeof COMMENT_OPTIONS != "undefined") { - opts = jQuery.extend(opts, COMMENT_OPTIONS); - } - - var popupTemplate = '\ -
\ -

\ - Sort by:\ - best rated\ - newest\ - oldest\ -

\ -
Comments
\ -
\ - loading comments...
\ - \ -
\ -

Add a comment\ - (markup):

\ -
\ - reStructured text markup: *emph*, **strong**, \ - ``code``, \ - code blocks: :: and an indented block after blank line
\ -
\ - \ -

\ - \ - Propose a change ▹\ - \ - \ - Propose a change ▿\ - \ -

\ - \ - \ - \ - \ -
\ -
\ -
'; - - var commentTemplate = '\ -
\ -
\ -
\ - \ - \ - \ - \ - \ - \ -
\ -
\ - \ - \ - \ - \ - \ - \ -
\ -
\ -
\ -

\ - <%username%>\ - <%pretty_rating%>\ - <%time.delta%>\ -

\ -
<#text#>
\ -

\ - \ - reply ▿\ - proposal ▹\ - proposal ▿\ - \ - \ -

\ -
\
-<#proposal_diff#>\
-        
\ -
    \ -
    \ -
    \ -
    \ -
    '; - - var replyTemplate = '\ -
  • \ -
    \ -
    \ - \ - \ - \ - \ - \ -
    \ -
    \ -
  • '; - - $(document).ready(function() { - init(); - }); -})(jQuery); - -$(document).ready(function() { - // add comment anchors for all paragraphs that are commentable - $('.sphinx-has-comment').comment(); - - // highlight search words in search results - $("div.context").each(function() { - var params = $.getQueryParameters(); - var terms = (params.q) ? params.q[0].split(/\s+/) : []; - var result = $(this); - $.each(terms, function() { - result.highlightText(this.toLowerCase(), 'highlighted'); - }); - }); - - // directly open comment window if requested - var anchor = document.location.hash; - if (anchor.substring(0, 9) == '#comment-') { - $('#ao' + anchor.substring(9)).click(); - document.location.hash = '#s' + anchor.substring(9); - } -}); diff --git a/doc/full_html/0.1.2/api.html b/doc/full_html/0.1.2/api.html deleted file mode 100644 index 064577ef97bb9712d710f01fd9251fa718de1db2..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/api.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - - - - - The PICOS Reference — picos 0.1.2 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Warning

    You are consulting the doc of a former version of PICOS.The latest version is HERE.

    - -
    -
    -
    -
    - -
    -

    The PICOS Reference

    - -
    - - -
    -
    -
    -
    -
    -

    Table Of Contents

    - - -

    Previous topic

    -

    Cut problems in graphs

    -

    Next topic

    -

    Problem

    -

    This Page

    - - -

    Download

    - - - - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/doc/full_html/0.1.2/constraint.html b/doc/full_html/0.1.2/constraint.html deleted file mode 100644 index 1aafaacb4085fc0d234c2cf2e4392bac572ada22..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/constraint.html +++ /dev/null @@ -1,289 +0,0 @@ - - - - - - - - - - Constraint — picos 0.1.2 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Warning

    You are consulting the doc of a former version of PICOS.The latest version is HERE.

    - -
    -
    -
    -
    - -
    -

    Constraint

    -
    -
    -class picos.Constraint(typeOfConstraint, Id, Exp1, Exp2, Exp3=None, dualVariable=None, key=None)
    -

    A class for describing a constraint.

    -
    -
    -Exp1 = None
    -

    LHS

    -
    - -
    -
    -Exp2 = None
    -

    RHS -(ignored for constraints of type lse and quad, where -Exp2 is set to 0)

    -
    - -
    -
    -Exp3 = None
    -

    Second factor of the RHS for RScone constraints -(see typeOfConstraint).

    -
    - -
    -
    -Id = None
    -

    An integer identifier

    -
    - -
    -
    -dual
    -

    Value of the dual variable associated to this constraint

    -

    See the note on dual variables in the tutorial -for more information.

    -
    - -
    -
    -key = None
    -

    A string to give a key name to the constraint

    -
    - -
    -
    -slack
    -

    Value of the slack variable associated to this constraint -(should be nonnegative/zero if the inequality/equality -is satisfied)

    -
    - -
    -
    -slack_var()
    -

    returns the slack of the constraint -(For an inequality of the type lhs<rhs, -the slack is rhs-lhs, and for lhs>rhs -the slack is lhs-rhs).

    -
    - -
    -
    -typeOfConstraint = None
    -

    A string from the following values, -indicating the type of constraint:

    -
    -
      -
    • lin<, lin= or lin> : Linear (in)equality -Exp1 Exp2, Exp1 = Exp2 or Exp1 Exp2.
    • -
    • SOcone : Second Order Cone constraint ||Exp1|| < Exp2.
    • -
    • RScone : Rotated Cone constraint -||Exp1||**2 < Exp2 * Exp3.
    • -
    • lse : Geometric Programming constraint LogSumExp(Exp1)<0
    • -
    • quad: scalar quadratic constraint Exp1 < 0.
    • -
    • sdp< or sdp>: semidefinite constraint -Exp1 Exp2 or Exp1 Exp2.
    • -
    -
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    -

    Table Of Contents

    - - -

    Previous topic

    -

    Expression

    -

    Next topic

    -

    Download

    -

    This Page

    - - -

    Download

    - - - - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/doc/full_html/0.1.2/dist/PICOS-0.1.0.tar.gz b/doc/full_html/0.1.2/dist/PICOS-0.1.0.tar.gz deleted file mode 100644 index 512fa70562f79addb096fe7005814d2a2be56a77..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/dist/PICOS-0.1.0.tar.gz and /dev/null differ diff --git a/doc/full_html/0.1.2/dist/PICOS-0.1.1.tar.gz b/doc/full_html/0.1.2/dist/PICOS-0.1.1.tar.gz deleted file mode 100644 index 8ab424f021e529a4bf02704e62fab2db9c7f5306..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/dist/PICOS-0.1.1.tar.gz and /dev/null differ diff --git a/doc/full_html/0.1.2/dist/PICOS-0.1.2.tar.gz b/doc/full_html/0.1.2/dist/PICOS-0.1.2.tar.gz deleted file mode 100644 index 2c60cba4517afb8ad8da56b7e6dfcdeeff915235..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/dist/PICOS-0.1.2.tar.gz and /dev/null differ diff --git a/doc/full_html/0.1.2/download.html b/doc/full_html/0.1.2/download.html deleted file mode 100644 index dd1a324bfe0f67f01512e3b428d98cf2de67d3a1..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/download.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - - - - - Download — picos 0.1.2 documentation - - - - - - - - - - - - - - - - - - - - - - - -

    Warning

    You are consulting the doc of a former version of PICOS.The latest version is HERE.

    - -
    -
    -
    -
    - -
    -

    Download

    -

    The latest version of PICOS can be downloaded here:

    -
    -
    -

    Installation instructions are explained -here.

    -

    Older versions

    -
    -
    -
    - - -
    -
    -
    -
    -
    -

    Table Of Contents

    - - -

    Previous topic

    -

    Constraint

    -

    This Page

    - - -

    Download

    - - - - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/doc/full_html/0.1.2/download.html~ b/doc/full_html/0.1.2/download.html~ deleted file mode 100644 index 516ea6e98b8359672ff13060ecc4ed124f8f1592..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/download.html~ +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - - - - Download — picos 0.1.1 documentation - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    -

    Download

    -

    The latest version of PICOS can be downloaded here:

    -
    -
    -

    Installation instructions are explained -here.

    -

    Older versions

    -
    -
    -
    - - -
    -
    -
    -
    -
    -

    Table Of Contents

    - - -

    Previous topic

    -

    Constraint

    -

    This Page

    - - -

    Download

    - - - - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/doc/full_html/0.1.2/examples.html b/doc/full_html/0.1.2/examples.html deleted file mode 100644 index 7bbde27897b1bc33d1c47661a711c0e22d9b9727..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/examples.html +++ /dev/null @@ -1,238 +0,0 @@ - - - - - - - - - - Examples — picos 0.1.2 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Warning

    You are consulting the doc of a former version of PICOS.The latest version is HERE.

    - -
    -
    - -
    -
    -
    -

    Table Of Contents

    - - -

    Previous topic

    -

    Tutorial

    -

    Next topic

    -

    Examples from Optimal Experimental Design

    -

    This Page

    - - -

    Download

    - - - - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/doc/full_html/0.1.2/expression.html b/doc/full_html/0.1.2/expression.html deleted file mode 100644 index fa695a8280574f7e62e570b290781619da29f8a7..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/expression.html +++ /dev/null @@ -1,556 +0,0 @@ - - - - - - - - - - Expression — picos 0.1.2 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Warning

    You are consulting the doc of a former version of PICOS.The latest version is HERE.

    - -
    -
    -
    -
    - -
    -

    Expression

    -
    -
    -class picos.Expression(string)
    -

    The parent class of AffinExp -(which is the parent class of Variable), -Norm, -LogSumExp, and -QuadExp.

    -
    - -
    -

    AffinExp

    -
    -
    -class picos.AffinExp(factors=None, constant=None, size=(1, 1), string='0')
    -

    A class for defining vectorial (or matrix) affine expressions. -It derives from Expression.

    -

    Overloaded operators

    -
    -
    --- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +:sum (with an affine or quadratic expression)
    +=:in-place sum (with an affine or quadratic expression)
    -:substraction (with an affine or quadratic expression) or unitary minus
    *:multiplication (by another affine expression or a scalar)
    /:division (by a scalar)
    |:scalar product (with another affine expression)
    [.]:slice of an affine expression
    abs():Euclidean norm (Frobenius norm for matrices)
    **:exponentiation (works with arbitrary powers for constant -affine expressions, and only with the exponent 2 -if the affine expression involves some variables)
    &:horizontal concatenation (with another affine expression)
    //:vertical concatenation (with another affine expression)
    <:less or equal (than an affine or quadratic expression)
    >:greater or equal (than an affine or quadratic expression)
    ==:is equal (to another affine expression)
    <<:less than inequality in the Loewner ordering (linear matrix inequality ⪳)
    >>:greater than inequality in the Loewner ordering (linear matrix inequality ⪴)
    -
    -
    -

    Warning

    -

    We recall here the implicit assumptions that are made -when using relation operator overloads, in the following -two situations:

    -
    -
      -
    • the rotated second order cone constraint -abs(exp1)**2 < exp2 * exp3 implicitely -assumes that the scalar expression exp2 (and hence exp3) -is nonnegative.
    • -
    • the linear matrix inequality exp1 >> exp2 only tells picos -that the symmetric matrix whose lower triangular elements -are those of exp1-exp2 is positive semidefinite. The -matrix exp1-exp2 is not constrained to be symmetric. -Hence, you should manually add the constraint -exp1-exp2 == (exp1-exp2).T if it is not clear from the data -that this matrix is symmetric.
    • -
    -
    -
    -
    -
    -T
    -

    Transposition

    -
    - -
    -
    -constant = None
    -

    constant of the affine expression, -stored as a cvxopt sparse matrix.

    -
    - -
    -
    -factors = None
    -

    dictionary storing the matrix of coefficients of the linear -part of the affine expressions. The matrices of coefficients -are always stored with respect to vectorized variables (for the -case of matrix variables), and are indexed by instances -of the class Variable.

    -
    - -
    -
    -is0()
    -

    is the expression equal to 0 ?

    -
    - -
    -
    -isconstant()
    -

    is the expression constant (no variable involved) ?

    -
    - -
    -
    -size = None
    -

    size of the affine expression

    -
    - -
    -
    -value
    -

    value of the affine expression

    -
    - -
    - -
    -

    Variable

    -
    -
    -class picos.Variable(name, size, Id, startIndex, vtype='continuous')
    -

    This class stores a variable. It -derives from AffinExp.

    -
    -
    -Id = None
    -

    An integer index

    -
    - -
    -
    -endIndex = None
    -

    end position in the global vector of all variables

    -
    - -
    -
    -name = None
    -

    The name of the variable (str)

    -
    - -
    -
    -startIndex = None
    -

    starting position in the global vector of all variables

    -
    - -
    -
    -value
    -

    value of the variable. The value of a variable is -defined in the following two situations:

    -
      -
    • The user has assigned a value to the variable, -by using either the present value attribute, -or the function -set_var_value() of the class -Problem. Note that manually -giving a value to a variable can be useful, e.g. to -provide a solver with an initial solution (see -the option hotstart documented in -set_all_options_to_default())
    • -
    • The problem involving the variable has been solved, -and the value attribute stores the optimal value -of this variable.
    • -
    -
    - -
    -
    -vtype = None
    -

    one of the following strings:

    -
      -
    • ‘continuous’ (continuous variable)

      -
    • -
    • ‘binary’ (binary 0/1 variable)

      -
    • -
    • ‘integer’ (integer variable)

      -
    • -
    • ‘symmetric’ (symmetric matrix variable)

      -
    • -
    • -
      ‘semicont’ (semicontinuous variable
      -

      [can take the value 0 or any -other admissible value])

      -
      -
      -
    • -
    • -
      ‘semiint’ (semi integer variable
      -

      [can take the value 0 or any -other integer admissible value])

      -
      -
      -
    • -
    -
    - -
    - -
    -
    -
    -

    Norm

    -
    -
    -class picos.Norm(exp)
    -

    Euclidean (or Frobenius) norm of an Affine Expression. -This class derives from Expression.

    -

    Overloaded operators

    -
    -
    --- - - - - - -
    **:exponentiation (only implemented when the exponent is 2)
    <:less or equal (than a scalar affine expression)
    -
    -
    -
    -exp = None
    -

    The affine expression of which we take the norm

    -
    - -
    - -
    -
    -

    QuadExp

    -
    -
    -class picos.QuadExp(quad, aff, string, LR=None)
    -

    Quadratic expression. -This class derives from Expression.

    -

    Overloaded operators

    -
    -
    --- - - - - - - - - - - - -
    +:addition (with an affine or a quadratic expression)
    -:substraction (with an affine or a quadratic expression) or unitary minus
    *:multiplication (by a scalar or a constant affine expression)
    <:less or equal than (another quadratic or affine expression).
    >:greater or equal than (another quadratic or affine expression).
    -
    -
    -
    -LR = None
    -

    stores a factorization of the quadratic expression, if the -expression was entered in a factorized form. We have:

    -
    -
      -
    • LR=None when no factorization is known
    • -
    • LR=(aff,None) when the expression is equal to ||aff||**2
    • -
    • LR=(aff1,aff2) when the expression is equal to aff1*aff2.
    • -
    -
    -
    - -
    -
    -aff = None
    -

    affine expression representing the affine part of the quadratic expression

    -
    - -
    -
    -quad = None
    -

    dictionary of quadratic forms, -stored as matrices representing bilinear forms -with respect to two vectorized variables, -and indexed by tuples of -instances of the class Variable.

    -
    - -
    - -
    -
    -

    LogSumExp

    -
    -
    -class picos.LogSumExp(exp)
    -
    -
    Log-Sum-Exp applied to an affine expression.
    -
    If the affine expression z is of size N, -with elements z_1, z_2, \ldots, z_N, -then LogSumExp(z) represents the expression -\log ( \sum_{i=1}^n e^{z_i} ). -This class derives from Expression.
    -
    -

    Overloaded operator

    -
    -
    --- - - - -
    <:less or equal than (the rhs must be 0, for geometrical programming)
    -
    -
    -
    -value
    -

    value of the logsumexp expression

    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    -

    Table Of Contents

    - - -

    Contents of this page

    - - -

    Previous topic

    -

    picos.tools

    -

    Next topic

    -

    Constraint

    -

    This Page

    - - -

    Download

    - - - - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/doc/full_html/0.1.2/genindex.html b/doc/full_html/0.1.2/genindex.html deleted file mode 100644 index e0b0c4033058493dbc75636a0b8d6cec7348fc57..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/genindex.html +++ /dev/null @@ -1,609 +0,0 @@ - - - - - - - - - - - - Index — picos 0.1.2 documentation - - - - - - - - - - - - - -
    -
    -
    -
    - - -

    Index

    - -
    - _ - | A - | C - | D - | E - | F - | G - | I - | K - | L - | N - | O - | P - | Q - | R - | S - | T - | U - | V - | W - -
    -

    _

    - - -
    - -
    _retrieve_matrix() (in module picos.tools) -
    - -
    - -

    A

    - - - -
    - -
    add_constraint() (picos.Problem method) -
    - - -
    add_list_of_constraints() (picos.Problem method) -
    - - -
    add_variable() (picos.Problem method) -
    - -
    - -
    aff (picos.QuadExp attribute) -
    - - -
    AffinExp (class in picos) -
    - - -
    available_solvers() (in module picos.tools) -
    - -
    - -

    C

    - - - -
    - -
    check_current_value_feasibility() (picos.Problem method) -
    - - -
    constant (picos.AffinExp attribute) -
    - - -
    Constraint (class in picos) -
    - - -
    constraints (picos.Problem attribute) -
    - -
    - -
    copy() (picos.Problem method) -
    - - -
    countCons (picos.Problem attribute) -
    - - -
    countVar (picos.Problem attribute) -
    - -
    - -

    D

    - - - -
    - -
    diag() (in module picos.tools) -
    - - -
    diag_vect() (in module picos.tools) -
    - -
    - -
    dual (picos.Constraint attribute) -
    - -
    - -

    E

    - - - -
    - -
    endIndex (picos.Variable attribute) -
    - - -
    eval_dict() (in module picos.tools) -
    - - -
    exp (picos.Norm attribute) -
    - - -
    Exp1 (picos.Constraint attribute) -
    - -
    - -
    Exp2 (picos.Constraint attribute) -
    - - -
    Exp3 (picos.Constraint attribute) -
    - - -
    Expression (class in picos) -
    - -
    - -

    F

    - - -
    - -
    factors (picos.AffinExp attribute) -
    - -
    - -

    G

    - - - -
    - -
    get_constraint() (picos.Problem method) -
    - - -
    get_valued_variable() (picos.Problem method) -
    - -
    - -
    get_variable() (picos.Problem method) -
    - -
    - -

    I

    - - - -
    - -
    Id (picos.Constraint attribute) -
    - -
    - -
    (picos.Variable attribute) -
    - -
    - -
    is0() (picos.AffinExp method) -
    - -
    - -
    is_continuous() (picos.Problem method) -
    - - -
    isconstant() (picos.AffinExp method) -
    - -
    - -

    K

    - - -
    - -
    key (picos.Constraint attribute) -
    - -
    - -

    L

    - - - -
    - -
    LogSumExp (class in picos) -
    - - -
    LR (picos.QuadExp attribute) -
    - -
    - -
    lse() (in module picos.tools) -
    - -
    - -

    N

    - - - -
    - -
    name (picos.Variable attribute) -
    - - -
    new_param() (in module picos.tools) -
    - - -
    Norm (class in picos) -
    - - -
    numberAffConstraints (picos.Problem attribute) -
    - - -
    numberConeConstraints (picos.Problem attribute) -
    - - -
    numberConeVars (picos.Problem attribute) -
    - - -
    numberLSEConstraints (picos.Problem attribute) -
    - -
    - -
    numberLSEVars (picos.Problem attribute) -
    - - -
    numberOfVars (picos.Problem attribute) -
    - - -
    numberQuadConstraints (picos.Problem attribute) -
    - - -
    numberQuadNNZ (picos.Problem attribute) -
    - - -
    numberSDPConstraints (picos.Problem attribute) -
    - - -
    numberSDPVars (picos.Problem attribute) -
    - -
    - -

    O

    - - -
    - -
    obj_value() (picos.Problem method) -
    - -
    - -

    P

    - - - -
    - -
    picos.tools (module) -
    - -
    - -
    Problem (class in picos) -
    - -
    - -

    Q

    - - - -
    - -
    quad (picos.QuadExp attribute) -
    - -
    - -
    QuadExp (class in picos) -
    - -
    - -

    R

    - - - -
    - -
    remove_all_constraints() (picos.Problem method) -
    - - -
    remove_constraint() (picos.Problem method) -
    - -
    - -
    remove_variable() (picos.Problem method) -
    - -
    - -

    S

    - - - -
    - -
    set_all_options_to_default() (picos.Problem method) -
    - - -
    set_objective() (picos.Problem method) -
    - - -
    set_option() (picos.Problem method) -
    - - -
    set_var_value() (picos.Problem method) -
    - - -
    size (picos.AffinExp attribute) -
    - - -
    slack (picos.Constraint attribute) -
    - -
    - -
    slack_var() (picos.Constraint method) -
    - - -
    solve() (picos.Problem method) -
    - - -
    solver_selection() (picos.Problem method) -
    - - -
    startIndex (picos.Variable attribute) -
    - - -
    status (picos.Problem attribute) -
    - - -
    sum() (in module picos.tools) -
    - -
    - -

    T

    - - - -
    - -
    T (picos.AffinExp attribute) -
    - - -
    type (picos.Problem attribute) -
    - -
    - -
    typeOfConstraint (picos.Constraint attribute) -
    - -
    - -

    U

    - - -
    - -
    update_options() (picos.Problem method) -
    - -
    - -

    V

    - - - -
    - -
    value (picos.AffinExp attribute) -
    - -
    - -
    (picos.LogSumExp attribute) -
    - - -
    (picos.Variable attribute) -
    - -
    - -
    Variable (class in picos) -
    - -
    - -
    variables (picos.Problem attribute) -
    - - -
    vtype (picos.Variable attribute) -
    - -
    - -

    W

    - - -
    - -
    write_to_file() (picos.Problem method) -
    - -
    - - - -
    -
    -
    -
    -
    -

    Table Of Contents

    - - - -

    Download

    - - - - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/doc/full_html/0.1.2/graphs-1.hires.png b/doc/full_html/0.1.2/graphs-1.hires.png deleted file mode 100644 index 95cfc26111b315ee8e8416a858b53db84092c881..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/graphs-1.hires.png and /dev/null differ diff --git a/doc/full_html/0.1.2/graphs-1.pdf b/doc/full_html/0.1.2/graphs-1.pdf deleted file mode 100644 index 927408245157eba7c47f0598e5e9d06b777380a5..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/graphs-1.pdf and /dev/null differ diff --git a/doc/full_html/0.1.2/graphs-1.png b/doc/full_html/0.1.2/graphs-1.png deleted file mode 100644 index 10b851e8914ee8b89a0c408d0dd9b2afa2cae52f..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/graphs-1.png and /dev/null differ diff --git a/doc/full_html/0.1.2/graphs-1.py b/doc/full_html/0.1.2/graphs-1.py deleted file mode 100644 index 48ad7a7a9c7a42cce6a9c4572e76b6d6cfddbdc2..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/graphs-1.py +++ /dev/null @@ -1,18 +0,0 @@ -import matplotlib.pyplot as plt -#display the graph -node_colors=['w']*N -node_colors[s]='g' #source is green -node_colors[t]='b' #sink is blue - -pos=nx.spring_layout(G) -#edges -nx.draw_networkx(G,pos, - edgelist=[e for e in G.edges() if f[e].value[0]>0], - node_color=node_colors) - - -labels={e:'{0}/{1}'.format(f[e],c[e]) for e in G.edges() if f[e].value[0]>0} -#flow label -nx.draw_networkx_edge_labels(G, pos, - edge_labels=labels) -plt.show() \ No newline at end of file diff --git a/doc/full_html/0.1.2/graphs.html b/doc/full_html/0.1.2/graphs.html deleted file mode 100644 index 7cda1fd9a8a6797298feb66106f942b50909f1d0..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/graphs.html +++ /dev/null @@ -1,869 +0,0 @@ - - - - - - - - - - Cut problems in graphs — picos 0.1.2 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Warning

    You are consulting the doc of a former version of PICOS.The latest version is HERE.

    - -
    -
    -
    -
    - -
    -

    Cut problems in graphs

    -

    The code below initializes the graph used in all the examples of this page. -It should be run prior to any of the codes presented in this page. -The packages networkx -and matplotlib -are recquired.

    -

    We use an arbitrary graph generated by the LCF generator of the networkx package. -The graph is deterministic, so that we can run doctest and check -the output. We also use a kind of arbitrary sequence for the edge capacities.

    -
    import picos as pic
    -import networkx as nx
    -
    -#number of nodes
    -N=20
    -
    -#Generate a graph with LCF notation (you can change the values below to obtain another graph!)
    -G=nx.LCF_graph(N,[1,3,14],5)
    -G=nx.DiGraph(G) #edges are bidirected
    -
    -#generate edge capacities
    -c={}
    -for i,e in enumerate(G.edges()):
    -        c[e]=((-2)**i)%17 #an arbitrary sequence of numbers
    -
    -
    -
    -

    Max-flow, Min-cut (LP)

    -
    -

    Max-flow

    -

    Given a directed graph G(V,E), -with a capacity c(e) on each edge e \in E, -a source node s and a sink node t, the max-flow problem is -to find a flow from s to t of maximum value. Recall that a flow -s to t is a mapping from E to \mathbb{R}^+ -such that:

    -
    -
      -
    • the capacity of each edge is respected: \forall e \in E,\ f(e) \leq c(e)
    • -
    • the flow is conserved at each non-terminal node: -\forall n \in V \setminus \{s,t\},\ \sum_{(i,n)\in E} f((i,n)) = \sum_{(n,j)\in E} f((n,j))
    • -
    -
    -

    Its value is defined as the volume passing from s to t:

    -
    -

    \mathrm{value} (f) = \sum_{(s,j)\in E} f((s,j)) - \sum_{(i,s)\in E} f((i,s)) = \sum_{(i,t)\in E} f((i,t)) - \sum_{(t,j)\in E} f((t,j)).

    -

    This problem clearly has a linear programming formulation, which -we solve below for s=16 and t=10:

    -
    maxflow=pic.Problem()
    -#source and sink nodes
    -s=16
    -t=10
    -
    -#convert the capacities as a picos expression
    -cc=pic.new_param('c',c)
    -
    -#flow variable
    -f={}
    -for e in G.edges():
    -        f[e]=maxflow.add_variable('f[{0}]'.format(e),1)
    -
    -
    -#flow value
    -F=maxflow.add_variable('F',1)
    -
    -#upper bound on the flows
    -maxflow.add_list_of_constraints(
    -        [f[e]<cc[e] for e in G.edges()], #list of constraints
    -        [('e',2)],                       #e is a double index (start and end node of the edges)
    -        'edges'                          #set the index belongs to
    -        )
    -
    -#flow conservation
    -maxflow.add_list_of_constraints(
    -[   pic.sum([f[p,i] for p in G.predecessors(i)],'p','pred(i)')
    -== pic.sum([f[i,j] for j in G.successors(i)],'j','succ(i)')
    -for i in G.nodes() if i not in (s,t)],
    -        'i','nodes-(s,t)')
    -
    -#source flow at s
    -maxflow.add_constraint(
    -pic.sum([f[p,s] for p in G.predecessors(s)],'p','pred(s)') + F
    -== pic.sum([f[s,j] for j in G.successors(s)],'j','succ(s)')
    -)
    -
    -#sink flow at t
    -maxflow.add_constraint(
    -pic.sum([f[p,t] for p in G.predecessors(t)],'p','pred(t)')
    -== pic.sum([f[t,j] for j in G.successors(t)],'j','succ(t)') + F
    -)
    -
    -#nonnegativity of the flows
    -maxflow.add_list_of_constraints(
    -        [f[e]>0 for e in G.edges()],    #list of constraints
    -        [('e',2)],                      #e is a double index (origin and desitnation of the edges)
    -        'edges'                         #set the index belongs to
    -        )
    -
    -#objective
    -maxflow.set_objective('max',F)
    -
    -#solve the problem
    -print maxflow
    -maxflow.solve(verbose=0)
    -
    -print 'The optimal flow has value {0}'.format(F)
    -
    -
    -
    ---------------------
    -optimization problem  (LP):
    -61 variables, 140 affine constraints
    -
    -f   : dict of 60 variables, (1, 1), continuous
    -F   : (1, 1), continuous
    -
    -        maximize F
    -such that
    -f[e] < c[e] for all e in edges
    -Σ_{p in pred(i)} f[(p, i)] = Σ_{j in succ(i)} f[(i, j)] for all i in nodes-(s,t)
    -Σ_{p in pred(s)} f[(p, 16)] + F = Σ_{j in succ(s)} f[(16, j)]
    -Σ_{p in pred(t)} f[(p, 10)] = Σ_{j in succ(t)} f[(10, j)] + F
    -f[e] > 0 for all e in edges
    ----------------------
    -The optimal flow has value 15.0
    -
    -
    -

    Let us now draw the maximum flow:

    -
    #display the graph
    -import pylab
    -fig=pylab.figure(figsize=(11,8))
    -
    -node_colors=['w']*N
    -node_colors[s]='g' #source is green
    -node_colors[t]='b' #sink is blue
    -
    -pos=nx.spring_layout(G)
    -#edges
    -nx.draw_networkx(G,pos,
    -                edgelist=[e for e in G.edges() if f[e].value[0]>0],
    -                node_color=node_colors)
    -
    -
    -labels={e:'{0}/{1}'.format(f[e],c[e]) for e in G.edges() if f[e].value[0]>0}
    -#flow label
    -nx.draw_networkx_edge_labels(G, pos,
    -                        edge_labels=labels)
    -
    -#hide axis
    -fig.gca().axes.get_xaxis().set_ticks([])
    -fig.gca().axes.get_yaxis().set_ticks([])
    -
    -pylab.show()
    -
    -
    -

    (Source code, png, hires.png, pdf)

    -
    -_images/maxflow.png -
    -

    The graph shows the source in blue, the sink in green, -and the value of the flow together with the capacity on each edge.

    -
    -
    -

    Min-cut

    -

    Given a directed graph G(V,E), -with a capacity c(e) on each edge e \in E, -a source node s and a sink node t, the min-cut problem is -to find a partition of the nodes in two sets (S,T), such that -s\in S, t \in T, and the total capacity of the cut, -\mathrm{capacity}(S,T)=\sum_{(i,j)\in E \cap S \times T} c((i,j)), is minimized.

    -

    It can be seen that binary solutions d\in\{0,1\}^E,\ p\in\{0,1\}^V -of the following linear program yield a minimum cut:

    -
    -

    \begin{center}
-\begin{eqnarray*}
-&\underset{\substack{d \in \mathbb{R}^E\\
-                          p \in \mathbb{R}^V}}
-             {\mbox{minimize}}
-                   & \sum_{e \in E} c(e) d(e)\\
-&\mbox{subject to} & \forall (i,j) \in E,\ d((i,j)) \geq p(i)-p(j)\\
-&                  & p(s) = 1\\
-&                  & p(t) = 0\\
-&                  & \forall n \in V,\ p(n) \geq 0\\
-&                  & \forall e \in E,\ d(e) \geq 0
-\end{eqnarray*}
-\end{center}

    -

    Remarkably, this LP is the dual of the max-flow LP, and the -max-flow-min-cut theorem (also known as Ford-Fulkerson theorem [1]) -states that the capacity of the minimum cut is equal to the -value of the maximum flow. This means that the above LP always has -an optimal solution in which d is binary. -In fact, the matrix defining this LP is totally unimodular, from -which we know that every extreme point of the polyhedron defining the -feasible region is integral, and hence the simplex algorithm -will return a minimum cut.

    -

    We solve the mincut problem below, for s=16 and t=10:

    -
    mincut=pic.Problem()
    -
    -#source and sink nodes
    -s=16
    -t=10
    -
    -#convert the capacities as a picos expression
    -cc=pic.new_param('c',c)
    -
    -#cut variable
    -d={}
    -for e in G.edges():
    -        d[e]=mincut.add_variable('d[{0}]'.format(e),1)
    -
    -#potentials
    -p=mincut.add_variable('p',N)
    -
    -#potential inequalities
    -mincut.add_list_of_constraints(
    -        [d[i,j] > p[i]-p[j]
    -        for (i,j) in G.edges()],        #list of constraints
    -        ['i','j'],'edges')              #indices and set they belong to
    -
    -#one-potential at source
    -mincut.add_constraint(p[s]==1)
    -#zero-potential at sink
    -mincut.add_constraint(p[t]==0)
    -
    -#nonnegativity
    -mincut.add_constraint(p>0)
    -mincut.add_list_of_constraints(
    -        [d[e]>0 for e in G.edges()],    #list of constraints
    -        [('e',2)],                      #e is a double index (origin and desitnation of the edges)
    -        'edges'                         #set the index belongs to
    -        )
    -
    -#objective
    -mincut.set_objective('min',
    -                pic.sum([cc[e]*d[e] for e in G.edges()],
    -                        [('e',2)],'edges')
    -                )
    -
    -print mincut
    -mincut.solve(verbose=0)
    -
    -print 'The minimal cut has capacity {0}'.format(mincut.obj_value())
    -
    -cut=[e for e in G.edges() if d[e].value[0]==1]
    -S  =[n for n in G.nodes() if p[n].value[0]==1]
    -T  =[n for n in G.nodes() if p[n].value[0]==0]
    -
    -print 'the partition of the nodes is: '
    -print 'S: {0}'.format(S)
    -print 'T: {0}'.format(T)
    -
    -
    -
    ---------------------
    -optimization problem  (LP):
    -80 variables, 142 affine constraints
    -
    -d   : dict of 60 variables, (1, 1), continuous
    -p   : (20, 1), continuous
    -
    -        minimize Σ_{e in edges} c[e]*d[e]
    -such that
    -d[(i, j)] > p[i] -p[j] for all (i,j) in edges
    -p[16] = 1.0
    -p[10] = 0
    -p > |0|
    -d[e] > 0 for all e in edges
    ----------------------
    -The minimal cut has capacity 15.0
    -the partition of the nodes is:
    -S: [15, 16, 17, 18]
    -T: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19]
    -
    -
    -

    Note that the minimum-cut could also habe been found by using the dual variables -of the maxflow LP:

    -
    >>> #capacited flow constraint
    ->>> capaflow=maxflow.get_constraint((0,))
    ->>> dualcut=[e for i,e in enumerate(G.edges()) if capaflow[i].dual[0]==1]
    ->>> #flow conservation constraint
    ->>> consflow=maxflow.get_constraint((1,))
    ->>> Sdual = [s]+ [n for i,n in
    -...           enumerate([n for n in G.nodes() if n not in (s,t)])
    -...           if consflow[i].dual[0]==1]
    ->>> Tdual = [t]+ [n for i,n in
    -...           enumerate([n for n in G.nodes() if n not in (s,t)])
    -...           if consflow[i].dual[0]==0]
    ->>> cut == dualcut
    -True
    ->>> set(S) == set(Sdual)
    -True
    ->>> set(T) == set(Tdual)
    -True
    -
    -
    -

    Let us now draw the maximum flow:

    -
    import pylab
    -fig=pylab.figure(figsize=(11,8))
    -
    -node_colors=['w']*N
    -node_colors[s]='g' #source is green
    -node_colors[t]='b' #sink is blue
    -
    -pos=nx.spring_layout(G)
    -#edges (not in the cut)
    -nx.draw_networkx(G,pos,
    -                edgelist=[e for e in G.edges() if e not in cut],
    -                node_color=node_colors)
    -
    -#edges of the cut
    -nx.draw_networkx_edges(G,pos,
    -                edgelist=cut,
    -                edge_color='r')
    -
    -#hide axis
    -fig.gca().axes.get_xaxis().set_ticks([])
    -fig.gca().axes.get_yaxis().set_ticks([])
    -
    -pylab.show()
    -
    -
    -

    (Source code, png, hires.png, pdf)

    -
    -_images/mincut.png -
    -

    On this graph, the source in blue, the sink in green, -and the edges defining the cut are marked in red.

    -
    -
    -
    -

    Multicut (MIP)

    -

    Multicut is a generalization of the mincut problem, in which several pairs -of nodes must be disconnected. The goal is to find a cut of minimal -capacity, such that for all pair (s,t) \in \mathcal{P}=\{(s_1,t_1),\ldots,(s_k,t_k))\}, -there is no path from s to t in the graph where the edges of the cut -have been removed.

    -

    We can obtain a MIP formulation of the multicut problem -by doing a small modification the mincut LP. -The idea is to introduce a different potential for every node -which is the source of a pair in \mathcal{P}:

    -
    -

    \forall s \in \mathcal{S}=\{s\in V: \exists t \in V\ (s,t)\in\mathcal{P}\},
-p_s \in \mathbb{R}^V,

    -

    and to force the cut variable to be binary.

    -
    -

    \begin{center}
-\begin{eqnarray*}
-&\underset{\substack{y \in \{0,1\}^E\\
-                     \forall s \in \mathcal{S},\ p_s \in \mathbb{R}^V}}
-             {\mbox{minimize}}
-                   & \sum_{e \in E} c(e) y(e)\\
-&\mbox{subject to} & \forall (i,j),s \in E\times\mathcal{S},\ y((i,j)) \geq p_s(i)-p_s(j)\\
-&                  & \forall s \in \mathcal{S},\ p_s(s) = 1\\
-&                  & \forall (s,t) \in \mathcal{P},\ p_s(t) = 0\\
-&                  & \forall (s,n) \in \mathcal{S} \times V,\ p_s(n) \geq 0
-\end{eqnarray*}
-\end{center}

    -

    Unlike the mincut problem, the LP obtained by relaxing the integer constraint -y \in \{0,1\}^E is not guaranteed to have an integral solution (see e.g. [2]). -We solve the multicut problem below, for the terminal pairs -\mathcal{P}=\{(0,12),(1,5),(1,19),(2,11),(3,4),(3,9),(3,18),(6,15),(10,14)\}.

    -
    multicut=pic.Problem()
    -
    -#pairs to be separated
    -pairs=[(0,12),(1,5),(1,19),(2,11),(3,4),(3,9),(3,18),(6,15),(10,14)]
    -
    -#source and sink nodes
    -s=16
    -t=10
    -
    -#convert the capacities as a picos expression
    -cc=pic.new_param('c',c)
    -
    -#list of sources
    -sources=set([p[0] for p in pairs])
    -
    -
    -#cut variable
    -y={}
    -for e in G.edges():
    -        y[e]=multicut.add_variable('y[{0}]'.format(e),1,vtype='binary')
    -
    -#potentials (one for each source)
    -p={}
    -for s in sources:
    -        p[s]=multicut.add_variable('p[{0}]'.format(s),N)
    -
    -#potential inequalities
    -multicut.add_list_of_constraints(
    -        [y[i,j]>p[s][i]-p[s][j]
    -        for s in sources
    -        for (i,j) in G.edges()],        #list of constraints
    -        ['i','j','s'],'edges x sources')#indices and set they belong to
    -
    -#one-potentials at source
    -multicut.add_list_of_constraints(
    -        [p[s][s]==1 for s in sources],
    -        's','sources')
    -
    -#zero-potentials at sink
    -multicut.add_list_of_constraints(
    -        [p[s][t]==0 for (s,t) in pairs],
    -        ['s','t'],'pairs')
    -
    -#nonnegativity
    -multicut.add_list_of_constraints(
    -        [p[s]>0 for s in sources],
    -        's','sources')
    -
    -#objective
    -multicut.set_objective('min',
    -                pic.sum([cc[e]*y[e] for e in G.edges()],
    -                        [('e',2)],'edges')
    -                )
    -
    -print multicut
    -multicut.solve(verbose=0)
    -
    -print 'The minimal multicut has capacity {0}'.format(multicut.obj_value())
    -
    -cut=[e for e in G.edges() if y[e].value[0]==1]
    -
    -print 'The edges forming the cut are: '
    -print cut
    -
    -
    -
    ---------------------
    -optimization problem  (MIP):
    -180 variables, 495 affine constraints
    -
    -y   : dict of 60 variables, (1, 1), binary
    -p   : dict of 6 variables, (20, 1), continuous
    -
    -        minimize Σ_{e in edges} c[e]*y[e]
    -such that
    -y[(i, j)] > p[s][i] -p[s][j] for all (i,j,s) in edges x sources
    -p[s][s] = 1.0 for all s in sources
    -p[s][t] = 0 for all (s,t) in pairs
    -p[s] > |0| for all s in sources
    ----------------------
    -The minimal multicut has capacity 49.0
    -The edges forming the cut are:
    -[(1, 0), (1, 4), (2, 16),
    - (2, 8), (3, 4), (5, 11),
    - (7, 8), (9, 8), (10, 11),
    - (13, 16), (13, 12),
    - (13, 14), (17, 16)]
    -
    -
    -

    Let us now draw the multicut:

    -
    import pylab
    -
    -fig=pylab.figure(figsize=(11,8))
    -
    -#pairs of dark and light colors
    -colors=[('Yellow','#FFFFE0'),
    -        ('#888888','#DDDDDD'),
    -        ('Dodgerblue','Aqua'),
    -        ('DarkGreen','GreenYellow'),
    -        ('DarkViolet','Violet'),
    -        ('SaddleBrown','Peru'),
    -        ('Red','Tomato'),
    -        ('DarkGoldenRod','Gold'),
    -        ]
    -
    -node_colors=['w']*N
    -for i,s in enumerate(sources):
    -        node_colors[s]=colors[i][0]
    -        for t in [t for (s0,t) in pairs if s0==s]:
    -                node_colors[t]=colors[i][1]
    -
    -pos=nx.spring_layout(G)
    -nx.draw_networkx(G,pos,
    -                edgelist=[e for e in G.edges() if e not in cut],
    -                node_color=node_colors)
    -
    -nx.draw_networkx_edges(G,pos,
    -                edgelist=cut,
    -                edge_color='r')
    -
    -#hide axis
    -fig.gca().axes.get_xaxis().set_ticks([])
    -fig.gca().axes.get_yaxis().set_ticks([])
    -
    -pylab.show()
    -
    -
    -

    (Source code, png, hires.png, pdf)

    -
    -_images/multicut.png -
    -

    On this graph, the pairs of terminal nodes are denoted by -dark and light colors of the same shade (e.g. dark vs. light green -for the pairs (3,4),(3,9), and (3,18)), and the edges defining the -cut are marked in red.

    -
    -
    -

    Maxcut relaxation (SDP)

    -

    The goal of the maxcut problem is to find -a partition (S,T) of the nodes of an undirected graph G(V,E), -such that the capacity of the cut, -\mathrm{capacity}(S,T)=\sum_{\{i,j\} \in E \cap (S \Delta T)} c((i,j)), -is maximized.

    -

    Goemans and Williamson have designed a famous 0.878-approximation -algorithm [3] for this NP-hard problem based on semidefinite programming. -The idea is to introduce a variable x \in \{-1,1\}^V where -x(n) takes the value +1 or -1 depending on wheter n \in S -or n \in T. Then, it can be seen that the value of the cut -is equal to \frac{1}{4} x^T L x, where L is the Laplacian -of the graph. If we define the matrix X=xx^T, which is positive -semidefinite of rank 1, we obtain an SDP by relaxing the -rank-one constraint on X :

    -
    -

    \begin{center}
-\begin{eqnarray*}
-&\underset{X \in \mathbb{S}_{|V|}}
-             {\mbox{maximize}}
-                   & \frac{1}{4} \langle L, X \rangle \\
-&\mbox{subject to} & \mbox{diag}(X) = \mathbf{1}\\
-&                  & X \succeq 0
-\end{eqnarray*}
-\end{center}

    -

    Then, Goemans and Williamson have shown that if we project the solution X -onto a random hyperplan, we obtain a cut whose expected capacity is at least -0.878 times the optimum. Below is a simple implementation of their algorithm:

    -
    import cvxopt as cvx
    -import cvxopt.lapack
    -import numpy as np
    -
    -#make G undirected
    -G=nx.Graph(G)
    -
    -#allocate weights to the edges
    -for (i,j) in G.edges():
    -        G[i][j]['weight']=c[i,j]+c[j,i]
    -
    -
    -maxcut = pic.Problem()
    -X=maxcut.add_variable('X',(N,N),'symmetric')
    -
    -#Laplacian of the graph
    -L=pic.new_param('L',1/4.*nx.laplacian(G))
    -
    -#ones on the diagonal
    -maxcut.add_constraint(pic.tools.diag_vect(X)==1)
    -#X positive semidefinite
    -maxcut.add_constraint(X>>0)
    -
    -#objective
    -maxcut.set_objective('max',L|X)
    -
    -print maxcut
    -maxcut.solve(verbose = 0)
    -
    -print 'bound from the SDP relaxation: {0}'.format(maxcut.obj_value())
    -
    -#---------------------------#
    -#RANDOM PROJECTION ALGORITHM#
    -#---------------------------#
    -
    -#Cholesky factorization
    -V=X.value
    -
    -cvxopt.lapack.potrf(V)
    -for i in range(N):
    -        for j in range(i+1,N):
    -                V[i,j]=0
    -
    -#random projection algorithm
    -#Repeat 100 times or until we are within a factor .878 of the SDP optimal value
    -count=0
    -obj_sdp=maxcut.obj_value()
    -obj=0
    -while (count <100 or obj<.878*obj_sdp):
    -        r=cvx.normal(20,1)
    -        x=cvx.matrix(np.sign(V*r))
    -        o=(x.T*L*x).value[0]
    -        if o>obj:
    -                x_cut=x
    -                obj=o
    -        count+=1
    -
    -print 'value of the cut: {0}'.format(obj)
    -S1=[n for n in range(N) if x[n]<0]
    -S2=[n for n in range(N) if x[n]>0]
    -cut = [(i,j) for (i,j) in G.edges() if x[i]*x[j]<0]
    -
    -#we comment this because the output in unpredicatable for doctest:
    -#print 'partition of the nodes:'
    -#print 'S1: {0}'.format(S1)
    -#print 'S2: {0}'.format(S2)
    -
    -
    -
    ---------------------
    -optimization problem  (SDP):
    -210 variables, 20 affine constraints, 210 vars in 1 SD cones
    -
    -X   : (20, 20), symmetric
    -
    -        maximize 〈 L | X 〉
    -such that
    -diag(X) = |1|
    -X ≽ |0|
    ----------------------
    -bound from the SDP relaxation: 478.2074...
    -value of the cut: 471.0
    -
    -
    -

    Let us now draw this cut:

    -
    #display the cut
    -import pylab
    -
    -fig=pylab.figure(figsize=(11,8))
    -
    -pos=nx.spring_layout(G)
    -
    -node_colors=[('g' if n in S1 else 'b') for n in range(N)]
    -
    -nx.draw_networkx(G,pos,
    -                edgelist=[e for e in G.edges() if e not in cut],
    -                node_color=node_colors)
    -
    -nx.draw_networkx_edges(G,pos,
    -                edgelist=cut,
    -                edge_color='r')
    -
    -#hide axis
    -fig.gca().axes.get_xaxis().set_ticks([])
    -fig.gca().axes.get_yaxis().set_ticks([])
    -
    -pylab.show()
    -
    -
    -

    (Source code, png, hires.png, pdf)

    -
    -_images/maxcut.png -
    -

    On this graph, the red edges are those defining the cut, and the nodes -are blue or green depending on the partition they belong to.

    -
    -
    -

    References

    -
    -
      -
    1. “Maximal Flow through a Network”, LR Ford Jr and DR Fulkerson, -Canadian journal of mathematics, 1956.
    2. -
    3. “Analysis of LP relaxations for multiway and multicut problems”, -D.Bertsimas, C.P. Teo and R. Vohra, -Networks, 34(2), p. 102-114, 1999.
    4. -
    5. “Improved approximation algorithms for maximum cut and satisfiability problems using semidefinite programming”, -M.X. Goemans and D.P. Williamson, -Journal of the ACM, 42(6), p. 1115-1145, 1995.
    6. -
    -
    -
    -
    - - -
    -
    -
    -
    -
    -

    Table Of Contents

    - - -

    Contents of this page

    - - -

    Previous topic

    -

    Examples from Optimal Experimental Design

    -

    Next topic

    -

    The PICOS API

    -

    This Page

    - - -

    Download

    - - - - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/doc/full_html/0.1.2/index.html b/doc/full_html/0.1.2/index.html deleted file mode 100644 index eef2da489ce86b619517fed0a2070f5484f94619..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/index.html +++ /dev/null @@ -1,231 +0,0 @@ - - - - - - - - - - PICOS: A Python Interface for Conic Optimization Solvers — picos 0.1.2 documentation - - - - - - - - - - - - - - - -

    Warning

    You are consulting the doc of a former version of PICOS.The latest version is HERE.

    - -
    -
    -
    -
    - -
    -

    PICOS: A Python Interface for Conic Optimization Solvers

    -

    News

    -
    -
      -
    • 10 Jan. 13: Picos 0.1.2 Released
      -bug-fix release, correcting:

      -
      -
        -
      • The write_to_file() -function for sparse SDPA files. The function was writing the -coefficients of the lower triangular part of the constraint matrices -instead of the upper triangle.
      • -
      • An IndexError occuring with the function -remove_constraint()
      • -
      -
      -

      Thanks to Warren Schudy for pointing out these bugs of the previous release !

      -
    • -
    • 08 Dec. 12: Picos 0.1.1 Released
      -Major changes:

      -
      -
        -
      • Picos now interfaces GUROBI !
      • -
      • You can specify an initial solution to warm-start mixed integer optimizers. -(see the option hotstart documented in -set_all_options_to_default())
      • -
      • Minor bugs with quadratic expressions corrected
      • -
      • It’s possible to return a reference to a constraint added -with add_constraint()
      • -
      -
      -
    • -
    -
    -

    PICOS Documentation contents

    -

    Welcome to the documentation of PICOS. -The latest version can be downloaded here, -and can be installed by following these instructions. -This documentation contains a tutorial and some examples, -which should already be enough for a quick start with PICOS. To go deeper, -have a look at the picos reference, which provides information -on every function of PICOS.

    - -
    -
    -

    Indices and tables

    - -
    - - -
    -
    -
    -
    -
    -

    Table Of Contents

    - - -

    Contents of this page

    - - -

    Next topic

    -

    Introduction

    -

    This Page

    - - -

    Download

    - - - - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/doc/full_html/0.1.2/index.html~ b/doc/full_html/0.1.2/index.html~ deleted file mode 100644 index 81ef2a6ad348cb9c6bc03aecb12ce8e3f2a3049b..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/index.html~ +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - - - - - PICOS: A Python Interface for Conic Optimization Solvers — picos 0.1.1 documentation - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    -

    PICOS: A Python Interface for Conic Optimization Solvers

    -

    News

    -
    -
      -
    • 08 Dec. 12: Picos 0.1.1 Released - -

      - - -
      -Major changes:

      -
      -
        -
      • Picos now interfaces GUROBI !
      • -
      • You can specify an initial solution to warm-start mixed integer optimizers.
      • -
      • Minor bugs with quadratic expressions corrected
      • -
      • It’s possible to return a reference to a constraint added -with add_constraint()
      • -
      -
      -
    • -
    -
    -

    PICOS Documentation contents

    -

    Welcome to the documentation of PICOS. -The latest version can be downloaded here, -and can be installed by following these instructions. -This documentation contains a tutorial and some examples, -which should already be enough for a quick start with PICOS. To go deeper, -have a look at the picos reference, which provides information -on every function of PICOS.

    - -
    -
    -

    Indices and tables

    - -
    - - -
    -
    -
    -
    -
    -

    Table Of Contents

    - - -

    Contents of this page

    - - -

    Next topic

    -

    Introduction

    -

    This Page

    - - -

    Download

    - - - - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/doc/full_html/0.1.2/intro.html b/doc/full_html/0.1.2/intro.html deleted file mode 100644 index 67572edb555f8e55c1952ad36b820601a048245e..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/intro.html +++ /dev/null @@ -1,475 +0,0 @@ - - - - - - - - - - Introduction — picos 0.1.2 documentation - - - - - - - - - - - - - - - - -

    Warning

    You are consulting the doc of a former version of PICOS.The latest version is HERE.

    - -
    -
    -
    -
    - -
    -

    Introduction

    -

    PICOS is a user friendly interface -to several conic and integer programming solvers, -very much like YALMIP under -MATLAB.

    -

    The main motivation for PICOS is to have the possibility to -enter an optimization problem as a high level model, -and to be able to solve it with several different solvers. -Multidimensional and matrix variables are handled in a natural fashion, -which makes it painless to formulate a SDP or a SOCP. -This is very useful for educational purposes, -and to quickly implement some models and -test their validity on simple examples.

    -

    Furthermore, with PICOS you can take advantage of the -python programming language to read and write data, -construct a list of constraints by using python list comprehensions, -take slices of multidimensional variables, etc.

    -

    It must also be said that PICOS is only a unified interface to other -already existing interfaces of optimization solvers. So you have -to install some additional packages each time you want to use PICOS with a new solver -(see a list of supported solvers, and the packages you will -have to install to use them). Furthermore, since PICOS is just another -interface layer, one should expect an overhead due to PICOS in the solution time.

    -

    Here is a very simple example of the usage of PICOS:

    -
    >>> import picos as pic
    ->>> prob = pic.Problem()
    ->>> x = prob.add_variable('x',1, vtype='integer') #scalar integer variable
    ->>> prob.add_constraint(x<5.2)                    #x less or equal to 5.2
    ->>> prob.set_objective('max',x)                   #maximize x
    ->>> print prob 
    ----------------------
    -optimization problem (MIP):
    -1 variables, 1 affine constraints
    -x   : (1, 1), integer
    -    maximize x
    -such that
    -  x < 5.2
    ----------------------
    ->>> sol = prob.solve(solver='zibopt',verbose=0)  #solve using the ZIB optimization suite
    ->>> print x                                      #optimal value of x 
    -5.0
    -
    -
    -

    Currently, PICOS can handle the following class of -optimzation problems. A list of currently -interfaced solvers can be found here.

    -
    -
      -
    • Linear Programming (LP)
    • -
    • Mixed Integer Programming (MIP)
    • -
    • Convex Quadratically constrained Quadratic Programming (convex QCQP)
    • -
    • Second Order Cone Programming (SOCP)
    • -
    • Semidefinite Programming (SDP)
    • -
    • General Quadratically constrained Quadratic Programming (QCQP)
    • -
    • Mixed Integer Quadratic Programming (MIQP)
    • -
    -
    -

    There exists a number of similar projects, so we provide a (non-exhausive) list -below, explaining their main differences with PICOS:

    -
    -
      -
    • CVXPY:

      -

      This is a python interface -that can be used to solve any convex optimization -problem. However, CVXPY interfaces only the open -source solver cvxopt for disciplined convex programming (DCP)

      -
    • -
    • Numberjack:

      -

      This python package also provides an interface to the integer programming solver scip, -as well as satisfiability (SAT) and constraint programming solvers (CP).

      -
    • -
    • OpenOpt:

      -

      This is probably the most complete -optimization suite written in python, handling a lot of problem types -and interfacing many opensource and commercial solvers. However, -the user has to transform every optimization problem into -a canonical form himself, and this is what we want to avoid with PICOS.

      -
    • -
    • puLP:

      -

      A user-friendly interface to a bunch of LP and MIP solvers.

      -
    • -
    • PYOMO:

      -

      A modelling language for optimization problems, a la AMPL.

      -
    • -
    • pyOpt:

      -

      A user-friendly package to formulate and solve general nonlinear constrained -optimization problems. Several open-source and commercial solvers are interfaced.

      -
    • -
    • python-zibopt:

      -

      This is a user-friendly interface to the ZIB optimization suite -for solving mixed integer programs (MIP). PICOS -provides an interface to this interface.

      -
    • -
    -
    -
    -

    First Example

    -

    We give below a simple example of the use of PICOS, to solve -an SOCP which arises in optimal experimental design. -More examples can be found here. -Given some observation matrices A_1,\ldots,A_s, -with A_i \in \mathbb{R}^{m \times l_i}, -and a coefficient matrix K \in \mathbb{R}^{m \times r}, -the problem to solve is:

    -
    -

    \begin{center}
-\begin{eqnarray*}
-&\underset{\substack{\mu \in \mathbb{R}^s\\
-                     \forall i \in [s],\ Z_i \in \mathbb{R}^{l_i \times r}}}{\mbox{minimize}}
-                   & \sum_{i=1}^s \mu_i\\
-&\mbox{subject to} & \sum_{i=1}^s A_i Z_i = K\\
-&                  & \forall i \in [s],\ \Vert Z_i \Vert_F \leq \mu_i,
-\end{eqnarray*}
-\end{center}

    -

    where \Vert M \Vert_F := \sqrt{\mbox{trace} M M^T} denotes the -Frobenius norm of -M. This problem can be entered and solved as follows with PICOS:

    -
    import picos as pic
    -import cvxopt as cvx
    -
    -#generate data
    -A = [   cvx.sparse([[1 ,2 ,0 ],
    -                    [2 ,0 ,0 ]]),
    -        cvx.sparse([[0 ,2 ,2 ]]),
    -        cvx.sparse([[0 ,2 ,-1],
    -                    [-1,0 ,2 ],
    -                    [0 ,1 ,0 ]])
    -    ]
    -K = cvx.sparse([[1 ,1 ,1 ],
    -                [1 ,-5,-5]])
    -
    -#size of the data
    -s = len(A)
    -m = A[0].size[0]
    -l = [ Ai.size[1] for Ai in A ]
    -r = K.size[1]
    -
    -#creates a problem and the optimization variables
    -prob = pic.Problem()
    -mu = prob.add_variable('mu',s)
    -Z  = [prob.add_variable('Z[' + str(i) + ']', (l[i],r))
    -      for i in range(s)]
    -
    -#convert the constants into params of the problem
    -A = pic.new_param('A',A)
    -K = pic.new_param('K',K)
    -
    -#add the constraints
    -prob.add_constraint( pic.sum([ A[i]*Z[i] for i in range(s)], #summands
    -                            'i',                            #name of the index
    -                            '[s]'                           #set to which the index belongs
    -                           ) == K
    -                   )
    -prob.add_list_of_constraints( [ abs(Z[i]) < mu[i] for i in range(s)], #constraints
    -                              'i',                                    #index of the constraints
    -                              '[s]'                                   #set to which the index belongs
    -                            )
    -
    -#sets the objective
    -prob.set_objective('min', 1 | mu ) # scalar product of the vector of all ones with mu
    -
    -#display the problem
    -print prob
    -
    -#call to the solver cvxopt
    -sol = prob.solve(solver='cvxopt', verbose = 0)
    -
    -#show the value of the optimal variable
    -print '\n  mu ='
    -print mu
    -
    -#show the dual variable of the equality constraint
    -print'\nThe optimal dual variable of the'
    -print prob.get_constraint(0)
    -print 'is :'
    -print prob.get_constraint(0).dual
    -
    -
    -

    This generates the output:

    -
    ---------------------
    -optimization problem  (SOCP):
    -15 variables, 6 affine constraints, 15 vars in 3 SO cones
    -
    -mu  : (3, 1), continuous
    -Z   : list of 3 variables, different sizes, continuous
    -
    -    minimize 〈 |1| | mu 〉
    -such that
    -  Σ_{i in [s]} A[i]*Z[i] = K
    -  ||Z[i]|| < mu[i] for all i in [s]
    ----------------------
    -
    -  mu =
    -[ 6.60e-01]
    -[ 2.42e+00]
    -[ 1.64e-01]
    -
    -
    -The optimal dual variable of the
    -# (3x2)-affine constraint : Σ_{i in [s]} A[i]*Z[i] = K #
    -is :
    -[-3.41e-01]
    -[ 9.16e-02]
    -[-1.88e-01]
    -[-3.52e-01]
    -[ 2.32e-01]
    -[ 2.59e-01]
    -
    -
    -
    -
    -

    Solvers

    -

    Below is a list of the solvers currently interfaced by PICOS. -We have indicated the classes of optimization problems that -the solver can handle via PICOS. Note however -that the solvers listed below might have other -features that are not handled by PICOS.

    -
    -
      -
    • cvxopt (LP, SOCP, SDP, GP)
    • -
    • smcp (LP, SOCP, SDP)
    • -
    • mosek (LP, MIP, (MI)SOCP, convex QCQP, MIQP)
    • -
    • cplex (LP, MIP, (MI)SOCP, convex QCQP, MIQP)
    • -
    • gurobi (LP, MIP, (MI)SOCP, convex QCQP, MIQP)
    • -
    • zibopt (soplex + -scip : LP, MIP, MIQP, general QCQP).
    • -
    -
    -

    To use one of these solver, make sure that the python interface to this solver is correctly -installed and linked in your PYTHONPATH variable. The sites of the solvers -give instructions to do this, except for zibopt, for which you must install -a separate interface: python-zibopt. -To check your installation, you can simply verify that -import cvxopt (resp. smcp, mosek, cplex, zibopt, gurobipy) does -not raise an ImportError. The command

    -
    >>> import picos;picos.tools.available_solvers() 
    -
    -
    -

    returns the list of correctly installed solvers.

    -
    -
    -

    Requirements

    -

    PICOS has two dependencies: numpy -and -cvxopt. (cvxopt is needed even if you -do not use the cvxopt solvers, because picos relies on the -sparse matrices defined in cvxopt.)

    -

    In addition, you must install separately the python interfaces to each solver -you want to use.

    -
    -
    -

    Installation

    -

    After having downloaded the latest version of picos, -and extracted it in the directory of your choice, -you can install it by typing the following line as root in a terminal:

    -
    $ python setup.py install
    -
    -
    -

    If you do not have administrator rights, you can also do a local -installation of picos with the prefix scheme. For example:

    -
    $ python setup.py install --prefix ~/python
    -
    -
    -

    and make sure that $HOME'/python/lib/python2.x/site-packages/' -is in your PYTHONPATH variable.

    -

    To test your installation, you can run the test file:

    -
    $ python picos/test_picos.py
    -
    -
    -

    This will generate a table with a list of results -for each available solver and class of optimization problems.

    -
    -
    -

    License

    -

    This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version.

    -

    This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details.

    -

    You should have received a copy of the GNU General Public License -along with this program. If not, see <http://www.gnu.org/licenses/>.

    -
    -
    -

    Author and contributors

    -
    -
      -
    • Author: Picos initial author and current primary developer is:

      -
      -

      Guillaume Sagnol, <sagnol( a t )zib.de>

      -
      -
    • -
    • Contributors: People who contributed to Picos and their contributions -(in no particular order) are:

      -
      -
      -
      -
    • -
    -
    -
    -
    - - -
    -
    -
    -
    -
    -

    Table Of Contents

    - - -

    Contents of this page

    - - -

    Previous topic

    -

    PICOS: A Python Interface for Conic Optimization Solvers

    -

    Next topic

    -

    Tutorial

    -

    This Page

    - - -

    Download

    - - - - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/doc/full_html/0.1.2/objects.inv b/doc/full_html/0.1.2/objects.inv deleted file mode 100644 index 25a86a341605887725f0180dc9f181f774ef4478..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/objects.inv and /dev/null differ diff --git a/doc/full_html/0.1.2/optdes.html b/doc/full_html/0.1.2/optdes.html deleted file mode 100644 index a93b2d2cb16edf126904e92879ec9dd3a0c3cc21..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/optdes.html +++ /dev/null @@ -1,1183 +0,0 @@ - - - - - - - - - - Examples from Optimal Experimental Design — picos 0.1.2 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Warning

    You are consulting the doc of a former version of PICOS.The latest version is HERE.

    - -
    -
    -
    -
    - -
    -

    Examples from Optimal Experimental Design

    -

    Optimal experimental design is a theory -at the interface of statistics and optimization, -which studies how to allocate some experimental -effort within a set of available expeiments. -The goal is to allow for the best possible -estimation of an unknown parameter \theta. -In what follows, we assume the standard linear model with -multiresponse experiments: the i^{\textrm{th}} -experiment gives a multidimensional observation that -can be written as y_i = A_i^T \theta+\epsilon_i, -where y_i is of dimension l_i, -A_i is a m \times l_i- matrix, -and the noise vectors \epsilon_i are i.i.d. with a unit variance.

    -

    Several optimization criterions exist, leading to different SDP, SOCP and LP -formulations. -As such, optimal experimental design problens are natural examples for problems -in conic optimization. For a review of the different formulations -and more references, see [1].

    -

    The code below initializes the data used in all the examples of this page. -It should be run prior to any of the codes presented in this page.

    -
    import cvxopt as cvx
    -import picos as pic
    -
    -#---------------------------------#
    -# First generate some data :      #
    -#       _ a list of 8 matrices A  #
    -#       _ a vector c              #
    -#---------------------------------#
    -A=[ cvx.matrix([[1,0,0,0,0],
    -                [0,3,0,0,0],
    -                [0,0,1,0,0]]),
    -cvx.matrix([[0,0,2,0,0],
    -                [0,1,0,0,0],
    -                [0,0,0,1,0]]),
    -cvx.matrix([[0,0,0,2,0],
    -                [4,0,0,0,0],
    -                [0,0,1,0,0]]),
    -cvx.matrix([[1,0,0,0,0],
    -                [0,0,2,0,0],
    -                [0,0,0,0,4]]),
    -cvx.matrix([[1,0,2,0,0],
    -                [0,3,0,1,2],
    -                [0,0,1,2,0]]),
    -cvx.matrix([[0,1,1,1,0],
    -                [0,3,0,1,0],
    -                [0,0,2,2,0]]),
    -cvx.matrix([[1,2,0,0,0],
    -                [0,3,3,0,5],
    -                [1,0,0,2,0]]),
    -cvx.matrix([[1,0,3,0,1],
    -                [0,3,2,0,0],
    -                [1,0,0,2,0]])
    -]
    -
    -c = cvx.matrix([1,2,3,4,5])
    -
    -
    -
    -

    c-optimality, multi-response: SOCP

    -

    We compute the c-optimal design (c=[1,2,3,4,5]) -for the observation matrices A[i].T from the variable A defined above. -The results below suggest that we should allocate 12.8% of the -experimental effort on experiment #5, and 87.2% on experiment #7.

    -
    -

    Primal Problem

    -

    The SOCP for multiresponse c-optimal design is:

    -
    -

    \begin{center}
-\begin{eqnarray*}
-&\underset{\substack{\mu \in \mathbb{R}^s\\
-                     \forall i \in [s],\ z_i \in \mathbb{R}^{l_i}}}{\mbox{minimize}}
-                   & \sum_{i=1}^s \mu_i\\
-&\mbox{subject to} & \sum_{i=1}^s A_i z_i = c\\
-&                  & \forall i \in [s],\ \Vert z_i \Vert_2 \leq \mu_i,
-\end{eqnarray*}
-\end{center}

    -
    #create the problem, variables and params
    -prob_primal_c=pic.Problem()
    -AA=[cvx.sparse(a,tc='d') for a in A] #each AA[i].T is a 3 x 5 observation matrix
    -s=len(AA)
    -AA=pic.new_param('A',AA)
    -cc=pic.new_param('c',c)
    -z=[prob_primal_c.add_variable('z['+str(i)+']',AA[i].size[1]) for i in range(s)]
    -mu=prob_primal_c.add_variable('mu',s)
    -
    -#define the constraints and objective function
    -prob_primal_c.add_list_of_constraints(
    -        [abs(z[i])<mu[i] for i in range(s)], #constraints
    -        'i', #index
    -        '[s]' #set to which the index belongs
    -        )
    -prob_primal_c.add_constraint(
    -        pic.sum(
    -                [AA[i]*z[i] for i in range(s)], #summands
    -                'i', #index
    -                '[s]' #set to which the index belongs
    -                )
    -        == cc )
    -prob_primal_c.set_objective('min',1|mu)
    -
    -#solve the problem and retrieve the optimal weights of the optimal design.
    -print prob_primal_c
    -prob_primal_c.solve(verbose=0,solver='cvxopt')
    -
    -mu=mu.value
    -w=mu/sum(mu) #normalize mu to get the optimal weights
    -print
    -print 'The optimal deign is:'
    -print w
    -
    -
    -

    Generated output:

    -
    ---------------------
    -optimization problem  (SOCP):
    -32 variables, 5 affine constraints, 32 vars in 8 SO cones
    -
    -z   : list of 8 variables, (3, 1), continuous
    -mu  : (8, 1), continuous
    -
    -        minimize 〈 |1| | mu 〉
    -such that
    -||z[i]|| < mu[i] for all i in [s]
    -Σ_{i in [s]} A[i]*z[i] = c
    ----------------------
    -
    -The optimal deign is:
    -[...]
    -[...]
    -[...]
    -[...]
    -[ 1.28e-01]
    -[...]
    -[ 8.72e-01]
    -[...]
    -
    -
    -

    The [...] above indicate a numerical zero entry -(i.e., which can be something like 2.84e-10). -We use the ellipsis ... instead for clarity and compatibility with doctest.

    -
    -
    -

    Dual Problem

    -

    This is only to check that we obtain the same solution with the dual problem, -and to provide one additional example in this doc:

    -
    -

    \begin{center}
-\begin{eqnarray*}
-&\underset{u \in \mathbb{R}^m}{\mbox{maximize}}
-                   & c^T u\\
-&\mbox{subject to} & \forall i \in [s],\ \Vert A_i^T u \Vert_2 \leq 1
-\end{eqnarray*}
-\end{center}

    -
    #create the problem, variables and params
    -prob_dual_c=pic.Problem()
    -AA=[cvx.sparse(a,tc='d') for a in A] #each AA[i].T is a 3 x 5 observation matrix
    -s=len(AA)
    -AA=pic.new_param('A',AA)
    -cc=pic.new_param('c',c)
    -u=prob_dual_c.add_variable('u',c.size)
    -
    -#define the constraints and objective function
    -prob_dual_c.add_list_of_constraints(
    -        [abs(AA[i].T*u)<1 for i in range(s)], #constraints
    -        'i', #index
    -        '[s]' #set to which the index belongs
    -        )
    -prob_dual_c.set_objective('max', cc|u)
    -
    -#solve the problem and retrieve the weights of the optimal design
    -print prob_dual_c
    -prob_dual_c.solve(verbose=0)
    -
    -mu = [cons.dual[0] for cons in prob_dual_c.get_constraint((0,))] #Lagrangian duals of the SOC constraints
    -mu = cvx.matrix(mu)
    -w=mu/sum(mu) #normalize mu to get the optimal weights
    -print
    -print 'The optimal deign is:'
    -print w
    -
    -
    -

    Generated output:

    -
    ---------------------
    -optimization problem  (SOCP):
    -5 variables, 0 affine constraints, 32 vars in 8 SO cones
    -
    -u   : (5, 1), continuous
    -
    -        maximize 〈 c | u 〉
    -such that
    -||A[i].T*u|| < 1 for all i in [s]
    ----------------------
    -
    -The optimal deign is:
    -[...]
    -[...]
    -[...]
    -[...]
    -[ 1.28e-01]
    -[...]
    -[ 8.72e-01]
    -[...]
    -
    -
    -
    -
    -
    -

    c-optimality, single-response: LP

    -

    When the observation matrices are row vectors (single-response framework), -the SOCP above reduces to a simple LP, because the variables -z_i are scalar. -We solve below the LP for the case where there are 12 -available experiments, corresponding to the columns of the matrices -A[4], A[5], A[6], and A[7] defined in the preambule.

    -

    The optimal design allocates 3.37% to experiment #5 (2nd column of A[5]), -27.9% to experiment #7 (1st column of A[6]), -11.8% to experiment #8 (2nd column of A[6]), -27.6% to experiment #9 (3rd column of A[6]), -and 29.3% to experiment #11 (2nd column of A[7]).

    -
    #create the problem, variables and params
    -prob_LP=pic.Problem()
    -AA=[cvx.sparse(a[:,i],tc='d') for i in range(3) for a in A[4:]] #12 column vectors
    -s=len(AA)
    -AA=pic.new_param('A',AA)
    -cc=pic.new_param('c',c)
    -z=[prob_LP.add_variable('z['+str(i)+']',1) for i in range(s)]
    -mu=prob_LP.add_variable('mu',s)
    -
    -#define the constraints and objective function
    -prob_LP.add_list_of_constraints(
    -        [abs(z[i])<mu[i] for i in range(s)], #constraints handled as -mu_i < z_i< mu_i
    -        'i', #index
    -        '[s]' #set to which the index belongs
    -        )
    -prob_LP.add_constraint(
    -        pic.sum(
    -                [AA[i]*z[i] for i in range(s)], #summands
    -                'i', #index
    -                '[s]' #set to which the index belongs
    -                )
    -        == cc )
    -prob_LP.set_objective('min',1|mu)
    -
    -#solve the problem and retrieve the weights of the optimal design
    -print prob_LP
    -prob_LP.solve(verbose=0)
    -
    -mu=mu.value
    -w=mu/sum(mu) #normalize mu to get the optimal weights
    -print
    -print 'The optimal deign is:'
    -print w
    -
    -
    -

    Note that there are no cone constraints, because -the constraints of the form |z_i| \leq \mu_i are handled as two -inequalities when z_i is scalar, so the problem is a LP indeed:

    -
    ---------------------
    -optimization problem  (LP):
    -24 variables, 29 affine constraints
    -
    -z   : list of 12 variables, (1, 1), continuous
    -mu  : (12, 1), continuous
    -
    -        minimize 〈 |1| | mu 〉
    -such that
    -||z[i]|| < mu[i] for all i in [s]
    -Σ_{i in [s]} A[i]*z[i] = c
    ----------------------
    -
    -The optimal deign is:
    -[...]
    -[...]
    -[...]
    -[...]
    -[ 3.37e-02]
    -[...]
    -[ 2.79e-01]
    -[ 1.18e-01]
    -[ 2.76e-01]
    -[...]
    -[ 2.93e-01]
    -[...]
    -
    -
    -
    -
    -

    SDP formulation of the c-optimal design problem

    -

    We give below the SDP for c-optimality, in primal and dual -form. You can observe that we obtain the same results as -with the SOCP presented earlier: -12.8% on experiment #5, and 87.2% on experiment #7.

    -
    -

    Primal Problem

    -

    The SDP formulation of the c-optimal design problem is:

    -
    -

    \begin{center}
-\begin{eqnarray*}
-&\underset{\mu \in \mathbb{R}^s}{\mbox{minimize}}
-                   & \sum_{i=1}^s \mu_i\\
-&\mbox{subject to} & \sum_{i=1}^s \mu_i A_i A_i^T \succeq c c^T,\\
-&                  & \mu \geq 0.
-\end{eqnarray*}
-\end{center}

    -
    #create the problem, variables and params
    -prob_SDP_c_primal=pic.Problem()
    -AA=[cvx.sparse(a,tc='d') for a in A] #each AA[i].T is a 3 x 5 observation matrix
    -s=len(AA)
    -AA=pic.new_param('A',AA)
    -cc=pic.new_param('c',c)
    -mu=prob_SDP_c_primal.add_variable('mu',s)
    -
    -#define the constraints and objective function
    -prob_SDP_c_primal.add_constraint(
    -        pic.sum(
    -        [mu[i]*AA[i]*AA[i].T for i in range(s)], #summands
    -        'i', #index
    -        '[s]' #set to which the index belongs
    -        )
    -        >> cc*cc.T )
    -prob_SDP_c_primal.add_constraint(mu>0)
    -prob_SDP_c_primal.set_objective('min',1|mu)
    -
    -#solve the problem and retrieve the weights of the optimal design
    -print prob_SDP_c_primal
    -prob_SDP_c_primal.solve(verbose=0)
    -w=mu.value
    -w=w/sum(w) #normalize mu to get the optimal weights
    -print
    -print 'The optimal deign is:'
    -print w
    -
    -
    -
    ---------------------
    -optimization problem  (SDP):
    -8 variables, 8 affine constraints, 15 vars in 1 SD cones
    -
    -mu  : (8, 1), continuous
    -
    -        minimize 〈 |1| | mu 〉
    -such that
    -Σ_{i in [s]} mu[i]*A[i]*A[i].T ≽ c*c.T
    -mu > |0|
    ----------------------
    -
    -The optimal deign is:
    -[...]
    -[...]
    -[...]
    -[...]
    -[ 1.28e-01]
    -[...]
    -[ 8.72e-01]
    -[...]
    -
    -
    -
    -
    -

    Dual Problem

    -

    This is only to check that we obtain the same solution with the dual problem, -and to provide one additional example in this doc:

    -
    -

    \begin{center}
-\begin{eqnarray*}
-&\underset{X \in \mathbb{R}^{m \times m}}{\mbox{maximize}}
-                   &  c^T X c\\
-&\mbox{subject to} & \forall i \in [s],\ \langle A_i A_i^T,\ X \rangle \leq 1,\\
-&                  &  X \succeq 0.
-\end{eqnarray*}
-\end{center}

    -
    #create the problem, variables and params
    -prob_SDP_c_dual=pic.Problem()
    -AA=[cvx.sparse(a,tc='d') for a in A] #each AA[i].T is a 3 x 5 observation matrix
    -s=len(AA)
    -AA=pic.new_param('A',AA)
    -cc=pic.new_param('c',c)
    -m =c.size[0]
    -X=prob_SDP_c_dual.add_variable('X',(m,m),vtype='symmetric')
    -
    -#define the constraints and objective function
    -prob_SDP_c_dual.add_list_of_constraints(
    -        [(AA[i]*AA[i].T | X ) <1 for i in range(s)], #constraints
    -        'i', #index
    -        '[s]' #set to which the index belongs
    -        )
    -prob_SDP_c_dual.add_constraint(X>>0)
    -prob_SDP_c_dual.set_objective('max', cc.T*X*cc)
    -
    -#solve the problem and retrieve the weights of the optimal design
    -print prob_SDP_c_dual
    -prob_SDP_c_dual.solve(verbose=0,solver='smcp')
    -mu = [cons.dual[0] for cons in prob_SDP_c_dual.get_constraint((0,))] #Lagrangian duals of the SOC constraints
    -mu = cvx.matrix(mu)
    -w=mu/sum(mu) #normalize mu to get the optimal weights
    -print
    -print 'The optimal deign is:'
    -print w
    -print 'and the optimal positive semidefinite matrix X is'
    -print X
    -
    -
    -
    ---------------------
    -optimization problem  (SDP):
    -15 variables, 8 affine constraints, 15 vars in 1 SD cones
    -
    -X   : (5, 5), symmetric
    -
    -        maximize c.T*X*c
    -such that
    -〈 A[i]*A[i].T | X 〉 < 1.0 for all i in [s]
    -X ≽ |0|
    ----------------------
    -
    -The optimal deign is:
    -[...]
    -[...]
    -[...]
    -[...]
    -[ 1.28e-01]
    -[...]
    -[ 8.72e-01]
    -[...]
    -
    -and the optimal positive semidefinite matrix X is
    -[ 5.92e-03  8.98e-03  2.82e-03 -3.48e-02 -1.43e-02]
    -[ 8.98e-03  1.36e-02  4.27e-03 -5.28e-02 -2.17e-02]
    -[ 2.82e-03  4.27e-03  1.34e-03 -1.66e-02 -6.79e-03]
    -[-3.48e-02 -5.28e-02 -1.66e-02  2.05e-01  8.39e-02]
    -[-1.43e-02 -2.17e-02 -6.79e-03  8.39e-02  3.44e-02]
    -
    -
    -
    -
    -
    -

    A-optimality: SOCP

    -

    We compute the A-optimal design -for the observation matrices A[i].T defined in the preambule. -The optimal design allocates -24.9% on experiment #3, -14.2% on experiment #4, -8.51% on experiment #5, -12.1% on experiment #6, -13.2% on experiment #7, -and 27.0% on experiment #8.

    -
    -
    [ 2.49e-01] -[ 1.42e-01] -[ 8.51e-02] -[ 1.21e-01] -[ 1.32e-01] -[ 2.70e-01]
    -
    -

    Primal Problem

    -

    The SOCP for the A-optimal design problem is:

    -
    -

    \begin{center}
-\begin{eqnarray*}
-&\underset{\substack{\mu \in \mathbb{R}^s\\
-                     \forall i \in [s],\ Z_i \in \mathbb{R}^{l_i \times m}}}{\mbox{minimize}}
-                   & \sum_{i=1}^s \mu_i\\
-&\mbox{subject to} & \sum_{i=1}^s A_i Z_i = I\\
-&                  & \forall i \in [s],\ \Vert Z_i \Vert_F \leq \mu_i,
-\end{eqnarray*}
-\end{center}

    -
    #create the problem, variables and params
    -prob_primal_A=pic.Problem()
    -AA=[cvx.sparse(a,tc='d') for a in A] #each AA[i].T is a 3 x 5 observation matrix
    -s=len(AA)
    -AA=pic.new_param('A',AA)
    -Z=[prob_primal_A.add_variable('Z['+str(i)+']',AA[i].T.size) for i in range(s)]
    -mu=prob_primal_A.add_variable('mu',s)
    -
    -#define the constraints and objective function
    -prob_primal_A.add_list_of_constraints(
    -        [abs(Z[i])<mu[i] for i in range(s)], #constraints
    -        'i', #index
    -        '[s]' #set to which the index belongs
    -        )
    -prob_primal_A.add_constraint(
    -        pic.sum(
    -        [AA[i]*Z[i] for i in range(s)], #summands
    -        'i', #index
    -        '[s]' #set to which the index belongs
    -        )
    -        == 'I' )
    -prob_primal_A.set_objective('min',1|mu)
    -
    -#solve the problem and retrieve the weights of the optimal design
    -print prob_primal_A
    -prob_primal_A.solve(verbose=0)
    -w=mu.value
    -w=w/sum(w) #normalize mu to get the optimal weights
    -print
    -print 'The optimal deign is:'
    -print w
    -
    -
    -
    ---------------------
    -optimization problem  (SOCP):
    -128 variables, 25 affine constraints, 128 vars in 8 SO cones
    -
    -Z   : list of 8 variables, (3, 5), continuous
    -mu  : (8, 1), continuous
    -
    -        minimize 〈 |1| | mu 〉
    -such that
    -||Z[i]|| < mu[i] for all i in [s]
    -Σ_{i in [s]} A[i]*Z[i] = I
    ----------------------
    -
    -The optimal deign is:
    -[...]
    -[...]
    -[ 2.49e-01]
    -[ 1.42e-01]
    -[ 8.51e-02]
    -[ 1.21e-01]
    -[ 1.32e-01]
    -[ 2.70e-01]
    -
    -
    -
    -
    -

    Dual Problem

    -

    This is only to check that we obtain the same solution with the dual problem, -and to provide one additional example in this doc:

    -
    -

    \begin{center}
-\begin{eqnarray*}
-&\underset{U \in \mathbb{R}^{m \times m}}{\mbox{maximize}}
-                   &  \mbox{trace}\ U\\
-&\mbox{subject to} & \forall i \in [s],\ \Vert A_i^T U \Vert_2 \leq 1
-\end{eqnarray*}
-\end{center}

    -
    #create the problem, variables and params
    -prob_dual_A=pic.Problem()
    -AA=[cvx.sparse(a,tc='d') for a in A] #each AA[i].T is a 3 x 5 observation matrix
    -s=len(AA)
    -m=AA[0].size[0]
    -AA=pic.new_param('A',AA)
    -U=prob_dual_A.add_variable('U',(m,m))
    -
    -#define the constraints and objective function
    -prob_dual_A.add_list_of_constraints(
    -        [abs(AA[i].T*U)<1 for i in range(s)], #constraints
    -        'i', #index
    -        '[s]' #set to which the index belongs
    -        )
    -prob_dual_A.set_objective('max', 'I'|U)
    -
    -#solve the problem and retrieve the weights of the optimal design
    -print prob_dual_A
    -prob_dual_A.solve(verbose = 0)
    -
    -mu = [cons.dual[0] for cons in prob_dual_A.get_constraint((0,))] #Lagrangian duals of the SOC constraints
    -mu = cvx.matrix(mu)
    -w=mu/sum(mu) #normalize mu to get the optimal weights
    -print
    -print 'The optimal deign is:'
    -print w
    -
    -
    -
    ---------------------
    -optimization problem  (SOCP):
    -25 variables, 0 affine constraints, 128 vars in 8 SO cones
    -
    -U   : (5, 5), continuous
    -
    -        maximize trace( U )
    -such that
    -||A[i].T*U|| < 1 for all i in [s]
    ----------------------
    -
    -The optimal deign is:
    -[...]
    -[...]
    -[ 2.49e-01]
    -[ 1.42e-01]
    -[ 8.51e-02]
    -[ 1.21e-01]
    -[ 1.32e-01]
    -[ 2.70e-01]
    -
    -
    -
    -
    -
    -

    A-optimality with multiple constraints: SOCP

    -

    A-optimal designs can also be computed by SOCP -when the vector of weights \mathbf{w} is subject -to several linear constraints. -To give an example, we compute the A-optimal design for -the observation matrices given in the preambule, when the weights -must satisfy: \sum_{i=0}^3 w_i \leq 0.5 and \sum_{i=4}^7 w_i \leq 0.5. -This problem has the following SOCP formulation:

    -
    -

    \begin{center}
-\begin{eqnarray*}
-&\underset{\substack{\mathbf{w} \in \mathbb{R}^s\\
-                     \mu \in \mathbb{R}^s\\
-                     \forall i \in [s],\ Z_i \in \mathbb{R}^{l_i \times m}}}{\mbox{minimize}}
-                   & \sum_{i=1}^s \mu_i\\
-&\mbox{subject to} & \sum_{i=1}^s A_i Z_i = I\\
-&                  & \sum_{i=0}^3 w_i \leq 0.5\\
-&                  & \sum_{i=4}^7 w_i \leq 0.5\\
-&                  & \forall i \in [s],\ \Vert Z_i \Vert_F^2 \leq \mu_i w_i,
-\end{eqnarray*}
-\end{center}

    -

    The optimal solution allocates 29.7% and 20.3% to the experiments #3 and #4, -and respectively 6.54%, 11.9%, 9.02% and 22.5% to the experiments #5 to #8:

    -
    #create the problem, variables and params
    -prob_A_multiconstraints=pic.Problem()
    -AA=[cvx.sparse(a,tc='d') for a in A] #each AA[i].T is a 3 x 5 observation matrix
    -s=len(AA)
    -AA=pic.new_param('A',AA)
    -
    -mu=prob_A_multiconstraints.add_variable('mu',s)
    -w =prob_A_multiconstraints.add_variable('w',s)
    -Z=[prob_A_multiconstraints.add_variable('Z['+str(i)+']',AA[i].T.size) for i in range(s)]
    -
    -#define the constraints and objective function
    -prob_A_multiconstraints.add_constraint(
    -        pic.sum(
    -        [AA[i]*Z[i] for i in range(s)], #summands
    -        'i', #index
    -        '[s]' #set to which the index belongs
    -        )
    -        == 'I' )
    -prob_A_multiconstraints.add_constraint( (1|w[:4]) < 0.5)
    -prob_A_multiconstraints.add_constraint( (1|w[4:]) < 0.5)
    -prob_A_multiconstraints.add_list_of_constraints(
    -                [abs(Z[i])**2<mu[i]*w[i]
    -                for i in range(s)],'i','[s]')
    -prob_A_multiconstraints.set_objective('min',1|mu)
    -
    -#solve the problem and retrieve the weights of the optimal design
    -print prob_A_multiconstraints
    -prob_A_multiconstraints.solve(verbose=0)
    -w=w.value
    -w=w/sum(w) #normalize w to get the optimal weights
    -print
    -print 'The optimal deign is:'
    -print w
    -
    -
    -
    ---------------------
    -optimization problem  (SOCP):
    -136 variables, 27 affine constraints, 136 vars in 8 SO cones
    -
    -Z   : list of 8 variables, (3, 5), continuous
    -mu  : (8, 1), continuous
    -w   : (8, 1), continuous
    -
    -        minimize 〈 |1| | mu 〉
    -such that
    -Σ_{i in [s]} A[i]*Z[i] = I
    -〈 |1| | w[:4] 〉 < 0.5
    -〈 |1| | w[4:] 〉 < 0.5
    -||Z[i]||^2 < ( mu[i])( w[i]) for all i in [s]
    ----------------------
    -
    -The optimal deign is:
    -[...]
    -[...]
    -[ 2.97e-01]
    -[ 2.03e-01]
    -[ 6.54e-02]
    -[ 1.19e-01]
    -[ 9.02e-02]
    -[ 2.25e-01]
    -
    -
    -
    -
    -

    Exact A-optimal design: MISOCP

    -

    In the exact version of A-optimality, a number N \in \mathbb{N} -of experiments is given, and the goal is to find the optimal number of times -n_i \in \mathbb{N} that the experiment #i should be performed, -with \sum_i n_i =N.

    -

    The SOCP formulation of A-optimality for constrained designs -also accept integer constraints, which results in a MISOCP for exact A-optimality:

    -
    -

    \begin{center}
-\begin{eqnarray*}
-&\underset{\substack{\mathbf{t} \in \mathbb{R}^s\\
-                     \mathbf{n} \in \mathbb{N}^s\\
-                     \forall i \in [s],\ Z_i \in \mathbb{R}^{l_i \times m}}}{\mbox{minimize}}
-                   & \sum_{i=1}^s t_i\\
-&\mbox{subject to} & \sum_{i=1}^s A_i Z_i = I\\
-&                  & \forall i \in [s],\ \Vert Z_i \Vert_F^2 \leq n_i t_i,\\
-&                  & \sum_{i=1}^s n_i = N.
-\end{eqnarray*}
-\end{center}

    -

    The exact optimal design is \mathbf{n}=[0,0,5,3,2,2,3,5]:

    -
    #create the problem, variables and params
    -prob_exact_A=pic.Problem()
    -AA=[cvx.sparse(a,tc='d') for a in A] #each AA[i].T is a 3 x 5 observation matrix
    -s=len(AA)
    -m=AA[0].size[0]
    -AA=pic.new_param('A',AA)
    -cc=pic.new_param('c',c)
    -N =pic.new_param('N',20) #number of experiments allowed
    -I =pic.new_param('I',cvx.spmatrix([1]*m,range(m),range(m),(m,m))) #identity matrix
    -Z=[prob_exact_A.add_variable('Z['+str(i)+']',AA[i].T.size) for i in range(s)]
    -n=prob_exact_A.add_variable('n',s, vtype='integer')
    -t=prob_exact_A.add_variable('t',s)
    -
    -#define the constraints and objective function
    -prob_exact_A.add_list_of_constraints(
    -        [abs(Z[i])**2<n[i]*t[i] for i in range(s)], #constraints
    -        'i', #index
    -        '[s]' #set to which the index belongs
    -        )
    -prob_exact_A.add_constraint(
    -        pic.sum(
    -        [AA[i]*Z[i] for i in range(s)], #summands
    -        'i', #index
    -        '[s]' #set to which the index belongs
    -        )
    -        == I )
    -
    -prob_exact_A.add_constraint( 1|n < N )
    -prob_exact_A.set_objective('min',1|t)
    -
    -#solve the problem and display the optimal design
    -print prob_exact_A
    -prob_exact_A.solve(solver='mosek',verbose = 0)
    -print n
    -
    -
    -
    ---------------------
    -optimization problem  (MISOCP):
    -136 variables, 26 affine constraints, 136 vars in 8 SO cones
    -
    -Z       : list of 8 variables, (3, 5), continuous
    -n       : (8, 1), integer
    -t       : (8, 1), continuous
    -
    -        minimize 〈 |1| | t 〉
    -such that
    -||Z[i]||^2 < ( n[i])( t[i]) for all i in [s]
    -Σ_{i in [s]} A[i]*Z[i] = I
    -〈 |1| | n 〉 < N
    ----------------------
    -[...]
    -[...]
    -[ 5.00e+00]
    -[ 3.00e+00]
    -[ 2.00e+00]
    -[ 2.00e+00]
    -[ 3.00e+00]
    -[ 5.00e+00]
    -
    -
    -
    -
    -

    approximate and exact D-optimal design: (MI)SOCP

    -

    The D-optimal design problem has a convex programming formulation:

    -
    -

    \begin{center}
-\begin{eqnarray*}
-&\underset{\substack{\mathbf{L} \in \mathbb{R}^{m \times m}\\
-                     \mathbf{w} \in \mathbb{R}^s\\
-                     \forall i \in [s],\ V_i \in \mathbb{R}^{l_i \times m}}}{\mbox{maximize}}
-                   & \log \prod_{i=1}^m L_{i,i}\\
-&\mbox{subject to} & \sum_{i=1}^s A_i V_i = L,\\
-&                  & L\ \mbox{lower triangular},\\
-&                  & \Vert V_i \Vert_F \leq \sqrt{m}\ w_i,\\
-&                  & \sum_{i=1}^s w_i \leq 1.
-\end{eqnarray*}
-\end{center}

    -

    By introducing new SOC constraints, we can create a variable u_{01234} -such that u_{01234}^8 \leq \prod_{i=0}^4 L_{i,i}. Hence, the -D-optimal problem can be solved by second order cone programming. The example -below allocates respectively 22.7%, 3.38%, 1.65%, 5.44%, 31.8% and 35.1% -to the experiments #3 to #8.

    -
    #create the problem, variables and params
    -prob_D = pic.Problem()
    -AA=[cvx.sparse(a,tc='d') for a in A] #each AA[i].T is a 3 x 5 observation matrix
    -s=len(AA)
    -m=AA[0].size[0]
    -AA=pic.new_param('A',AA)
    -mm=pic.new_param('m',m)
    -L=prob_D.add_variable('L',(m,m))
    -V=[prob_D.add_variable('V['+str(i)+']',AA[i].T.size) for i in range(s)]
    -w=prob_D.add_variable('w',s)
    -#additional variables to handle the product of the diagonal elements of L
    -u={}
    -for k in ['01','23','4.','0123','4...','01234']:
    -        u[k] = prob_D.add_variable('u['+k+']',1)
    -
    -
    -#define the constraints and objective function
    -prob_D.add_constraint(
    -                pic.sum([AA[i]*V[i]
    -                for i in range(s)],'i','[s]')
    -                == L)
    -#L is lower triangular
    -prob_D.add_list_of_constraints( [L[i,j] == 0
    -                                for i in range(m)
    -                                for j in range(i+1,m)],['i','j'],'upper triangle')
    -prob_D.add_list_of_constraints([abs(V[i])<(mm**0.5)*w[i]
    -                                for i in range(s)],'i','[s]')
    -prob_D.add_constraint(1|w<1)
    -#SOC constraints to define u['01234'] such that u['01234']**8 < L[0,0] * L[1,1] * ... * L[4,4]
    -prob_D.add_constraint(u['01']**2   <L[0,0]*L[1,1])
    -prob_D.add_constraint(u['23']**2   <L[2,2]*L[3,3])
    -prob_D.add_constraint(u['4.']**2   <L[4,4])
    -prob_D.add_constraint(u['0123']**2 <u['01']*u['23'])
    -prob_D.add_constraint(u['4...']**2 <u['4.'])
    -prob_D.add_constraint(u['01234']**2<u['0123']*u['4...'])
    -
    -prob_D.set_objective('max',u['01234'])
    -
    -#solve the problem and display the optimal design
    -print prob_D
    -prob_D.solve(verbose=0)
    -print w
    -
    -
    -
    ---------------------
    -optimization problem  (SOCP):
    -159 variables, 36 affine constraints, 146 vars in 14 SO cones
    -
    -V   : list of 8 variables, (3, 5), continuous
    -u   : dict of 6 variables, (1, 1), continuous
    -L   : (5, 5), continuous
    -w   : (8, 1), continuous
    -
    -        maximize u[01234]
    -such that
    -L = Σ_{i in [s]} A[i]*V[i]
    -L[i,j] = 0 for all (i,j) in upper triangle
    -||V[i]|| < (m)**0.5*w[i] for all i in [s]
    -〈 |1| | w 〉 < 1.0
    -||u[01]||^2 < ( L[0,0])( L[1,1])
    -||u[23]||^2 < ( L[2,2])( L[3,3])
    -||u[4.]||^2 < L[4,4]
    -||u[0123]||^2 < ( u[01])( u[23])
    -||u[4...]||^2 < u[4.]
    -||u[01234]||^2 < ( u[0123])( u[4...])
    ----------------------
    -[...]
    -[...]
    -[ 2.27e-01]
    -[ 3.38e-02]
    -[ 1.65e-02]
    -[ 5.44e-02]
    -[ 3.18e-01]
    -[ 3.51e-01]
    -
    -
    -

    As for the A-optimal problem, there is an alternative SOCP formulation -of D-optimality [2], in which integer constraints may be added. -This allows us to formulate the exact D-optimal problem as a MISOCP. -For N=20, -we obtain the following N-exact D-optimal design: -\mathbf{n}=[0,0,5,1,0,1,6,7]:

    -
    #create the problem, variables and params
    -prob_exact_D = pic.Problem()
    -L=prob_exact_D.add_variable('L',(m,m))
    -V=[prob_exact_D.add_variable('V['+str(i)+']',AA[i].T.size) for i in range(s)]
    -T=prob_exact_D.add_variable('T',(s,m))
    -n=prob_exact_D.add_variable('n',s,'integer')
    -N = pic.new_param('N',20)
    -#additional variables to handle the product of the diagonal elements of L
    -u={}
    -for k in ['01','23','4.','0123','4...','01234']:
    -        u[k] = prob_exact_D.add_variable('u['+k+']',1)
    -
    -
    -#define the constraints and objective function
    -prob_exact_D.add_constraint(
    -                pic.sum([AA[i]*V[i]
    -                for i in range(s)],'i','[s]')
    -                == L)
    -#L is lower triangular
    -prob_exact_D.add_list_of_constraints( [L[i,j] == 0
    -                                for i in range(m)
    -                                for j in range(i+1,m)],['i','j'],'upper triangle')
    -
    -prob_exact_D.add_list_of_constraints([abs(V[i][:,k])**2<n[i]/N*T[i,k]
    -                for i in range(s) for k in range(m)],['i','k'])
    -
    -prob_exact_D.add_list_of_constraints([(1|T[:,k])<1
    -                for k in range(m)],'k')
    -
    -
    -prob_exact_D.add_constraint(1|n<N)
    -
    -#SOC constraints to define u['01234'] such that u['01234']**8 < L[0,0] * L[1,1] * ... * L[4,4]
    -prob_exact_D.add_constraint(u['01']**2   <L[0,0]*L[1,1])
    -prob_exact_D.add_constraint(u['23']**2   <L[2,2]*L[3,3])
    -prob_exact_D.add_constraint(u['4.']**2   <L[4,4])
    -prob_exact_D.add_constraint(u['0123']**2 <u['01']*u['23'])
    -prob_exact_D.add_constraint(u['4...']**2 <u['4.'])
    -prob_exact_D.add_constraint(u['01234']**2<u['0123']*u['4...'])
    -
    -prob_exact_D.set_objective('max',u['01234'])
    -
    -#solve the problem and display the optimal design
    -print prob_exact_D
    -prob_exact_D.solve(solver='mosek',verbose=0)
    -print n
    -
    -
    -
    ---------------------
    -optimization problem  (MISOCP):
    -199 variables, 41 affine constraints, 218 vars in 46 SO cones
    -
    -V       : list of 8 variables, (3, 5), continuous
    -u       : dict of 6 variables, (1, 1), continuous
    -L       : (5, 5), continuous
    -T       : (8, 5), continuous
    -n       : (8, 1), integer
    -
    -        maximize u[01234]
    -such that
    -L = Σ_{i in [s]} A[i]*V[i]
    -L[i,j] = 0 for all (i,j) in upper triangle
    -||V[i][:,k]||^2 < ( n[i] / N)( T[i,k]) for all (i,k)
    -〈 |1| | T[:,k] 〉 < 1.0 for all k
    -〈 |1| | n 〉 < N
    -||u[01]||^2 < ( L[0,0])( L[1,1])
    -||u[23]||^2 < ( L[2,2])( L[3,3])
    -||u[4.]||^2 < L[4,4]
    -||u[0123]||^2 < ( u[01])( u[23])
    -||u[4...]||^2 < u[4.]
    -||u[01234]||^2 < ( u[0123])( u[4...])
    ----------------------
    -[...]
    -[...]
    -[ 5.00e+00]
    -[ 1.00e+00]
    -[...]
    -[ 1.00e+00]
    -[ 6.00e+00]
    -[ 7.00e+00]
    -
    -
    -
    -
    -

    References

    -
    -
      -
    1. Computing Optimal Designs of multiresponse Experiments reduces to -Second-Order Cone Programming”, G. Sagnol, -Journal of Statistical Planning and Inference, -141(5), p. 1684-1708, 2011.
    2. -
    3. SOC-representability of the D-criterion of optimal experimental design”, -R. Harman and G. Sagnol, Draft.
    4. -
    -
    -
    -
    - - -
    -
    -
    -
    - -
    -
    -
    - - - - \ No newline at end of file diff --git a/doc/full_html/0.1.2/problem.html b/doc/full_html/0.1.2/problem.html deleted file mode 100644 index c76d05bde80ce8b5b644b1eeb37aaf551dfffb40..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/problem.html +++ /dev/null @@ -1,998 +0,0 @@ - - - - - - - - - - Problem — picos 0.1.2 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Warning

    You are consulting the doc of a former version of PICOS.The latest version is HERE.

    - -
    -
    -
    -
    - -
    -

    Problem

    -
    -
    -class picos.Problem(**options)
    -

    This class represents an optimization problem. -The constructor creates an empty problem. -Some options can be provided under the form -key = value. -See the list of available options -in the doc of set_all_options_to_default()

    -
    -
    -add_constraint(cons, key=None, ret=False)
    -

    Adds a constraint in the problem.

    - --- - - - -
    Parameters:
      -
    • cons (Constraint) – The constraint to be added.
    • -
    • key (str.) – Optional parameter to describe the constraint with a key string.
    • -
    • ret (bool.) – Do you want the added constraint to be returned ? -This can be useful to access the dual of this constraint.
    • -
    -
    -
    - -
    -
    -add_list_of_constraints(lst, it=None, indices=None, key=None, ret=False)
    -

    adds a list of constraints in the problem. -This fonction can be used with python list comprehensions -(see the example below).

    - --- - - - -
    Parameters:
      -
    • lst – list of Constraint.
    • -
    • it (None or str or list.) – Description of the letters which should -be used to replace the dummy indices. -The function tries to find a template -for the string representations of the -constraints in the list. If several indices change in the -list, their letters should be given as a -list of strings, in their order of appearance in the -resulting string. For example, if three indices -change in the constraints, and you want them to be named -'i', 'j' and 'k', set it = ['i','j','k']. -You can also group two indices which always appear together, -e.g. if 'i' always appear next to 'j' you -could set it = [('ij',2),'k']. Here, the number 2 -indicates that 'ij' replaces 2 indices. -If it is set to None, or if the function is not -able to find a template, -the string of the first constraint will be used for -the string representation of the list of constraints.
    • -
    • indices (str.) – a string to denote the set where the indices belong to.
    • -
    • key (str.) – Optional parameter to describe the list of constraints with a key string.
    • -
    • ret (bool.) – Do you want the added list of constraints to be returned ? -This can be useful to access the duals of these constraints.
    • -
    -
    -

    Example:

    -
    >>> import picos as pic
    ->>> import cvxopt as cvx
    ->>> prob=pic.Problem()
    ->>> x=[prob.add_variable('x[{0}]'.format(i),2) for i in range(5)]
    ->>> x 
    -[# variable x[0]:(2 x 1),continuous #,
    - # variable x[1]:(2 x 1),continuous #,
    - # variable x[2]:(2 x 1),continuous #,
    - # variable x[3]:(2 x 1),continuous #,
    - # variable x[4]:(2 x 1),continuous #]
    ->>> y=prob.add_variable('y',5)
    ->>> IJ=[(1,2),(2,0),(4,2)]
    ->>> w={}
    ->>> for ij in IJ:
    -...         w[ij]=prob.add_variable('w[{0}]'.format(ij),3)
    -... 
    ->>> u=pic.new_param('u',cvx.matrix([2,5]))
    ->>> prob.add_list_of_constraints(
    -... [u.T*x[i]<y[i] for i in range(5)],
    -... 'i',
    -... '[5]')
    ->>> 
    ->>> prob.add_list_of_constraints(
    -... [abs(w[i,j])<y[j] for (i,j) in IJ],
    -... [('ij',2)],
    -... 'IJ')
    ->>> 
    ->>> prob.add_list_of_constraints(
    -... [y[t] > y[t+1] for t in range(4)],
    -... 't',
    -... '[4]')
    ->>> 
    ->>> print prob 
    ----------------------
    -optimization problem (SOCP):
    -24 variables, 9 affine constraints, 12 vars in 3 SO cones
    -
    -x   : list of 5 variables, (2, 1), continuous
    -w   : dict of 3 variables, (3, 1), continuous
    -y   : (5, 1), continuous
    -
    -    find vars
    -such that
    -  u.T*x[i] < y[i] for all i in [5]
    -  ||w[ij]|| < y[ij__1] for all ij in IJ
    -  y[t] > y[t+1] for all t in [4]
    ----------------------
    -
    -
    -
    - -
    -
    -add_variable(name, size=1, vtype='continuous')
    -

    adds a variable in the problem, -and returns the corresponding instance of the Variable.

    -

    For example,

    -
    >>> prob=pic.Problem()
    ->>> x=prob.add_variable('x',3)
    ->>> x
    -# variable x:(3 x 1),continuous #
    -
    -
    - --- - - - - - -
    Parameters:
      -
    • name (str.) – The name of the variable.
    • -
    • size (int or tuple.) –

      The size of the variable.

      -

      Can be either:

      -
      -
        -
      • an int n , in which case the variable is a vector of dimension n
      • -
      • or a tuple (n,m), and the variable is a n x m-matrix.
      • -
      -
      -
    • -
    • vtype (str.) –

      variable type. -Can be:

      -
      -
        -
      • 'continuous' (default),
      • -
      • 'binary': 0/1 variable
      • -
      • 'integer': integer valued variable
      • -
      • 'symmetric': symmetric matrix
      • -
      • 'semicont': 0 or continuous variable satisfying its bounds
      • -
      • 'semiint': 0 or integer variable satisfying its bounds
      • -
      -
      -
    • -
    -
    Returns:

    An instance of the class Variable.

    -
    -
    - -
    -
    -check_current_value_feasibility(tol=1e-05)
    -

    returns True if the -current value of the variabless -is a feasible solution, up to the -tolerance tol. If tol is set to None, -the option parameter options['tol'] is used instead. -The integer feasibility is checked with a tolerance of 1e-3.

    -
    - -
    -
    -constraints = None
    -

    list of all constraints

    -
    - -
    -
    -copy()
    -

    creates a copy of the problem.

    -
    - -
    -
    -countCons = None
    -

    numner of (multidimensional) constraints

    -
    - -
    -
    -countVar = None
    -

    number of (multidimensional) variables

    -
    - -
    -
    -get_constraint(ind)
    -

    returns a constraint of the problem.

    - --- - - - -
    Parameters:ind (int or tuple.) –

    There are two ways to index a constraint.

    -
      -
    • if ind is an int n, then the nth constraint (starting from 0) -will be returned, where all the constraints are counted -in the order where they were passed to the problem.
    • -
    • if ind is a tuple (k,i), then the ith constraint -from the kth group of constraints is returned -(starting from 0). By -group of constraints, it is meant a single constraint -or a list of constraints added together with the -function add_list_of_constraints().
    • -
    • if ind is a tuple of length 1 (k,), -then the list of constraints of the kth group is returned.
    • -
    -
    -

    Example:

    -
    >>> import picos as pic
    ->>> import cvxopt as cvx
    ->>> prob=pic.Problem()
    ->>> x=[prob.add_variable('x[{0}]'.format(i),2) for i in range(5)]
    ->>> y=prob.add_variable('y',5)
    ->>> prob.add_list_of_constraints(
    -... [(1|x[i])<y[i] for i in range(5)],
    -... 'i',
    -... '[5]')
    ->>> prob.add_constraint(y>0)
    ->>> print prob 
    ----------------------
    -optimization problem (LP):
    -15 variables, 10 affine constraints
    -
    -x   : list of 5 variables, (2, 1), continuous
    -y   : (5, 1), continuous
    -
    -    find vars
    -such that
    -  〈 |1| | x[i] 〉 < y[i] for all i in [5]
    -  y > |0|
    ----------------------
    ->>> prob.get_constraint(1)                              #2d constraint (numbered from 0)
    -# (1x1)-affine constraint: 〈 |1| | x[1] 〉 < y[1] #
    ->>> prob.get_constraint((0,3))                          #4th consraint from the 1st group
    -# (1x1)-affine constraint: 〈 |1| | x[3] 〉 < y[3] #
    ->>> prob.get_constraint((1,))                           #unique constraint of the 2d 'group'
    -# (5x1)-affine constraint: y > |0| #
    ->>> prob.get_constraint((0,))                           #list of constraints of the 1st group 
    -[# (1x1)-affine constraint: 〈 |1| | x[0] 〉 < y[0] #,
    - # (1x1)-affine constraint: 〈 |1| | x[1] 〉 < y[1] #,
    - # (1x1)-affine constraint: 〈 |1| | x[2] 〉 < y[2] #,
    - # (1x1)-affine constraint: 〈 |1| | x[3] 〉 < y[3] #,
    - # (1x1)-affine constraint: 〈 |1| | x[4] 〉 < y[4] #]
    ->>> prob.get_constraint(5)                              #6th constraint
    -# (5x1)-affine constraint: y > |0| #
    -
    -
    -
    - -
    -
    -get_valued_variable(name)
    -

    Returns the value of the variable (as an cvxopt matrix) -with the given name. -If name refers to a list (resp. dict) of variables, -named with the template name[index] (resp. name[key]), -then the function returns the list (resp. dict) -of these variables.

    - --- - - - -
    Parameters:name (str.) – name of the variable, or of a list/dict of variables.
    -
    -

    Warning

    -

    If the problem has not been solved, -or if the variable is not valued, -this function will raise an Exception.

    -
    -
    - -
    -
    -get_variable(name)
    -

    Returns the variable (as a Variable) -with the given name. -If name refers to a list (resp. dict) of variables, -named with the template name[index] (resp. name[key]), -then the function returns the list (resp. dict) -of these variables.

    - --- - - - -
    Parameters:name (str.) – name of the variable, or of a list/dict of variables.
    -
    - -
    -
    -is_continuous()
    -

    Returns True if there are only continuous variables

    -
    - -
    -
    -numberAffConstraints = None
    -

    total number of (scalar) affine constraints

    -
    - -
    -
    -numberConeConstraints = None
    -

    number of SOC constraints

    -
    - -
    -
    -numberConeVars = None
    -

    number of auxilary variables required to handle the SOC constraints

    -
    - -
    -
    -numberLSEConstraints = None
    -

    number of LogSumExp constraints (+1 if the objective is a LogSumExp)

    -
    - -
    -
    -numberLSEVars = None
    -

    number of vars in LogSumExp expressions

    -
    - -
    -
    -numberOfVars = None
    -

    total number of (scalar) variables

    -
    - -
    -
    -numberQuadConstraints = None
    -

    number of quadratic constraints (+1 if the objective is quadratic)

    -
    - -
    -
    -numberQuadNNZ = None
    -

    number of nonzero entries in the matrices defining the quadratic expressions

    -
    - -
    -
    -numberSDPConstraints = None
    -

    number of SDP constraints

    -
    - -
    -
    -numberSDPVars = None
    -

    size of the s-vecotrized matrices involved in SDP constraints

    -
    - -
    -
    -obj_value()
    -

    If the problem was already solved, returns the objective value. -Otherwise, it raises an AttributeError.

    -
    - -
    -
    -remove_all_constraints()
    -

    Removes all constraints from the problem

    -
    - -
    -
    -remove_constraint(ind)
    -

    Deletes a constraint or a list of constraints of the problem.

    - --- - - - -
    Parameters:ind (int or tuple.) –

    The indexing of constraints works as in the -function get_constraint():

    -
    -
      -
    • if ind is an integer n, the nth constraint -(numbered from 0) is deleted
    • -
    • if ind is a tuple (k,i), then the ith constraint -from the kth group of constraints is deleted -(starting from 0). By -group of constraints, it is meant a single constraint -or a list of constraints added together with the -function add_list_of_constraints().
    • -
    • if ind is a tuple of length 1 (k,), -then the whole kth group of constraints is deleted.
    • -
    -
    -
    -

    Example:

    -
    >>> import picos as pic
    ->>> import cvxopt as cvx
    ->>> prob=pic.Problem()
    ->>> x=[prob.add_variable('x[{0}]'.format(i),2) for i in range(4)]
    ->>> y=prob.add_variable('y',4)
    ->>> prob.add_list_of_constraints(
    -... [(1|x[i])<y[i] for i in range(4)], 'i', '[5]')
    ->>> prob.add_constraint(y>0)
    ->>> prob.add_list_of_constraints(
    -... [x[i]<2 for i in range(3)], 'i', '[3]')
    ->>> prob.add_constraint(x[3]<1)
    ->>> prob.constraints 
    -[# (1x1)-affine constraint: 〈 |1| | x[0] 〉 < y[0] #,
    - # (1x1)-affine constraint: 〈 |1| | x[1] 〉 < y[1] #,
    - # (1x1)-affine constraint: 〈 |1| | x[2] 〉 < y[2] #,
    - # (1x1)-affine constraint: 〈 |1| | x[3] 〉 < y[3] #,
    - # (4x1)-affine constraint: y > |0| #,
    - # (2x1)-affine constraint: x[0] < |2.0| #,
    - # (2x1)-affine constraint: x[1] < |2.0| #,
    - # (2x1)-affine constraint: x[2] < |2.0| #,
    - # (2x1)-affine constraint: x[3] < |1| #]
    ->>> prob.remove_constraint(1)                           #2d constraint (numbered from 0) deleted
    ->>> prob.constraints 
    -[# (1x1)-affine constraint: 〈 |1| | x[0] 〉 < y[0] #, 
    - # (1x1)-affine constraint: 〈 |1| | x[2] 〉 < y[2] #,
    - # (1x1)-affine constraint: 〈 |1| | x[3] 〉 < y[3] #,
    - # (4x1)-affine constraint: y > |0| #,
    - # (2x1)-affine constraint: x[0] < |2.0| #,
    - # (2x1)-affine constraint: x[1] < |2.0| #,
    - # (2x1)-affine constraint: x[2] < |2.0| #,
    - # (2x1)-affine constraint: x[3] < |1| #]
    ->>> prob.remove_constraint((1,))                        #2d 'group' of constraint deleted, i.e. the single constraint y>|0|
    ->>> prob.constraints 
    -[# (1x1)-affine constraint: 〈 |1| | x[0] 〉 < y[0] #,
    - # (1x1)-affine constraint: 〈 |1| | x[2] 〉 < y[2] #,
    - # (1x1)-affine constraint: 〈 |1| | x[3] 〉 < y[3] #,
    - # (2x1)-affine constraint: x[0] < |2.0| #,
    - # (2x1)-affine constraint: x[1] < |2.0| #,
    - # (2x1)-affine constraint: x[2] < |2.0| #,
    - # (2x1)-affine constraint: x[3] < |1| #]
    ->>> prob.remove_constraint((2,))                        #3d 'group' of constraint deleted, (originally the 4th group, i.e. x[3]<|1|)
    ->>> prob.constraints 
    -[# (1x1)-affine constraint: 〈 |1| | x[0] 〉 < y[0] #,
    - # (1x1)-affine constraint: 〈 |1| | x[2] 〉 < y[2] #,
    - # (1x1)-affine constraint: 〈 |1| | x[3] 〉 < y[3] #,
    - # (2x1)-affine constraint: x[0] < |2.0| #,
    - # (2x1)-affine constraint: x[1] < |2.0| #,
    - # (2x1)-affine constraint: x[2] < |2.0| #]
    ->>> prob.remove_constraint((1,1))                       #2d constraint of the 2d group (originally the 3rd group), i.e. x[1]<|2|
    ->>> prob.constraints 
    -[# (1x1)-affine constraint: 〈 |1| | x[0] 〉 < y[0] #,
    - # (1x1)-affine constraint: 〈 |1| | x[2] 〉 < y[2] #,
    - # (1x1)-affine constraint: 〈 |1| | x[3] 〉 < y[3] #,
    - # (2x1)-affine constraint: x[0] < |2.0| #,
    - # (2x1)-affine constraint: x[2] < |2.0| #]
    -
    -
    -
    - -
    -
    -remove_variable(name)
    -

    Removes the variable name from the problem. -:param name: name of the variable to remove. -:type name: str.

    -
    - -
    -
    -set_all_options_to_default()
    -

    set all the options to their default. -The following options are available, and can be passed -as pairs of the form key=value to solve() :

    -
      -
    • General options common to all solvers:
        -
      • verbose = 1 : verbosity level [0(quiet)|1|2(loud)]
      • -
      • solver = None : currently the available solvers are -'cvxopt', 'cplex', 'mosek', 'gurobi', 'smcp', 'zibopt'. -The default -None means that you let picos select a suitable solver for you.
      • -
      • tol = 1e-8 : Relative gap termination tolerance -for interior-point optimizers (feasibility and complementary slackness).
      • -
      • maxit = None : maximum number of iterations -(for simplex or interior-point optimizers). -This option is currently ignored by zibopt.
      • -
      • lp_root_method = None : algorithm used to solve continuous LP -problems, including the root relaxation of mixed integer problems. -The default None selects automatically an algorithm. -If set to psimplex (resp. dsimplex, interior), the solver -will use a primal simplex (resp. dual simplex, interior-point) algorithm. -This option currently works only with cplex, mosek and gurobi.
      • -
      • lp_node_method = None : algorithm used to solve subproblems -at nodes of the branching trees of mixed integer programs. -The default None selects automatically an algorithm. -If set to psimplex (resp. dsimplex, interior), the solver -will use a primal simplex (resp. dual simplex, interior-point) algorithm. -This option currently works only with cplex, mosek and gurobi.
      • -
      • timelimit = None : time limit for the solver, in seconds. The default -None means no time limit. -This option is currently ignored by cvxopt and smcp.
      • -
      • treememory = None : size of the buffer for the branch and bound tree, -in Megabytes. -This option currently works only with cplex.
      • -
      • gaplim = 1e-4 : For mixed integer problems, -the solver returns a solution as soon as this value for the gap is reached -(relative gap between the primal and the dual bound).
      • -
      • onlyChangeObjective = False : set this option to True if you have already -solved the problem, and want to recompute the solution with a different -objective funtion or different parameter settings. This way, the constraints -of the problem will not be parsed by picos next -time solve() is called -(this can lead to a huge gain of time).
      • -
      • noprimals = False : if True, do not copy the optimal variable values in the -value attribute of the problem variables.
      • -
      • noduals = False : if True, do not try to retrieve the dual variables.
      • -
      • nbsol = None : maximum number of feasible solution nodes visited -when solving a mixed integer problem.
      • -
      • hotstart = False : if True, the MIP optimizer tries to start from -the solution -specified (even partly) in the value attribute of the -problem variables. -This option currently works only with cplex, mosek and gurobi.
      • -
      • convert_quad_to_socp_if_needed = True : Do we convert the convex quadratics to -second order cone constraints when the solver does not handle them directly ?
      • -
      -
    • -
    • Specific options available for cvxopt/smcp:
        -
      • feastol = None : feasibility tolerance passed to cvx.solvers.options -If feastol has the default value None, -then the value of the option tol is used.
      • -
      • abstol = None : absolute tolerance passed to cvx.solvers.options -If abstol has the default value None, -then the value of the option tol is used.
      • -
      • reltol = None : relative tolerance passed to cvx.solvers.options -If reltol has the default value None, -then the value of the option tol, multiplied by 10, is used.
      • -
      -
    • -
    • Specific options available for cplex:
        -
      • cplex_params = {} : a dictionary of -cplex parameters -to be set before the cplex -optimizer is called. For example, -cplex_params={'mip.limits.cutpasses' : 5} -will limit the number of cutting plane passes when solving the root node -to 5.
      • -
      • acceptable_gap_at_timelimit = None : If the the time limit is reached, -the optimization process is aborted only if the current gap is less -than this value. The default value None means that we -interrupt the computation regardless of the achieved gap.
      • -
      -
    • -
    • Specific options available for mosek:
        -
      • mosek_params = {} : a dictionary of -mosek parameters -to be set before the mosek -optimizer is called. For example, -mosek_params={'simplex_abs_tol_piv' : 1e-4} -sets the absolute pivot tolerance of the -simplex optimizer to 1e-4.
      • -
      -
    • -
    • Specific options available for gurobi:
        -
      • gurobi_params = {} : a dictionary of -gurobi parameters -to be set before the gurobi -optimizer is called. For example, -gurobi_params={'NodeLimit' : 25} -limits the number of nodes visited by the MIP optimizer to 25.
      • -
      -
    • -
    -
    - -
    -
    -set_objective(typ, expr)
    -

    Defines the objective function of the problem.

    - --- - - - -
    Parameters:
      -
    • typ (str.) – can be either 'max' (maximization problem), -'min' (minimization problem), -or 'find' (feasibility problem).
    • -
    • expr – an Expression. The expression to be minimized -or maximized. This parameter will be ignored -if typ=='find'.
    • -
    -
    -
    - -
    -
    -set_option(key, val)
    -

    Sets the option key to the value val.

    - --- - - - -
    Parameters:
      -
    • key (str.) – The key of an option -(see the list of keys in the doc of -set_all_options_to_default()).
    • -
    • val – New value for the option.
    • -
    -
    -
    - -
    -
    -set_var_value(name, value, optimalvar=False)
    -

    Sets the value attribute of the -given variable.

    - --- - - - -
    Parameters:
      -
    • name (str.) – name of the variable to which the value will be given
    • -
    • value – The value to be given. The type of -value must be recognized by the function -_retrieve_matrix(), -so that it can be parsed into a cvxopt sparse matrix -of the desired size.
    • -
    -
    -

    Example

    -
    >>> prob=pic.Problem()
    ->>> x=prob.add_variable('x',2)
    ->>> prob.set_var_value('x',[3,4])  #this is in fact equivalent to x.value=[3,4]
    ->>> abs(x)**2
    -#quadratic expression: ||x||**2 #
    ->>> print (abs(x)**2)
    -25.0
    -
    -
    -
    - -
    -
    -solve(**options)
    -

    Solves the problem.

    -

    Once the problem has been solved, the optimal variables -can be obtained thanks to the property value -of the class Expression. -The optimal dual variables can be accessed by the property -dual of the class -Constraint.

    - --- - - - - - -
    Parameters:options – A list of options to update before -the call to the solver. In particular, -the solver can -be specified here, -under the form key = value. -See the list of available options -in the doc of -set_all_options_to_default()
    Returns:A dictionary sol which contains the information -returned by the solver.
    -
    - -
    -
    -solver_selection()
    -

    Selects an appropriate solver for this problem -and sets the option 'solver'.

    -
    - -
    -
    -status = None
    -

    status returned by the solver. The default when -a new problem is created is ‘unsolved’.

    -
    - -
    -
    -type
    -

    Type of Optimization Problem (‘LP’, ‘MIP’, ‘SOCP’, ‘QCQP’,...)

    -
    - -
    -
    -update_options(**options)
    -

    update the option dictionary, for each pair of the form -key = value. For a list of available options and their default values, -see the doc of set_all_options_to_default().

    -
    - -
    -
    -variables = None
    -

    dictionary of variables indexed by variable names

    -
    - -
    -
    -write_to_file(filename, writer='picos')
    -

    This function writes the problem to a file.

    - --- - - - -
    Parameters:
      -
    • filename (str.) –

      The name of the file where the problem will be saved. The -extension of the file (if provided) indicates the format -of the export:

      -
      -
        -
      • '.lp': LP format -. This format handles only linear constraints, unless the writer 'cplex' -is used, and the file is saved in the extended -cplex LP format
      • -
      • '.mps': MPS format -(recquires mosek, gurobi or cplex).
      • -
      • '.opf': OPF format -(recquires mosek).
      • -
      • '.dat-s': sparse SDPA format -This format is suitable to save semidefinite programs (SDP). SOC constraints are -stored as semidefinite constraints with an arrow pattern.
      • -
      -
      -
    • -
    • writer (str.) – The default writer is picos, which has its own LP and -sparse SDPA write functions. If cplex, mosek or gurobi is installed, -the user can pass the option writer='cplex', writer='gurobi' or -writer='mosek', and the write function of this solver -will be used.
    • -
    -
    -
    -

    Warning

    -

    For problems involving a symmetric matrix variable X -(typically, semidefinite programs), the expressions -involving X are stored in PICOS as a function of -svec(X), the symmetric vectorized form of -X (see Dattorro, ch.2.2.2.1). -As a result, the symmetric matrix variables -are written in svec() form in the files created by this function. -So if you use another solver to solve -a problem that is described in a file created by PICOS, the optimal symmetric variables -returned will also be in symmetric vectorized form.

    -
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    -

    Table Of Contents

    - - -

    Previous topic

    -

    The PICOS Reference

    -

    Next topic

    -

    picos.tools

    -

    This Page

    - - -

    Download

    - - - - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/doc/full_html/0.1.2/py-modindex.html b/doc/full_html/0.1.2/py-modindex.html deleted file mode 100644 index 69031f8af1f52c832a94f685e0299b5cca74fe5d..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/py-modindex.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - - - - Python Module Index — picos 0.1.2 documentation - - - - - - - - - - - - - - - - -
    -
    -
    -
    - - -

    Python Module Index

    - -
    - p -
    - - - - - - - - - - -
     
    - p
    - picos -
        - picos.tools -
    - - -
    -
    -
    -
    -
    -

    Table Of Contents

    - - - -

    Download

    - - - - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/doc/full_html/0.1.2/pyplots/maxcut.hires.png b/doc/full_html/0.1.2/pyplots/maxcut.hires.png deleted file mode 100644 index 5fa2bb9aa1880d5242bbc79b63ed7f99ef8a531a..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/pyplots/maxcut.hires.png and /dev/null differ diff --git a/doc/full_html/0.1.2/pyplots/maxcut.pdf b/doc/full_html/0.1.2/pyplots/maxcut.pdf deleted file mode 100644 index b75f78d40776cb377832b34d842184570c4884ab..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/pyplots/maxcut.pdf and /dev/null differ diff --git a/doc/full_html/0.1.2/pyplots/maxcut.png b/doc/full_html/0.1.2/pyplots/maxcut.png deleted file mode 100644 index b5773fe9ae7ce7ec0957d8d89c691565da598607..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/pyplots/maxcut.png and /dev/null differ diff --git a/doc/full_html/0.1.2/pyplots/maxcut.py b/doc/full_html/0.1.2/pyplots/maxcut.py deleted file mode 100644 index c93e16f9cdcbd056750a6c7f3b14170a6fc18915..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/pyplots/maxcut.py +++ /dev/null @@ -1,122 +0,0 @@ -import picos as pic -import networkx as nx - -#number of nodes -N=20 - -#Generate a graph with LCF notation (you can change the values below to obtain another graph!) -#We use this deterministic generator in order to have a constant inuput for doctest. -G=nx.LCF_graph(N,[1,3,14],5) -G=nx.DiGraph(G) #edges are bidirected - -#generate edge capacities -c={} -for i,e in enumerate(G.edges()): - c[e]=((-2)**i)%17 #an arbitrary sequence of numbers - -#---------------# -# MAXCUT SDP # -#---------------# -import cvxopt as cvx -import cvxopt.lapack -import numpy as np - -#make G undirected -G=nx.Graph(G) - -#allocate weights to the edges -for (i,j) in G.edges(): - G[i][j]['weight']=c[i,j]+c[j,i] - - -maxcut = pic.Problem() -X=maxcut.add_variable('X',(N,N),'symmetric') - -#Laplacian of the graph -L=pic.new_param('L',1/4.*nx.laplacian(G)) - -#ones on the diagonal -maxcut.add_constraint(pic.tools.diag_vect(X)==1) -#X positive semidefinite -maxcut.add_constraint(X>>0) - -#objective -maxcut.set_objective('max',L|X) - -print maxcut -maxcut.solve(verbose = 0) - -#Cholesky factorization -V=X.value - -cvxopt.lapack.potrf(V) -for i in range(N): - for j in range(i+1,N): - V[i,j]=0 - -#random projection algorithm -#Repeat 100 times or until we are within a factor .878 of the SDP optimal value -count=0 -obj_sdp=maxcut.obj_value() -obj=0 -while (count <100 or obj<.878*obj_sdp): - r=cvx.normal(20,1) - x=cvx.matrix(np.sign(V*r)) - o=(x.T*L*x).value[0] - if o>obj: - x_cut=x - obj=o - count+=1 - -S1=[n for n in range(N) if x[n]<0] -S2=[n for n in range(N) if x[n]>0] - -print 'partition of the nodes:' -print 'S1: {0}'.format(S1) -print 'S2: {0}'.format(S2) - -cut = [(i,j) for (i,j) in G.edges() if x[i]*x[j]<0] - -#display the cut -import pylab - -fig=pylab.figure(figsize=(11,8)) - -#a Layout for which the graph is planar (or use pos=nx.spring_layout(G) with another graph) -pos={ - 0: (0.07, 0.7), - 1: (0.18, 0.78), - 2: (0.26, 0.45), - 3: (0.27, 0.66), - 4: (0.42, 0.79), - 5: (0.56, 0.95), - 6: (0.6, 0.8), - 7: (0.64, 0.65), - 8: (0.55, 0.37), - 9: (0.65, 0.3), - 10:(0.77, 0.46), - 11:(0.83, 0.66), - 12:(0.90, 0.41), - 13:(0.70, 0.1), - 14:(0.56, 0.16), - 15:(0.40, 0.17), - 16:(0.28, 0.05), - 17:(0.03, 0.38), - 18:(0.01, 0.66), - 19: (0, 0.95)} - -node_colors=[('g' if n in S1 else 'b') for n in range(N)] - -nx.draw_networkx(G,pos, - edgelist=[e for e in G.edges() if e not in cut], - node_color=node_colors) - -nx.draw_networkx_edges(G,pos, - edgelist=cut, - edge_color='r') - -#hide axis -fig.gca().axes.get_xaxis().set_ticks([]) -fig.gca().axes.get_yaxis().set_ticks([]) - -pylab.show() \ No newline at end of file diff --git a/doc/full_html/0.1.2/pyplots/maxflow.hires.png b/doc/full_html/0.1.2/pyplots/maxflow.hires.png deleted file mode 100644 index 232774cadbdd17acd5bd62870a017292a797ec07..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/pyplots/maxflow.hires.png and /dev/null differ diff --git a/doc/full_html/0.1.2/pyplots/maxflow.pdf b/doc/full_html/0.1.2/pyplots/maxflow.pdf deleted file mode 100644 index 30ad5badf5587fba7b8e429a899f1808a1fe896a..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/pyplots/maxflow.pdf and /dev/null differ diff --git a/doc/full_html/0.1.2/pyplots/maxflow.png b/doc/full_html/0.1.2/pyplots/maxflow.png deleted file mode 100644 index 17a1970d250a7fb844305309b1ce923f04c59cfb..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/pyplots/maxflow.png and /dev/null differ diff --git a/doc/full_html/0.1.2/pyplots/maxflow.py b/doc/full_html/0.1.2/pyplots/maxflow.py deleted file mode 100644 index 8811f7bc1560d02aa29b32c3b4a9fe41fe56c3b5..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/pyplots/maxflow.py +++ /dev/null @@ -1,127 +0,0 @@ -import picos as pic -import networkx as nx - -#number of nodes -N=20 - -#Generate a graph with LCF notation (you can change the values below to obtain another graph!) -#We use this deterministic generator in order to have a constant inuput for doctest. -G=nx.LCF_graph(N,[1,3,14],5) -G=nx.DiGraph(G) #edges are bidirected - -#generate edge capacities -c={} -for i,e in enumerate(G.edges()): - c[e]=((-2)**i)%17 #an arbitrary sequence of numbers - - -#-------------# -# max flow # -#-------------# - -maxflow=pic.Problem() -#source and sink nodes -s=16 -t=10 -#convert the capacities as a picos expression -cc=pic.new_param('c',c) - -#flow variable -f={} -for e in G.edges(): - f[e]=maxflow.add_variable('f[{0}]'.format(e),1) - - -#flow value -F=maxflow.add_variable('F',1) - -#upper bound on the flows -maxflow.add_list_of_constraints( - [f[e]0 for e in G.edges()], #list of constraints - [('e',2)], #e is a double index (origin and desitnation of the edges) - 'edges' #set the index belongs to - ) - -#objective -maxflow.set_objective('max',F) - -print maxflow -maxflow.solve(verbose=0) - - -#display the graph -import pylab -fig=pylab.figure(figsize=(11,8)) - - -node_colors=['w']*N -node_colors[s]='g' #source is green -node_colors[t]='b' #sink is blue - - -#a Layout for which the graph is planar (or use pos=nx.spring_layout(G) with another graph) -pos={ - 0: (0.07, 0.7), - 1: (0.18, 0.78), - 2: (0.26, 0.45), - 3: (0.27, 0.66), - 4: (0.42, 0.79), - 5: (0.56, 0.95), - 6: (0.6, 0.8), - 7: (0.64, 0.65), - 8: (0.55, 0.37), - 9: (0.65, 0.3), - 10:(0.77, 0.46), - 11:(0.83, 0.66), - 12:(0.90, 0.41), - 13:(0.70, 0.1), - 14:(0.56, 0.16), - 15:(0.40, 0.17), - 16:(0.28, 0.05), - 17:(0.03, 0.38), - 18:(0.01, 0.66), - 19: (0, 0.95)} - - -nx.draw_networkx(G,pos, - edgelist=[e for e in G.edges() if f[e].value[0]>0], - node_color=node_colors) - - -labels={e:'{0}/{1}'.format(f[e],c[e]) for e in G.edges() if f[e].value[0]>0} -#flow label -nx.draw_networkx_edge_labels(G, pos, - edge_labels=labels) - -#hide axis -fig.gca().axes.get_xaxis().set_ticks([]) -fig.gca().axes.get_yaxis().set_ticks([]) - - -pylab.show() \ No newline at end of file diff --git a/doc/full_html/0.1.2/pyplots/mincut.hires.png b/doc/full_html/0.1.2/pyplots/mincut.hires.png deleted file mode 100644 index 87bf4a6c7ac5cea84f6fe708ee5f4f7fc210fcaa..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/pyplots/mincut.hires.png and /dev/null differ diff --git a/doc/full_html/0.1.2/pyplots/mincut.pdf b/doc/full_html/0.1.2/pyplots/mincut.pdf deleted file mode 100644 index 36a0ff19a61f023e775782d5dbb22c2c1dbefc98..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/pyplots/mincut.pdf and /dev/null differ diff --git a/doc/full_html/0.1.2/pyplots/mincut.png b/doc/full_html/0.1.2/pyplots/mincut.png deleted file mode 100644 index ab41f298433ee2bc37de18701f2ef2880b2b79c4..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/pyplots/mincut.png and /dev/null differ diff --git a/doc/full_html/0.1.2/pyplots/mincut.py b/doc/full_html/0.1.2/pyplots/mincut.py deleted file mode 100644 index ab1e81854a2e2d53f20ac5c2ca35ea2e401aff66..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/pyplots/mincut.py +++ /dev/null @@ -1,116 +0,0 @@ -import picos as pic -import networkx as nx - -#number of nodes -N=20 - -#Generate a graph with LCF notation (you can change the values below to obtain another graph!) -#We use this deterministic generator in order to have a constant inuput for doctest. -G=nx.LCF_graph(N,[1,3,14],5) -G=nx.DiGraph(G) #edges are bidirected - -#generate edge capacities -c={} -for i,e in enumerate(G.edges()): - c[e]=((-2)**i)%17 #an arbitrary sequence of numbers - - -#-------------# -# min cut # -#-------------# - -mincut=pic.Problem() - -#source and sink nodes -s=16 -t=10 - -#convert the capacities as a picos expression -cc=pic.new_param('c',c) - -#cut variable -d={} -for e in G.edges(): - d[e]=mincut.add_variable('d[{0}]'.format(e),1) - -#potentials -p=mincut.add_variable('p',N) - -#potential inequality -mincut.add_list_of_constraints( - [d[i,j] > p[i]-p[j] - for (i,j) in G.edges()], #list of constraints - ['i','j'],'edges') #indices and set they belong to - -#one-potential at source -mincut.add_constraint(p[s]==1) -#zero-potential at sink -mincut.add_constraint(p[t]==0) -#nonnegativity -mincut.add_constraint(p>0) -mincut.add_list_of_constraints( - [d[e]>0 for e in G.edges()], #list of constraints - [('e',2)], #e is a double index (origin and desitnation of the edges) - 'edges' #set the index belongs to - ) - -#objective -mincut.set_objective('min', - pic.sum([c[e]*d[e] for e in G.edges()], - [('e',2)],'edges') - ) - -print mincut -mincut.solve(verbose=0) - -cut=[e for e in G.edges() if d[e].value[0]==1] - -#display the graph -import pylab -fig=pylab.figure(figsize=(11,8)) - - -node_colors=['w']*N -node_colors[s]='g' #source is green -node_colors[t]='b' #sink is blue - - -#a Layout for which the graph is planar (or use pos=nx.spring_layout(G) with another graph) -pos={ - 0: (0.07, 0.7), - 1: (0.18, 0.78), - 2: (0.26, 0.45), - 3: (0.27, 0.66), - 4: (0.42, 0.79), - 5: (0.56, 0.95), - 6: (0.6, 0.8), - 7: (0.64, 0.65), - 8: (0.55, 0.37), - 9: (0.65, 0.3), - 10:(0.77, 0.46), - 11:(0.83, 0.66), - 12:(0.90, 0.41), - 13:(0.70, 0.1), - 14:(0.56, 0.16), - 15:(0.40, 0.17), - 16:(0.28, 0.05), - 17:(0.03, 0.38), - 18:(0.01, 0.66), - 19: (0, 0.95)} - - -#edges (not in the cut) -nx.draw_networkx(G,pos, - edgelist=[e for e in G.edges() if e not in cut], - node_color=node_colors) - -#edges of the cut -nx.draw_networkx_edges(G,pos, - edgelist=cut, - edge_color='r') - -#hide axis -fig.gca().axes.get_xaxis().set_ticks([]) -fig.gca().axes.get_yaxis().set_ticks([]) - -pylab.show() \ No newline at end of file diff --git a/doc/full_html/0.1.2/pyplots/multicut.hires.png b/doc/full_html/0.1.2/pyplots/multicut.hires.png deleted file mode 100644 index dc25b3c445b6dcff056d1ea9d1f2c6477570144b..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/pyplots/multicut.hires.png and /dev/null differ diff --git a/doc/full_html/0.1.2/pyplots/multicut.pdf b/doc/full_html/0.1.2/pyplots/multicut.pdf deleted file mode 100644 index ee39aabbfda0315871fbdeea29d56b2d320a8356..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/pyplots/multicut.pdf and /dev/null differ diff --git a/doc/full_html/0.1.2/pyplots/multicut.png b/doc/full_html/0.1.2/pyplots/multicut.png deleted file mode 100644 index b39467ee42b30140cd24dd169048103f08d061f7..0000000000000000000000000000000000000000 Binary files a/doc/full_html/0.1.2/pyplots/multicut.png and /dev/null differ diff --git a/doc/full_html/0.1.2/pyplots/multicut.py b/doc/full_html/0.1.2/pyplots/multicut.py deleted file mode 100644 index d8136c4b00dbf9f8b60d70f744c7e53c0ea84a23..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/pyplots/multicut.py +++ /dev/null @@ -1,140 +0,0 @@ -import picos as pic -import networkx as nx - -#number of nodes -N=20 - -#Generate a graph with LCF notation (you can change the values below to obtain another graph!) -#We use this deterministic generator in order to have a constant inuput for doctest. -G=nx.LCF_graph(N,[1,3,14],5) -G=nx.DiGraph(G) #edges are bidirected - -#generate edge capacities -c={} -for i,e in enumerate(G.edges()): - c[e]=((-2)**i)%17 #an arbitrary sequence of numbers - -#---------------# -# multi cut # -#---------------# - -multicut=pic.Problem() - -#pairs to be separated -pairs=[(0,12),(1,5),(1,19),(2,11),(3,4),(3,9),(3,18),(6,15),(10,14)] - -#source and sink nodes -s=16 -t=10 - -#convert the capacities as a picos expression -cc=pic.new_param('c',c) - -#list of sources -sources=set([p[0] for p in pairs]) - - -#cut variable -y={} -for e in G.edges(): - y[e]=multicut.add_variable('y[{0}]'.format(e),1,vtype='binary') - -#potentials (one for each source) -p={} -for s in sources: - p[s]=multicut.add_variable('p[{0}]'.format(s),N) - -#potential inequalities -multicut.add_list_of_constraints( - [y[i,j]>p[s][i]-p[s][j] - for s in sources - for (i,j) in G.edges()], #list of constraints - ['i','j','s'],'edges x sources')#indices and set they belong to - -#one-potentials at source -multicut.add_list_of_constraints( - [p[s][s]==1 for s in sources], - 's','sources') - -#zero-potentials at sink -multicut.add_list_of_constraints( - [p[s][t]==0 for (s,t) in pairs], - ['s','t'],'pairs') - -#nonnegativity -multicut.add_list_of_constraints( - [p[s]>0 for s in sources], - 's','sources') - -#objective -multicut.set_objective('min', - pic.sum([cc[e]*y[e] for e in G.edges()], - [('e',2)],'edges') - ) - -print multicut -multicut.solve(verbose=0) - - -print 'The minimal multicut has capacity {0}'.format(multicut.obj_value()) - -cut=[e for e in G.edges() if y[e].value[0]==1] - -#display the cut -import pylab - -fig=pylab.figure(figsize=(11,8)) - -#a Layout for which the graph is planar (or use pos=nx.spring_layout(G) with another graph) -pos={ - 0: (0.07, 0.7), - 1: (0.18, 0.78), - 2: (0.26, 0.45), - 3: (0.27, 0.66), - 4: (0.42, 0.79), - 5: (0.56, 0.95), - 6: (0.6, 0.8), - 7: (0.64, 0.65), - 8: (0.55, 0.37), - 9: (0.65, 0.3), - 10:(0.77, 0.46), - 11:(0.83, 0.66), - 12:(0.90, 0.41), - 13:(0.70, 0.1), - 14:(0.56, 0.16), - 15:(0.40, 0.17), - 16:(0.28, 0.05), - 17:(0.03, 0.38), - 18:(0.01, 0.66), - 19: (0, 0.95)} - -#pairs of dark and light colors -colors=[('Yellow','#FFFFE0'), - ('#888888','#DDDDDD'), - ('Dodgerblue','Aqua'), - ('DarkGreen','GreenYellow'), - ('DarkViolet','Violet'), - ('SaddleBrown','Peru'), - ('Red','Tomato'), - ('DarkGoldenRod','Gold'), - ] - -node_colors=['w']*N -for i,s in enumerate(sources): - node_colors[s]=colors[i][0] - for t in [t for (s0,t) in pairs if s0==s]: - node_colors[t]=colors[i][1] - -nx.draw_networkx(G,pos, - edgelist=[e for e in G.edges() if e not in cut], - node_color=node_colors) - -nx.draw_networkx_edges(G,pos, - edgelist=cut, - edge_color='r') - -#hide axis -fig.gca().axes.get_xaxis().set_ticks([]) -fig.gca().axes.get_yaxis().set_ticks([]) - -pylab.show() diff --git a/doc/full_html/0.1.2/pyplots/multicut.py~ b/doc/full_html/0.1.2/pyplots/multicut.py~ deleted file mode 100644 index 91ce54988547a1ca2ff0e35681c668a1495e4289..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/pyplots/multicut.py~ +++ /dev/null @@ -1,139 +0,0 @@ -import picos as pic -import networkx as nx - -#number of nodes -N=20 - -#Generate a graph with LCF notation (you can change the values below to obtain another graph!) -#We use this deterministic generator in order to have a constant inuput for doctest. -G=nx.LCF_graph(N,[1,3,14],5) -G=nx.DiGraph(G) #edges are bidirected - -#generate edge capacities -c={} -for i,e in enumerate(G.edges()): - c[e]=((-2)**i)%17 #an arbitrary sequence of numbers - -#---------------# -# multi cut # -#---------------# - -multicut=pic.Problem() - -#pairs to be separated -pairs=[(0,12),(1,5),(1,19),(2,11),(3,4),(3,9),(3,18),(6,15),(10,14)] - -#source and sink nodes -s=16 -t=10 - -#convert the capacities as a picos expression -cc=pic.new_param('c',c) - -#list of sources -sources=set([p[0] for p in pairs]) - - -#cut variable -y={} -for e in G.edges(): - y[e]=multicut.add_variable('y[{0}]'.format(e),1,vtype='binary') - -#potentials (one for each source) -p={} -for s in sources: - p[s]=multicut.add_variable('p[{0}]'.format(s),N) - -#potential inequalities -multicut.add_list_of_constraints( - [y[i,j]>p[s][i]-p[s][j] - for s in sources - for (i,j) in G.edges()], #list of constraints - ['i','j','s'],'edges x sources')#indices and set they belong to - -#one-potentials at source -multicut.add_list_of_constraints( - [p[s][s]==1 for s in sources], - 's','sources') - -#zero-potentials at sink -multicut.add_list_of_constraints( - [p[s][t]==0 for (s,t) in pairs], - ['s','t'],'pairs') - -#nonnegativity -multicut.add_list_of_constraints( - [p[s]>0 for s in sources], - 's','sources') - -#objective -multicut.set_objective('min', - pic.sum([cc[e]*y[e] for e in G.edges()], - [('e',2)],'edges') - ) - -print multicut -multicut.solve(solver='cplex') - -print 'The minimal multicut has capacity {0}'.format(multicut.obj_value()) - -cut=[e for e in G.edges() if y[e].value[0]==1] - -#display the cut -import pylab - -fig=pylab.figure(figsize=(11,8)) - -#a Layout for which the graph is planar (or use pos=nx.spring_layout(G) with another graph) -pos={ - 0: (0.07, 0.7), - 1: (0.18, 0.78), - 2: (0.26, 0.45), - 3: (0.27, 0.66), - 4: (0.42, 0.79), - 5: (0.56, 0.95), - 6: (0.6, 0.8), - 7: (0.64, 0.65), - 8: (0.55, 0.37), - 9: (0.65, 0.3), - 10:(0.77, 0.46), - 11:(0.83, 0.66), - 12:(0.90, 0.41), - 13:(0.70, 0.1), - 14:(0.56, 0.16), - 15:(0.40, 0.17), - 16:(0.28, 0.05), - 17:(0.03, 0.38), - 18:(0.01, 0.66), - 19: (0, 0.95)} - -#pairs of dark and light colors -colors=[('Yellow','#FFFFE0'), - ('#888888','#DDDDDD'), - ('Dodgerblue','Aqua'), - ('DarkGreen','GreenYellow'), - ('DarkViolet','Violet'), - ('SaddleBrown','Peru'), - ('Red','Tomato'), - ('DarkGoldenRod','Gold'), - ] - -node_colors=['w']*N -for i,s in enumerate(sources): - node_colors[s]=colors[i][0] - for t in [t for (s0,t) in pairs if s0==s]: - node_colors[t]=colors[i][1] - -nx.draw_networkx(G,pos, - edgelist=[e for e in G.edges() if e not in cut], - node_color=node_colors) - -nx.draw_networkx_edges(G,pos, - edgelist=cut, - edge_color='r') - -#hide axis -fig.gca().axes.get_xaxis().set_ticks([]) -fig.gca().axes.get_yaxis().set_ticks([]) - -pylab.show() \ No newline at end of file diff --git a/doc/full_html/0.1.2/search.html b/doc/full_html/0.1.2/search.html deleted file mode 100644 index 30ed2e52f0c43e01460666d4afde19be0a746bd3..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/search.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - Search — picos 0.1.2 documentation - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -

    Search

    -
    - -

    - Please activate JavaScript to enable the search - functionality. -

    -
    -

    - From here you can search these documents. Enter your search - words into the box below and click "search". Note that the search - function will automatically search for all of the words. Pages - containing fewer words won't appear in the result list. -

    -
    - - - -
    - -
    - -
    - -
    -
    -
    - -
    -
    - - - - \ No newline at end of file diff --git a/doc/full_html/0.1.2/searchindex.js b/doc/full_html/0.1.2/searchindex.js deleted file mode 100644 index 5492886cd767a6c8d88f1436c4091363da6fba02..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/searchindex.js +++ /dev/null @@ -1 +0,0 @@ -Search.setIndex({objects:{"picos.Constraint":{key:[2,2,1,""],slack:[2,2,1,""],Exp3:[2,2,1,""],Exp2:[2,2,1,""],Exp1:[2,2,1,""],typeOfConstraint:[2,2,1,""],dual:[2,2,1,""],slack_var:[2,1,1,""],Id:[2,2,1,""]},"picos.Norm":{exp:[11,2,1,""]},"picos.AffinExp":{is0:[11,1,1,""],constant:[11,2,1,""],factors:[11,2,1,""],isconstant:[11,1,1,""],value:[11,2,1,""],T:[11,2,1,""],size:[11,2,1,""]},"picos.Variable":{endIndex:[11,2,1,""],vtype:[11,2,1,""],name:[11,2,1,""],value:[11,2,1,""],startIndex:[11,2,1,""],Id:[11,2,1,""]},"picos.QuadExp":{quad:[11,2,1,""],aff:[11,2,1,""],LR:[11,2,1,""]},"picos.Problem":{numberSDPVars:[10,2,1,""],set_var_value:[10,1,1,""],numberAffConstraints:[10,2,1,""],variables:[10,2,1,""],set_objective:[10,1,1,""],add_list_of_constraints:[10,1,1,""],numberConeConstraints:[10,2,1,""],get_variable:[10,1,1,""],numberOfVars:[10,2,1,""],set_all_options_to_default:[10,1,1,""],numberQuadNNZ:[10,2,1,""],add_variable:[10,1,1,""],get_constraint:[10,1,1,""],numberLSEVars:[10,2,1,""],write_to_file:[10,1,1,""],type:[10,2,1,""],set_option:[10,1,1,""],numberLSEConstraints:[10,2,1,""],status:[10,2,1,""],solver_selection:[10,1,1,""],numberConeVars:[10,2,1,""],obj_value:[10,1,1,""],remove_constraint:[10,1,1,""],remove_variable:[10,1,1,""],copy:[10,1,1,""],update_options:[10,1,1,""],is_continuous:[10,1,1,""],countVar:[10,2,1,""],remove_all_constraints:[10,1,1,""],numberQuadConstraints:[10,2,1,""],solve:[10,1,1,""],check_current_value_feasibility:[10,1,1,""],numberSDPConstraints:[10,2,1,""],countCons:[10,2,1,""],constraints:[10,2,1,""],get_valued_variable:[10,1,1,""],add_constraint:[10,1,1,""]},picos:{AffinExp:[11,3,1,""],Constraint:[2,3,1,""],tools:[4,0,1,""],Variable:[11,3,1,""],LogSumExp:[11,3,1,""],Problem:[10,3,1,""],Expression:[11,3,1,""],QuadExp:[11,3,1,""],Norm:[11,3,1,""]},"picos.tools":{eval_dict:[4,4,1,""],lse:[4,4,1,""],diag_vect:[4,4,1,""],diag:[4,4,1,""],sum:[4,4,1,""],available_solvers:[4,4,1,""],new_param:[4,4,1,""],"_retrieve_matrix":[4,4,1,""]},"picos.LogSumExp":{value:[11,2,1,""]}},terms:{lagrangian:8,yellow:5,prefix:6,concaten:[11,1],whose:[5,11,1],matlab:6,under:[10,6,1],merchant:6,preambul:8,everi:[0,6,1,5],"34e":8,eqnarrai:[],vector:[1,11,6,8,10,4],red:5,subindex:[],affinexp:[4,3,11,1],direct:5,"10e":[],second:[1,2,11,8,10,6],nthe:6,"4x4":1,"4x2":1,"4x1":[10,1],even:[6,1],hide:5,neg:1,"_constant":[],"new":[0,10,6,8],net:[],set_opt:10,"27e":8,never:[],here:[0,1,4,6,9,10,11],path:5,interpret:1,maxcut:[5,7],"_kei":[],studi:8,total:[5,10],unit:8,wheremathbf:[],plot:[],describ:[10,2],would:1,overhead:6,x_opt:1,type:[10,6,4,1,2],until:5,lp_node_method:10,relax:[5,10,7],"05e":8,relat:[11,1],warn:[4,10,11,1],warm:0,must:[1,5,6,8,10,11],word:1,setup:6,work:[10,11,1],norm:[3,0,6,11,1],misocp:[8,7],root:[10,6],undirect:5,give:[6,4,8,2],indic:[0,1,2,5,6,8,10,4],semidefinit:[1,2,11,5,8,10,6],want:[10,6,4,1],quadrat:[0,1,2,6,10,11],"_cvx":[],end:[5,11,1],prob_lp:8,how:8,hot:[],mu_i:8,verifi:6,numberofvar:10,updat:10,recogn:[10,1],earlier:8,befor:10,third:1,remplac:[],perform:8,green:5,enter:[6,11,1],order:[1,2,11,8,4,10,6],prob_d:8,oper:[11,1],atribut:[],over:1,becaus:[5,6,8,1],"_numpi":[],fit:6,fix:[],bertsima:5,"37e":8,better:1,fig:5,comprehens:[10,6,4],them:[10,6,4,1],countvar:10,thei:[5,10],interrupt:10,choic:6,solver_nam:1,eact:[],"1x1":[10,1],arrow:10,each:[5,10,6,8,1],mean:[5,10,1],makegurobi_inst:[],wiith:[],extract:6,"_retrieve_matrix":[10,4,1],unbound:1,network:5,gradient:[],is0:11,content:[0,1],cvxoptvar:[],gov:[],linear:[1,2,11,5,8,10,6],barrier:[],"1time":[],situat:11,infin:[],free:[6,1],standard:[8,1],nth:10,ij__1:10,reformul:1,traceback:[],"07e":[],"_make_cplex_inst":[],onto:5,polyhedron:5,rang:[5,10,6,8,1],mathbf:[],clariti:8,rank:5,system:[],restrict:[],instruct:[9,0,6],alreadi:[0,10,6],primari:6,lorrentz:1,exp3:[11,2],exp2:[11,2],exp1:[11,2],premultipli:[],startindex:11,tol:10,similarli:1,eval_dict:4,numbersdpconstraint:10,"17e":8,conserv:5,"_the":[],provid:[0,10,6,4,8],expr:10,putindicesonfram:[],tree:10,project:[5,6],kth:10,get_valued_vari:10,defaultopt:[],fashion:6,lcf_graph:5,seen:5,ldot:[],latter:1,oprion:[],blue:5,copi:[10,6,4],countcon:10,option_nam:[],object:[5,10,6,8,1],doit:[],letter:[10,4],typ:10,don:[],doc:[10,8,1],flow:[5,7],doe:[10,6,1],dummi:[10,4],declar:4,muet:[],sum:[1,4,5,6,8,11],dot:1,"__str__":1,random:5,syntax:1,involv:[10,11,1],ffffe0:5,factm:[],explain:[9,6],choleski:5,obj_sdp:5,predecessor:5,vecor:4,symmetr:[5,10,8,11,1],bar:[4,1],mosek_opf:[],"54e":8,baz:4,method:1,"69e":[],"38e":8,fair:[],consraint:10,result:[4,10,6,8,1],respons:[8,7],optimum:5,pymathprog:[],best:8,subject:[8,1],said:6,hopefulli:[],figur:5,elementwis:1,attribut:[10,11,1],extend:[10,1],weak:1,intger:[],toler:10,howev:[6,4,1],"36e":8,com:[],con:[10,8],foral:[],"16e":6,prob_primal_c:8,"_mosek_solv":[],prob_primal_a:8,"2nd":8,assum:[8,11,1],numpi:[5,6,4],three:[10,4],been:[5,10,11,1],much:6,interest:1,quickli:6,deeper:0,ani:[5,6,11,1,8],cplex_param:10,ident:[8,4],gnu:6,properti:[10,1],saddlebrown:5,commerci:6,euclidean:[11,1],unsolv:[10,1],m_kbig:[],succeq:[],n_l:[],cone:[1,2,11,5,8,10,6],n_e:[],sever:[1,5,6,8,10,4],receiv:6,suggest:8,make:[5,6,1],mosek_param:10,big:[],complet:6,rais:[10,6,4,1],unimodular:5,dualvari:2,referenceto:[],sdpa:10,thi:[0,1,2,4,5,6,8,10,11],programm:1,left:1,identifi:2,just:6,elmar:6,yet:1,languag:6,els:5,correpond:[],opt:[],lcf:5,opf:10,sdual:5,"_variabl":[],specif:10,arbitrari:[5,11,1],manual:11,www:6,right:[6,1],maxim:[5,10,6,8,1],maxit:10,ich:[],get_constraint:[5,10,6,8,1],constnat:[],buffer:10,foo:4,core:1,plt:[],semidefnit:1,obj:[5,1],"42e":[6,8],makecplex_inst:[],affexpr:1,produc:1,capacit:5,soc:[10,8,1],"_make_mosek_inst":[],sol:[10,6],abel:[],spring_layout:5,wai:[10,1],support:[6,1],transform:6,"class":[1,2,11,6,10,4],avail:[4,10,6,8,1],reli:6,iterator_nam:[],call:[10,6,1],analysi:5,sub2:[],form:[1,4,5,6,8,10,11],mycon:1,forc:[5,4,1],ford:5,"true":[5,10,1],maximum:[5,10],tell:11,minor:0,absenc:[],featur:6,exist:[6,8],nnz:4,check:[5,10,6,8,1],exsiz:4,when:[4,10,8,11,1],variabless:10,makegandh:[],simplex_abs_tol_piv:10,test:6,numberlsevar:10,node:[5,10],sqp:[],vecotr:10,substract:[11,1],consid:1,furthermor:6,geometr:[4,11,2],time:[5,10,6,8],skip:6,global:11,row:[8,1],ver:[],list_of_summand:[],donner:[],graph:[0,7,5],sourc:[5,6],string:[4,10,11,1,2],feasibl:[5,10,1],exact:[8,7],dim:4,administr:6,solver:[0,1,6,8,10,4],iter:10,quadexp:[3,11],signif:[],upper:[5,8],alphae_i:[],sign:5,appear:[10,4],pyplot:[],"43e":8,current:[10,6],multirespons:8,deriv:11,gener:[5,10,6,8,1],coeffici:[6,11],satisfi:[1,2,5,6,8,10],normalize_whitespac:[10,6,4,1],modif:5,along:6,nois:8,"52e":6,expeiment:8,canadian:5,socon:2,vectori:11,"__repr__":1,extrem:5,bob:1,regardless:10,greenyellow:5,modul:[0,1],aff2:11,aff1:11,"1st":[10,8],atrix:[],nowrap:[],pred:5,wane:[],visit:10,peru:5,peopl:6,cplex:[10,6],templat:[10,4],effort:8,fly:[],ibm:[],subel:1,uniqu:[10,1],can:[0,1,11,5,8,4,9,10,6],numberquadconstraint:10,purpos:6,abort:10,semicont:[10,11],alwai:[5,10,11,4,1],multipl:[8,11,7,1],write:[0,10,6,1],criterion:8,map:[5,4],product:[6,11,1,8],mat:[4,1],max:[1,5,6,7,8,10],succ:5,"4th":[10,1],sinon:[],mai:8,data:[6,11,1,8],freshli:1,"6th":10,explicit:1,inform:[0,10,2],preced:1,combin:[],lse:[4,2],"5x1":10,harmonic_step:[],lst:[10,4],still:4,pointer:[],group:[10,4,1],thank:[10,1],"82e":8,main:6,"22e":[],non:[5,6,1],recal:[5,11,1],makecvxopt_inst:[],initi:[0,6,8,5],bound:[5,10,1],cutinfram:[],now:[0,4,1,5],"09e":[],introduct:[0,6],reltol:10,term:[6,4,1],name:[1,2,11,6,10,4],revers:1,"93e":8,separ:[5,6,1],attributeerror:10,cett:[],replac:[10,4],continu:[1,4,5,6,8,10,11],redistribut:6,happen:1,shown:5,"3rd":[10,8,1],"51e":8,renvoit:[],correct:0,after:[6,1],state:5,contain:[0,10],lmi:1,theori:8,org:6,obj_valu:[5,10,1],"79e":8,edgelist:5,place:11,eliminate_useless_vari:[],semiint:[10,11],alphai:[],first:[0,1,6,8,10,4],origin:[5,10],directli:10,onc:[10,1],arrai:4,open:[6,1],size:[1,11,6,8,10,4],given:[1,5,6,8,10,4],vtype:[1,5,6,8,10,11],draft:8,whith:4,conveni:1,socp:[10,6,8,7,1],specifi:[0,10,1],pyopt:6,quad:[11,2],than:[10,11,1],png:5,blabla:[],were:10,posit:[5,8,11,1],l_i:[],sai:1,nicer:4,argument:1,rscone:2,"20e":[],sat:6,squar:1,moreov:[],sub1:[],note:[1,2,5,6,8,4],numberconeconstraint:10,take:[5,6,11,1],advis:1,interior:10,begin:[],sure:6,trace:[8,1],normal:[5,8,4],multipli:[10,4,1],pair:[5,10,1],abstol:10,later:6,axi:5,sigma:[],conflit:4,show:[5,6],multicut:[5,7],onli:[10,6,11,1,8],recquir:[5,10],e_5:4,"92e":8,fulkerson:5,dict:[5,10,8,4,1],deign:8,get_xaxi:5,grbvar:[],geq:[],get:[8,1],repr:[],cannot:[],requir:[0,10,6],yield:[5,1],aris:6,trye:[],vohra:5,e_i:4,where:[1,2,5,6,8,10,4],make_cvxopt_inst:[],spars:[4,10,6,11,8],pool_gap:[],review:8,enumer:[5,4],label:5,hist:[],enough:0,coneprog:[],between:[10,4],"import":[1,5,6,8,10,4],assumpt:11,parent:11,gurobipi:6,"\u03c3_":[5,6,8,4,1],draw_networkx_edg:5,apply_funct:[],region:5,quiet:10,tutori:[0,1,2],"83e":1,mani:6,acceptablegap:[],color:5,overview:[],maxflow:5,sagnol:[6,8],msk_task:[],hyperplan:5,save:10,ucla:[],mark:5,valueerror:[],"44e":8,those:[5,11,1],"case":[10,8,11,1],funstr:[],"50e":1,"_cplex_solv":[],advantag:[6,1],henc:[5,8,11],"__init__":[],develop:6,author:[0,6],same:[5,8,4,1],binari:[5,10,11,1],html:[],"08e":[],"_cvxopt_solv":[],document:[0,1],improv:5,potrf:5,"_an":[],iterator_set:[],appropri:[10,1],without:[6,4],model:[6,8],dimension:1,ccc:[],solver_select:10,resp:[10,6,4],lapack:5,except:[10,6,1],param:[10,6,4,8],bloc:[],cutpass:10,real:4,scip_solv:[],read:[6,1],dark:5,"21e":8,grid:[],world:1,draw_networkx:5,mod:[],sum_:[],darkgreen:5,integ:[0,1,2,5,6,8,10,11],either:[10,6,11,1],output:[5,6,8,1],e_11:4,nonzero:10,slice:[6,11,1],definit:1,recomput:10,subproblem:10,"84e":8,lp_root_method:10,mathcal:[],complic:1,refer:[0,1,5,8,7,10],power:11,set_all_opt:[],habe:5,optimz:6,comparison:[],"91e":[],addconstraint:[],acm:5,stand:1,"2x1":[10,4,1],"2x3":1,"2x2":[4,1],"2x4":1,update_opt:10,pivot:10,your:[6,4,1],log:11,start:[0,10,11,5],interfac:[0,6,8],lot:[6,1],tupl:[4,10,11,1],notat:[5,1],hire:5,possibl:[0,6,8,4,1],"default":[10,1],"4time":[],pulp:6,set_var_valu:[10,11],creat:[4,10,6,8,1],certain:[],"48e":8,file:[0,10,6,1],set_tick:5,cream:1,again:[],is_valu:1,valid:6,list_of_vector:1,ignor:[10,2],you:[0,1,11,5,8,4,10,6],treememori:10,sequenc:5,docstr:[],multidimension:[10,6,8,1],"60e":6,pool:[],reduc:8,directori:6,descript:[10,4],potenti:5,represent:[10,8,4,1],all:[1,4,5,6,8,10,11],illustr:1,scalar:[1,2,11,8,4,10,6],socp_:[],follow:[0,1,2,4,5,6,8,10,11],cvxopt:[1,4,5,6,8,10,11],dualcut:5,articl:[],program:[1,2,11,5,8,4,10,6],introduc:[5,8],exhaus:6,vert:[],fals:[10,1],veri:[6,1],prob_sdp_c_dual:8,list:[1,5,6,8,10,4],helloworld:1,small:5,dimens:[10,8,4,1],teo:5,zero:[5,8,1,2],design:[0,6,7,8,5],pass:[5,10,1],bilinear:11,what:[6,8,1],nonlinear:6,"39e":8,diag:[5,4],section:[],abl:[10,6,4],overload:[11,1],delet:10,version:[9,0,6,8,1],"public":6,contrast:1,varial:[],"19e":8,depend:[5,6,1],modifi:6,valu:[1,2,11,5,8,4,10,6],search:0,prior:[5,8],figsiz:5,pico:[0,1,2,3,4,5,6,8,9,10,11],doctest:[1,5,6,8,10,4],via:6,filenam:10,select:10,two:[1,4,5,6,8,10,11],formul:[5,6,7,8],isconst:11,more:[6,8,1,2],desir:10,canon:6,particular:[10,6,4,1],known:[5,11],set_valu:[],draw_networkx_edge_label:5,none:[4,10,11,2],make_zibopt:[],userguid:[],dec:0,yalmip:6,accept:[8,1],minimum:5,multiwai:5,"_blocdiag":[],huge:10,goal:[5,8],dictkeytov:[],anoth:[5,6,11],divis:[11,1],x_minus_1:1,simpl:[5,6,8,1],variant:1,spmatrix:[8,4],plane:10,"74e":[],varianc:8,associ:2,svec:[],loud:10,unpredicat:5,shade:5,mathbb:1,rotat:[11,1,2],ith:[10,4],soon:10,"_svecm1_ident":[],through:5,todoc:[],paramet:[10,8,4,1],edge_color:5,lorretz:1,slack_var:2,might:[6,4,1],"return":[0,1,2,5,6,10,4],"49e":8,framework:8,vect:1,acceptable_gap_at_timelimit:10,get_vari:10,darkviolet:5,level:[10,6],unlik:5,conic:[0,6,8,1],achiev:10,found:[5,6,1],weight:[5,8],hard:5,idea:5,procedur:[],realli:[],expect:[5,6,4],todo:[],p__0:1,p__1:1,admiss:11,publish:6,print:[1,5,6,8,10,4],pui:[],tdual:5,quick:0,reason:[],base:[5,1],dire:[],assign:[11,1],major:[0,1],famou:5,number:[1,5,6,8,10,4],done:1,construct:6,matric:[10,6,11,1,8],passer:[],differ:[5,10,6,8,1],exponenti:11,least:5,dict_of_vari:4,scheme:6,store:[4,10,11,1],option:[10,6,4,1],getter:[],pars:[10,4],eventu:[],std:[],kind:5,"18e":8,remov:[5,10,1],horizont:[11,1],harman:8,"97e":8,blanklin:[10,1],str:[4,10,6,11,8],openopt:6,loewner:11,comput:[10,8],packag:[5,6],set_all_options_to_default:[10,1],lib:6,lin:2,get_varexp:[],also:[1,5,6,8,10,4],append:1,tool:[3,0,6,4,5],add_vari:[1,5,6,8,10,4],distribut:6,reach:10,most:[6,1],automodul:[],"88e":6,alpha:1,clear:11,part:11,exp:[4,11,1],make_mosek_inst:[],bidirect:5,cplexvar:[],desitn:5,gold:5,"3x1":4,"3x2":6,networkx:5,numberlseconstraint:10,affin:[0,1,11,5,8,4,10,6],cell:[],mosek:[10,6,8],randn:[],writer:[10,1],solut:[0,1,5,6,8,10],quel:[],quer:1,factor:[5,11,2],express:[0,1,4,5,3,10,11],"66e":8,timelimit:10,statist:8,gaplim:10,egin:[],set:[1,2,5,6,8,10,4],creator:[],numberjack:6,inuput:[],see:[1,2,5,6,8,10,4],apropri:[],someth:[8,4],experi:8,altern:[8,1],diag_vect:[5,4],numer:8,induc:[],len:[6,4,8],"_make_cvxopt_inst":[],complementari:10,solv:[0,1,11,5,8,10,6],both:1,last:1,dual_var:[],pdf:5,whole:10,simpli:6,point:[5,10,1],tgz:[],"_list":[],semicontinu:11,b_4:[],blkdiag:[],bertrand:6,due:6,empti:10,implicit:[11,1],b_i:[],remark:5,gap:10,coordin:[4,1],understand:4,func:[],educ:6,look:[0,1],"while":[5,1],unifi:6,abov:[5,8,4,1],error:4,fun:[],mbox:[],"00e":[8,4,1],smcp:[10,6,8],unitari:11,logsumexp:[4,10,3,11,2],minim:[5,10,6,8,1],belong:[1,5,6,8,10,4],get_typ:[],minu:11,shorter:4,optim:[0,1,5,6,7,8,10,11],painless:6,remove_all_constraint:[10,1],user:[10,6,11],chang:[0,10,4,5],dddddd:5,recent:[],lower:[8,11,1],equival:[10,1],ampl:6,older:9,entri:[10,8,4],capaflow:5,self:[],explan:1,scip_var:[],x_cut:5,pylab:5,"_sqpsolv":[],pyomo:6,set_object:[5,10,6,8,1],cut:[0,10,7,5],numberquadnnz:10,theorem:5,ight:[],format:[5,10,4,1],foundat:6,ypour:[],a_i:[],"76e":8,semi:11,pointant:[],set_dualvar:[],some:[0,1,6,8,10,11],understood:1,instal:[9,0,10,6],add_list_of_constraint:[5,10,6,8,1],make_cplex_inst:[],mathemat:5,larg:[],new_param:[1,5,6,8,10,4],frobeniu:[6,11,1],prob:[10,6,4,1],recogniz:1,run:[5,6,8],step:1,auxilari:10,constraint:[0,1,2,3,4,5,6,7,8,10,11],transpos:[],block:[],plan:8,test_pico:6,digraph:5,pythonpath:6,within:[5,8],ellipsi:8,contributor:[0,6],triangl:8,megabyt:10,"long":1,includ:10,suit:6,himself:6,sdp:[1,2,5,6,7,8,10],edge_label:5,link:6,line:6,msk_env:[],cvxpy:6,"_or":[],"_on":[],similar:6,constant:[4,6,11,1],miqp:6,affinexpress:[],repres:[4,10,11,1],guarante:5,virer:[],titl:[],sequenti:[],verbose0:[],draw:5,remove_constraint:10,eval:[],swarat:6,algorithm:[5,10],lanl:[],omont:6,hello:1,code:[5,8,1],edg:5,"_zibopt_solv":[],edu:[],"71e":1,compact:1,privat:[],pouvoir:[],elsewher:4,friendli:6,z_i:8,ajout:[],tuto:[],volum:5,garder:[],tri:[10,4],fewer:[],"try":[10,4,1],impli:6,natur:[6,8],cplex_lp:[],download:[9,0,6],odd:[],elisa:1,fonction:[10,4],compat:8,index:[0,1,11,5,8,4,10,6],"64e":6,find:[5,10,8,4,1],access:[10,1],experiment:[0,6,7,8],funtion:10,"41e":6,cplex_inst:[],numberaffconstraint:10,matplotlib:5,leq:[],"59e":6,sink:5,vertic:[11,1],sinc:[6,4,1],convert:[5,10,6,4,1],convers:4,larger:1,step_sqp:[],implement:[5,6,11],add_constraint:[0,1,5,6,8,10],eta_j:[],appli:11,approxim:[5,8,7],disciplin:6,inequ:[5,8,11,1,2],api:[0,3],vert_2:[],from:[0,1,2,5,8,7,10,11],doubl:[5,4,1],next:[10,4,1],few:1,zib:6,node_color:5,sort:[],"33e":[],retriev:[10,8],process:10,high:6,list_of_scalar:1,opensourc:6,gca:5,aff:11,"_makegandh":[],infeas:1,instead:[10,8,1],"94e":[],hotstart:[],tomato:5,alloc:[5,8],light:5,correspond:[10,8,1],element:[4,8,11,1],prob_dual_a:8,allow:[8,1],prob_dual_c:8,"02e":8,testcod:[],bunch:6,optimalvar:10,mincut:5,greater:11,nonneg:[5,11,1,2],handl:[10,6,8,1],numner:10,dan:[],dat:10,autr:[],successor:5,warranti:6,betti:1,is_continu:10,get_simple_vari:[],dsimplex:10,typeofconstraint:2,guillaum:6,our:1,out:1,variabl:[0,1,2,4,5,6,8,10,11],matrix:[1,4,5,6,8,10,11],mettr:[],treemomori:[],ret:1,suitabl:10,rel:10,ref:[],math:[],common:10,insid:1,check_current_value_feas:10,que:[],dictionari:[4,10,11,1],releas:0,"70e":8,transposit:[11,1],could:[5,10,4],wheter:5,keep:1,length:[10,4,1],softwar:6,goeman:5,strict:1,unknown:[8,1],licens:[0,6],capac:5,people_list:1,gurobi:[0,6],zibopt:[10,6],termin:[5,10,6],"final":1,psimplex:10,rst:[],repect:[],slacl:[],"65e":8,slack:[10,1,2],structur:1,generalfun:[],clearli:5,mosek_lp:[],have:[0,1,4,5,6,10,11],tabl:[0,6],need:[6,1],hessian:[],min:[1,5,6,7,8,10],abla:[],dictionnari:[],mix:[0,10,6],which:[0,1,11,5,8,4,10,6],mip:[5,10,6,7,1],singl:[10,8,7,1],unless:10,who:6,why:[],underset:[],"32e":[6,8],inde:[8,1],sourceforg:[],constrain:[6,11,1,8],remove_vari:10,fact:[5,10,1],verbos:[5,10,6,8,1],"99e":[],prob_sdp_c_prim:8,"7x1":4,should:[0,1,2,4,5,6,8,10,11],local:6,hope:6,meant:10,contribut:6,numberconevar:10,organ:[],"l\u00f6wner":1,integr:5,partit:5,onlychangeobject:10,grad:[],dpi:[],violet:5,outpu:[],statu:[10,1],correctli:[6,1],pattern:10,written:[6,8,1],kei:[10,4,2],"03e":8,problen:8,disconnect:5,addit:[6,11,1,8],eval_al:[],extens:10,iscontinu:[],aqua:5,equal:[1,2,4,5,6,11],etc:6,instanc:[10,11,1],comment:5,x_i:[],respect:[5,8,11,1],defini:[],besid:1,prob_sdp_c:[],x_2:[],togeth:[5,10,4],x_1:[],present:[5,8,11],determinist:5,multi:[8,7],cvx:[1,5,6,8,10,4],defin:[1,5,6,8,10,11],observ:[6,8],layer:6,darkgoldenrod:5,site:6,motiv:6,dual:[1,2,5,6,7,8,10],dodgerblu:5,convert_quad_to_socp_if_need:10,"35e":[],let:[5,10,1],welcom:0,sqrt:[],member:[],python:[0,10,6,4,1],infer:8,endindex:11,nbsol:10,http:6,denot:[5,10,6,4,1],effect:1,"_eval_al":[],qcqp:[10,6],numbersdpvar:10,center:[],well:[6,4],exampl:[0,1,5,6,7,8,10,4],command:6,nodual:10,latest:[9,0,6],less:[10,6,11,1],obtain:[5,10,8,1],hess:[],expon:11,testoutput:[],exempl:[],add:[10,6,11,1],picos2:[],match:4,write_to_fil:[10,1],mosek_mp:[],set_varvalu:[],know:5,feastol:10,python2:6,loss:[],like:[6,8],"28e":8,consflow:5,available_solv:[6,4],page:[0,8,5],soplex:6,"export":10,convex:[10,6,8,1],home:6,peter:1,affinexpr:[],prob_a_multiconstraint:8,lead:[10,8],prob_exact_d:8,avoid:6,prob_exact_a:8,estim:8,summand:[4,6,8,1],"_follow":[],importerror:6,journal:[5,8],usag:6,simplex:[5,10],offset:[],dcp:6,"98e":8,about:[],actual:[],column:[8,1],constructor:[10,4],own:10,absolut:[10,1],primal:[10,8,7,1],automat:10,diagon:[5,8,4],laplacian:5,"56e":1,"72e":8,val:10,"var":[5,10,6,8,1],"function":[0,1,4,8,10,11],williamson:5,triangular:[8,11,1],gain:10,bug:0,count:[5,10],succe:[],made:11,wise:[],"_make_zibopt":[],displai:[5,6,8,4,1],substack:[],get_yaxi:5,below:[1,5,6,8,10,4],limit:10,otherwis:10,problem:[0,1,11,5,3,4,7,8,10,6],colum:[],evalu:[],"int":[10,4],pic:[1,5,6,8,10,4],ind:10,inf:1,probabl:6,scip:6,detail:6,gurobi_inst:[],other:[6,11,1],branch:10,repeat:5,in0:1,"25e":8,sphinx:[]},objtypes:{"0":"py:module","1":"py:method","2":"py:attribute","3":"py:class","4":"py:function"},titles:["PICOS: A Python Interface for Conic Optimization Solvers","Tutorial","Constraint","The PICOS API","picos.tools","Cut problems in graphs","Introduction","Examples","Examples from Optimal Experimental Design","Download","Problem","Expression"],objnames:{"0":["py","module","Python module"],"1":["py","method","Python method"],"2":["py","attribute","Python attribute"],"3":["py","class","Python class"],"4":["py","function","Python function"]},filenames:["index","tuto","constraint","api","tools","graphs","intro","examples","optdes","download","problem","expression"]}) \ No newline at end of file diff --git a/doc/full_html/0.1.2/tools.html b/doc/full_html/0.1.2/tools.html deleted file mode 100644 index f45ab0d34c7febbbdb0f81d41ea817d74738a7e4..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/tools.html +++ /dev/null @@ -1,460 +0,0 @@ - - - - - - - - - - picos.tools — picos 0.1.2 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Warning

    You are consulting the doc of a former version of PICOS.The latest version is HERE.

    - -
    -
    -
    -
    - -
    -

    picos.tools

    -
    -
    -picos.tools.available_solvers()
    -

    Lists all available solvers

    -
    - -
    -
    -picos.tools.diag(exp, dim=1)
    -

    if exp is an affine expression of size (n,m), -diag(exp,dim) returns a diagonal matrix of size dim*n*m \times dim*n*m, -with dim copies of the vectorized expression exp[:] on the diagonal.

    -

    In particular:

    -
    -
      -
    • when exp is scalar, diag(exp,n) returns a diagonal -matrix of size n \times n, with all diagonal elements equal to exp.
    • -
    • when exp is a vector of size n, diag(exp) returns the diagonal -matrix of size n \times n with the vector exp on the diagonal
    • -
    -
    -

    Example

    -
    >>> import picos as pic
    ->>> prob=pic.Problem()
    ->>> x=prob.add_variable('x',1)
    ->>> y=prob.add_variable('y',1)
    ->>> pic.tools.diag(x-y,4)
    -# (4 x 4)-affine expression: Diag(x -y) #
    ->>> pic.tools.diag(x//y)
    -# (2 x 2)-affine expression: Diag([x;y]) #
    -
    -
    -
    - -
    -
    -picos.tools.diag_vect(exp)
    -

    Returns the vector with the diagonal elements of the matrix expression exp

    -

    Example

    -
    >>> import picos as pic
    ->>> prob=pic.Problem()
    ->>> X=prob.add_variable('X',(3,3))
    ->>> pic.tools.diag_vect(X)
    -# (3 x 1)-affine expression: diag(X) #
    -
    -
    -
    - -
    -
    -picos.tools.eval_dict(dict_of_variables)
    -

    if dict_of_variables is a dictionary -mapping variable names (strings) to variables, -this function returns the dictionary names -> variable values.

    -
    - -
    -
    -picos.tools.lse(exp)
    -

    shorter name for the constructor of the class LogSumExp

    -

    Example

    -
    >>> import picos as pic
    ->>> import cvxopt as cvx
    ->>> prob=pic.Problem()
    ->>> x=prob.add_variable('x',3)
    ->>> A=pic.new_param('A',cvx.matrix([[1,2],[3,4],[5,6]]))
    ->>> pic.lse(A*x)<0
    -# (2x1)-Geometric Programming constraint LSE[ A*x ] < 0 #
    -
    -
    -
    - -
    -
    -picos.tools.new_param(name, value)
    -

    Declare a parameter for the problem, that will be stored -as a cvxopt sparse matrix. -It is possible to give a list or a dictionary of parameters. -The function returns a constant AffinExp -(or a list or a dict of AffinExp) representing this parameter.

    -
    -

    Note

    -

    Declaring parameters is optional, since the expression can -as well be given by using normal variables. (see Example below). -However, if you use this function to declare your parameters, -the names of the parameters will be displayed when you print -an Expression or a Constraint

    -
    - --- - - - - - -
    Parameters:
      -
    • name (str.) – The name given to this parameter.
    • -
    • value – The value (resp list of values, dict of values) of the parameter. -The type of value (resp. the elements of the list value, -the values of the dict value) should be understandable by -the function _retrieve_matrix().
    • -
    -
    Returns:

    A constant affine expression (AffinExp) -(resp. a list of AffinExp of the same length as value, -a dict of AffinExp indexed by the keys of value)

    -
    -

    Example:

    -
    >>> import cvxopt as cvx
    ->>> prob=pic.Problem()
    ->>> x=prob.add_variable('x',3)
    ->>> B={'foo':17.4,'matrix':cvx.matrix([[1,2],[3,4],[5,6]]),'ones':'|1|(4,1)'}
    ->>> B['matrix']*x+B['foo']
    -# (2 x 1)-affine expression: [ 2 x 3 MAT ]*x + |17.4| #
    ->>> #(in the string above, |17.4| represents the 2-dim vector [17.4,17.4])
    ->>> B=pic.new_param('B',B)
    ->>> #now that B is a param, we have a nicer display:
    ->>> B['matrix']*x+B['foo']
    -# (2 x 1)-affine expression: B[matrix]*x + |B[foo]| #
    -
    -
    -
    - -
    -
    -picos.tools.sum(lst, it=None, indices=None)
    -

    sum of a list of affine expressions. -This fonction can be used with python list comprehensions -(see the example below).

    - --- - - - -
    Parameters:
      -
    • lst – list of AffinExp.
    • -
    • it (None or str or list.) – Description of the letters which should -be used to replace the dummy indices. -The function tries to find a template -for the string representations of the -affine expressions in the list. -If several indices change in the -list, their letters should be given as a -list of strings, in their order of appearance in -the resulting string. For example, if three indices -change in the summands, and you want them to be -named 'i', 'j' and 'k', set it = ['i','j','k']. -You can also group two indices which always appear together, -e.g. if 'i' always appear next to 'j' you -could set it = [('ij',2),'k']. Here, the number 2 -indicates that 'ij' replaces 2 indices. -If it is set to None, or if the function is not -able to find a template, the string of -the first summand will be used for -the string representation of the sum.
    • -
    • indices (str.) – a string to denote the set where the indices belong to.
    • -
    -
    -

    Example:

    -
    >>> import picos as pic
    ->>> prob=pic.Problem()
    ->>> x={}
    ->>> names=['foo','bar','baz']
    ->>> for n in names:
    -...   x[n]=prob.add_variable( 'x[{0}]'.format(n),(3,5) )
    ->>> x 
    -{'baz': # variable x[baz]:(3 x 5),continuous #,
    - 'foo': # variable x[foo]:(3 x 5),continuous #,
    - 'bar': # variable x[bar]:(3 x 5),continuous #}
    ->>> pic.sum([x[n] for n in names],'n','names')
    -# (3 x 5)-affine expression: Σ_{n in names} x[n] #
    ->>> pic.sum([(i+1) * x[n] for i,n in enumerate(names)],['i','n'],'[3] x names') #two indices
    -# (3 x 5)-affine expression: Σ_{i,n in [3] x names} i*x[n] #
    ->>> IJ = [(1,2),(2,4),(0,1),(1,3)]
    ->>> pic.sum([x['foo'][ij] for ij in IJ],[('ij',2)],'IJ') #double index
    -# (1 x 1)-affine expression: Σ_{ij in IJ} x[foo][ij] #
    -
    -
    -
    - -
    -
    -picos.tools._retrieve_matrix(mat, exSize=None)
    -

    parses the variable mat and convert it to a cvxopt sparse matrix. -If the variable exSize is provided, the function tries -to return a matrix that matches this expected size, or raise an -error.

    -
    -

    Warning

    -

    If there is a conflit between the size of mat and -the expected size exsize, the function might still -return something without raising an error !

    -
    - --- - - - - - -
    Parameters:mat

    The value to be converted into a cvx.spmatrix. -The function will try to parse this variable and -format it to a vector/matrix. mat can be of one -of the following types:

    -
    -
      -
    • list [creates a vecor of dimension len(list)]
    • -
    • cvxopt matrix
    • -
    • cvxopt sparse matrix
    • -
    • numpy array
    • -
    • int or real [creates a vector/matrix of the size exSize (or of size (1,1) if exSize is None), -whith all entries equal to mat.
    • -
    • following strings:
      -
        -
      • |a|‘ for a matrix with all terms equal to a
      • -
      • |a|(n,m)‘ for a matrix forced to be of size n x m, with all terms equal to a
      • -
      • e_i(n,m)‘ matrix of size (n,m), with a 1 on the ith coordinate (and 0 elsewhere)
      • -
      • e_i,j(n,m)‘ matrix of size (n,m), with a 1 on the (i,j)-entry (and 0 elsewhere)
      • -
      • I‘ for the identity matrix
      • -
      • I(n)‘ for the identity matrix, forced to be of size n x n.
      • -
      • a%s‘, where %s is one of the above string: the matrix that -should be returned when mat == %s, multiplied by the scalar a.
      • -
      -
      -
    • -
    -
    -
    Returns:A tuple of the form (M, s), where M is the conversion of mat into a -cvxopt sparse matrix, and s -is a string representation of mat
    -

    Example:

    -
    >>> import picos as pic
    ->>> pic.tools._retrieve_matrix([1,2,3])
    -(<3x1 sparse matrix, tc='d', nnz=3>, '[ 3 x 1 MAT ]')
    ->>> pic.tools._retrieve_matrix('e_5(7,1)')
    -(<7x1 sparse matrix, tc='d', nnz=1>, 'e_5')
    ->>> print pic.tools._retrieve_matrix('e_11(7,2)')[0] 
    -[   0        0       ]
    -[   0        0       ]
    -[   0        0       ]
    -[   0        0       ]
    -[   0        1.00e+00]
    -[   0        0       ]
    -[   0        0       ]
    ->>> print pic.tools._retrieve_matrix('5.3I',(2,2))
    -(<2x2 sparse matrix, tc='d', nnz=2>, '5.3I')
    -
    -
    -
    - -
    - - -
    -
    -
    -
    -
    -

    Table Of Contents

    - - -

    Previous topic

    -

    Problem

    -

    Next topic

    -

    Expression

    -

    This Page

    - - -

    Download

    - - - - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/doc/full_html/0.1.2/tuto.html b/doc/full_html/0.1.2/tuto.html deleted file mode 100644 index 55fb487c8bdc94d85d66010241f73514d8b25f2f..0000000000000000000000000000000000000000 --- a/doc/full_html/0.1.2/tuto.html +++ /dev/null @@ -1,1087 +0,0 @@ - - - - - - - - - - Tutorial — picos 0.1.2 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Warning

    You are consulting the doc of a former version of PICOS.The latest version is HERE.

    - -
    -
    -
    -
    - -
    -

    Tutorial

    -

    First of all, let us import the PICOS module and cvxopt

    -
    >>> import picos as pic
    ->>> import cvxopt as cvx
    -
    -
    -

    We now generate some arbitrary data, that we will use in this tutorial.

    -
    >>> pairs = [(0,2), (1,4), (1,3), (3,2), (0,4),(2,4)]        #a list of pairs
    ->>> A = []
    ->>> b = ( [0 ,2 ,0 ,3 ],                               #a tuple of 5 lists, each of length 4
    -...       [1 ,1 ,0 ,5 ],
    -...       [-1,0 ,2 ,4 ],
    -...       [0 ,0 ,-2,-1],
    -...       [1 ,1 ,0 ,0 ]
    -...     )
    ->>> for i in range(5):
    -...     A.append(cvx.matrix(range(i-3,i+5),(2,4)))     #A is a list of 2x4 matrices
    ->>> D={'Peter': 12,
    -...    'Bob'  : 4,
    -...    'Betty': 7,
    -...    'Elisa': 14
    -...    }
    -
    -
    -

    Let us now create an instance P of an optimization problem

    -
    >>> prob = pic.Problem()    #create a Problem instance
    -
    -
    -
    -

    Variables

    -

    We will now create the variables of our optimization problem. This is done -by calling the method add_variable(). -This function adds an instance of the class Variable -in the dictionary prob.variables, and returns a reference -to the freshly added variable. -As we will next see, we -can use -this Variable -to form affine and quadratic expressions.

    -
    >>> t = prob.add_variable('t',1) #a scalar
    ->>> x = prob.add_variable('x',4) #a column vector
    ->>> Y = prob.add_variable('Y',(2,4)) #a matrix
    ->>> Z = []
    ->>> for i in range(5):
    -...     Z.append( prob.add_variable('Z[{0}]'.format(i),(4,2))  )# a list of 5 matrices
    ->>> w={}
    ->>> for p in pairs:   #a dictionary of (scalar) binary variables, indexed by our pairs
    -...     w[p] = prob.add_variable('w[{0}]'.format(p),1 , vtype='binary')
    -
    -
    -

    Now, if we try to display a variable, here is what we get:

    -
    >>> w[2,4]
    -# variable w[(2, 4)]:(1 x 1),binary #
    ->>> Y
    -# variable Y:(2 x 4),continuous #
    -
    -
    -

    Also note the use of the -attributes name, value, -size, and vtype:

    -
    >>> w[2,4].vtype
    -'binary'
    ->>> x.vtype
    -'continuous'
    ->>> x.vtype='integer'
    ->>> x
    -# variable x:(4 x 1),integer #
    ->>> x.size
    -(4, 1)
    ->>> Z[1].value = A[0].T
    ->>> Z[0].is_valued()
    -False
    ->>> Z[1].is_valued()
    -True
    ->>> Z[2].name
    -'Z[2]'
    -
    -
    -
    -
    -

    Affine Expressions

    -

    We will now use our variables to create some affine expressions, -which are stored as instance of the class AffinExp, -and will be the -core to define an optimization problem. Most python operators have been overloaded -to work with instances of AffinExp -(a list of available overloaded operators can be found in the -doc of AffinExp). For example, -you can form the sum of two variables by writing:

    -
    >>> Z[0]+Z[3]
    -# (4 x 2)-affine expression: Z[0] + Z[3] #
    -
    -
    -

    The transposition of an affine expression is done by appending .T:

    -
    >>> x
    -# variable x:(4 x 1),integer #
    ->>> x.T
    -# (1 x 4)-affine expression: x.T #
    -
    -
    -
    -

    Parameters as constant affine expressions

    -

    It is also possible to form affine expressions by using parameters -stored in data structures such as a list or a cvxopt matrix -(In fact, any type that is recognizable by the function _retrieve_matrix()).

    -
    >>> x + b[0]
    -# (4 x 1)-affine expression: x + [ 4 x 1 MAT ] #
    ->>> x.T + b[0]
    -# (1 x 4)-affine expression: x.T + [ 1 x 4 MAT ] #
    ->>> A[0] * Z[0] + A[4] * Z[4]
    -# (2 x 2)-affine expression: [ 2 x 4 MAT ]*Z[0] + [ 2 x 4 MAT ]*Z[4] #
    -
    -
    -

    In the above example, you see that the list b[0] was correctly converted into -a 4 \times 1 vector in the first expression, and into -a 1 \times 4 vector in the second one. This is because the overloaded -operators always try to convert the data into matrices of the appropriate size.

    -

    If you want to have better-looking string representations of your affine expressions, -you will need to convert the parameters into constant affine expressions. This can be done -thanks to the function new_param():

    -
    >>> A = pic.new_param('A',A)              #this creates a list of constant affine expressions [A[0],...,A[4]]
    ->>> b = pic.new_param('b',b)              #this creates a list of constant affine expressions [b[0],...,b[4]]
    ->>> D = pic.new_param('D',D)              #this creates a dictionary of constant AffExpr, indexed by 'Peter', 'Bob', ...
    ->>> alpha = pic.new_param('alpha',12)     #a scalar parameter
    -
    -
    -
    >>> alpha
    -# (1 x 1)-affine expression: alpha #
    ->>> D['Betty']
    -# (1 x 1)-affine expression: D[Betty] #
    ->>> b                                         
    -[# (4 x 1)-affine expression: b[0] #,
    - # (4 x 1)-affine expression: b[1] #,
    - # (4 x 1)-affine expression: b[2] #,
    - # (4 x 1)-affine expression: b[3] #,
    - # (4 x 1)-affine expression: b[4] #]
    ->>> print b[0]
    -[ 0.00e+00]
    -[ 2.00e+00]
    -[ 0.00e+00]
    -[ 3.00e+00]
    -
    -
    -

    The above example also illustrates that when a valued affine expression exp is printed, -it is its value that is displayed. For a non-valued affine expression, __repr__ -and __str__ produce the same result, a string of the form '# (size)-affine expression: string-representation #'. -Note that the constant affine expressions, as b[0] in the above example, -are always valued. -To assign a value to a non-constant AffinExp, -you must set the value property of -every variable involved in the affine expression.

    -
    >>> x_minus_1 = x - 1
    ->>> x_minus_1                           #note that 1 was recognized as the (4x1)-vector with all ones
    -# (4 x 1)-affine expression: x -|1| #
    ->>> print x_minus_1
    -# (4 x 1)-affine expression: x -|1| #
    ->>> x_minus_1.is_valued()
    -False
    ->>> x.value = [0,1,2,-1]
    ->>> x_minus_1.is_valued()
    -True
    ->>> print x_minus_1
    -[-1.00e+00]
    -[ 0.00e+00]
    -[ 1.00e+00]
    -[-2.00e+00]
    -
    -
    -

    We also point out that new_param() -converts lists into vectors and lists of lists into matrices (given -in row major order). -In contrast, tuples are converted into list of affine expressions:

    -
    >>> pic.new_param('vect',[1,2,3])                        # [1,2,3] is converted into a vector of dimension 3
    -# (3 x 1)-affine expression: vect #
    ->>> pic.new_param('mat',[[1,2,3],[4,5,6]])               # [[1,2,3],[4,5,6]] is converted into a (2x3)-matrix
    -# (2 x 3)-affine expression: mat #
    ->>> pic.new_param('list_of_scalars',(1,2,3))             # (1,2,3) is converted into a list of 3 scalar parameters 
    -[# (1 x 1)-affine expression: list_of_scalars[0] #,
    - # (1 x 1)-affine expression: list_of_scalars[1] #,
    - # (1 x 1)-affine expression: list_of_scalars[2] #]
    ->>> pic.new_param('list_of_vectors',([1,2,3],[4,5,6]))   # ([1,2,3],[4,5,6]) is converted into a list of 2 vector parameters 
    -[# (3 x 1)-affine expression: list_of_vectors[0] #,
    - # (3 x 1)-affine expression: list_of_vectors[1] #]
    -
    -
    -
    -
    -

    Overloaded operators

    -

    OK, so now we have some variables (t, x, w, Y, and Z) -and some parameters (A, b, D and alpha). Let us create some -affine expressions with them.

    -
    >>> A[0] * Z[0]                              #left multiplication
    -# (2 x 2)-affine expression: A[0]*Z[0] #
    ->>> Z[0] * A[0]                              #right multiplication
    -# (4 x 4)-affine expression: Z[0]*A[0] #
    ->>> A[1] * Z[0] * A[2]                       #left and right multiplication
    -# (2 x 4)-affine expression: A[1]*Z[0]*A[2] #
    ->>> alpha*Y                                  #scalar multiplication
    -# (2 x 4)-affine expression: alpha*Y #
    ->>> t/b[1][3] - D['Bob']                     #division by a scalar and substraction
    -# (1 x 1)-affine expression: t / b[1][3] -D[Bob] #
    ->>> ( b[2] | x )                             #dot product
    -# (1 x 1)-affine expression: 〈 b[2] | x 〉 #
    ->>> ( A[3] | Y )                             #generalized dot product for matrices: (A|B)=trace(A*B.T)
    -# (1 x 1)-affine expression: 〈 A[3] | Y 〉 #
    -
    -
    -

    We can also take some subelements of affine expressions, by using -the standard syntax of python slices:

    -
    >>> b[1][1:3]                                #2d and 3rd elements of b[1]
    -# (2 x 1)-affine expression: b[1][1:3] #
    ->>> Y[1,:]                                   #2d row of Y
    -# (1 x 4)-affine expression: Y[1,:] #
    ->>> x[-1]                                    #last element of x
    -# (1 x 1)-affine expression: x[-1] #
    ->>> A[2][:,1:3]*Y[:,-2::-2]                  #extended slicing with (negative) steps is allowed
    -# (2 x 2)-affine expression: A[2][:,1:3]*( Y[:,-2::-2] ) #
    -
    -
    -

    In the last example, we keep only the second and third columns of A[2], and -the columns of Y with an even index, considered in the reverse order. -To concatenate affine expressions, the operators // and & have been -overloaded:

    -
    >>> (b[1] & b[2] & x & A[0].T*A[0]*x) // x.T                  #vertical (//) and horizontal (&) concatenation
    -# (5 x 4)-affine expression: [b[1],b[2],x,A[0].T*A[0]*x;x.T] #
    -
    -
    -

    When a scalar is added/substracted to a matrix or a vector, we interprete it -as an elementwise addition of the scalar to every element of the matrix or vector.

    -
    >>> 5*x - alpha
    -# (4 x 1)-affine expression: 5*x + |-alpha| #
    -
    -
    -
    -

    Warning

    -

    Note that the string representation '|-alpha|' does not stand for the -absolute value of -alpha, but for the vector whose all terms are -alpha.

    -
    -
    -
    -

    Summing Affine Expressions

    -

    You can take the advantage of python syntax to create sums of affine expressions:

    -
    >>> sum([A[i]*Z[i] for i in range(5)])
    -# (2 x 2)-affine expression: A[0]*Z[0] + A[1]*Z[1] + A[2]*Z[2] + A[3]*Z[3] + A[4]*Z[4] #
    -
    -
    -

    This works, but you might have very long string representations if there are a lot -of summands. So you’d better use -the function picos.sum()):

    -
    >>> pic.sum([A[i]*Z[i] for i in range(5)],'i','[5]')
    -# (2 x 2)-affine expression: Σ_{i in [5]} A[i]*Z[i] #
    -
    -
    -

    It is also possible to sum over several indices

    -
    >>> pic.sum([A[i][1,j] + b[j].T*Z[i] for i in range(5) for j in range(4)],['i','j'],'[5]x[4]')
    -# (1 x 2)-affine expression: Σ_{i,j in [5]x[4]} |A[i][1,j]| + b[j].T*Z[i] #
    -
    -
    -

    A more complicated example, given in two variants: in the first one, -p is a tuple index representing a pair, while in the second case -we explicitely say that the pairs are of the form (p0,p1):

    -
    >>> pic.sum([w[p]*b[p[1]-1][p[0]] for p in pairs],('p',2),'pairs')
    -# (1 x 1)-affine expression: Σ_{p in pairs} w[p]*b[p__1-1][p__0] #
    ->>> pic.sum([w[p0,p1]*b[p1-1][p0] for (p0,p1) in pairs],['p0','p1'],'pairs')
    -# (1 x 1)-affine expression: Σ_{p0,p1 in pairs} w[(p0, p1)]*b[p1-1][p0] #
    -
    -
    -

    It is also possible to sum over string indices (see the documentation of sum()):

    -
    >>> pic.sum([D[name] for name in D],'name','people_list')
    -# (1 x 1)-affine expression: Σ_{name in people_list} D[name] #
    -
    -
    -
    -
    -

    Objective function

    -

    The objective function of the problem -can be defined with the function -set_objective(). -Its first argument should be 'max', 'min' or -'find' (for feasibility problems), -and the second argument should be a scalar expression:

    -
    >>> prob.set_objective('max',( A[0] | Y )-t)
    ->>> print prob  
    ----------------------
    -optimization problem (MIP):
    -59 variables, 0 affine constraints
    -
    -w   : dict of 6 variables, (1, 1), binary
    -Z   : list of 5 variables, (4, 2), continuous
    -t   : (1, 1), continuous
    -Y   : (2, 4), continuous
    -x   : (4, 1), integer
    -
    -    maximize 〈 A[0] | Y 〉 -t
    -such that
    -  []
    ----------------------
    -
    -
    -

    With this example, you see what happens when a problem is printed: -the list of optimization variables is displayed, then the objective function -and finally a list of constraints (in the case above, there is no constraint).

    -
    -
    -
    -

    Norm of an affine Expression

    -

    The norm of an affine expression is an overload of the abs() function. -If x is an affine expression, abs(x) is its Euclidean norm \sqrt{x^T x}.

    -
    >>> abs(x)
    -# norm of a (4 x 1)- expression: ||x|| #
    -
    -
    -

    In the case where the affine expression is a matrix, abs() returns its -Frobenius norm, defined as \Vert M \Vert_F := \sqrt{\operatorname{trace} (M^T M)}.

    -
    >>> abs(Z[1]-2*A[0].T)
    -# norm of a (4 x 2)- expression: ||Z[1] -2*A[0].T|| #
    -
    -
    -

    Note that the absolute value of a scalar expression is stored as a norm:

    -
    >>> abs(t)
    -# norm of a (1 x 1)- expression: ||t|| #
    -
    -
    -

    However, a scalar constraint of the form |a^T x + b| \leq c^T x + d -is handled as two linear constraints by PICOS, and so a problem with the latter -constraint -can be solved even if you do not have a SOCP solver available. -Besides, note that the string representation of an absolute value uses the double bar notation. -(Recall that the single bar notation |t| is used to denote the vector -whose all values are t).

    -
    -
    -

    Quadratic Expressions

    -

    Quadratic expressions can be formed in several ways:

    -
    >>> t**2 - x[1]*x[2] + 2*t - alpha                       #sum of linear and quadratic terms
    -#quadratic expression: t**2 -x[1]*x[2] + 2.0*t -alpha #
    ->>> (x[1]-2) * (t+4)                                     #product of two affine expressions
    -#quadratic expression: ( x[1] -2.0 )*( t + 4.0 ) #
    ->>> Y[0,:]*x                                             #Row vector multiplied by column vector
    -#quadratic expression: Y[0,:]*x #
    ->>> (x +2 | Z[1][:,1])                                   #scalar product of affine expressions
    -#quadratic expression: 〈 x + |2.0| | Z[1][:,1] 〉 #
    ->>> abs(x)**2                                            #recall that abs(x) is the euclidean norm of x
    -#quadratic expression: ||x||**2 #
    ->>> (t & alpha) * A[1] * x                               #quadratic form
    -#quadratic expression: [t,alpha]*A[1]*x #
    -
    -
    -

    It is not possible (yet) to make a multidimensional quadratic expression.

    -
    -
    -

    Constraints

    -

    A constraint takes the form of two expressions separated by a relation operator.

    -
    -

    Linear (in)equalities

    -

    Linear (in)equalities are understood elementwise. The strict operators -< and > denote weak inequalities (less or equal than -and larger or equal than). For example:

    -
    >>> (1|x) < 2                                                        #sum of the x[i] less or equal than 2
    -# (1x1)-affine constraint: 〈 |1| | x 〉 < 2.0 #
    ->>> Z[0] * A[0] > b[1]*b[2].T                                        #A 4x4-elementwise inequality
    -# (4x4)-affine constraint: Z[0]*A[0] > b[1]*b[2].T #
    ->>> pic.sum([A[i]*Z[i] for i in range(5)],'i','[5]') == 0            #A 2x2 equality. The RHS is the all-zero matrix
    -# (2x2)-affine constraint: Σ_{i in [5]} A[i]*Z[i] = |0| #
    -
    -
    -

    Constraints can be added in the problem with the function -add_constraint():

    -
    >>> for i in range(1,5):
    -...      prob.add_constraint(Z[i]==Z[i-1]+Y.T)
    ->>> print prob        
    ----------------------
    -optimization problem (MIP):
    -59 variables, 32 affine constraints
    -
    -w   : dict of 6 variables, (1, 1), binary
    -Z   : list of 5 variables, (4, 2), continuous
    -t   : (1, 1), continuous
    -Y   : (2, 4), continuous
    -x   : (4, 1), integer
    -
    -    maximize 〈 A[0] | Y 〉 -t
    -such that
    -  Z[1] = Z[0] + Y.T
    -  Z[2] = Z[1] + Y.T
    -  Z[3] = Z[2] + Y.T
    -  Z[4] = Z[3] + Y.T
    ----------------------
    -
    -
    -

    The constraints of the problem can then be accessed with the function -get_constraint():

    -
    >>> prob.get_constraint(2)                      #constraints are numbered from 0
    -# (4x2)-affine constraint: Z[3] = Z[2] + Y.T #
    -
    -
    -

    An alternative is to pass the constraint with the option ret = True, -which has the effect to return a reference to the constraint you want to add. -In particular, this reference can be useful to access the optimal dual variable -of the constraint, once the problem will have been solved.

    -
    >>> mycons = prob.add_constraint(Z[4]+Z[0] == Y.T, ret = True)
    ->>> print mycons
    -# (4x2)-affine constraint : Z[4] + Z[0] = Y.T #
    -
    -
    -
    -
    -

    Groupping constraints

    -

    In order to have a more compact string representation of the problem, -it is advised to use the function add_list_of_constraints(), -which works similarly as the function sum().

    -
    >>> prob.remove_all_constraints()                                                    #we first remove the 4 constraints precedently added
    ->>> prob.add_constraint(Y>0)                                                         #a single constraint
    ->>> prob.add_list_of_constraints([Z[i]==Z[i-1]+Y.T for i in range(1,5)],'i','1...4') #the same list of constraints as above
    ->>> print prob    
    ----------------------
    -optimization problem (MIP):
    -59 variables, 40 affine constraints
    -
    -w   : dict of 6 variables, (1, 1), binary
    -Z   : list of 5 variables, (4, 2), continuous
    -t   : (1, 1), continuous
    -Y   : (2, 4), continuous
    -x   : (4, 1), integer
    -
    -    maximize 〈 A[0] | Y 〉 -t
    -such that
    -  Y > |0|
    -  Z[i] = Z[i-1] + Y.T for all i in 1...4
    ----------------------
    -
    -
    -

    Now, the constraint Z[3] = Z[2] + Y.T, which has been entered -in 4th position, can either be accessed by prob.get_constraint(3) (3 because -constraints are numbered from 0), or by

    -
    >>> prob.get_constraint((1,2))
    -# (4x2)-affine constraint: Z[3] = Z[2] + Y.T #
    -
    -
    -

    where (1,2) means the 3rd constraint of the 2d group of constraints, -with zero-based numbering.

    -

    Similarly, the constraint Y > |0| can be accessed by -prob.get_constraint(0) (first constraint), -prob.get_constraint((0,0)) (first constraint of the first group), or -prob.get_constraint((0,)) (unique constraint of the first group).

    -
    -
    -

    Quadratic constraints

    -

    Quadratic inequalities are entered in the following way:

    -
    >>> t**2 > 2*t - alpha + x[1]*x[2]
    -#Quadratic constraint -t**2 + 2.0*t -alpha + x[1]*x[2] < 0 #
    ->>> (t & alpha) * A[1] * x + (x +2 | Z[1][:,1]) < 3*(1|Y)-alpha
    -#Quadratic constraint [t,alpha]*A[1]*x + 〈 x + |2.0| | Z[1][:,1] 〉 -(3.0*〈 |1| | Y 〉 -alpha) < 0 #
    -
    -
    -

    Note that PICOS does not check the convexity of convex constraints. -It is the solver which will raise an Exception if it does not support -non-convex quadratics.

    -
    -
    -

    Second Order Cone Constraints

    -

    There are two types of second order cone constraints supported in PICOS.

    -
    -
      -
    • The constraints of the type \Vert x \Vert \leq t, where t -is a scalar affine expression and x is -a multidimensional affine expression (possibly a matrix, in which case the -norm is Frobenius). This inequality forces -the vector [x;t] to belong to a Lorrentz-Cone (also called -ice-cream cone)
    • -
    • The constraints of the type \Vert x \Vert^2 \leq t u,\ t \geq 0, where -t and u are scalar affine expressions and -x is a multidimensional affine expression, which constrain -the vector [x,t,u] inside a rotated version of the Lorretz cone. -When a constraint of the form abs(x)**2 < t*u is passed to PICOS, it -is implicitely assumed that t is nonnegative, and the constraint is -handled as the equivalent, standard ice-cream cone constraint -\Vert \ [2x,t-u]\  \Vert \leq t+u.
    • -
    -
    -

    A few examples:

    -
    >>> abs(x) < (2|x-1)                                                                  #A simple ice-cream cone constraint
    -# (4x1)-SOC constraint: ||x|| < 〈 |2.0| | x -|1| 〉 #
    ->>> abs(Y+Z[0].T) < t+alpha                                                           #SOC constraint with Frobenius norm
    -# (2x4)-SOC constraint: ||Y + Z[0].T|| < t + alpha #
    ->>> abs(Z[1][:,0])**2 < (2*t-alpha)*(x[2]-x[-1])                                      #Rotated SOC constraint
    -# (4x1)-Rotated SOC constraint: ||Z[1][:,0]||^2 < ( 2.0*t -alpha)( x[2] -(x[-1])) #
    ->>> t**2 < D['Elisa']+t                                                               #t**2 is understood as the squared norm of [t]
    -# (1x1)-Rotated SOC constraint: ||t||^2 < D[Elisa] + t #
    ->>> 1 < (t-1)*(x[2]+x[3])                                                             #1 is understood as the squared norm of [1]
    -# (1x1)-Rotated SOC constraint: 1.0 < ( t -1.0)( x[2] + x[3]) #
    -
    -
    -
    -
    -

    Semidefinite Constraints

    -

    Linear matrix inequalities (LMI) can be entered thanks to an overload of the operators -<< and >>. For example, the LMI

    -
    -

    \begin{equation*}
-\sum_{i=0}^3 x_i b_i b_i^T \succeq b_4 b_4^T,
-\end{equation*}

    -

    where \succeq is used to denote the Löwner ordering, -is passed to PICOS by writing:

    -
    >>> pic.sum([x[i]*b[i]*b[i].T for i in range(4)],'i','0...3') >> b[4]*b[4].T
    -# (4x4)-LMI constraint Σ_{i in 0...3} x[i]*b[i]*b[i].T ≽ b[4]*b[4].T #
    -
    -
    -

    Note the difference with

    -
    >>> pic.sum([x[i]*b[i]*b[i].T for i in range(4)],'i','0...3') > b[4]*b[4].T
    -# (4x4)-affine constraint: Σ_{i in 0...3} x[i]*b[i]*b[i].T > b[4]*b[4].T #
    -
    -
    -

    which yields an elementwise inequality.

    -

    For convenience, it is possible to add a symmetric matrix variable X, -by specifying the option vtype=symmetric. This has the effect to -store all the affine expressions which depend on X as a function -of its lower triangular elements only.

    -
    >>> sdp = pic.Problem()
    ->>> X = sdp.add_variable('X',(4,4),vtype='symmetric')
    ->>> sdp.add_constraint(X >> 0)
    ->>> print sdp   
    ----------------------
    -optimization problem (SDP):
    -10 variables, 0 affine constraints, 10 vars in 1 SD cones
    -
    -X   : (4, 4), symmetric
    -
    -    find vars
    -such that
    -  X ≽ |0|
    ----------------------
    -
    -
    -

    In this example, you see indeed that the problem has 10=(4*5)/2 variables, -which correspond to the lower triangular elements of X.

    -
    -

    Warning

    -

    When a constraint of the form A >> B is passed to PICOS, it is not -assumed that A-B is symmetric. Instead, the symmetric matrix whose lower -triangular elements are those of A-B is forced to be positive semidefnite. -So, in the cases where A-B is not implicitely forced to be symmetric, you -should add a constraint of the form A-B==(A-B).T in the problem.

    -
    -
    -
    -
    -

    Write a Problem to a file

    -

    It is possible to write a problem to a file, thanks to the -function write_to_file(). -Several file formats and file writers are available, have a look at the doc -of write_to_file() for more explanations.

    -

    Below is a hello world example, which writes a simple MIP to a .lp file:

    -
    import picos as pic
    -prob = pic.Problem()
    -y = prob.add_variable('y',1, vtype='integer')
    -x = prob.add_variable('x',1)
    -prob.add_constraint(x>1.5)
    -prob.add_constraint(y-x>0.7)
    -prob.set_objective('min',y)
    -#let first picos display the problem
    -print prob
    -print
    -#now write the problem to a .lp file...
    -prob.write_to_file('helloworld.lp')
    -print
    -#and display the content of the freshly created file:
    -print open('helloworld.lp').read()
    -
    -
    -

    Generated output:

    -
    ---------------------
    -optimization problem  (MIP):
    -2 variables, 2 affine constraints
    -
    -y   : (1, 1), integer
    -x   : (1, 1), continuous
    -
    -        minimize y
    -such that
    -x > 1.5
    -y -x > 0.7
    ----------------------
    -
    -writing problem in helloworld.lp...
    -done.
    -
    -\* file helloworld.lp generated by picos*\
    -Minimize
    -obj : 1 y
    -Subject To
    -in0 : -1 y+ 1 x <= -0.7
    -Bounds
    -y free
    -1.5 <= x<= +inf
    -Generals
    -y
    -Binaries
    -End
    -
    -
    -
    -
    -

    Solve a Problem

    -

    To solve a problem, you have to use the method solve() -of the class Problem. This method accepts several -options. In particular the solver can be specified by passing -an option of the form solver='solver_name'. For a list of available -parameters with their default values, see the doc of the function -set_all_options_to_default().

    -

    Once a problem has been solved, the optimal values of the variables are -accessible with the value property. -Depending on the solver, you -can also obtain the slack and the optimal dual variables -of the constraints thanks to the properties -dual and -slack of the class -Constraint. -See the doc of dual for more explanations -on the dual variables for second order cone programs (SOCP) and -semidefinite programs (SDP).

    -

    The class Problem also has -two interesting properties: type, which -indicates the class of the optimization problem (‘LP’, ‘SOCP’, ‘MIP’, ‘SDP’,...), -and status, which indicates if the -problem has been solved (the default is 'unsolved'; after a call to -solve() this property can take the value of any -code returned by a solver, such as 'optimal', 'unbounded', 'near-optimal', -'primal infeasible', 'unknown', ...).

    -

    Below is a simple example, to solve the linear programm:

    -
    -

    \begin{center}
-$\begin{array}{ccc}
-\underset{x \in \mathbb{R}^2}{\mbox{minimize}}
-                   & 0.5 x_1 + x_2 &\\
-\mbox{subject to} & x_1 &\geq x_2\\
-                  & \left[
-                     \begin{array}{cc}
-                     1 & 0\\
-                     1 & 1
-                     \end{array}
-                     \right] x &\leq
-                     \left[
-                     \begin{array}{c} 3 \\4 \end{array}
-                     \right].
-\end{array}$
-\end{center}

    -

    More examples can be found here.

    -
    P = pic.Problem()
    -A = pic.new_param('A', cvx.matrix([[1,1],[0,1]]) )
    -x = P.add_variable('x',2)
    -P.add_constraint(x[0]>x[1])
    -P.add_constraint(A*x<[3,4])
    -objective = 0.5 * x[0] + x[1]
    -P.set_objective('max', objective)
    -
    -#display the problem and solve it
    -print P
    -print 'type:   '+P.type
    -print 'status: '+P.status
    -P.solve(solver='cvxopt',verbose=False)
    -print 'status: '+P.status
    -
    -#--------------------#
    -#  objective value   #
    -#--------------------#
    -
    -print 'the optimal value of this problem is:'
    -print P.obj_value()                      #"print objective" would also work, because objective is valued
    -
    -#--------------------#
    -#  optimal variable  #
    -#--------------------#
    -x_opt = x.value
    -print 'The solution of the problem is:'
    -print x_opt                              #"print x" would also work, since x is now valued
    -print
    -
    -#--------------------#
    -#  slacks and duals  #
    -#--------------------#
    -c0=P.get_constraint(0)
    -print 'The dual of the constraint'
    -print c0
    -print 'is:'
    -print c0.dual
    -print 'And its slack is:'
    -print c0.slack
    -print
    -
    -c1=P.get_constraint(1)
    -print 'The dual of the constraint'
    -print c1
    -print 'is:'
    -print c1.dual
    -print 'And its slack is:'
    -print c1.slack
    -
    -
    -
    ---------------------
    -optimization problem  (LP):
    -2 variables, 3 affine constraints
    -
    -x   : (2, 1), continuous
    -
    -    maximize 0.5*x[0] + x[1]
    -such that
    -  x[0] > x[1]
    -  A*x < [ 2 x 1 MAT ]
    ----------------------
    -type:   LP
    -status: unsolved
    -status: optimal
    -
    -the optimal value of this problem is:
    -3.0000000002
    -The solution of the problem is:
    -[ 2.00e+00]
    -[ 2.00e+00]
    -
    -
    -The dual of the constraint
    -# (1x1)-affine constraint : x[0] > x[1] #
    -is:
    -[ 2.50e-01]
    -
    -And its slack is:
    -[ 1.83e-09]
    -
    -
    -The dual of the constraint
    -# (2x1)-affine constraint : A*x < [ 2 x 1 MAT ] #
    -is:
    -[ 4.56e-10]
    -[ 7.50e-01]
    -
    -And its slac