[slepc4py] 02/06: Imported Upstream version 3.7.0

Drew Parsons dparsons at moszumanska.debian.org
Mon Jul 11 04:24:01 UTC 2016


This is an automated email from the git hooks/post-receive script.

dparsons pushed a commit to branch experimental
in repository slepc4py.

commit 82bad58c097006ed49b38ac3ba92db63ae497607
Author: Drew Parsons <dparsons at emerall.com>
Date:   Mon Jul 11 12:10:24 2016 +0800

    Imported Upstream version 3.7.0
---
 CHANGES.rst                                        |     6 +
 LICENSE.rst                                        |     2 +-
 PKG-INFO                                           |     4 +-
 conf/baseconf.py                                   |    32 +-
 conf/epydoc.cfg                                    |     2 +-
 demo/ex10.py                                       |   303 +
 demo/ex11.py                                       |    66 +
 demo/ex3.py                                        |     4 +-
 demo/ex7.py                                        |    26 +-
 demo/ex8.py                                        |     7 +-
 demo/makefile                                      |    10 +-
 docs/CHANGES.html                                  |     9 +-
 docs/LICENSE.html                                  |     4 +-
 docs/apiref/api-objects.txt                        |   185 +-
 docs/apiref/class-tree.html                        |    89 +-
 docs/apiref/class_hierarchy_for__p_mem.png         |   Bin 845 -> 846 bytes
 docs/apiref/class_hierarchy_for_balance.png        |   Bin 1038 -> 1014 bytes
 docs/apiref/class_hierarchy_for_basis.png          |   Bin 891 -> 879 bytes
 docs/apiref/class_hierarchy_for_blocktype.png      |   Bin 0 -> 1597 bytes
 docs/apiref/class_hierarchy_for_bv.png             |   Bin 2742 -> 3078 bytes
 docs/apiref/class_hierarchy_for_bvorthogbl.png     |   Bin 2277 -> 0 bytes
 docs/apiref/class_hierarchy_for_combinetyp.png     |   Bin 0 -> 1593 bytes
 docs/apiref/class_hierarchy_for_conv.png           |   Bin 888 -> 861 bytes
 docs/apiref/class_hierarchy_for_conv_2.png         |   Bin 888 -> 861 bytes
 docs/apiref/class_hierarchy_for_convergedr.png     |   Bin 2007 -> 2005 bytes
 docs/apiref/class_hierarchy_for_convergedr_2.png   |   Bin 2007 -> 2005 bytes
 docs/apiref/class_hierarchy_for_convergedr_3.png   |   Bin 2007 -> 2005 bytes
 docs/apiref/class_hierarchy_for_convergedr_4.png   |   Bin 2007 -> 2005 bytes
 docs/apiref/class_hierarchy_for_convergedr_5.png   |   Bin 2007 -> 2005 bytes
 docs/apiref/class_hierarchy_for_ds.png             |   Bin 2789 -> 3109 bytes
 docs/apiref/class_hierarchy_for_eps.png            |   Bin 2816 -> 3131 bytes
 docs/apiref/class_hierarchy_for_errortype.png      |   Bin 1217 -> 1209 bytes
 docs/apiref/class_hierarchy_for_errortype_2.png    |   Bin 1217 -> 1209 bytes
 docs/apiref/class_hierarchy_for_errortype_3.png    |   Bin 1217 -> 1209 bytes
 docs/apiref/class_hierarchy_for_errortype_4.png    |   Bin 1217 -> 1209 bytes
 docs/apiref/class_hierarchy_for_extract.png        |   Bin 0 -> 1061 bytes
 docs/apiref/class_hierarchy_for_extraction.png     |   Bin 1342 -> 1211 bytes
 docs/apiref/class_hierarchy_for_fn.png             |   Bin 2568 -> 2888 bytes
 docs/apiref/class_hierarchy_for_lanczosreo.png     |   Bin 2484 -> 2227 bytes
 docs/apiref/class_hierarchy_for_matmode.png        |   Bin 1147 -> 1279 bytes
 docs/apiref/class_hierarchy_for_matstructu.png     |   Bin 1561 -> 0 bytes
 docs/apiref/class_hierarchy_for_mattype.png        |   Bin 1407 -> 1245 bytes
 docs/apiref/class_hierarchy_for_mfn.png            |   Bin 2774 -> 3093 bytes
 docs/apiref/class_hierarchy_for_nep.png            |   Bin 2703 -> 3022 bytes
 docs/apiref/class_hierarchy_for_orthogtype.png     |   Bin 1678 -> 1675 bytes
 docs/apiref/class_hierarchy_for_pep.png            |   Bin 2550 -> 2847 bytes
 docs/apiref/class_hierarchy_for_peprefine.png      |   Bin 1031 -> 0 bytes
 docs/apiref/class_hierarchy_for_powershift.png     |   Bin 1860 -> 1862 bytes
 docs/apiref/class_hierarchy_for_problemtyp.png     |   Bin 1445 -> 1459 bytes
 docs/apiref/class_hierarchy_for_problemtyp_2.png   |   Bin 1445 -> 1459 bytes
 docs/apiref/class_hierarchy_for_refine.png         |   Bin 0 -> 909 bytes
 docs/apiref/class_hierarchy_for_refine_2.png       |   Bin 0 -> 909 bytes
 docs/apiref/class_hierarchy_for_refinesche.png     |   Bin 0 -> 1547 bytes
 docs/apiref/class_hierarchy_for_refinesche_2.png   |   Bin 0 -> 1547 bytes
 docs/apiref/class_hierarchy_for_refinetype.png     |   Bin 1379 -> 1243 bytes
 docs/apiref/class_hierarchy_for_rg.png             |   Bin 2801 -> 3126 bytes
 docs/apiref/class_hierarchy_for_scale.png          |   Bin 1042 -> 1033 bytes
 docs/apiref/class_hierarchy_for_st.png             |   Bin 2681 -> 3019 bytes
 docs/apiref/class_hierarchy_for_statetype.png      |   Bin 1408 -> 1407 bytes
 docs/apiref/class_hierarchy_for_svd.png            |   Bin 2981 -> 3331 bytes
 docs/apiref/class_hierarchy_for_sys.png            |   Bin 919 -> 904 bytes
 docs/apiref/class_hierarchy_for_type.png           |   Bin 882 -> 884 bytes
 docs/apiref/class_hierarchy_for_type_10.png        |   Bin 882 -> 884 bytes
 docs/apiref/class_hierarchy_for_type_2.png         |   Bin 882 -> 884 bytes
 docs/apiref/class_hierarchy_for_type_3.png         |   Bin 882 -> 884 bytes
 docs/apiref/class_hierarchy_for_type_4.png         |   Bin 882 -> 884 bytes
 docs/apiref/class_hierarchy_for_type_5.png         |   Bin 882 -> 884 bytes
 docs/apiref/class_hierarchy_for_type_6.png         |   Bin 882 -> 884 bytes
 docs/apiref/class_hierarchy_for_type_7.png         |   Bin 882 -> 884 bytes
 docs/apiref/class_hierarchy_for_type_8.png         |   Bin 882 -> 884 bytes
 docs/apiref/class_hierarchy_for_type_9.png         |   Bin 882 -> 884 bytes
 docs/apiref/class_hierarchy_for_which.png          |   Bin 930 -> 912 bytes
 docs/apiref/class_hierarchy_for_which_2.png        |   Bin 930 -> 912 bytes
 docs/apiref/class_hierarchy_for_which_3.png        |   Bin 930 -> 912 bytes
 docs/apiref/class_hierarchy_for_which_4.png        |   Bin 930 -> 912 bytes
 docs/apiref/help.html                              |     6 +-
 docs/apiref/identifier-index.html                  |  1462 +-
 docs/apiref/module-tree.html                       |     6 +-
 docs/apiref/redirect.html                          |     2 +-
 docs/apiref/slepc4py-module.html                   |     8 +-
 docs/apiref/slepc4py.SLEPc-module.html             |    60 +-
 docs/apiref/slepc4py.SLEPc.BV-class.html           |  1633 +-
 ...html => slepc4py.SLEPc.BV.BlockType-class.html} |    25 +-
 .../apiref/slepc4py.SLEPc.BV.OrthogType-class.html |     8 +-
 .../apiref/slepc4py.SLEPc.BV.RefineType-class.html |     8 +-
 docs/apiref/slepc4py.SLEPc.BV.Type-class.html      |     8 +-
 docs/apiref/slepc4py.SLEPc.DS-class.html           |    10 +-
 docs/apiref/slepc4py.SLEPc.DS.MatType-class.html   |     8 +-
 docs/apiref/slepc4py.SLEPc.DS.StateType-class.html |     8 +-
 docs/apiref/slepc4py.SLEPc.DS.Type-class.html      |     8 +-
 docs/apiref/slepc4py.SLEPc.EPS-class.html          |   350 +-
 docs/apiref/slepc4py.SLEPc.EPS.Balance-class.html  |     8 +-
 docs/apiref/slepc4py.SLEPc.EPS.Conv-class.html     |    14 +-
 .../slepc4py.SLEPc.EPS.ConvergedReason-class.html  |    30 +-
 .../apiref/slepc4py.SLEPc.EPS.ErrorType-class.html |     8 +-
 .../slepc4py.SLEPc.EPS.Extraction-class.html       |     8 +-
 ...epc4py.SLEPc.EPS.LanczosReorthogType-class.html |     8 +-
 .../slepc4py.SLEPc.EPS.PowerShiftType-class.html   |     8 +-
 .../slepc4py.SLEPc.EPS.ProblemType-class.html      |     8 +-
 docs/apiref/slepc4py.SLEPc.EPS.Type-class.html     |     8 +-
 docs/apiref/slepc4py.SLEPc.EPS.Which-class.html    |     8 +-
 docs/apiref/slepc4py.SLEPc.FN-class.html           |    18 +-
 ...ml => slepc4py.SLEPc.FN.CombineType-class.html} |    42 +-
 docs/apiref/slepc4py.SLEPc.FN.Type-class.html      |    15 +-
 docs/apiref/slepc4py.SLEPc.MFN-class.html          |    13 +-
 .../slepc4py.SLEPc.MFN.ConvergedReason-class.html  |    22 +-
 docs/apiref/slepc4py.SLEPc.MFN.Type-class.html     |    22 +-
 docs/apiref/slepc4py.SLEPc.NEP-class.html          |   305 +-
 .../slepc4py.SLEPc.NEP.ConvergedReason-class.html  |    39 +-
 .../apiref/slepc4py.SLEPc.NEP.ErrorType-class.html |    16 +-
 ...s.html => slepc4py.SLEPc.NEP.Refine-class.html} |    31 +-
 ... => slepc4py.SLEPc.NEP.RefineScheme-class.html} |    38 +-
 docs/apiref/slepc4py.SLEPc.NEP.Type-class.html     |    16 +-
 docs/apiref/slepc4py.SLEPc.NEP.Which-class.html    |    22 +-
 docs/apiref/slepc4py.SLEPc.PEP-class.html          |   191 +-
 docs/apiref/slepc4py.SLEPc.PEP.Basis-class.html    |     8 +-
 docs/apiref/slepc4py.SLEPc.PEP.Conv-class.html     |    14 +-
 .../slepc4py.SLEPc.PEP.ConvergedReason-class.html  |    30 +-
 .../apiref/slepc4py.SLEPc.PEP.ErrorType-class.html |     8 +-
 ....html => slepc4py.SLEPc.PEP.Extract-class.html} |    41 +-
 .../slepc4py.SLEPc.PEP.ProblemType-class.html      |     8 +-
 ...s.html => slepc4py.SLEPc.PEP.Refine-class.html} |    27 +-
 ... => slepc4py.SLEPc.PEP.RefineScheme-class.html} |    36 +-
 docs/apiref/slepc4py.SLEPc.PEP.Scale-class.html    |    16 +-
 docs/apiref/slepc4py.SLEPc.PEP.Type-class.html     |     8 +-
 docs/apiref/slepc4py.SLEPc.PEP.Which-class.html    |    16 +-
 docs/apiref/slepc4py.SLEPc.RG-class.html           |    10 +-
 docs/apiref/slepc4py.SLEPc.RG.Type-class.html      |     8 +-
 docs/apiref/slepc4py.SLEPc.ST-class.html           |    24 +-
 docs/apiref/slepc4py.SLEPc.ST.MatMode-class.html   |     8 +-
 .../slepc4py.SLEPc.ST.MatStructure-class.html      |   280 -
 docs/apiref/slepc4py.SLEPc.ST.Type-class.html      |     8 +-
 docs/apiref/slepc4py.SLEPc.SVD-class.html          |    69 +-
 .../slepc4py.SLEPc.SVD.ConvergedReason-class.html  |    22 +-
 .../apiref/slepc4py.SLEPc.SVD.ErrorType-class.html |     8 +-
 docs/apiref/slepc4py.SLEPc.SVD.Type-class.html     |     8 +-
 docs/apiref/slepc4py.SLEPc.SVD.Which-class.html    |     8 +-
 docs/apiref/slepc4py.SLEPc.Sys-class.html          |     8 +-
 docs/apiref/slepc4py.SLEPc._p_mem-class.html       |     8 +-
 docs/apiref/slepc4py.lib-module.html               |     6 +-
 docs/apiref/toc-everything.html                    |    26 +-
 docs/apiref/toc-slepc4py.SLEPc-module.html         |     6 +-
 docs/index.html                                    |    41 +-
 docs/index.rst                                     |    32 +-
 docs/slepc4py.1                                    |    41 +-
 docs/slepc4py.info                                 |   522 +-
 docs/slepc4py.pdf                                  |   Bin 122840 -> 124541 bytes
 docs/source/citing.rst                             |     5 +-
 docs/source/conf.py                                |     4 +-
 docs/source/index.rst                              |     1 -
 docs/source/links.txt                              |     8 -
 docs/source/make.bat                               |   456 +-
 docs/usrman/.buildinfo                             |     4 +-
 docs/usrman/_sources/citing.txt                    |     5 +-
 docs/usrman/_sources/index.txt                     |     1 -
 docs/usrman/_static/basic.css                      |     7 +-
 docs/usrman/_static/default.css                    |     2 +-
 docs/usrman/_static/doctools.js                    |    19 +-
 docs/usrman/_static/jquery.js                      |   156 +-
 docs/usrman/_static/pygments.css                   |     3 +
 docs/usrman/_static/searchtools.js                 |   362 +-
 docs/usrman/_static/sidebar.js                     |    14 +-
 docs/usrman/_static/underscore.js                  |    50 +-
 docs/usrman/_static/websupport.js                  |     2 +-
 docs/usrman/citing.html                            |    23 +-
 docs/usrman/genindex.html                          |    19 +-
 docs/usrman/index.html                             |    28 +-
 docs/usrman/install.html                           |    66 +-
 docs/usrman/manual.html                            |    18 +-
 docs/usrman/objects.inv                            |   Bin 212 -> 212 bytes
 docs/usrman/overview.html                          |    18 +-
 docs/usrman/search.html                            |    20 +-
 docs/usrman/searchindex.js                         |     2 +-
 docs/usrman/tutorial.html                          |    96 +-
 setup.cfg                                          |     1 -
 setup.py                                           |     3 +-
 slepc4py.egg-info/PKG-INFO                         |     4 +-
 slepc4py.egg-info/SOURCES.txt                      |    23 +-
 slepc4py.egg-info/requires.txt                     |     2 +-
 src/SLEPc.pxd                                      |     4 +
 src/SLEPc/BV.pyx                                   |   546 +-
 src/SLEPc/EPS.pyx                                  |   177 +-
 src/SLEPc/FN.pyx                                   |     4 +-
 src/SLEPc/MFN.pyx                                  |    11 +
 src/SLEPc/NEP.pyx                                  |   170 +-
 src/SLEPc/PEP.pyx                                  |   190 +-
 src/SLEPc/SLEPc.pyx                                |     6 +-
 src/SLEPc/ST.pyx                                   |    23 +-
 src/SLEPc/SVD.pyx                                  |    29 +
 src/SLEPc/slepcbv.pxi                              |    49 +
 src/SLEPc/slepceps.pxi                             |    12 +-
 src/SLEPc/slepcfn.pxi                              |     1 +
 src/SLEPc/slepcmfn.pxi                             |     2 +
 src/SLEPc/slepcnep.pxi                             |    47 +-
 src/SLEPc/slepcpep.pxi                             |    23 +-
 src/SLEPc/slepcst.pxi                              |     6 -
 src/SLEPc/slepcsvd.pxi                             |     4 +-
 src/SLEPc/slepcsys.pxi                             |    32 +-
 src/__init__.py                                    |     2 +-
 src/include/slepc4py/slepc4py.SLEPc.h              |     2 +
 src/include/slepc4py/slepc4py.SLEPc_api.h          |   130 +-
 src/slepc4py.SLEPc.c                               | 75901 +++++++++++--------
 test/test_object.py                                |     2 +
 203 files changed, 50370 insertions(+), 35037 deletions(-)

diff --git a/CHANGES.rst b/CHANGES.rst
index 773ff26..972ddeb 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -6,6 +6,12 @@ CHANGES: SLEPc for Python
 :Contact: dalcinl at gmail.com
 
 
+Release 3.7.0
+=============
+
+- Update to SLEPc 3.7 release.
+
+
 Release 3.6.0
 =============
 
diff --git a/LICENSE.rst b/LICENSE.rst
index 2bb617c..255da5d 100644
--- a/LICENSE.rst
+++ b/LICENSE.rst
@@ -6,7 +6,7 @@ LICENSE: SLEPc for Python
 :Contact: dalcinl at gmail.com
 
 
-Copyright (c) 2015, Lisandro Dalcin.
+Copyright (c) 2016, Lisandro Dalcin.
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/PKG-INFO b/PKG-INFO
index 07a9b1b..30b541e 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,12 +1,12 @@
 Metadata-Version: 1.1
 Name: slepc4py
-Version: 3.6.0
+Version: 3.7.0
 Summary: SLEPc for Python
 Home-page: https://bitbucket.org/slepc/slepc4py/
 Author: Lisandro Dalcin
 Author-email: dalcinl at gmail.com
 License: BSD
-Download-URL: https://bitbucket.org/slepc/slepc4py/downloads/slepc4py-3.6.0.tar.gz
+Download-URL: https://bitbucket.org/slepc/slepc4py/downloads/slepc4py-3.7.0.tar.gz
 Description: SLEPc for Python
         ================
         
diff --git a/conf/baseconf.py b/conf/baseconf.py
index 06cfd4a..9c27bb1 100644
--- a/conf/baseconf.py
+++ b/conf/baseconf.py
@@ -122,7 +122,7 @@ class PetscConfig:
             'minor'  : re.compile(r"#define\s+PETSC_VERSION_MINOR\s+(\d+)"),
             'micro'  : re.compile(r"#define\s+PETSC_VERSION_SUBMINOR\s+(\d+)"),
             'patch'  : re.compile(r"#define\s+PETSC_VERSION_PATCH\s+(\d+)"),
-            'release': re.compile(r"#define\s+PETSC_VERSION_RELEASE\s+(\d+)"),
+            'release': re.compile(r"#define\s+PETSC_VERSION_RELEASE\s+(-*\d+)"),
             }
         petscversion_h = os.path.join(petsc_dir, 'include', 'petscversion.h')
         with open(petscversion_h, 'rt') as f: data = f.read()
@@ -130,7 +130,7 @@ class PetscConfig:
         minor = int(version_re['minor'].search(data).groups()[0])
         micro = int(version_re['micro'].search(data).groups()[0])
         release = int(version_re['release'].search(data).groups()[0])
-        return  (major, minor, micro), bool(release)
+        return  (major, minor, micro), (release == 1)
 
     def _get_petsc_config(self, petsc_dir, petsc_arch):
         from os.path import join, isdir, exists
@@ -262,19 +262,21 @@ class PetscConfig:
         version = ".".join([str(i) for i in self.version[0]])
         release = ("development", "release")[self.version[1]]
         version_info = version + ' ' + release
-        scalar_type = self['PETSC_SCALAR']
-        precision   = self['PETSC_PRECISION']
-        language    = self['PETSC_LANGUAGE']
-        compiler    = self['PCC']
-        linker      = self['PCC_LINKER']
-        log.info('PETSC_DIR:   %s' % PETSC_DIR )
-        log.info('PETSC_ARCH:  %s' % PETSC_ARCH )
-        log.info('version:     %s' % version_info)
-        log.info('scalar-type: %s' % scalar_type)
-        log.info('precision:   %s' % precision)
-        log.info('language:    %s' % language)
-        log.info('compiler:    %s' % compiler)
-        log.info('linker:      %s' % linker)
+        integer_size = '%s-bit' % self['PETSC_INDEX_SIZE']
+        scalar_type  = self['PETSC_SCALAR']
+        precision    = self['PETSC_PRECISION']
+        language     = self['PETSC_LANGUAGE']
+        compiler     = self['PCC']
+        linker       = self['PCC_LINKER']
+        log.info('PETSC_DIR:    %s' % PETSC_DIR )
+        log.info('PETSC_ARCH:   %s' % PETSC_ARCH )
+        log.info('version:      %s' % version_info)
+        log.info('integer-size: %s' % integer_size)
+        log.info('scalar-type:  %s' % scalar_type)
+        log.info('precision:    %s' % precision)
+        log.info('language:     %s' % language)
+        log.info('compiler:     %s' % compiler)
+        log.info('linker:       %s' % linker)
 
 # --------------------------------------------------------------------
 
diff --git a/conf/epydoc.cfg b/conf/epydoc.cfg
index 92ada93..45a702a 100644
--- a/conf/epydoc.cfg
+++ b/conf/epydoc.cfg
@@ -77,7 +77,7 @@ include-log: no
 name: SLEPc for Python
 
 # The documented project's URL.
-url: http://bitbucket.org/slepc/slepc4py
+url: https://bitbucket.org/slepc/slepc4py
 
 # The CSS stylesheet for HTML output.  Can be the name of a builtin
 # stylesheet, or the name of a file.
diff --git a/demo/ex10.py b/demo/ex10.py
new file mode 100644
index 0000000..e8205f6
--- /dev/null
+++ b/demo/ex10.py
@@ -0,0 +1,303 @@
+"""
+This example program solves the Laplace problem using the Proper Orthogonal
+Decomposition (POD) reduced-order modeling technique. For a full description
+of the technique the reader is referred to the papers:
+[1] K. Kunisch and S. Volkwein. Galerkin proper orthogonal decomposition methods
+    for a general equation in fluid dynamics. SIAM Journal on Numerical Analusis,
+    40(2):492-515, 2003
+[2] S. Volkwein, Optimal control of a phase-field model using the proper orthogonal
+    decomposition, Z. Angew. Math. Mech., 81(2001):83-97
+
+The method is split into an offline (computationally intensive) and an online
+(computationally cheap) phase. This has many applications including real-time
+simulation, uncertainty quantification and inverse problems, where similar
+models must be evaluated quickly and many times. 
+
+Offline phase:
+    1. A set of solution snapshots of the 1D Laplace problem in the full
+       problem space are are constructed and assembled into the columns of a dense
+       matrix S.
+    2. A standard eigenvalue decomposition is performed on the
+       matrix S.T*S.
+    3. The eigenvectors and eigenvalues are projected back to the
+       original eigenvalue problem S.
+    4. The leading eigenvectors then form the POD basis.
+
+Online phase:
+    1. The operator corresponding to the discrete Laplacian is
+       projected onto the POD basis.
+    2. The operator corresponding to the right-hand side is
+       projected onto the POD basis.
+    3. The reduced (dense) problem expressed in the POD basis is solved.
+    4. The reduced solution is projected back to the full
+       problem space.
+
+Authors:
+Elisa Schenone <elisa.schenone at uni.lu>
+Jack S. Hale <jack.hale at uni.lu>
+"""
+
+import sys, slepc4py
+slepc4py.init(sys.argv)
+
+from petsc4py import PETSc
+from slepc4py import SLEPc
+import numpy
+
+import random
+import math
+
+def construct_operator(m):
+    """
+    Standard symmetric eigenproblem corresponding to the Laplacian operator in
+    1 dimension with homogeneous Dirichlet boundary conditions.
+    """
+    # Create matrix for 1D Laplacian operator
+    A = PETSc.Mat().create(PETSc.COMM_SELF)
+    A.setSizes([m, m])
+    A.setFromOptions()
+    A.setUp()
+    # Fill matrix
+    hx = 1.0/(m-1) # x grid spacing
+    diagv = 2.0/hx
+    offdx = -1.0/hx
+    Istart, Iend = A.getOwnershipRange()
+    for i in xrange(Istart, Iend):
+        if i != 0 and i != (m - 1):
+            A[i, i] = diagv
+            if i > 1: A[i, i - 1] = offdx
+            if i < m - 2: A[i, i + 1] = offdx
+        else:
+            A[i, i] = 1.
+
+    A.assemble()
+
+    return A
+
+
+def set_problem_rhs(m):
+    """
+    Set bell-shape function as the solution of the Laplacian problem in
+    1 dimension with homogeneous Dirichlet boundary conditions and 
+    compute the associated discrete RHS.
+    """
+    # Create 1D mass matrix operator
+    M = PETSc.Mat().create(PETSc.COMM_SELF)
+    M.setSizes([m, m])
+    M.setFromOptions()
+    M.setUp()
+    # Fill matrix
+    hx = 1.0/(m-1) # x grid spacing
+    diagv = hx/3
+    offdx = hx/6
+    Istart, Iend = M.getOwnershipRange()
+    for i in xrange(Istart, Iend):
+        if i != 0 and i != (m - 1):
+            M[i, i] = 2*diagv
+        else:
+            M[i, i] = diagv
+        if i > 1: M[i, i - 1] = offdx
+        if i < m - 2: M[i, i + 1] = offdx
+        
+    M.assemble()
+
+    x_0 = 0.3
+    x_f = 0.7
+    mu = x_0 + (x_f - x_0)*random.random()
+    sigma = 0.1**2
+    uex, f = M.getVecs()
+    for j in xrange(Istart, Iend):
+        value = 2/sigma * math.exp(-(hx*j - mu)**2/sigma) * (1 - 2/sigma * (hx*j - mu)**2 )
+        f.setValue(j, value)
+        value = math.exp(-(hx*j - mu)**2/sigma)
+        uex.setValue(j, value)
+    f.assemble()
+    uex.assemble()
+
+    RHS = f.duplicate()
+    M.mult(f, RHS)
+    RHS.setValue(0, 0.)
+    RHS.setValue(m-1, 0.)
+    RHS.assemble()
+
+    return RHS, uex
+
+def solve_laplace_problem(A, RHS):
+    """
+    Solve 1D Laplace problem with FEM.
+    """
+    u, b = A.getVecs()
+    r, c = A.getOrdering("natural")
+    A.factorILU(r, c)
+    A.solve(RHS, u)
+    A.setUnfactored()
+    return u
+
+
+def solve_laplace_problem_pod(A, RHS, u):
+    """ 
+    Solve 1D Laplace problem with POD (dense matrix).
+    """
+    ksp = PETSc.KSP().create(PETSc.COMM_SELF)
+    ksp.setOperators(A)
+    ksp.setType('preonly')
+    pc = ksp.getPC()
+    pc.setType('none')
+    ksp.setFromOptions()
+
+    ksp.solve(RHS, u)
+
+    return u
+
+
+def construct_snapshot_matrix(A, N, m):
+    """ 
+    Set N solution of the 1D Laplace problem as columns of a matrix
+    (snapshot matrix). 
+    
+    Note: For simplicity we do not perform a linear solve, but use
+    some analytical solution:
+    z(x) = exp(-(x - mu)**2 / sigma)
+    """
+    snapshots = PETSc.Mat().create(PETSc.COMM_SELF)
+    snapshots.setSizes([m, N])
+    snapshots.setType('seqdense')
+    snapshots.setUp()
+
+    Istart, Iend = snapshots.getOwnershipRange()
+    hx = 1.0/(m - 1)
+    x_0 = 0.3
+    x_f = 0.7
+    sigma = 0.1**2
+    for i in range(N):
+        mu = x_0 + (x_f - x_0)*random.random()
+        for j in xrange(Istart, Iend):
+            value = math.exp(-(hx*j - mu)**2/sigma)
+            snapshots.setValue(j, i, value)
+    snapshots.assemble()
+
+    return snapshots 
+
+def solve_eigenproblem(snapshots, N):
+    """
+    Solve the eigenvalue problem: the eigenvectors of this problem form the
+    POD basis.
+    """
+    print('Solving POD basis eigenproblem using eigensolver...')
+    
+    Es = SLEPc.EPS()
+    Es.create(PETSc.COMM_SELF)
+    Es.setDimensions(N)
+    Es.setProblemType(SLEPc.EPS.ProblemType.NHEP) 
+    Es.setTolerances(1.0e-8, 500);
+    Es.setKrylovSchurRestart(0.6)
+    Es.setWhichEigenpairs(SLEPc.EPS.Which.LARGEST_REAL) 
+    Es.setOperators(snapshots)
+    Es.setFromOptions()
+
+    Es.solve()
+    print('Solved POD basis eigenproblem.')
+    return Es
+
+def project_STS_eigenvectors_to_S_eigenvectors(bvEs, S):
+    sizes = S.getSizes()[0]
+    N = bvEs.getActiveColumns()[1]
+    bv = SLEPc.BV().create(PETSc.COMM_SELF)
+    bv.setSizes(sizes, N)
+    bv.setActiveColumns(0, N)
+    bv.setFromOptions()
+    
+    tmpvec3, tmpvec2 = S.getVecs()
+    for i in range(N):
+        tmpvec = bvEs.getColumn(i)
+        S.mult(tmpvec, tmpvec2)
+        bv.insertVec(i, tmpvec2)
+        bvEs.restoreColumn(i, tmpvec)
+
+    return bv
+
+
+def project_reduced_to_full_space(alpha, bv):
+    uu = bv.getColumn(0)
+    uPOD = uu.duplicate()
+    bv.restoreColumn(0,uu)
+    
+    scatter, Wr = PETSc.Scatter.toAll(alpha)
+    scatter.begin(alpha, Wr, PETSc.InsertMode.INSERT, PETSc.ScatterMode.FORWARD)
+    scatter.end(alpha, Wr, PETSc.InsertMode.INSERT, PETSc.ScatterMode.FORWARD)
+    PODcoeff = Wr.getArray(readonly=1)
+
+    bv.multVec(1., 0., uPOD, PODcoeff)
+
+    return uPOD
+
+def main():
+    problem_dim = 200
+    num_snapshots = 30
+    num_pod_basis_functions = 8
+    
+    assert(num_pod_basis_functions <= num_snapshots)
+    
+    A = construct_operator(problem_dim)
+    S = construct_snapshot_matrix(A, num_snapshots, problem_dim)
+    
+    # Instead of solving the SVD of S, we solve the standard
+    # eigenvalue problem on S.T*S
+    STS = S.transposeMatMult(S)
+    
+    Es = solve_eigenproblem(STS, num_pod_basis_functions)
+    nconv = Es.getConverged()
+    print('Number of converged eigenvalues: %i' % nconv)
+    Es.view()
+    
+    # get the EPS solution in a BV object
+    bvEs = Es.getBV()
+    bvEs.setActiveColumns(0, num_pod_basis_functions) 
+
+    # set the bv POD basis
+    bv = project_STS_eigenvectors_to_S_eigenvectors(bvEs, S)
+    # rescale the eigenvectors
+    for i in range(num_pod_basis_functions):
+        ll = Es.getEigenvalue(i)
+        print('Eigenvalue '+str(i)+': '+str(ll.real))
+        bv.scaleColumn(i,1.0/math.sqrt(ll.real))
+
+    print('--------------------------------')
+    # Verify that the active columns of bv form an orthonormal subspace, i.e. that X^H*X = Id
+    print('Check that bv.dot(bv) is close to the identity matrix')
+    XtX = bv.dot(bv)
+    XtX.view()
+    XtX_array = XtX.getDenseArray()
+    n,m = XtX_array.shape
+    assert numpy.allclose(XtX_array, numpy.eye(n, m))
+    print('--------------------------------')
+    print('Solve the problem with POD')
+
+    # Project the linear operator A
+    Ared = bv.matProject(A,bv)
+
+    # Set the RHS and the exact solution
+    RHS, uex = set_problem_rhs(problem_dim)
+    
+    # Project the RHS on the POD basis
+    RHSred = bv.dotVec(RHS)
+
+    # Solve the problem with POD
+    alpha, rr = Ared.getVecs()
+    alpha = solve_laplace_problem_pod(Ared,RHSred,alpha)
+
+    # Project the POD solution back to the FE space
+    uPOD = project_reduced_to_full_space(alpha, bv)
+
+    # Compute the L2 and Linf norm of the error
+    error = uex.copy()
+    error.axpy(-1,uPOD)
+    errorL2 = math.sqrt(error.dot(error))
+    print('The L2-norm of the error is: '+str(errorL2))
+
+    print("NORMAL END")
+
+if __name__ == '__main__':
+    main()
+
+
diff --git a/demo/ex11.py b/demo/ex11.py
new file mode 100644
index 0000000..ab203cf
--- /dev/null
+++ b/demo/ex11.py
@@ -0,0 +1,66 @@
+import sys, slepc4py
+slepc4py.init(sys.argv)
+
+from petsc4py import PETSc
+from slepc4py import SLEPc
+
+Print = PETSc.Sys.Print
+
+def construct_operator(m, n):
+    """
+    Standard symmetric eigenproblem corresponding to the
+    Laplacian operator in 2 dimensions.
+    """
+    # Create matrix for 2D Laplacian operator
+    A = PETSc.Mat().create()
+    A.setSizes([m*n, m*n])
+    A.setFromOptions( )
+    A.setUp()
+    # Fill matrix
+    hx = 1.0/(m-1) # x grid spacing
+    hy = 1.0/(n-1) # y grid spacing
+    diagv = 2.0*hy/hx + 2.0*hx/hy
+    offdx = -1.0*hy/hx
+    offdy = -1.0*hx/hy
+    Istart, Iend = A.getOwnershipRange()
+    for I in xrange(Istart, Iend) :
+        A[I,I] = diagv
+        i = I//n    # map row number to
+        j = I - i*n # grid coordinates
+        if i> 0  : J = I-n; A[I,J] = offdx
+        if i< m-1: J = I+n; A[I,J] = offdx
+        if j> 0  : J = I-1; A[I,J] = offdy
+        if j< n-1: J = I+1; A[I,J] = offdy
+    A.assemble()
+    return A
+
+def main():
+    opts = PETSc.Options()
+    n = opts.getInt('n', 32)
+    m = opts.getInt('m', 32)
+    Print("2-D Laplacian Eigenproblem solved with contour integral, "
+          "N=%d (%dx%d grid)\n" % (m*n, m, n))
+    A = construct_operator(m,n)
+
+    # Solver object
+    E = SLEPc.EPS().create()
+    E.setOperators(A)
+    E.setType(SLEPc.EPS.Type.CISS)
+
+    # Define region of interest
+    R = E.getRG()
+    R.setType(SLEPc.RG.Type.ELLIPSE)
+    R.setEllipseParameters(0.0,0.2,0.1)
+    E.setFromOptions()
+
+    # Compute solution
+    E.solve()
+
+    # Print solution
+    vw = PETSc.Viewer.STDOUT()
+    vw.pushFormat(PETSc.Viewer.Format.ASCII_INFO_DETAIL)
+    E.errorView(viewer=vw)
+    vw.popFormat()
+
+if __name__ == '__main__':
+    main()
diff --git a/demo/ex3.py b/demo/ex3.py
index 754b55c..7147493 100644
--- a/demo/ex3.py
+++ b/demo/ex3.py
@@ -34,8 +34,8 @@ class Laplacian2D(object):
 
     def mult(self, A, x, y):
         m, n = self.m, self.n
-        xx = x[...].reshape(m,n)
-        yy = y[...].reshape(m,n)
+        xx = x.getArray(readonly=1).reshape(m,n)
+        yy = y.getArray(readonly=0).reshape(m,n)
         laplace2d(self.U, xx, yy)
 
 def construct_operator(m, n):
diff --git a/demo/ex7.py b/demo/ex7.py
index 31de2df..030438d 100644
--- a/demo/ex7.py
+++ b/demo/ex7.py
@@ -85,12 +85,26 @@ class MyPDE(object):
         h = self.h
         for i in range(Istart,Iend):
             x = (i+1)*h
-            u[i-Istart] = sin(nu*x);
+            u[i] = sin(nu*x);
         u.assemble()
         u.normalize()
         u.axpy(-1.0,y)
         return u.norm()
 
+def FixSign(x):
+    # Force the eigenfunction to be real and positive, since
+    # some eigensolvers may return the eigenvector multiplied
+    # by a complex number of modulus one.
+    comm = x.getComm()
+    rank = comm.getRank()
+    n = 1 if rank == 0 else 0
+    aux = PETSc.Vec().createMPI((n, PETSc.DECIDE), comm=comm)
+    if rank == 0: aux[0] = x[0]
+    aux.assemble()
+    x0 = aux.sum()
+    sign = x0/abs(x0)
+    x.scale(sign)
+
 opts = PETSc.Options()
 n = opts.getInt('n', 128)
 kappa = opts.getReal('kappa', 1.0)
@@ -112,9 +126,8 @@ J.setPreallocationNNZ(3)
 J.setUp()
 nep.setJacobian(pde.formJacobian, J)
 
-nep.setTolerances(rtol=1e-9)
+nep.setTolerances(tol=1e-9)
 nep.setDimensions(1)
-nep.setLagPreconditioner(0)
 nep.setFromOptions()
 
 # Solve the problem
@@ -130,8 +143,8 @@ Print("Solution method: %s" % sol_type)
 nev, ncv, mpd = nep.getDimensions()
 Print("")
 Print("Subspace dimension: %i" % ncv)
-abstol, rtol, stol, maxit, maxf = nep.getTolerances()
-Print("Stopping condition: rtol=%.4g" % rtol)
+tol, maxit = nep.getTolerances()
+Print("Stopping condition: tol=%.4g" % tol)
 Print("")
 
 nconv = nep.getConverged()
@@ -143,8 +156,9 @@ if nconv > 0:
   Print("----------------- ------------------ ------------------")
   for i in range(nconv):
     k = nep.getEigenpair(i, x)
+    FixSign(x)
     res = nep.computeError(i)
-    error = pde.checkSolution(k.real,x)
+    error = pde.checkSolution(k.real, x)
     if k.imag != 0.0:
       Print( " %9f%+9f j %12g     %12g" % (k.real, k.imag, res, error) )
     else:
diff --git a/demo/ex8.py b/demo/ex8.py
index c40414e..0658b43 100644
--- a/demo/ex8.py
+++ b/demo/ex8.py
@@ -88,9 +88,8 @@ f3.setScale(-tau)
 nep.setSplitOperator([A, Id, B], [f2, f1, f3], PETSc.Mat.Structure.SUBSET)
 
 # Customize options
-nep.setTolerances(rtol=1e-9)
+nep.setTolerances(tol=1e-9)
 nep.setDimensions(1)
-nep.setLagPreconditioner(0)
 nep.setFromOptions()
 
 # Solve the problem
@@ -103,8 +102,8 @@ Print("Solution method: %s" % sol_type)
 nev, ncv, mpd = nep.getDimensions()
 Print("")
 Print("Subspace dimension: %i" % ncv)
-abstol, rtol, stol, maxit, maxf = nep.getTolerances()
-Print("Stopping condition: rtol=%.4g" % rtol)
+tol, maxit = nep.getTolerances()
+Print("Stopping condition: tol=%.4g" % tol)
 Print("")
 
 nconv = nep.getConverged()
diff --git a/demo/makefile b/demo/makefile
index 0bd1cbd..331e107 100644
--- a/demo/makefile
+++ b/demo/makefile
@@ -4,7 +4,7 @@ PYTHON=python
 test: run
 
 .PHONY:run
-run: run_ex1 run_ex2 run_ex3 run_ex4 run_ex5 run_ex6 run_ex7 run_ex8 run_ex9
+run: run_ex1 run_ex2 run_ex3 run_ex4 run_ex5 run_ex6 run_ex7 run_ex8 run_ex9 run_ex10 run_ex11
 
 .PHONY:run_ex1
 run_ex1:
@@ -40,3 +40,11 @@ run_ex8:
 .PHONY:run_ex9
 run_ex9:
 	${PYTHON} ex9.py ${SLEPC_OPTIONS}
+
+.PHONY:run_ex10
+run_ex10:
+	${PYTHON} ex10.py ${SLEPC_OPTIONS}
+
+.PHONY:run_ex11
+run_ex11:
+	${PYTHON} ex11.py ${SLEPC_OPTIONS}
diff --git a/docs/CHANGES.html b/docs/CHANGES.html
index d744a42..4f6b836 100644
--- a/docs/CHANGES.html
+++ b/docs/CHANGES.html
@@ -3,7 +3,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.11: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.12: http://docutils.sourceforge.net/" />
 <title>CHANGES: SLEPc for Python</title>
 <meta name="author" content="Lisandro Dalcin" />
 <style type="text/css">
@@ -351,6 +351,13 @@ ul.auto-toc {
 <td><a class="first last reference external" href="mailto:dalcinl%40gmail.com">dalcinl<span>@</span>gmail<span>.</span>com</a></td></tr>
 </tbody>
 </table>
+<div class="section" id="release-3-7-0">
+<h1>Release 3.7.0</h1>
+<ul>
+<li><p class="first">Update to SLEPc 3.7 release.</p>
+</li>
+</ul>
+</div>
 <div class="section" id="release-3-6-0">
 <h1>Release 3.6.0</h1>
 <ul>
diff --git a/docs/LICENSE.html b/docs/LICENSE.html
index 3594e80..2a365a6 100644
--- a/docs/LICENSE.html
+++ b/docs/LICENSE.html
@@ -3,7 +3,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.11: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.12: http://docutils.sourceforge.net/" />
 <title>LICENSE: SLEPc for Python</title>
 <meta name="author" content="Lisandro Dalcin" />
 <style type="text/css">
@@ -351,7 +351,7 @@ ul.auto-toc {
 <td><a class="first last reference external" href="mailto:dalcinl%40gmail.com">dalcinl<span>@</span>gmail<span>.</span>com</a></td></tr>
 </tbody>
 </table>
-<p>Copyright (c) 2015, Lisandro Dalcin.
+<p>Copyright (c) 2016, Lisandro Dalcin.
 All rights reserved.</p>
 <p>Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions
diff --git a/docs/apiref/api-objects.txt b/docs/apiref/api-objects.txt
index a76ec2d..5a18694 100644
--- a/docs/apiref/api-objects.txt
+++ b/docs/apiref/api-objects.txt
@@ -20,27 +20,54 @@ slepc4py.lib.__package__	slepc4py.lib-module.html#__package__
 slepc4py.lib.ImportSLEPc	slepc4py.lib-module.html#ImportSLEPc
 slepc4py.lib.getPathArchSLEPc	slepc4py.lib-module.html#getPathArchSLEPc
 slepc4py.SLEPc.BV	slepc4py.SLEPc.BV-class.html
-slepc4py.SLEPc.BV.setMatrix	slepc4py.SLEPc.BV-class.html#setMatrix
-slepc4py.SLEPc.BV.BlockType	slepc4py.SLEPc.BVOrthogBlockType-class.html
+slepc4py.SLEPc.BV.matMult	slepc4py.SLEPc.BV-class.html#matMult
+slepc4py.SLEPc.BV.norm	slepc4py.SLEPc.BV-class.html#norm
+slepc4py.SLEPc.BV.setOptionsPrefix	slepc4py.SLEPc.BV-class.html#setOptionsPrefix
+slepc4py.SLEPc.BV.OrthogBlockType	slepc4py.SLEPc.BV.BlockType-class.html
+slepc4py.SLEPc.BV.setSizes	slepc4py.SLEPc.BV-class.html#setSizes
+slepc4py.SLEPc.BV.setFromOptions	slepc4py.SLEPc.BV-class.html#setFromOptions
+slepc4py.SLEPc.BV.orthogonalize	slepc4py.SLEPc.BV-class.html#orthogonalize
+slepc4py.SLEPc.BV.scaleColumn	slepc4py.SLEPc.BV-class.html#scaleColumn
+slepc4py.SLEPc.BV.getSizes	slepc4py.SLEPc.BV-class.html#getSizes
+slepc4py.SLEPc.BV.view	slepc4py.SLEPc.BV-class.html#view
+slepc4py.SLEPc.BV.getActiveColumns	slepc4py.SLEPc.BV-class.html#getActiveColumns
+slepc4py.SLEPc.BV.restoreColumn	slepc4py.SLEPc.BV-class.html#restoreColumn
 slepc4py.SLEPc.BV.Type	slepc4py.SLEPc.BV.Type-class.html
-slepc4py.SLEPc.BV.setType	slepc4py.SLEPc.BV-class.html#setType
-slepc4py.SLEPc.BV.__new__	slepc4py.SLEPc.BV-class.html#__new__
+slepc4py.SLEPc.BV.scale	slepc4py.SLEPc.BV-class.html#scale
 slepc4py.SLEPc.BV.orthogonalizeVec	slepc4py.SLEPc.BV-class.html#orthogonalizeVec
-slepc4py.SLEPc.BV.create	slepc4py.SLEPc.BV-class.html#create
-slepc4py.SLEPc.BV.destroy	slepc4py.SLEPc.BV-class.html#destroy
-slepc4py.SLEPc.BV.getType	slepc4py.SLEPc.BV-class.html#getType
-slepc4py.SLEPc.BV.setOptionsPrefix	slepc4py.SLEPc.BV-class.html#setOptionsPrefix
-slepc4py.SLEPc.BV.OrthogBlockType	slepc4py.SLEPc.BVOrthogBlockType-class.html
-slepc4py.SLEPc.BV.setOrthogonalization	slepc4py.SLEPc.BV-class.html#setOrthogonalization
+slepc4py.SLEPc.BV.insertVecs	slepc4py.SLEPc.BV-class.html#insertVecs
+slepc4py.SLEPc.BV.normColumn	slepc4py.SLEPc.BV-class.html#normColumn
 slepc4py.SLEPc.BV.getOrthogonalization	slepc4py.SLEPc.BV-class.html#getOrthogonalization
-slepc4py.SLEPc.BV.RefineType	slepc4py.SLEPc.BV.RefineType-class.html
 slepc4py.SLEPc.BV.getOptionsPrefix	slepc4py.SLEPc.BV-class.html#getOptionsPrefix
-slepc4py.SLEPc.BV.setFromOptions	slepc4py.SLEPc.BV-class.html#setFromOptions
-slepc4py.SLEPc.BV.OrthogType	slepc4py.SLEPc.BV.OrthogType-class.html
+slepc4py.SLEPc.BV.setSizesFromVec	slepc4py.SLEPc.BV-class.html#setSizesFromVec
 slepc4py.SLEPc.BV.getMatrix	slepc4py.SLEPc.BV-class.html#getMatrix
-slepc4py.SLEPc.BV.applyMatrix	slepc4py.SLEPc.BV-class.html#applyMatrix
+slepc4py.SLEPc.BV.multVec	slepc4py.SLEPc.BV-class.html#multVec
+slepc4py.SLEPc.BV.setActiveColumns	slepc4py.SLEPc.BV-class.html#setActiveColumns
 slepc4py.SLEPc.BV.OrthogRefineType	slepc4py.SLEPc.BV.RefineType-class.html
-slepc4py.SLEPc.BV.view	slepc4py.SLEPc.BV-class.html#view
+slepc4py.SLEPc.BV.getColumn	slepc4py.SLEPc.BV-class.html#getColumn
+slepc4py.SLEPc.BV.setMatrix	slepc4py.SLEPc.BV-class.html#setMatrix
+slepc4py.SLEPc.BV.insertVec	slepc4py.SLEPc.BV-class.html#insertVec
+slepc4py.SLEPc.BV.BlockType	slepc4py.SLEPc.BV.BlockType-class.html
+slepc4py.SLEPc.BV.matMultHermitianTranspose	slepc4py.SLEPc.BV-class.html#matMultHermitianTranspose
+slepc4py.SLEPc.BV.setType	slepc4py.SLEPc.BV-class.html#setType
+slepc4py.SLEPc.BV.create	slepc4py.SLEPc.BV-class.html#create
+slepc4py.SLEPc.BV.duplicate	slepc4py.SLEPc.BV-class.html#duplicate
+slepc4py.SLEPc.BV.matProject	slepc4py.SLEPc.BV-class.html#matProject
+slepc4py.SLEPc.BV.getType	slepc4py.SLEPc.BV-class.html#getType
+slepc4py.SLEPc.BV.OrthogType	slepc4py.SLEPc.BV.OrthogType-class.html
+slepc4py.SLEPc.BV.copy	slepc4py.SLEPc.BV-class.html#copy
+slepc4py.SLEPc.BV.applyMatrix	slepc4py.SLEPc.BV-class.html#applyMatrix
+slepc4py.SLEPc.BV.__new__	slepc4py.SLEPc.BV-class.html#__new__
+slepc4py.SLEPc.BV.destroy	slepc4py.SLEPc.BV-class.html#destroy
+slepc4py.SLEPc.BV.setOrthogonalization	slepc4py.SLEPc.BV-class.html#setOrthogonalization
+slepc4py.SLEPc.BV.RefineType	slepc4py.SLEPc.BV.RefineType-class.html
+slepc4py.SLEPc.BV.setRandom	slepc4py.SLEPc.BV-class.html#setRandom
+slepc4py.SLEPc.BV.dotVec	slepc4py.SLEPc.BV-class.html#dotVec
+slepc4py.SLEPc.BV.dot	slepc4py.SLEPc.BV-class.html#dot
+slepc4py.SLEPc.BV.BlockType	slepc4py.SLEPc.BV.BlockType-class.html
+slepc4py.SLEPc.BV.BlockType.GS	slepc4py.SLEPc.BV.BlockType-class.html#GS
+slepc4py.SLEPc.BV.BlockType.CHOL	slepc4py.SLEPc.BV.BlockType-class.html#CHOL
+slepc4py.SLEPc.BV.BlockType.__qualname__	slepc4py.SLEPc.BV.BlockType-class.html#__qualname__
 slepc4py.SLEPc.BV.OrthogType	slepc4py.SLEPc.BV.OrthogType-class.html
 slepc4py.SLEPc.BV.OrthogType.__qualname__	slepc4py.SLEPc.BV.OrthogType-class.html#__qualname__
 slepc4py.SLEPc.BV.OrthogType.MGS	slepc4py.SLEPc.BV.OrthogType-class.html#MGS
@@ -56,10 +83,6 @@ slepc4py.SLEPc.BV.Type.CONTIGUOUS	slepc4py.SLEPc.BV.Type-class.html#CONTIGUOUS
 slepc4py.SLEPc.BV.Type.__qualname__	slepc4py.SLEPc.BV.Type-class.html#__qualname__
 slepc4py.SLEPc.BV.Type.VECS	slepc4py.SLEPc.BV.Type-class.html#VECS
 slepc4py.SLEPc.BV.Type.SVEC	slepc4py.SLEPc.BV.Type-class.html#SVEC
-slepc4py.SLEPc.BVOrthogBlockType	slepc4py.SLEPc.BVOrthogBlockType-class.html
-slepc4py.SLEPc.BVOrthogBlockType.GS	slepc4py.SLEPc.BVOrthogBlockType-class.html#GS
-slepc4py.SLEPc.BVOrthogBlockType.CHOL	slepc4py.SLEPc.BVOrthogBlockType-class.html#CHOL
-slepc4py.SLEPc.BVOrthogBlockType.__qualname__	slepc4py.SLEPc.BVOrthogBlockType-class.html#__qualname__
 slepc4py.SLEPc.DS	slepc4py.SLEPc.DS-class.html
 slepc4py.SLEPc.DS.setDimensions	slepc4py.SLEPc.DS-class.html#setDimensions
 slepc4py.SLEPc.DS.setCompact	slepc4py.SLEPc.DS-class.html#setCompact
@@ -125,8 +148,10 @@ slepc4py.SLEPc.EPS.setWhichEigenpairs	slepc4py.SLEPc.EPS-class.html#setWhichEige
 slepc4py.SLEPc.EPS.cancelMonitor	slepc4py.SLEPc.EPS-class.html#cancelMonitor
 slepc4py.SLEPc.EPS.max_it	slepc4py.SLEPc.EPS-class.html#max_it
 slepc4py.SLEPc.EPS.getTrueResidual	slepc4py.SLEPc.EPS-class.html#getTrueResidual
+slepc4py.SLEPc.EPS.getRG	slepc4py.SLEPc.EPS-class.html#getRG
 slepc4py.SLEPc.EPS.setDS	slepc4py.SLEPc.EPS-class.html#setDS
 slepc4py.SLEPc.EPS.computeError	slepc4py.SLEPc.EPS-class.html#computeError
+slepc4py.SLEPc.EPS.errorView	slepc4py.SLEPc.EPS-class.html#errorView
 slepc4py.SLEPc.EPS.setPowerShiftType	slepc4py.SLEPc.EPS-class.html#setPowerShiftType
 slepc4py.SLEPc.EPS.appendOptionsPrefix	slepc4py.SLEPc.EPS-class.html#appendOptionsPrefix
 slepc4py.SLEPc.EPS.setOperators	slepc4py.SLEPc.EPS-class.html#setOperators
@@ -145,6 +170,7 @@ slepc4py.SLEPc.EPS.getKrylovSchurSubcommInfo	slepc4py.SLEPc.EPS-class.html#getKr
 slepc4py.SLEPc.EPS.getBV	slepc4py.SLEPc.EPS-class.html#getBV
 slepc4py.SLEPc.EPS.view	slepc4py.SLEPc.EPS-class.html#view
 slepc4py.SLEPc.EPS.setKrylovSchurDetectZeros	slepc4py.SLEPc.EPS-class.html#setKrylovSchurDetectZeros
+slepc4py.SLEPc.EPS.updateKrylovSchurSubcommMats	slepc4py.SLEPc.EPS-class.html#updateKrylovSchurSubcommMats
 slepc4py.SLEPc.EPS.Extraction	slepc4py.SLEPc.EPS.Extraction-class.html
 slepc4py.SLEPc.EPS.ConvergedReason	slepc4py.SLEPc.EPS.ConvergedReason-class.html
 slepc4py.SLEPc.EPS.setKrylovSchurPartitions	slepc4py.SLEPc.EPS-class.html#setKrylovSchurPartitions
@@ -159,7 +185,7 @@ slepc4py.SLEPc.EPS.getTolerances	slepc4py.SLEPc.EPS-class.html#getTolerances
 slepc4py.SLEPc.EPS.getOptionsPrefix	slepc4py.SLEPc.EPS-class.html#getOptionsPrefix
 slepc4py.SLEPc.EPS.setArnoldiDelayed	slepc4py.SLEPc.EPS-class.html#setArnoldiDelayed
 slepc4py.SLEPc.EPS.Conv	slepc4py.SLEPc.EPS.Conv-class.html
-slepc4py.SLEPc.EPS.getConvergenceTest	slepc4py.SLEPc.EPS-class.html#getConvergenceTest
+slepc4py.SLEPc.EPS.bv	slepc4py.SLEPc.EPS-class.html#bv
 slepc4py.SLEPc.EPS.setTolerances	slepc4py.SLEPc.EPS-class.html#setTolerances
 slepc4py.SLEPc.EPS.getEigenpair	slepc4py.SLEPc.EPS-class.html#getEigenpair
 slepc4py.SLEPc.EPS.getKrylovSchurDimensions	slepc4py.SLEPc.EPS-class.html#getKrylovSchurDimensions
@@ -180,7 +206,6 @@ slepc4py.SLEPc.EPS.getEigenvalue	slepc4py.SLEPc.EPS-class.html#getEigenvalue
 slepc4py.SLEPc.EPS.setInterval	slepc4py.SLEPc.EPS-class.html#setInterval
 slepc4py.SLEPc.EPS.setTarget	slepc4py.SLEPc.EPS-class.html#setTarget
 slepc4py.SLEPc.EPS.getType	slepc4py.SLEPc.EPS-class.html#getType
-slepc4py.SLEPc.EPS.bv	slepc4py.SLEPc.EPS-class.html#bv
 slepc4py.SLEPc.EPS.getTrackAll	slepc4py.SLEPc.EPS-class.html#getTrackAll
 slepc4py.SLEPc.EPS.Balance	slepc4py.SLEPc.EPS.Balance-class.html
 slepc4py.SLEPc.EPS.reset	slepc4py.SLEPc.EPS-class.html#reset
@@ -197,15 +222,18 @@ slepc4py.SLEPc.EPS.getWhichEigenpairs	slepc4py.SLEPc.EPS-class.html#getWhichEige
 slepc4py.SLEPc.EPS.setRQCGReset	slepc4py.SLEPc.EPS-class.html#setRQCGReset
 slepc4py.SLEPc.EPS.setKrylovSchurRestart	slepc4py.SLEPc.EPS-class.html#setKrylovSchurRestart
 slepc4py.SLEPc.EPS.getKrylovSchurDetectZeros	slepc4py.SLEPc.EPS-class.html#getKrylovSchurDetectZeros
+slepc4py.SLEPc.EPS.getConvergenceTest	slepc4py.SLEPc.EPS-class.html#getConvergenceTest
 slepc4py.SLEPc.EPS.setTrueResidual	slepc4py.SLEPc.EPS-class.html#setTrueResidual
 slepc4py.SLEPc.EPS.isPositive	slepc4py.SLEPc.EPS-class.html#isPositive
 slepc4py.SLEPc.EPS.setBV	slepc4py.SLEPc.EPS-class.html#setBV
 slepc4py.SLEPc.EPS.setTrackAll	slepc4py.SLEPc.EPS-class.html#setTrackAll
 slepc4py.SLEPc.EPS.getInvariantSubspace	slepc4py.SLEPc.EPS-class.html#getInvariantSubspace
 slepc4py.SLEPc.EPS.__new__	slepc4py.SLEPc.EPS-class.html#__new__
+slepc4py.SLEPc.EPS.setKrylovSchurSubintervals	slepc4py.SLEPc.EPS-class.html#setKrylovSchurSubintervals
 slepc4py.SLEPc.EPS.setKrylovSchurDimensions	slepc4py.SLEPc.EPS-class.html#setKrylovSchurDimensions
 slepc4py.SLEPc.EPS.getExtraction	slepc4py.SLEPc.EPS-class.html#getExtraction
 slepc4py.SLEPc.EPS.getErrorEstimate	slepc4py.SLEPc.EPS-class.html#getErrorEstimate
+slepc4py.SLEPc.EPS.setRG	slepc4py.SLEPc.EPS-class.html#setRG
 slepc4py.SLEPc.EPS.which	slepc4py.SLEPc.EPS-class.html#which
 slepc4py.SLEPc.EPS.PowerShiftType	slepc4py.SLEPc.EPS.PowerShiftType-class.html
 slepc4py.SLEPc.EPS.destroy	slepc4py.SLEPc.EPS-class.html#destroy
@@ -216,6 +244,7 @@ slepc4py.SLEPc.EPS.setBalance	slepc4py.SLEPc.EPS-class.html#setBalance
 slepc4py.SLEPc.EPS.setST	slepc4py.SLEPc.EPS-class.html#setST
 slepc4py.SLEPc.EPS.st	slepc4py.SLEPc.EPS-class.html#st
 slepc4py.SLEPc.EPS.solve	slepc4py.SLEPc.EPS-class.html#solve
+slepc4py.SLEPc.EPS.getKrylovSchurSubcommMats	slepc4py.SLEPc.EPS-class.html#getKrylovSchurSubcommMats
 slepc4py.SLEPc.EPS.getEigenvector	slepc4py.SLEPc.EPS-class.html#getEigenvector
 slepc4py.SLEPc.EPS.Balance	slepc4py.SLEPc.EPS.Balance-class.html
 slepc4py.SLEPc.EPS.Balance.ONESIDE	slepc4py.SLEPc.EPS.Balance-class.html#ONESIDE
@@ -227,15 +256,17 @@ slepc4py.SLEPc.EPS.Conv	slepc4py.SLEPc.EPS.Conv-class.html
 slepc4py.SLEPc.EPS.Conv.__qualname__	slepc4py.SLEPc.EPS.Conv-class.html#__qualname__
 slepc4py.SLEPc.EPS.Conv.ABS	slepc4py.SLEPc.EPS.Conv-class.html#ABS
 slepc4py.SLEPc.EPS.Conv.USER	slepc4py.SLEPc.EPS.Conv-class.html#USER
-slepc4py.SLEPc.EPS.Conv.EIG	slepc4py.SLEPc.EPS.Conv-class.html#EIG
+slepc4py.SLEPc.EPS.Conv.REL	slepc4py.SLEPc.EPS.Conv-class.html#REL
 slepc4py.SLEPc.EPS.Conv.NORM	slepc4py.SLEPc.EPS.Conv-class.html#NORM
 slepc4py.SLEPc.EPS.ConvergedReason	slepc4py.SLEPc.EPS.ConvergedReason-class.html
 slepc4py.SLEPc.EPS.ConvergedReason.DIVERGED_BREAKDOWN	slepc4py.SLEPc.EPS.ConvergedReason-class.html#DIVERGED_BREAKDOWN
+slepc4py.SLEPc.EPS.ConvergedReason.CONVERGED_USER	slepc4py.SLEPc.EPS.ConvergedReason-class.html#CONVERGED_USER
+slepc4py.SLEPc.EPS.ConvergedReason.DIVERGED_SYMMETRY_LOST	slepc4py.SLEPc.EPS.ConvergedReason-class.html#DIVERGED_SYMMETRY_LOST
+slepc4py.SLEPc.EPS.ConvergedReason.CONVERGED_TOL	slepc4py.SLEPc.EPS.ConvergedReason-class.html#CONVERGED_TOL
 slepc4py.SLEPc.EPS.ConvergedReason.ITERATING	slepc4py.SLEPc.EPS.ConvergedReason-class.html#ITERATING
-slepc4py.SLEPc.EPS.ConvergedReason.__qualname__	slepc4py.SLEPc.EPS.ConvergedReason-class.html#__qualname__
 slepc4py.SLEPc.EPS.ConvergedReason.CONVERGED_ITERATING	slepc4py.SLEPc.EPS.ConvergedReason-class.html#CONVERGED_ITERATING
 slepc4py.SLEPc.EPS.ConvergedReason.DIVERGED_ITS	slepc4py.SLEPc.EPS.ConvergedReason-class.html#DIVERGED_ITS
-slepc4py.SLEPc.EPS.ConvergedReason.CONVERGED_TOL	slepc4py.SLEPc.EPS.ConvergedReason-class.html#CONVERGED_TOL
+slepc4py.SLEPc.EPS.ConvergedReason.__qualname__	slepc4py.SLEPc.EPS.ConvergedReason-class.html#__qualname__
 slepc4py.SLEPc.EPS.ErrorType	slepc4py.SLEPc.EPS.ErrorType-class.html
 slepc4py.SLEPc.EPS.ErrorType.__qualname__	slepc4py.SLEPc.EPS.ErrorType-class.html#__qualname__
 slepc4py.SLEPc.EPS.ErrorType.RELATIVE	slepc4py.SLEPc.EPS.ErrorType-class.html#RELATIVE
@@ -311,6 +342,7 @@ slepc4py.SLEPc.FN.setType	slepc4py.SLEPc.FN-class.html#setType
 slepc4py.SLEPc.FN.__new__	slepc4py.SLEPc.FN-class.html#__new__
 slepc4py.SLEPc.FN.Type	slepc4py.SLEPc.FN.Type-class.html
 slepc4py.SLEPc.FN.create	slepc4py.SLEPc.FN-class.html#create
+slepc4py.SLEPc.FN.CombineType	slepc4py.SLEPc.FN.CombineType-class.html
 slepc4py.SLEPc.FN.destroy	slepc4py.SLEPc.FN-class.html#destroy
 slepc4py.SLEPc.FN.setRationalNumerator	slepc4py.SLEPc.FN-class.html#setRationalNumerator
 slepc4py.SLEPc.FN.setOptionsPrefix	slepc4py.SLEPc.FN-class.html#setOptionsPrefix
@@ -320,14 +352,21 @@ slepc4py.SLEPc.FN.setFromOptions	slepc4py.SLEPc.FN-class.html#setFromOptions
 slepc4py.SLEPc.FN.getScale	slepc4py.SLEPc.FN-class.html#getScale
 slepc4py.SLEPc.FN.setRationalDenominator	slepc4py.SLEPc.FN-class.html#setRationalDenominator
 slepc4py.SLEPc.FN.view	slepc4py.SLEPc.FN-class.html#view
+slepc4py.SLEPc.FN.CombineType	slepc4py.SLEPc.FN.CombineType-class.html
+slepc4py.SLEPc.FN.CombineType.COMPOSE	slepc4py.SLEPc.FN.CombineType-class.html#COMPOSE
+slepc4py.SLEPc.FN.CombineType.DIVIDE	slepc4py.SLEPc.FN.CombineType-class.html#DIVIDE
+slepc4py.SLEPc.FN.CombineType.__qualname__	slepc4py.SLEPc.FN.CombineType-class.html#__qualname__
+slepc4py.SLEPc.FN.CombineType.ADD	slepc4py.SLEPc.FN.CombineType-class.html#ADD
+slepc4py.SLEPc.FN.CombineType.MULTIPLY	slepc4py.SLEPc.FN.CombineType-class.html#MULTIPLY
 slepc4py.SLEPc.FN.Type	slepc4py.SLEPc.FN.Type-class.html
-slepc4py.SLEPc.FN.Type.PHI	slepc4py.SLEPc.FN.Type-class.html#PHI
+slepc4py.SLEPc.FN.Type.LOG	slepc4py.SLEPc.FN.Type-class.html#LOG
+slepc4py.SLEPc.FN.Type.COMBINE	slepc4py.SLEPc.FN.Type-class.html#COMBINE
+slepc4py.SLEPc.FN.Type.EXP	slepc4py.SLEPc.FN.Type-class.html#EXP
+slepc4py.SLEPc.FN.Type.INVSQRT	slepc4py.SLEPc.FN.Type-class.html#INVSQRT
 slepc4py.SLEPc.FN.Type.RATIONAL	slepc4py.SLEPc.FN.Type-class.html#RATIONAL
+slepc4py.SLEPc.FN.Type.PHI	slepc4py.SLEPc.FN.Type-class.html#PHI
 slepc4py.SLEPc.FN.Type.SQRT	slepc4py.SLEPc.FN.Type-class.html#SQRT
 slepc4py.SLEPc.FN.Type.__qualname__	slepc4py.SLEPc.FN.Type-class.html#__qualname__
-slepc4py.SLEPc.FN.Type.COMBINE	slepc4py.SLEPc.FN.Type-class.html#COMBINE
-slepc4py.SLEPc.FN.Type.EXP	slepc4py.SLEPc.FN.Type-class.html#EXP
-slepc4py.SLEPc.FN.Type.LOG	slepc4py.SLEPc.FN.Type-class.html#LOG
 slepc4py.SLEPc.MFN	slepc4py.SLEPc.MFN-class.html
 slepc4py.SLEPc.MFN.setTolerances	slepc4py.SLEPc.MFN-class.html#setTolerances
 slepc4py.SLEPc.MFN.setDimensions	slepc4py.SLEPc.MFN-class.html#setDimensions
@@ -359,6 +398,8 @@ slepc4py.SLEPc.MFN.getIterationNumber	slepc4py.SLEPc.MFN-class.html#getIteration
 slepc4py.SLEPc.MFN.view	slepc4py.SLEPc.MFN-class.html#view
 slepc4py.SLEPc.MFN.ConvergedReason	slepc4py.SLEPc.MFN.ConvergedReason-class.html
 slepc4py.SLEPc.MFN.ConvergedReason.DIVERGED_BREAKDOWN	slepc4py.SLEPc.MFN.ConvergedReason-class.html#DIVERGED_BREAKDOWN
+slepc4py.SLEPc.MFN.ConvergedReason.ITERATING	slepc4py.SLEPc.MFN.ConvergedReason-class.html#ITERATING
+slepc4py.SLEPc.MFN.ConvergedReason.CONVERGED_ITS	slepc4py.SLEPc.MFN.ConvergedReason-class.html#CONVERGED_ITS
 slepc4py.SLEPc.MFN.ConvergedReason.__qualname__	slepc4py.SLEPc.MFN.ConvergedReason-class.html#__qualname__
 slepc4py.SLEPc.MFN.ConvergedReason.CONVERGED_ITERATING	slepc4py.SLEPc.MFN.ConvergedReason-class.html#CONVERGED_ITERATING
 slepc4py.SLEPc.MFN.ConvergedReason.DIVERGED_ITS	slepc4py.SLEPc.MFN.ConvergedReason-class.html#DIVERGED_ITS
@@ -366,10 +407,15 @@ slepc4py.SLEPc.MFN.ConvergedReason.CONVERGED_TOL	slepc4py.SLEPc.MFN.ConvergedRea
 slepc4py.SLEPc.MFN.Type	slepc4py.SLEPc.MFN.Type-class.html
 slepc4py.SLEPc.MFN.Type.__qualname__	slepc4py.SLEPc.MFN.Type-class.html#__qualname__
 slepc4py.SLEPc.MFN.Type.KRYLOV	slepc4py.SLEPc.MFN.Type-class.html#KRYLOV
+slepc4py.SLEPc.MFN.Type.EXPOKIT	slepc4py.SLEPc.MFN.Type-class.html#EXPOKIT
 slepc4py.SLEPc.NEP	slepc4py.SLEPc.NEP-class.html
 slepc4py.SLEPc.NEP.setWhichEigenpairs	slepc4py.SLEPc.NEP-class.html#setWhichEigenpairs
 slepc4py.SLEPc.NEP.cancelMonitor	slepc4py.SLEPc.NEP-class.html#cancelMonitor
+slepc4py.SLEPc.NEP.getRG	slepc4py.SLEPc.NEP-class.html#getRG
 slepc4py.SLEPc.NEP.computeError	slepc4py.SLEPc.NEP-class.html#computeError
+slepc4py.SLEPc.NEP.errorView	slepc4py.SLEPc.NEP-class.html#errorView
+slepc4py.SLEPc.NEP.RefineScheme	slepc4py.SLEPc.NEP.RefineScheme-class.html
+slepc4py.SLEPc.NEP.appendOptionsPrefix	slepc4py.SLEPc.NEP-class.html#appendOptionsPrefix
 slepc4py.SLEPc.NEP.getConvergedReason	slepc4py.SLEPc.NEP-class.html#getConvergedReason
 slepc4py.SLEPc.NEP.setInitialSpace	slepc4py.SLEPc.NEP-class.html#setInitialSpace
 slepc4py.SLEPc.NEP.setOptionsPrefix	slepc4py.SLEPc.NEP-class.html#setOptionsPrefix
@@ -383,10 +429,10 @@ slepc4py.SLEPc.NEP.Which	slepc4py.SLEPc.NEP.Which-class.html
 slepc4py.SLEPc.NEP.Type	slepc4py.SLEPc.NEP.Type-class.html
 slepc4py.SLEPc.NEP.setUp	slepc4py.SLEPc.NEP-class.html#setUp
 slepc4py.SLEPc.NEP.getOptionsPrefix	slepc4py.SLEPc.NEP-class.html#getOptionsPrefix
+slepc4py.SLEPc.NEP.Refine	slepc4py.SLEPc.NEP.Refine-class.html
 slepc4py.SLEPc.NEP.setTolerances	slepc4py.SLEPc.NEP-class.html#setTolerances
 slepc4py.SLEPc.NEP.getEigenpair	slepc4py.SLEPc.NEP-class.html#getEigenpair
 slepc4py.SLEPc.NEP.getConverged	slepc4py.SLEPc.NEP-class.html#getConverged
-slepc4py.SLEPc.NEP.appendOptionsPrefix	slepc4py.SLEPc.NEP-class.html#appendOptionsPrefix
 slepc4py.SLEPc.NEP.setType	slepc4py.SLEPc.NEP-class.html#setType
 slepc4py.SLEPc.NEP.setFunction	slepc4py.SLEPc.NEP-class.html#setFunction
 slepc4py.SLEPc.NEP.create	slepc4py.SLEPc.NEP-class.html#create
@@ -394,7 +440,6 @@ slepc4py.SLEPc.NEP.getType	slepc4py.SLEPc.NEP-class.html#getType
 slepc4py.SLEPc.NEP.getTrackAll	slepc4py.SLEPc.NEP-class.html#getTrackAll
 slepc4py.SLEPc.NEP.reset	slepc4py.SLEPc.NEP-class.html#reset
 slepc4py.SLEPc.NEP.ErrorType	slepc4py.SLEPc.NEP.ErrorType-class.html
-slepc4py.SLEPc.NEP.getLagPreconditioner	slepc4py.SLEPc.NEP-class.html#getLagPreconditioner
 slepc4py.SLEPc.NEP.getIterationNumber	slepc4py.SLEPc.NEP-class.html#getIterationNumber
 slepc4py.SLEPc.NEP.setDimensions	slepc4py.SLEPc.NEP-class.html#setDimensions
 slepc4py.SLEPc.NEP.getWhichEigenpairs	slepc4py.SLEPc.NEP-class.html#getWhichEigenpairs
@@ -402,27 +447,37 @@ slepc4py.SLEPc.NEP.setBV	slepc4py.SLEPc.NEP-class.html#setBV
 slepc4py.SLEPc.NEP.setTrackAll	slepc4py.SLEPc.NEP-class.html#setTrackAll
 slepc4py.SLEPc.NEP.__new__	slepc4py.SLEPc.NEP-class.html#__new__
 slepc4py.SLEPc.NEP.getErrorEstimate	slepc4py.SLEPc.NEP-class.html#getErrorEstimate
+slepc4py.SLEPc.NEP.setRG	slepc4py.SLEPc.NEP-class.html#setRG
 slepc4py.SLEPc.NEP.destroy	slepc4py.SLEPc.NEP-class.html#destroy
+slepc4py.SLEPc.NEP.getRIILagPreconditioner	slepc4py.SLEPc.NEP-class.html#getRIILagPreconditioner
 slepc4py.SLEPc.NEP.getTolerances	slepc4py.SLEPc.NEP-class.html#getTolerances
 slepc4py.SLEPc.NEP.setSplitOperator	slepc4py.SLEPc.NEP-class.html#setSplitOperator
-slepc4py.SLEPc.NEP.setLagPreconditioner	slepc4py.SLEPc.NEP-class.html#setLagPreconditioner
+slepc4py.SLEPc.NEP.setRIILagPreconditioner	slepc4py.SLEPc.NEP-class.html#setRIILagPreconditioner
 slepc4py.SLEPc.NEP.solve	slepc4py.SLEPc.NEP-class.html#solve
 slepc4py.SLEPc.NEP.ConvergedReason	slepc4py.SLEPc.NEP.ConvergedReason-class.html
-slepc4py.SLEPc.NEP.ConvergedReason.DIVERGED_MAX_IT	slepc4py.SLEPc.NEP.ConvergedReason-class.html#DIVERGED_MAX_IT
-slepc4py.SLEPc.NEP.ConvergedReason.DIVERGED_FNORM_NAN	slepc4py.SLEPc.NEP.ConvergedReason-class.html#DIVERGED_FNORM_NAN
 slepc4py.SLEPc.NEP.ConvergedReason.DIVERGED_BREAKDOWN	slepc4py.SLEPc.NEP.ConvergedReason-class.html#DIVERGED_BREAKDOWN
-slepc4py.SLEPc.NEP.ConvergedReason.CONVERGED_FNORM_ABS	slepc4py.SLEPc.NEP.ConvergedReason-class.html#CONVERGED_FNORM_ABS
+slepc4py.SLEPc.NEP.ConvergedReason.CONVERGED_USER	slepc4py.SLEPc.NEP.ConvergedReason-class.html#CONVERGED_USER
+slepc4py.SLEPc.NEP.ConvergedReason.CONVERGED_TOL	slepc4py.SLEPc.NEP.ConvergedReason-class.html#CONVERGED_TOL
 slepc4py.SLEPc.NEP.ConvergedReason.ITERATING	slepc4py.SLEPc.NEP.ConvergedReason-class.html#ITERATING
-slepc4py.SLEPc.NEP.ConvergedReason.CONVERGED_SNORM_RELATIVE	slepc4py.SLEPc.NEP.ConvergedReason-class.html#CONVERGED_SNORM_RELATIVE
-slepc4py.SLEPc.NEP.ConvergedReason.CONVERGED_FNORM_RELATIVE	slepc4py.SLEPc.NEP.ConvergedReason-class.html#CONVERGED_FNORM_RELATIVE
-slepc4py.SLEPc.NEP.ConvergedReason.DIVERGED_FUNCTION_COUNT	slepc4py.SLEPc.NEP.ConvergedReason-class.html#DIVERGED_FUNCTION_COUNT
-slepc4py.SLEPc.NEP.ConvergedReason.__qualname__	slepc4py.SLEPc.NEP.ConvergedReason-class.html#__qualname__
 slepc4py.SLEPc.NEP.ConvergedReason.CONVERGED_ITERATING	slepc4py.SLEPc.NEP.ConvergedReason-class.html#CONVERGED_ITERATING
+slepc4py.SLEPc.NEP.ConvergedReason.DIVERGED_ITS	slepc4py.SLEPc.NEP.ConvergedReason-class.html#DIVERGED_ITS
+slepc4py.SLEPc.NEP.ConvergedReason.__qualname__	slepc4py.SLEPc.NEP.ConvergedReason-class.html#__qualname__
 slepc4py.SLEPc.NEP.ConvergedReason.DIVERGED_LINEAR_SOLVE	slepc4py.SLEPc.NEP.ConvergedReason-class.html#DIVERGED_LINEAR_SOLVE
 slepc4py.SLEPc.NEP.ErrorType	slepc4py.SLEPc.NEP.ErrorType-class.html
 slepc4py.SLEPc.NEP.ErrorType.__qualname__	slepc4py.SLEPc.NEP.ErrorType-class.html#__qualname__
 slepc4py.SLEPc.NEP.ErrorType.RELATIVE	slepc4py.SLEPc.NEP.ErrorType-class.html#RELATIVE
+slepc4py.SLEPc.NEP.ErrorType.BACKWARD	slepc4py.SLEPc.NEP.ErrorType-class.html#BACKWARD
 slepc4py.SLEPc.NEP.ErrorType.ABSOLUTE	slepc4py.SLEPc.NEP.ErrorType-class.html#ABSOLUTE
+slepc4py.SLEPc.NEP.Refine	slepc4py.SLEPc.NEP.Refine-class.html
+slepc4py.SLEPc.NEP.Refine.NONE	slepc4py.SLEPc.NEP.Refine-class.html#NONE
+slepc4py.SLEPc.NEP.Refine.MULTIPLE	slepc4py.SLEPc.NEP.Refine-class.html#MULTIPLE
+slepc4py.SLEPc.NEP.Refine.SIMPLE	slepc4py.SLEPc.NEP.Refine-class.html#SIMPLE
+slepc4py.SLEPc.NEP.Refine.__qualname__	slepc4py.SLEPc.NEP.Refine-class.html#__qualname__
+slepc4py.SLEPc.NEP.RefineScheme	slepc4py.SLEPc.NEP.RefineScheme-class.html
+slepc4py.SLEPc.NEP.RefineScheme.SCHUR	slepc4py.SLEPc.NEP.RefineScheme-class.html#SCHUR
+slepc4py.SLEPc.NEP.RefineScheme.MBE	slepc4py.SLEPc.NEP.RefineScheme-class.html#MBE
+slepc4py.SLEPc.NEP.RefineScheme.EXPLICIT	slepc4py.SLEPc.NEP.RefineScheme-class.html#EXPLICIT
+slepc4py.SLEPc.NEP.RefineScheme.__qualname__	slepc4py.SLEPc.NEP.RefineScheme-class.html#__qualname__
 slepc4py.SLEPc.NEP.Type	slepc4py.SLEPc.NEP.Type-class.html
 slepc4py.SLEPc.NEP.Type.NARNOLDI	slepc4py.SLEPc.NEP.Type-class.html#NARNOLDI
 slepc4py.SLEPc.NEP.Type.SLP	slepc4py.SLEPc.NEP.Type-class.html#SLP
@@ -430,13 +485,16 @@ slepc4py.SLEPc.NEP.Type.CISS	slepc4py.SLEPc.NEP.Type-class.html#CISS
 slepc4py.SLEPc.NEP.Type.__qualname__	slepc4py.SLEPc.NEP.Type-class.html#__qualname__
 slepc4py.SLEPc.NEP.Type.INTERPOL	slepc4py.SLEPc.NEP.Type-class.html#INTERPOL
 slepc4py.SLEPc.NEP.Type.RII	slepc4py.SLEPc.NEP.Type-class.html#RII
+slepc4py.SLEPc.NEP.Type.NLEIGS	slepc4py.SLEPc.NEP.Type-class.html#NLEIGS
 slepc4py.SLEPc.NEP.Which	slepc4py.SLEPc.NEP.Which-class.html
 slepc4py.SLEPc.NEP.Which.TARGET_MAGNITUDE	slepc4py.SLEPc.NEP.Which-class.html#TARGET_MAGNITUDE
 slepc4py.SLEPc.NEP.Which.LARGEST_IMAGINARY	slepc4py.SLEPc.NEP.Which-class.html#LARGEST_IMAGINARY
+slepc4py.SLEPc.NEP.Which.USER	slepc4py.SLEPc.NEP.Which-class.html#USER
 slepc4py.SLEPc.NEP.Which.SMALLEST_REAL	slepc4py.SLEPc.NEP.Which-class.html#SMALLEST_REAL
 slepc4py.SLEPc.NEP.Which.SMALLEST_MAGNITUDE	slepc4py.SLEPc.NEP.Which-class.html#SMALLEST_MAGNITUDE
 slepc4py.SLEPc.NEP.Which.SMALLEST_IMAGINARY	slepc4py.SLEPc.NEP.Which-class.html#SMALLEST_IMAGINARY
 slepc4py.SLEPc.NEP.Which.LARGEST_REAL	slepc4py.SLEPc.NEP.Which-class.html#LARGEST_REAL
+slepc4py.SLEPc.NEP.Which.ALL	slepc4py.SLEPc.NEP.Which-class.html#ALL
 slepc4py.SLEPc.NEP.Which.LARGEST_MAGNITUDE	slepc4py.SLEPc.NEP.Which-class.html#LARGEST_MAGNITUDE
 slepc4py.SLEPc.NEP.Which.__qualname__	slepc4py.SLEPc.NEP.Which-class.html#__qualname__
 slepc4py.SLEPc.NEP.Which.TARGET_IMAGINARY	slepc4py.SLEPc.NEP.Which-class.html#TARGET_IMAGINARY
@@ -444,7 +502,10 @@ slepc4py.SLEPc.NEP.Which.TARGET_REAL	slepc4py.SLEPc.NEP.Which-class.html#TARGET_
 slepc4py.SLEPc.PEP	slepc4py.SLEPc.PEP-class.html
 slepc4py.SLEPc.PEP.setWhichEigenpairs	slepc4py.SLEPc.PEP-class.html#setWhichEigenpairs
 slepc4py.SLEPc.PEP.cancelMonitor	slepc4py.SLEPc.PEP-class.html#cancelMonitor
+slepc4py.SLEPc.PEP.getRG	slepc4py.SLEPc.PEP-class.html#getRG
 slepc4py.SLEPc.PEP.computeError	slepc4py.SLEPc.PEP-class.html#computeError
+slepc4py.SLEPc.PEP.errorView	slepc4py.SLEPc.PEP-class.html#errorView
+slepc4py.SLEPc.PEP.RefineScheme	slepc4py.SLEPc.PEP.RefineScheme-class.html
 slepc4py.SLEPc.PEP.appendOptionsPrefix	slepc4py.SLEPc.PEP-class.html#appendOptionsPrefix
 slepc4py.SLEPc.PEP.setOperators	slepc4py.SLEPc.PEP-class.html#setOperators
 slepc4py.SLEPc.PEP.getConvergedReason	slepc4py.SLEPc.PEP-class.html#getConvergedReason
@@ -468,8 +529,9 @@ slepc4py.SLEPc.PEP.getOptionsPrefix	slepc4py.SLEPc.PEP-class.html#getOptionsPref
 slepc4py.SLEPc.PEP.setConvergenceTest	slepc4py.SLEPc.PEP-class.html#setConvergenceTest
 slepc4py.SLEPc.PEP.setLinearExplicitMatrix	slepc4py.SLEPc.PEP-class.html#setLinearExplicitMatrix
 slepc4py.SLEPc.PEP.getBasis	slepc4py.SLEPc.PEP-class.html#getBasis
+slepc4py.SLEPc.PEP.Extract	slepc4py.SLEPc.PEP.Extract-class.html
 slepc4py.SLEPc.PEP.getConvergenceTest	slepc4py.SLEPc.PEP-class.html#getConvergenceTest
-slepc4py.SLEPc.PEP.Refine	slepc4py.SLEPc.PEPRefine-class.html
+slepc4py.SLEPc.PEP.Refine	slepc4py.SLEPc.PEP.Refine-class.html
 slepc4py.SLEPc.PEP.setTolerances	slepc4py.SLEPc.PEP-class.html#setTolerances
 slepc4py.SLEPc.PEP.getEigenpair	slepc4py.SLEPc.PEP-class.html#getEigenpair
 slepc4py.SLEPc.PEP.Basis	slepc4py.SLEPc.PEP.Basis-class.html
@@ -493,6 +555,7 @@ slepc4py.SLEPc.PEP.setBV	slepc4py.SLEPc.PEP-class.html#setBV
 slepc4py.SLEPc.PEP.setTrackAll	slepc4py.SLEPc.PEP-class.html#setTrackAll
 slepc4py.SLEPc.PEP.__new__	slepc4py.SLEPc.PEP-class.html#__new__
 slepc4py.SLEPc.PEP.getErrorEstimate	slepc4py.SLEPc.PEP-class.html#getErrorEstimate
+slepc4py.SLEPc.PEP.setRG	slepc4py.SLEPc.PEP-class.html#setRG
 slepc4py.SLEPc.PEP.destroy	slepc4py.SLEPc.PEP-class.html#destroy
 slepc4py.SLEPc.PEP.setProblemType	slepc4py.SLEPc.PEP-class.html#setProblemType
 slepc4py.SLEPc.PEP.getTolerances	slepc4py.SLEPc.PEP-class.html#getTolerances
@@ -514,25 +577,43 @@ slepc4py.SLEPc.PEP.Conv	slepc4py.SLEPc.PEP.Conv-class.html
 slepc4py.SLEPc.PEP.Conv.__qualname__	slepc4py.SLEPc.PEP.Conv-class.html#__qualname__
 slepc4py.SLEPc.PEP.Conv.ABS	slepc4py.SLEPc.PEP.Conv-class.html#ABS
 slepc4py.SLEPc.PEP.Conv.USER	slepc4py.SLEPc.PEP.Conv-class.html#USER
-slepc4py.SLEPc.PEP.Conv.EIG	slepc4py.SLEPc.PEP.Conv-class.html#EIG
+slepc4py.SLEPc.PEP.Conv.REL	slepc4py.SLEPc.PEP.Conv-class.html#REL
 slepc4py.SLEPc.PEP.Conv.NORM	slepc4py.SLEPc.PEP.Conv-class.html#NORM
 slepc4py.SLEPc.PEP.ConvergedReason	slepc4py.SLEPc.PEP.ConvergedReason-class.html
 slepc4py.SLEPc.PEP.ConvergedReason.DIVERGED_BREAKDOWN	slepc4py.SLEPc.PEP.ConvergedReason-class.html#DIVERGED_BREAKDOWN
+slepc4py.SLEPc.PEP.ConvergedReason.CONVERGED_USER	slepc4py.SLEPc.PEP.ConvergedReason-class.html#CONVERGED_USER
+slepc4py.SLEPc.PEP.ConvergedReason.DIVERGED_SYMMETRY_LOST	slepc4py.SLEPc.PEP.ConvergedReason-class.html#DIVERGED_SYMMETRY_LOST
+slepc4py.SLEPc.PEP.ConvergedReason.CONVERGED_TOL	slepc4py.SLEPc.PEP.ConvergedReason-class.html#CONVERGED_TOL
 slepc4py.SLEPc.PEP.ConvergedReason.ITERATING	slepc4py.SLEPc.PEP.ConvergedReason-class.html#ITERATING
-slepc4py.SLEPc.PEP.ConvergedReason.__qualname__	slepc4py.SLEPc.PEP.ConvergedReason-class.html#__qualname__
 slepc4py.SLEPc.PEP.ConvergedReason.CONVERGED_ITERATING	slepc4py.SLEPc.PEP.ConvergedReason-class.html#CONVERGED_ITERATING
 slepc4py.SLEPc.PEP.ConvergedReason.DIVERGED_ITS	slepc4py.SLEPc.PEP.ConvergedReason-class.html#DIVERGED_ITS
-slepc4py.SLEPc.PEP.ConvergedReason.CONVERGED_TOL	slepc4py.SLEPc.PEP.ConvergedReason-class.html#CONVERGED_TOL
+slepc4py.SLEPc.PEP.ConvergedReason.__qualname__	slepc4py.SLEPc.PEP.ConvergedReason-class.html#__qualname__
 slepc4py.SLEPc.PEP.ErrorType	slepc4py.SLEPc.PEP.ErrorType-class.html
 slepc4py.SLEPc.PEP.ErrorType.__qualname__	slepc4py.SLEPc.PEP.ErrorType-class.html#__qualname__
 slepc4py.SLEPc.PEP.ErrorType.RELATIVE	slepc4py.SLEPc.PEP.ErrorType-class.html#RELATIVE
 slepc4py.SLEPc.PEP.ErrorType.BACKWARD	slepc4py.SLEPc.PEP.ErrorType-class.html#BACKWARD
 slepc4py.SLEPc.PEP.ErrorType.ABSOLUTE	slepc4py.SLEPc.PEP.ErrorType-class.html#ABSOLUTE
+slepc4py.SLEPc.PEP.Extract	slepc4py.SLEPc.PEP.Extract-class.html
+slepc4py.SLEPc.PEP.Extract.NONE	slepc4py.SLEPc.PEP.Extract-class.html#NONE
+slepc4py.SLEPc.PEP.Extract.STRUCTURED	slepc4py.SLEPc.PEP.Extract-class.html#STRUCTURED
+slepc4py.SLEPc.PEP.Extract.RESIDUAL	slepc4py.SLEPc.PEP.Extract-class.html#RESIDUAL
+slepc4py.SLEPc.PEP.Extract.__qualname__	slepc4py.SLEPc.PEP.Extract-class.html#__qualname__
+slepc4py.SLEPc.PEP.Extract.NORM	slepc4py.SLEPc.PEP.Extract-class.html#NORM
 slepc4py.SLEPc.PEP.ProblemType	slepc4py.SLEPc.PEP.ProblemType-class.html
 slepc4py.SLEPc.PEP.ProblemType.GENERAL	slepc4py.SLEPc.PEP.ProblemType-class.html#GENERAL
 slepc4py.SLEPc.PEP.ProblemType.__qualname__	slepc4py.SLEPc.PEP.ProblemType-class.html#__qualname__
 slepc4py.SLEPc.PEP.ProblemType.HERMITIAN	slepc4py.SLEPc.PEP.ProblemType-class.html#HERMITIAN
 slepc4py.SLEPc.PEP.ProblemType.GYROSCOPIC	slepc4py.SLEPc.PEP.ProblemType-class.html#GYROSCOPIC
+slepc4py.SLEPc.PEP.Refine	slepc4py.SLEPc.PEP.Refine-class.html
+slepc4py.SLEPc.PEP.Refine.NONE	slepc4py.SLEPc.PEP.Refine-class.html#NONE
+slepc4py.SLEPc.PEP.Refine.MULTIPLE	slepc4py.SLEPc.PEP.Refine-class.html#MULTIPLE
+slepc4py.SLEPc.PEP.Refine.SIMPLE	slepc4py.SLEPc.PEP.Refine-class.html#SIMPLE
+slepc4py.SLEPc.PEP.Refine.__qualname__	slepc4py.SLEPc.PEP.Refine-class.html#__qualname__
+slepc4py.SLEPc.PEP.RefineScheme	slepc4py.SLEPc.PEP.RefineScheme-class.html
+slepc4py.SLEPc.PEP.RefineScheme.SCHUR	slepc4py.SLEPc.PEP.RefineScheme-class.html#SCHUR
+slepc4py.SLEPc.PEP.RefineScheme.MBE	slepc4py.SLEPc.PEP.RefineScheme-class.html#MBE
+slepc4py.SLEPc.PEP.RefineScheme.EXPLICIT	slepc4py.SLEPc.PEP.RefineScheme-class.html#EXPLICIT
+slepc4py.SLEPc.PEP.RefineScheme.__qualname__	slepc4py.SLEPc.PEP.RefineScheme-class.html#__qualname__
 slepc4py.SLEPc.PEP.Scale	slepc4py.SLEPc.PEP.Scale-class.html
 slepc4py.SLEPc.PEP.Scale.BOTH	slepc4py.SLEPc.PEP.Scale-class.html#BOTH
 slepc4py.SLEPc.PEP.Scale.NONE	slepc4py.SLEPc.PEP.Scale-class.html#NONE
@@ -549,6 +630,7 @@ slepc4py.SLEPc.PEP.Type.TOAR	slepc4py.SLEPc.PEP.Type-class.html#TOAR
 slepc4py.SLEPc.PEP.Which	slepc4py.SLEPc.PEP.Which-class.html
 slepc4py.SLEPc.PEP.Which.TARGET_MAGNITUDE	slepc4py.SLEPc.PEP.Which-class.html#TARGET_MAGNITUDE
 slepc4py.SLEPc.PEP.Which.LARGEST_IMAGINARY	slepc4py.SLEPc.PEP.Which-class.html#LARGEST_IMAGINARY
+slepc4py.SLEPc.PEP.Which.USER	slepc4py.SLEPc.PEP.Which-class.html#USER
 slepc4py.SLEPc.PEP.Which.SMALLEST_REAL	slepc4py.SLEPc.PEP.Which-class.html#SMALLEST_REAL
 slepc4py.SLEPc.PEP.Which.SMALLEST_MAGNITUDE	slepc4py.SLEPc.PEP.Which-class.html#SMALLEST_MAGNITUDE
 slepc4py.SLEPc.PEP.Which.SMALLEST_IMAGINARY	slepc4py.SLEPc.PEP.Which-class.html#SMALLEST_IMAGINARY
@@ -557,11 +639,6 @@ slepc4py.SLEPc.PEP.Which.LARGEST_MAGNITUDE	slepc4py.SLEPc.PEP.Which-class.html#L
 slepc4py.SLEPc.PEP.Which.__qualname__	slepc4py.SLEPc.PEP.Which-class.html#__qualname__
 slepc4py.SLEPc.PEP.Which.TARGET_IMAGINARY	slepc4py.SLEPc.PEP.Which-class.html#TARGET_IMAGINARY
 slepc4py.SLEPc.PEP.Which.TARGET_REAL	slepc4py.SLEPc.PEP.Which-class.html#TARGET_REAL
-slepc4py.SLEPc.PEPRefine	slepc4py.SLEPc.PEPRefine-class.html
-slepc4py.SLEPc.PEPRefine.NONE	slepc4py.SLEPc.PEPRefine-class.html#NONE
-slepc4py.SLEPc.PEPRefine.MULTIPLE	slepc4py.SLEPc.PEPRefine-class.html#MULTIPLE
-slepc4py.SLEPc.PEPRefine.SIMPLE	slepc4py.SLEPc.PEPRefine-class.html#SIMPLE
-slepc4py.SLEPc.PEPRefine.__qualname__	slepc4py.SLEPc.PEPRefine-class.html#__qualname__
 slepc4py.SLEPc.RG	slepc4py.SLEPc.RG-class.html
 slepc4py.SLEPc.RG.Type	slepc4py.SLEPc.RG.Type-class.html
 slepc4py.SLEPc.RG.setType	slepc4py.SLEPc.RG-class.html#setType
@@ -612,7 +689,6 @@ slepc4py.SLEPc.ST.setFromOptions	slepc4py.SLEPc.ST-class.html#setFromOptions
 slepc4py.SLEPc.ST.setShift	slepc4py.SLEPc.ST-class.html#setShift
 slepc4py.SLEPc.ST.ksp	slepc4py.SLEPc.ST-class.html#ksp
 slepc4py.SLEPc.ST.reset	slepc4py.SLEPc.ST-class.html#reset
-slepc4py.SLEPc.ST.MatStructure	slepc4py.SLEPc.ST.MatStructure-class.html
 slepc4py.SLEPc.ST.setMatStructure	slepc4py.SLEPc.ST-class.html#setMatStructure
 slepc4py.SLEPc.ST.applyTranspose	slepc4py.SLEPc.ST-class.html#applyTranspose
 slepc4py.SLEPc.ST.shift	slepc4py.SLEPc.ST-class.html#shift
@@ -623,17 +699,6 @@ slepc4py.SLEPc.ST.MatMode.SHELL	slepc4py.SLEPc.ST.MatMode-class.html#SHELL
 slepc4py.SLEPc.ST.MatMode.INPLACE	slepc4py.SLEPc.ST.MatMode-class.html#INPLACE
 slepc4py.SLEPc.ST.MatMode.__qualname__	slepc4py.SLEPc.ST.MatMode-class.html#__qualname__
 slepc4py.SLEPc.ST.MatMode.COPY	slepc4py.SLEPc.ST.MatMode-class.html#COPY
-slepc4py.SLEPc.ST.MatStructure	slepc4py.SLEPc.ST.MatStructure-class.html
-slepc4py.SLEPc.ST.MatStructure.SUBSET	slepc4py.SLEPc.ST.MatStructure-class.html#SUBSET
-slepc4py.SLEPc.ST.MatStructure.SAME_NZ	slepc4py.SLEPc.ST.MatStructure-class.html#SAME_NZ
-slepc4py.SLEPc.ST.MatStructure.SUBSET_NZ	slepc4py.SLEPc.ST.MatStructure-class.html#SUBSET_NZ
-slepc4py.SLEPc.ST.MatStructure.DIFFERENT	slepc4py.SLEPc.ST.MatStructure-class.html#DIFFERENT
-slepc4py.SLEPc.ST.MatStructure.DIFFERENT_NZ	slepc4py.SLEPc.ST.MatStructure-class.html#DIFFERENT_NZ
-slepc4py.SLEPc.ST.MatStructure.SAME_NONZERO_PATTERN	slepc4py.SLEPc.ST.MatStructure-class.html#SAME_NONZERO_PATTERN
-slepc4py.SLEPc.ST.MatStructure.DIFFERENT_NONZERO_PATTERN	slepc4py.SLEPc.ST.MatStructure-class.html#DIFFERENT_NONZERO_PATTERN
-slepc4py.SLEPc.ST.MatStructure.SAME	slepc4py.SLEPc.ST.MatStructure-class.html#SAME
-slepc4py.SLEPc.ST.MatStructure.__qualname__	slepc4py.SLEPc.ST.MatStructure-class.html#__qualname__
-slepc4py.SLEPc.ST.MatStructure.SUBSET_NONZERO_PATTERN	slepc4py.SLEPc.ST.MatStructure-class.html#SUBSET_NONZERO_PATTERN
 slepc4py.SLEPc.ST.Type	slepc4py.SLEPc.ST.Type-class.html
 slepc4py.SLEPc.ST.Type.SINVERT	slepc4py.SLEPc.ST.Type-class.html#SINVERT
 slepc4py.SLEPc.ST.Type.SHELL	slepc4py.SLEPc.ST.Type-class.html#SHELL
@@ -645,6 +710,7 @@ slepc4py.SLEPc.SVD	slepc4py.SLEPc.SVD-class.html
 slepc4py.SLEPc.SVD.cancelMonitor	slepc4py.SLEPc.SVD-class.html#cancelMonitor
 slepc4py.SLEPc.SVD.max_it	slepc4py.SLEPc.SVD-class.html#max_it
 slepc4py.SLEPc.SVD.computeError	slepc4py.SLEPc.SVD-class.html#computeError
+slepc4py.SLEPc.SVD.errorView	slepc4py.SLEPc.SVD-class.html#errorView
 slepc4py.SLEPc.SVD.appendOptionsPrefix	slepc4py.SLEPc.SVD-class.html#appendOptionsPrefix
 slepc4py.SLEPc.SVD.getConvergedReason	slepc4py.SLEPc.SVD-class.html#getConvergedReason
 slepc4py.SLEPc.SVD.setInitialSpace	slepc4py.SLEPc.SVD-class.html#setInitialSpace
@@ -697,6 +763,7 @@ slepc4py.SLEPc.SVD.ConvergedReason	slepc4py.SLEPc.SVD.ConvergedReason-class.html
 slepc4py.SLEPc.SVD.ConvergedReason.DIVERGED_BREAKDOWN	slepc4py.SLEPc.SVD.ConvergedReason-class.html#DIVERGED_BREAKDOWN
 slepc4py.SLEPc.SVD.ConvergedReason.ITERATING	slepc4py.SLEPc.SVD.ConvergedReason-class.html#ITERATING
 slepc4py.SLEPc.SVD.ConvergedReason.__qualname__	slepc4py.SLEPc.SVD.ConvergedReason-class.html#__qualname__
+slepc4py.SLEPc.SVD.ConvergedReason.CONVERGED_USER	slepc4py.SLEPc.SVD.ConvergedReason-class.html#CONVERGED_USER
 slepc4py.SLEPc.SVD.ConvergedReason.CONVERGED_ITERATING	slepc4py.SLEPc.SVD.ConvergedReason-class.html#CONVERGED_ITERATING
 slepc4py.SLEPc.SVD.ConvergedReason.DIVERGED_ITS	slepc4py.SLEPc.SVD.ConvergedReason-class.html#DIVERGED_ITS
 slepc4py.SLEPc.SVD.ConvergedReason.CONVERGED_TOL	slepc4py.SLEPc.SVD.ConvergedReason-class.html#CONVERGED_TOL
diff --git a/docs/apiref/class-tree.html b/docs/apiref/class-tree.html
index 8b53418..f2a03ec 100644
--- a/docs/apiref/class-tree.html
+++ b/docs/apiref/class-tree.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -63,45 +63,52 @@
     <li> <strong class="uidlink">object</strong>:
       <em class="summary">The most base type</em>
     <ul>
-    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.BVOrthogBlockType-class.html">slepc4py.SLEPc.BVOrthogBlockType</a></strong>:
-      <em class="summary">BV block-orthogonalization types</em>
-    </li>
     <li> <strong class="uidlink"><a href="slepc4py.SLEPc.EPS.Balance-class.html">slepc4py.SLEPc.EPS.Balance</a></strong>:
       <em class="summary">EPS type of balancing used for non-Hermitian problems</em>
     </li>
     <li> <strong class="uidlink"><a href="slepc4py.SLEPc.PEP.Basis-class.html">slepc4py.SLEPc.PEP.Basis</a></strong>
     </li>
+    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.BV.BlockType-class.html">slepc4py.SLEPc.BV.BlockType</a></strong>:
+      <em class="summary">BV block-orthogonalization types</em>
+    </li>
+    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.FN.CombineType-class.html">slepc4py.SLEPc.FN.CombineType</a></strong>:
+      <em class="summary">FN type of combination of child functions</em>
+    </li>
     <li> <strong class="uidlink"><a href="slepc4py.SLEPc.EPS.Conv-class.html">slepc4py.SLEPc.EPS.Conv</a></strong>:
       <em class="summary">EPS convergence test</em>
     </li>
     <li> <strong class="uidlink"><a href="slepc4py.SLEPc.PEP.Conv-class.html">slepc4py.SLEPc.PEP.Conv</a></strong>:
       <em class="summary">PEP convergence test</em>
     </li>
-    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html">slepc4py.SLEPc.EPS.ConvergedReason</a></strong>:
-      <em class="summary">EPS convergence reasons</em>
+    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.MFN.ConvergedReason-class.html">slepc4py.SLEPc.MFN.ConvergedReason</a></strong>
     </li>
     <li> <strong class="uidlink"><a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html">slepc4py.SLEPc.PEP.ConvergedReason</a></strong>:
       <em class="summary">PEP convergence reasons</em>
     </li>
     <li> <strong class="uidlink"><a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html">slepc4py.SLEPc.NEP.ConvergedReason</a></strong>
     </li>
-    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.MFN.ConvergedReason-class.html">slepc4py.SLEPc.MFN.ConvergedReason</a></strong>
+    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html">slepc4py.SLEPc.EPS.ConvergedReason</a></strong>:
+      <em class="summary">EPS convergence reasons</em>
     </li>
     <li> <strong class="uidlink"><a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html">slepc4py.SLEPc.SVD.ConvergedReason</a></strong>:
       <em class="summary">SVD convergence reasons</em>
     </li>
-    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.SVD.ErrorType-class.html">slepc4py.SLEPc.SVD.ErrorType</a></strong>:
-      <em class="summary">SVD error type to assess accuracy of computed solutions</em>
-    </li>
     <li> <strong class="uidlink"><a href="slepc4py.SLEPc.EPS.ErrorType-class.html">slepc4py.SLEPc.EPS.ErrorType</a></strong>:
       <em class="summary">EPS error type to assess accuracy of computed solutions</em>
     </li>
     <li> <strong class="uidlink"><a href="slepc4py.SLEPc.PEP.ErrorType-class.html">slepc4py.SLEPc.PEP.ErrorType</a></strong>:
       <em class="summary">PEP error type to assess accuracy of computed solutions</em>
     </li>
+    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.SVD.ErrorType-class.html">slepc4py.SLEPc.SVD.ErrorType</a></strong>:
+      <em class="summary">SVD error type to assess accuracy of computed solutions</em>
+    </li>
     <li> <strong class="uidlink"><a href="slepc4py.SLEPc.NEP.ErrorType-class.html">slepc4py.SLEPc.NEP.ErrorType</a></strong>:
       <em class="summary">NEP error type to assess accuracy of computed solutions</em>
     </li>
+    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.PEP.Extract-class.html">slepc4py.SLEPc.PEP.Extract</a></strong>:
+      <em class="summary">Extraction strategy used to obtain eigenvectors of the PEP from the
+eigenvectors of the linearization</em>
+    </li>
     <li> <strong class="uidlink"><a href="slepc4py.SLEPc.EPS.Extraction-class.html">slepc4py.SLEPc.EPS.Extraction</a></strong>:
       <em class="summary">EPS extraction technique</em>
     </li>
@@ -111,9 +118,6 @@
     <li> <strong class="uidlink"><a href="slepc4py.SLEPc.ST.MatMode-class.html">slepc4py.SLEPc.ST.MatMode</a></strong>:
       <em class="summary">ST matrix mode</em>
     </li>
-    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.ST.MatStructure-class.html">slepc4py.SLEPc.ST.MatStructure</a></strong>:
-      <em class="summary"><a href="slepc4py.SLEPc.ST.MatStructure-class.html#SAME" class="link">SAME</a>: Same non-zero pattern.</em>
-    </li>
     <li> <strong class="uidlink"><a href="slepc4py.SLEPc.DS.MatType-class.html">slepc4py.SLEPc.DS.MatType</a></strong>:
       <em class="summary">To refer to one of the matrices stored internally in DS</em>
     </li>
@@ -154,9 +158,6 @@
     <li> <strong class="uidlink"><a href="slepc4py.SLEPc.BV.OrthogType-class.html">slepc4py.SLEPc.BV.OrthogType</a></strong>:
       <em class="summary">BV orthogonalization types</em>
     </li>
-    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.PEPRefine-class.html">slepc4py.SLEPc.PEPRefine</a></strong>:
-      <em class="summary">PEP refinement strategy</em>
-    </li>
     <li> <strong class="uidlink"><a href="slepc4py.SLEPc.EPS.PowerShiftType-class.html">slepc4py.SLEPc.EPS.PowerShiftType</a></strong>:
       <em class="summary">EPS Power shift type.</em>
     </li>
@@ -166,47 +167,58 @@
     <li> <strong class="uidlink"><a href="slepc4py.SLEPc.EPS.ProblemType-class.html">slepc4py.SLEPc.EPS.ProblemType</a></strong>:
       <em class="summary">EPS problem type</em>
     </li>
+    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.NEP.Refine-class.html">slepc4py.SLEPc.NEP.Refine</a></strong>:
+      <em class="summary">NEP refinement strategy</em>
+    </li>
+    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.PEP.Refine-class.html">slepc4py.SLEPc.PEP.Refine</a></strong>:
+      <em class="summary">PEP refinement strategy</em>
+    </li>
+    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.NEP.RefineScheme-class.html">slepc4py.SLEPc.NEP.RefineScheme</a></strong>:
+      <em class="summary">Scheme for solving linear systems during iterative refinement</em>
+    </li>
+    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.PEP.RefineScheme-class.html">slepc4py.SLEPc.PEP.RefineScheme</a></strong>:
+      <em class="summary">Scheme for solving linear systems during iterative refinement</em>
+    </li>
     <li> <strong class="uidlink"><a href="slepc4py.SLEPc.BV.RefineType-class.html">slepc4py.SLEPc.BV.RefineType</a></strong>:
       <em class="summary">BV orthogonalization refinement types</em>
     </li>
-    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.PEP.Scale-class.html">slepc4py.SLEPc.PEP.Scale</a></strong>
+    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.PEP.Scale-class.html">slepc4py.SLEPc.PEP.Scale</a></strong>:
+      <em class="summary">PEP scaling strategy</em>
     </li>
     <li> <strong class="uidlink"><a href="slepc4py.SLEPc.DS.StateType-class.html">slepc4py.SLEPc.DS.StateType</a></strong>:
       <em class="summary">DS state types</em>
     </li>
     <li> <strong class="uidlink"><a href="slepc4py.SLEPc.Sys-class.html">slepc4py.SLEPc.Sys</a></strong>
     </li>
-    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.NEP.Type-class.html">slepc4py.SLEPc.NEP.Type</a></strong>:
-      <em class="summary">NEP type</em>
-    </li>
-    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.BV.Type-class.html">slepc4py.SLEPc.BV.Type</a></strong>:
-      <em class="summary">BV type</em>
+    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.RG.Type-class.html">slepc4py.SLEPc.RG.Type</a></strong>:
+      <em class="summary">RG type</em>
     </li>
-    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.DS.Type-class.html">slepc4py.SLEPc.DS.Type</a></strong>:
-      <em class="summary">DS type</em>
+    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.SVD.Type-class.html">slepc4py.SLEPc.SVD.Type</a></strong>:
+      <em class="summary">SVD types</em>
     </li>
     <li> <strong class="uidlink"><a href="slepc4py.SLEPc.FN.Type-class.html">slepc4py.SLEPc.FN.Type</a></strong>:
       <em class="summary">FN type</em>
     </li>
-    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.EPS.Type-class.html">slepc4py.SLEPc.EPS.Type</a></strong>:
-      <em class="summary">EPS type</em>
-    </li>
-    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.MFN.Type-class.html">slepc4py.SLEPc.MFN.Type</a></strong>
-    </li>
-    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.SVD.Type-class.html">slepc4py.SLEPc.SVD.Type</a></strong>:
-      <em class="summary">SVD types</em>
+    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.BV.Type-class.html">slepc4py.SLEPc.BV.Type</a></strong>:
+      <em class="summary">BV type</em>
     </li>
     <li> <strong class="uidlink"><a href="slepc4py.SLEPc.ST.Type-class.html">slepc4py.SLEPc.ST.Type</a></strong>:
       <em class="summary">ST types</em>
     </li>
+    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.MFN.Type-class.html">slepc4py.SLEPc.MFN.Type</a></strong>:
+      <em class="summary">MFN type</em>
+    </li>
     <li> <strong class="uidlink"><a href="slepc4py.SLEPc.PEP.Type-class.html">slepc4py.SLEPc.PEP.Type</a></strong>:
       <em class="summary">PEP type</em>
     </li>
-    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.RG.Type-class.html">slepc4py.SLEPc.RG.Type</a></strong>:
-      <em class="summary">RG type</em>
+    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.DS.Type-class.html">slepc4py.SLEPc.DS.Type</a></strong>:
+      <em class="summary">DS type</em>
     </li>
-    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.EPS.Which-class.html">slepc4py.SLEPc.EPS.Which</a></strong>:
-      <em class="summary">EPS desired piece of spectrum</em>
+    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.NEP.Type-class.html">slepc4py.SLEPc.NEP.Type</a></strong>:
+      <em class="summary">NEP type</em>
+    </li>
+    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.EPS.Type-class.html">slepc4py.SLEPc.EPS.Type</a></strong>:
+      <em class="summary">EPS type</em>
     </li>
     <li> <strong class="uidlink"><a href="slepc4py.SLEPc.NEP.Which-class.html">slepc4py.SLEPc.NEP.Which</a></strong>
     </li>
@@ -216,6 +228,9 @@
     <li> <strong class="uidlink"><a href="slepc4py.SLEPc.PEP.Which-class.html">slepc4py.SLEPc.PEP.Which</a></strong>:
       <em class="summary">PEP desired part of spectrum</em>
     </li>
+    <li> <strong class="uidlink"><a href="slepc4py.SLEPc.EPS.Which-class.html">slepc4py.SLEPc.EPS.Which</a></strong>:
+      <em class="summary">EPS desired piece of spectrum</em>
+    </li>
     <li> <strong class="uidlink"><a href="slepc4py.SLEPc._p_mem-class.html" onclick="show_private();">slepc4py.SLEPc._p_mem</a></strong>
     </li>
     </ul>
@@ -245,14 +260,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:04 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:40 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/class_hierarchy_for__p_mem.png b/docs/apiref/class_hierarchy_for__p_mem.png
index 50a6965..9456c7b 100644
Binary files a/docs/apiref/class_hierarchy_for__p_mem.png and b/docs/apiref/class_hierarchy_for__p_mem.png differ
diff --git a/docs/apiref/class_hierarchy_for_balance.png b/docs/apiref/class_hierarchy_for_balance.png
index b7c584b..bbffbac 100644
Binary files a/docs/apiref/class_hierarchy_for_balance.png and b/docs/apiref/class_hierarchy_for_balance.png differ
diff --git a/docs/apiref/class_hierarchy_for_basis.png b/docs/apiref/class_hierarchy_for_basis.png
index baafef7..de9d5b6 100644
Binary files a/docs/apiref/class_hierarchy_for_basis.png and b/docs/apiref/class_hierarchy_for_basis.png differ
diff --git a/docs/apiref/class_hierarchy_for_blocktype.png b/docs/apiref/class_hierarchy_for_blocktype.png
new file mode 100644
index 0000000..ed43861
Binary files /dev/null and b/docs/apiref/class_hierarchy_for_blocktype.png differ
diff --git a/docs/apiref/class_hierarchy_for_bv.png b/docs/apiref/class_hierarchy_for_bv.png
index d47442b..4786549 100644
Binary files a/docs/apiref/class_hierarchy_for_bv.png and b/docs/apiref/class_hierarchy_for_bv.png differ
diff --git a/docs/apiref/class_hierarchy_for_bvorthogbl.png b/docs/apiref/class_hierarchy_for_bvorthogbl.png
deleted file mode 100644
index 63f3099..0000000
Binary files a/docs/apiref/class_hierarchy_for_bvorthogbl.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_combinetyp.png b/docs/apiref/class_hierarchy_for_combinetyp.png
new file mode 100644
index 0000000..3964d01
Binary files /dev/null and b/docs/apiref/class_hierarchy_for_combinetyp.png differ
diff --git a/docs/apiref/class_hierarchy_for_conv.png b/docs/apiref/class_hierarchy_for_conv.png
index 5406a17..5f60d64 100644
Binary files a/docs/apiref/class_hierarchy_for_conv.png and b/docs/apiref/class_hierarchy_for_conv.png differ
diff --git a/docs/apiref/class_hierarchy_for_conv_2.png b/docs/apiref/class_hierarchy_for_conv_2.png
index 5406a17..5f60d64 100644
Binary files a/docs/apiref/class_hierarchy_for_conv_2.png and b/docs/apiref/class_hierarchy_for_conv_2.png differ
diff --git a/docs/apiref/class_hierarchy_for_convergedr.png b/docs/apiref/class_hierarchy_for_convergedr.png
index 8b24ea6..9022f9d 100644
Binary files a/docs/apiref/class_hierarchy_for_convergedr.png and b/docs/apiref/class_hierarchy_for_convergedr.png differ
diff --git a/docs/apiref/class_hierarchy_for_convergedr_2.png b/docs/apiref/class_hierarchy_for_convergedr_2.png
index 8b24ea6..9022f9d 100644
Binary files a/docs/apiref/class_hierarchy_for_convergedr_2.png and b/docs/apiref/class_hierarchy_for_convergedr_2.png differ
diff --git a/docs/apiref/class_hierarchy_for_convergedr_3.png b/docs/apiref/class_hierarchy_for_convergedr_3.png
index 8b24ea6..9022f9d 100644
Binary files a/docs/apiref/class_hierarchy_for_convergedr_3.png and b/docs/apiref/class_hierarchy_for_convergedr_3.png differ
diff --git a/docs/apiref/class_hierarchy_for_convergedr_4.png b/docs/apiref/class_hierarchy_for_convergedr_4.png
index 8b24ea6..9022f9d 100644
Binary files a/docs/apiref/class_hierarchy_for_convergedr_4.png and b/docs/apiref/class_hierarchy_for_convergedr_4.png differ
diff --git a/docs/apiref/class_hierarchy_for_convergedr_5.png b/docs/apiref/class_hierarchy_for_convergedr_5.png
index 8b24ea6..9022f9d 100644
Binary files a/docs/apiref/class_hierarchy_for_convergedr_5.png and b/docs/apiref/class_hierarchy_for_convergedr_5.png differ
diff --git a/docs/apiref/class_hierarchy_for_ds.png b/docs/apiref/class_hierarchy_for_ds.png
index 434d35c..4724309 100644
Binary files a/docs/apiref/class_hierarchy_for_ds.png and b/docs/apiref/class_hierarchy_for_ds.png differ
diff --git a/docs/apiref/class_hierarchy_for_eps.png b/docs/apiref/class_hierarchy_for_eps.png
index f18b22f..1c7df04 100644
Binary files a/docs/apiref/class_hierarchy_for_eps.png and b/docs/apiref/class_hierarchy_for_eps.png differ
diff --git a/docs/apiref/class_hierarchy_for_errortype.png b/docs/apiref/class_hierarchy_for_errortype.png
index a7ecc4e..3c339ae 100644
Binary files a/docs/apiref/class_hierarchy_for_errortype.png and b/docs/apiref/class_hierarchy_for_errortype.png differ
diff --git a/docs/apiref/class_hierarchy_for_errortype_2.png b/docs/apiref/class_hierarchy_for_errortype_2.png
index a7ecc4e..3c339ae 100644
Binary files a/docs/apiref/class_hierarchy_for_errortype_2.png and b/docs/apiref/class_hierarchy_for_errortype_2.png differ
diff --git a/docs/apiref/class_hierarchy_for_errortype_3.png b/docs/apiref/class_hierarchy_for_errortype_3.png
index a7ecc4e..3c339ae 100644
Binary files a/docs/apiref/class_hierarchy_for_errortype_3.png and b/docs/apiref/class_hierarchy_for_errortype_3.png differ
diff --git a/docs/apiref/class_hierarchy_for_errortype_4.png b/docs/apiref/class_hierarchy_for_errortype_4.png
index a7ecc4e..3c339ae 100644
Binary files a/docs/apiref/class_hierarchy_for_errortype_4.png and b/docs/apiref/class_hierarchy_for_errortype_4.png differ
diff --git a/docs/apiref/class_hierarchy_for_extract.png b/docs/apiref/class_hierarchy_for_extract.png
new file mode 100644
index 0000000..ba27231
Binary files /dev/null and b/docs/apiref/class_hierarchy_for_extract.png differ
diff --git a/docs/apiref/class_hierarchy_for_extraction.png b/docs/apiref/class_hierarchy_for_extraction.png
index f7cc6f6..098f780 100644
Binary files a/docs/apiref/class_hierarchy_for_extraction.png and b/docs/apiref/class_hierarchy_for_extraction.png differ
diff --git a/docs/apiref/class_hierarchy_for_fn.png b/docs/apiref/class_hierarchy_for_fn.png
index 2a5d0a3..c5058f4 100644
Binary files a/docs/apiref/class_hierarchy_for_fn.png and b/docs/apiref/class_hierarchy_for_fn.png differ
diff --git a/docs/apiref/class_hierarchy_for_lanczosreo.png b/docs/apiref/class_hierarchy_for_lanczosreo.png
index a418668..b30a8dd 100644
Binary files a/docs/apiref/class_hierarchy_for_lanczosreo.png and b/docs/apiref/class_hierarchy_for_lanczosreo.png differ
diff --git a/docs/apiref/class_hierarchy_for_matmode.png b/docs/apiref/class_hierarchy_for_matmode.png
index 8e5cedf..c9dac47 100644
Binary files a/docs/apiref/class_hierarchy_for_matmode.png and b/docs/apiref/class_hierarchy_for_matmode.png differ
diff --git a/docs/apiref/class_hierarchy_for_matstructu.png b/docs/apiref/class_hierarchy_for_matstructu.png
deleted file mode 100644
index 9170a9c..0000000
Binary files a/docs/apiref/class_hierarchy_for_matstructu.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_mattype.png b/docs/apiref/class_hierarchy_for_mattype.png
index c0c2114..f1ad2a0 100644
Binary files a/docs/apiref/class_hierarchy_for_mattype.png and b/docs/apiref/class_hierarchy_for_mattype.png differ
diff --git a/docs/apiref/class_hierarchy_for_mfn.png b/docs/apiref/class_hierarchy_for_mfn.png
index 024fab4..3eec758 100644
Binary files a/docs/apiref/class_hierarchy_for_mfn.png and b/docs/apiref/class_hierarchy_for_mfn.png differ
diff --git a/docs/apiref/class_hierarchy_for_nep.png b/docs/apiref/class_hierarchy_for_nep.png
index 881c911..d4d81db 100644
Binary files a/docs/apiref/class_hierarchy_for_nep.png and b/docs/apiref/class_hierarchy_for_nep.png differ
diff --git a/docs/apiref/class_hierarchy_for_orthogtype.png b/docs/apiref/class_hierarchy_for_orthogtype.png
index 4692ac8..56ecfe5 100644
Binary files a/docs/apiref/class_hierarchy_for_orthogtype.png and b/docs/apiref/class_hierarchy_for_orthogtype.png differ
diff --git a/docs/apiref/class_hierarchy_for_pep.png b/docs/apiref/class_hierarchy_for_pep.png
index 39a2537..8a521ec 100644
Binary files a/docs/apiref/class_hierarchy_for_pep.png and b/docs/apiref/class_hierarchy_for_pep.png differ
diff --git a/docs/apiref/class_hierarchy_for_peprefine.png b/docs/apiref/class_hierarchy_for_peprefine.png
deleted file mode 100644
index 2e2055b..0000000
Binary files a/docs/apiref/class_hierarchy_for_peprefine.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_powershift.png b/docs/apiref/class_hierarchy_for_powershift.png
index 5f08eac..be5dbef 100644
Binary files a/docs/apiref/class_hierarchy_for_powershift.png and b/docs/apiref/class_hierarchy_for_powershift.png differ
diff --git a/docs/apiref/class_hierarchy_for_problemtyp.png b/docs/apiref/class_hierarchy_for_problemtyp.png
index 7d05f0d..2fdd610 100644
Binary files a/docs/apiref/class_hierarchy_for_problemtyp.png and b/docs/apiref/class_hierarchy_for_problemtyp.png differ
diff --git a/docs/apiref/class_hierarchy_for_problemtyp_2.png b/docs/apiref/class_hierarchy_for_problemtyp_2.png
index 7d05f0d..2fdd610 100644
Binary files a/docs/apiref/class_hierarchy_for_problemtyp_2.png and b/docs/apiref/class_hierarchy_for_problemtyp_2.png differ
diff --git a/docs/apiref/class_hierarchy_for_refine.png b/docs/apiref/class_hierarchy_for_refine.png
new file mode 100644
index 0000000..89c905e
Binary files /dev/null and b/docs/apiref/class_hierarchy_for_refine.png differ
diff --git a/docs/apiref/class_hierarchy_for_refine_2.png b/docs/apiref/class_hierarchy_for_refine_2.png
new file mode 100644
index 0000000..89c905e
Binary files /dev/null and b/docs/apiref/class_hierarchy_for_refine_2.png differ
diff --git a/docs/apiref/class_hierarchy_for_refinesche.png b/docs/apiref/class_hierarchy_for_refinesche.png
new file mode 100644
index 0000000..ee70171
Binary files /dev/null and b/docs/apiref/class_hierarchy_for_refinesche.png differ
diff --git a/docs/apiref/class_hierarchy_for_refinesche_2.png b/docs/apiref/class_hierarchy_for_refinesche_2.png
new file mode 100644
index 0000000..ee70171
Binary files /dev/null and b/docs/apiref/class_hierarchy_for_refinesche_2.png differ
diff --git a/docs/apiref/class_hierarchy_for_refinetype.png b/docs/apiref/class_hierarchy_for_refinetype.png
index 4866315..8c0049e 100644
Binary files a/docs/apiref/class_hierarchy_for_refinetype.png and b/docs/apiref/class_hierarchy_for_refinetype.png differ
diff --git a/docs/apiref/class_hierarchy_for_rg.png b/docs/apiref/class_hierarchy_for_rg.png
index fbcac05..6f072b4 100644
Binary files a/docs/apiref/class_hierarchy_for_rg.png and b/docs/apiref/class_hierarchy_for_rg.png differ
diff --git a/docs/apiref/class_hierarchy_for_scale.png b/docs/apiref/class_hierarchy_for_scale.png
index 02f1cef..d03319c 100644
Binary files a/docs/apiref/class_hierarchy_for_scale.png and b/docs/apiref/class_hierarchy_for_scale.png differ
diff --git a/docs/apiref/class_hierarchy_for_st.png b/docs/apiref/class_hierarchy_for_st.png
index 4586eec..070646a 100644
Binary files a/docs/apiref/class_hierarchy_for_st.png and b/docs/apiref/class_hierarchy_for_st.png differ
diff --git a/docs/apiref/class_hierarchy_for_statetype.png b/docs/apiref/class_hierarchy_for_statetype.png
index ce6cc66..f7f1a1c 100644
Binary files a/docs/apiref/class_hierarchy_for_statetype.png and b/docs/apiref/class_hierarchy_for_statetype.png differ
diff --git a/docs/apiref/class_hierarchy_for_svd.png b/docs/apiref/class_hierarchy_for_svd.png
index cbc2588..e07694b 100644
Binary files a/docs/apiref/class_hierarchy_for_svd.png and b/docs/apiref/class_hierarchy_for_svd.png differ
diff --git a/docs/apiref/class_hierarchy_for_sys.png b/docs/apiref/class_hierarchy_for_sys.png
index c676aa2..835eac8 100644
Binary files a/docs/apiref/class_hierarchy_for_sys.png and b/docs/apiref/class_hierarchy_for_sys.png differ
diff --git a/docs/apiref/class_hierarchy_for_type.png b/docs/apiref/class_hierarchy_for_type.png
index 397d0e9..3ee2d33 100644
Binary files a/docs/apiref/class_hierarchy_for_type.png and b/docs/apiref/class_hierarchy_for_type.png differ
diff --git a/docs/apiref/class_hierarchy_for_type_10.png b/docs/apiref/class_hierarchy_for_type_10.png
index 397d0e9..3ee2d33 100644
Binary files a/docs/apiref/class_hierarchy_for_type_10.png and b/docs/apiref/class_hierarchy_for_type_10.png differ
diff --git a/docs/apiref/class_hierarchy_for_type_2.png b/docs/apiref/class_hierarchy_for_type_2.png
index 397d0e9..3ee2d33 100644
Binary files a/docs/apiref/class_hierarchy_for_type_2.png and b/docs/apiref/class_hierarchy_for_type_2.png differ
diff --git a/docs/apiref/class_hierarchy_for_type_3.png b/docs/apiref/class_hierarchy_for_type_3.png
index 397d0e9..3ee2d33 100644
Binary files a/docs/apiref/class_hierarchy_for_type_3.png and b/docs/apiref/class_hierarchy_for_type_3.png differ
diff --git a/docs/apiref/class_hierarchy_for_type_4.png b/docs/apiref/class_hierarchy_for_type_4.png
index 397d0e9..3ee2d33 100644
Binary files a/docs/apiref/class_hierarchy_for_type_4.png and b/docs/apiref/class_hierarchy_for_type_4.png differ
diff --git a/docs/apiref/class_hierarchy_for_type_5.png b/docs/apiref/class_hierarchy_for_type_5.png
index 397d0e9..3ee2d33 100644
Binary files a/docs/apiref/class_hierarchy_for_type_5.png and b/docs/apiref/class_hierarchy_for_type_5.png differ
diff --git a/docs/apiref/class_hierarchy_for_type_6.png b/docs/apiref/class_hierarchy_for_type_6.png
index 397d0e9..3ee2d33 100644
Binary files a/docs/apiref/class_hierarchy_for_type_6.png and b/docs/apiref/class_hierarchy_for_type_6.png differ
diff --git a/docs/apiref/class_hierarchy_for_type_7.png b/docs/apiref/class_hierarchy_for_type_7.png
index 397d0e9..3ee2d33 100644
Binary files a/docs/apiref/class_hierarchy_for_type_7.png and b/docs/apiref/class_hierarchy_for_type_7.png differ
diff --git a/docs/apiref/class_hierarchy_for_type_8.png b/docs/apiref/class_hierarchy_for_type_8.png
index 397d0e9..3ee2d33 100644
Binary files a/docs/apiref/class_hierarchy_for_type_8.png and b/docs/apiref/class_hierarchy_for_type_8.png differ
diff --git a/docs/apiref/class_hierarchy_for_type_9.png b/docs/apiref/class_hierarchy_for_type_9.png
index 397d0e9..3ee2d33 100644
Binary files a/docs/apiref/class_hierarchy_for_type_9.png and b/docs/apiref/class_hierarchy_for_type_9.png differ
diff --git a/docs/apiref/class_hierarchy_for_which.png b/docs/apiref/class_hierarchy_for_which.png
index d02dc55..a87d5ed 100644
Binary files a/docs/apiref/class_hierarchy_for_which.png and b/docs/apiref/class_hierarchy_for_which.png differ
diff --git a/docs/apiref/class_hierarchy_for_which_2.png b/docs/apiref/class_hierarchy_for_which_2.png
index d02dc55..a87d5ed 100644
Binary files a/docs/apiref/class_hierarchy_for_which_2.png and b/docs/apiref/class_hierarchy_for_which_2.png differ
diff --git a/docs/apiref/class_hierarchy_for_which_3.png b/docs/apiref/class_hierarchy_for_which_3.png
index d02dc55..a87d5ed 100644
Binary files a/docs/apiref/class_hierarchy_for_which_3.png and b/docs/apiref/class_hierarchy_for_which_3.png differ
diff --git a/docs/apiref/class_hierarchy_for_which_4.png b/docs/apiref/class_hierarchy_for_which_4.png
index d02dc55..a87d5ed 100644
Binary files a/docs/apiref/class_hierarchy_for_which_4.png and b/docs/apiref/class_hierarchy_for_which_4.png differ
diff --git a/docs/apiref/help.html b/docs/apiref/help.html
index aac8e8f..6c71ae5 100644
--- a/docs/apiref/help.html
+++ b/docs/apiref/help.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -249,14 +249,14 @@ page was last updated. </p>
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:04 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:40 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/identifier-index.html b/docs/apiref/identifier-index.html
index c04d0a5..3dde235 100644
--- a/docs/apiref/identifier-index.html
+++ b/docs/apiref/identifier-index.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -103,46 +103,53 @@
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Conv-class.html#ABS">ABS</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Conv-class.html">Conv</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#allocate">allocate()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.Which-class.html#ALL">ALL</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.Which-class.html">Which</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#apply">apply()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Conv-class.html#ABS">ABS</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Conv-class.html">Conv</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV.RefineType-class.html#ALWAYS">ALWAYS</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.BV.RefineType-class.html">RefineType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#allocate">allocate()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#applyMatrix">applyMatrix()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ErrorType-class.html#ABSOLUTE">ABSOLUTE</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ErrorType-class.html">ErrorType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#appendOptionsPrefix">appendOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV.RefineType-class.html#ALWAYS">ALWAYS</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV.RefineType-class.html">RefineType</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#applyTranspose">applyTranspose()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ErrorType-class.html#ABSOLUTE">ABSOLUTE</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP.ErrorType-class.html">ErrorType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#appendOptionsPrefix">appendOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#appendOptionsPrefix">appendOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Type-class.html#ARNOLDI">ARNOLDI</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ErrorType-class.html#ABSOLUTE">ABSOLUTE</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP.ErrorType-class.html">ErrorType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#appendOptionsPrefix">appendOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#appendOptionsPrefix">appendOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Type-class.html#ARPACK">ARPACK</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.ErrorType-class.html#ABSOLUTE">ABSOLUTE</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD.ErrorType-class.html">ErrorType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#appendOptionsPrefix">appendOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN.CombineType-class.html#ADD">ADD</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.FN.CombineType-class.html">CombineType</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#appendOptionsPrefix">appendOptionsPrefix()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
 <td width="33%" class="link-index"> </td>
@@ -163,26 +170,32 @@
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ErrorType-class.html#BACKWARD">BACKWARD</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ErrorType-class.html">ErrorType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Type-class.html#BLOPEX">BLOPEX</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV.BlockType-class.html">BlockType</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#bv">bv</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 </tr>
 <tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ErrorType-class.html#BACKWARD">BACKWARD</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.ErrorType-class.html">ErrorType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Type-class.html#BLOPEX">BLOPEX</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#bv">bv</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
+</tr>
+<tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ErrorType-class.html#BACKWARD">BACKWARD</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP.ErrorType-class.html">ErrorType</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Type-class.html#BLZPACK">BLZPACK</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#bv">bv</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
+<td width="33%" class="link-index"> </td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Balance-class.html">Balance</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Scale-class.html#BOTH">BOTH</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Scale-class.html">Scale</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BVOrthogBlockType-class.html">BVOrthogBlockType</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
+<td width="33%" class="link-index"> </td>
 </tr>
 </table>
 </td></tr>
@@ -194,150 +207,166 @@
 <span class="index-where">(in <a href="slepc4py.SLEPc.DS.MatType-class.html">MatType</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#computeError">computeError()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html">ConvergedReason</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html#CONVERGED_USER">CONVERGED_USER</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#cancelMonitor">cancelMonitor()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#computeError">computeError()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN.ConvergedReason-class.html">ConvergedReason</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html">ConvergedReason</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#cancelMonitor">cancelMonitor()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.StateType-class.html#CONDENSED">CONDENSED</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.DS.StateType-class.html">StateType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html">ConvergedReason</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN.ConvergedReason-class.html">ConvergedReason</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#cancelMonitor">cancelMonitor()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.PowerShiftType-class.html#CONSTANT">CONSTANT</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS.PowerShiftType-class.html">PowerShiftType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html">ConvergedReason</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html">ConvergedReason</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#cancelMonitor">cancelMonitor()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV.Type-class.html#CONTIGUOUS">CONTIGUOUS</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.BV.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html">ConvergedReason</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html">ConvergedReason</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#cancelMonitor">cancelMonitor()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Conv-class.html">Conv</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.MatMode-class.html#COPY">COPY</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST.MatMode-class.html">MatMode</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html">ConvergedReason</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.Type-class.html#CAYLEY">CAYLEY</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.ST.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Conv-class.html">Conv</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#create">create()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.MatMode-class.html#COPY">COPY</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.ST.MatMode-class.html">MatMode</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV.OrthogType-class.html#CGS">CGS</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.BV.OrthogType-class.html">OrthogType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html#CONVERGED_FNORM_ABS">CONVERGED_FNORM_ABS</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#create">create()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html#CONVERGED_ITERATING">CONVERGED_ITERATING</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#copy">copy()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Basis-class.html#CHEBYSHEV1">CHEBYSHEV1</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Basis-class.html">Basis</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html#CONVERGED_FNORM_RELATIVE">CONVERGED_FNORM_RELATIVE</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN.ConvergedReason-class.html#CONVERGED_ITERATING">CONVERGED_ITERATING</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.MFN.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#create">create()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Basis-class.html#CHEBYSHEV2">CHEBYSHEV2</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Basis-class.html">Basis</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html#CONVERGED_ITERATING">CONVERGED_ITERATING</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#create">create()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV.BlockType-class.html#CHOL">CHOL</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV.BlockType-class.html">BlockType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html#CONVERGED_ITERATING">CONVERGED_ITERATING</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Basis-class.html#CHEBYSHEV2">CHEBYSHEV2</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Basis-class.html">Basis</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html#CONVERGED_ITERATING">CONVERGED_ITERATING</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Type-class.html#CISS">CISS</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html#CONVERGED_ITERATING">CONVERGED_ITERATING</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.FN-class.html">FN</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BVOrthogBlockType-class.html#CHOL">CHOL</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.BVOrthogBlockType-class.html">BVOrthogBlockType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN.ConvergedReason-class.html#CONVERGED_ITERATING">CONVERGED_ITERATING</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.Type-class.html#CISS">CISS</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN.ConvergedReason-class.html#CONVERGED_ITS">CONVERGED_ITS</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.MFN.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Type-class.html#CISS">CISS</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html#CONVERGED_ITERATING">CONVERGED_ITERATING</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN.Type-class.html#COMBINE">COMBINE</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.FN.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html#CONVERGED_TOL">CONVERGED_TOL</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.Type-class.html#CISS">CISS</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html#CONVERGED_ITERATING">CONVERGED_ITERATING</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN.CombineType-class.html">CombineType</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.FN-class.html">FN</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN.ConvergedReason-class.html#CONVERGED_TOL">CONVERGED_TOL</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.MFN.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN.Type-class.html#COMBINE">COMBINE</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.FN.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html#CONVERGED_ITERATING">CONVERGED_ITERATING</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc-module.html#COMM_NULL">COMM_NULL</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html#CONVERGED_TOL">CONVERGED_TOL</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.RG-class.html">RG</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc-module.html#COMM_NULL">COMM_NULL</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc-module.html#COMM_SELF">COMM_SELF</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html#CONVERGED_SNORM_RELATIVE">CONVERGED_SNORM_RELATIVE</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html#CONVERGED_TOL">CONVERGED_TOL</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc-module.html#COMM_SELF">COMM_SELF</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc-module.html#COMM_WORLD">COMM_WORLD</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html#CONVERGED_TOL">CONVERGED_TOL</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html#CONVERGED_TOL">CONVERGED_TOL</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc-module.html#COMM_WORLD">COMM_WORLD</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN.ConvergedReason-class.html#CONVERGED_TOL">CONVERGED_TOL</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.MFN.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN.CombineType-class.html#COMPOSE">COMPOSE</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.FN.CombineType-class.html">CombineType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html#CONVERGED_USER">CONVERGED_USER</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.Type-class.html#CROSS">CROSS</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#computeError">computeError()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html#CONVERGED_TOL">CONVERGED_TOL</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html#CONVERGED_USER">CONVERGED_USER</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.Type-class.html#CYCLIC">CYCLIC</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#computeError">computeError()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html#CONVERGED_TOL">CONVERGED_TOL</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html#CONVERGED_USER">CONVERGED_USER</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 <td width="33%" class="link-index"> </td>
 </tr>
 </table>
@@ -348,90 +377,96 @@
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.MatType-class.html#D">D</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.DS.MatType-class.html">MatType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG-class.html#destroy">destroy()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.RG-class.html">RG</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html#DIVERGED_BREAKDOWN">DIVERGED_BREAKDOWN</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#destroy">destroy()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html#DIVERGED_ITS">DIVERGED_ITS</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc-module.html#DECIDE">DECIDE</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#destroy">destroy()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html#DIVERGED_BREAKDOWN">DIVERGED_BREAKDOWN</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#destroy">destroy()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html#DIVERGED_ITS">DIVERGED_ITS</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc-module.html#DEFAULT">DEFAULT</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#destroy">destroy()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html#DIVERGED_FNORM_NAN">DIVERGED_FNORM_NAN</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc-module.html#DETERMINE">DETERMINE</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html#DIVERGED_LINEAR_SOLVE">DIVERGED_LINEAR_SOLVE</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.LanczosReorthogType-class.html#DELAYED">DELAYED</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS.LanczosReorthogType-class.html">LanczosReorthogType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc-module.html#DETERMINE">DETERMINE</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html#DIVERGED_FUNCTION_COUNT">DIVERGED_FUNCTION_COUNT</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Scale-class.html#DIAGONAL">DIAGONAL</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Scale-class.html">Scale</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html#DIVERGED_SYMMETRY_LOST">DIVERGED_SYMMETRY_LOST</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#destroy">destroy()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Scale-class.html#DIAGONAL">DIAGONAL</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Scale-class.html">Scale</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html#DIVERGED_ITS">DIVERGED_ITS</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html#DIVERGED_BREAKDOWN">DIVERGED_BREAKDOWN</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html#DIVERGED_SYMMETRY_LOST">DIVERGED_SYMMETRY_LOST</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#destroy">destroy()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.MatStructure-class.html#DIFFERENT">DIFFERENT</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST.MatStructure-class.html">MatStructure</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN.ConvergedReason-class.html#DIVERGED_ITS">DIVERGED_ITS</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN.ConvergedReason-class.html#DIVERGED_BREAKDOWN">DIVERGED_BREAKDOWN</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.MFN.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN.CombineType-class.html#DIVIDE">DIVIDE</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.FN.CombineType-class.html">CombineType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#destroy">destroy()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.MatStructure-class.html#DIFFERENT_NONZERO_PATTERN">DIFFERENT_NONZERO_PATTERN</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST.MatStructure-class.html">MatStructure</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html#DIVERGED_ITS">DIVERGED_ITS</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html#DIVERGED_BREAKDOWN">DIVERGED_BREAKDOWN</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#dot">dot()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN-class.html#destroy">destroy()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.FN-class.html">FN</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.MatStructure-class.html#DIFFERENT_NZ">DIFFERENT_NZ</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST.MatStructure-class.html">MatStructure</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html#DIVERGED_ITS">DIVERGED_ITS</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html#DIVERGED_BREAKDOWN">DIVERGED_BREAKDOWN</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#dotVec">dotVec()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#destroy">destroy()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html#DIVERGED_BREAKDOWN">DIVERGED_BREAKDOWN</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html#DIVERGED_LINEAR_SOLVE">DIVERGED_LINEAR_SOLVE</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html#DIVERGED_BREAKDOWN">DIVERGED_BREAKDOWN</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html">DS</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#destroy">destroy()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN.ConvergedReason-class.html#DIVERGED_BREAKDOWN">DIVERGED_BREAKDOWN</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.MFN.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html#DIVERGED_MAX_IT">DIVERGED_MAX_IT</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html#DIVERGED_ITS">DIVERGED_ITS</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#duplicate">duplicate()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#destroy">destroy()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html#DIVERGED_BREAKDOWN">DIVERGED_BREAKDOWN</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN.ConvergedReason-class.html#DIVERGED_ITS">DIVERGED_ITS</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.MFN.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG-class.html#destroy">destroy()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.RG-class.html">RG</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html#DIVERGED_ITS">DIVERGED_ITS</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html">DS</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
+<td width="33%" class="link-index"> </td>
 </tr>
 </table>
 </td></tr>
@@ -439,41 +474,57 @@
 <td valign="top">
 <table class="link-index" width="100%" border="1">
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Conv-class.html#EIG">EIG</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Conv-class.html">Conv</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ErrorType-class.html">ErrorType</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG.Type-class.html#ELLIPSE">ELLIPSE</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.RG.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#errorView">errorView()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN.Type-class.html#EXP">EXP</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.FN.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.RefineScheme-class.html#EXPLICIT">EXPLICIT</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.RefineScheme-class.html">RefineScheme</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Conv-class.html#EIG">EIG</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Conv-class.html">Conv</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ErrorType-class.html">ErrorType</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html">EPS</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#errorView">errorView()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN.Type-class.html#EXPOKIT">EXPOKIT</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.MFN.Type-class.html">Type</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ErrorType-class.html">ErrorType</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#errorView">errorView()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Extract-class.html">Extract</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ErrorType-class.html">ErrorType</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN-class.html#evaluateDerivative">evaluateDerivative()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.FN-class.html">FN</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Extraction-class.html">Extraction</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG.Type-class.html#ELLIPSE">ELLIPSE</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.RG.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.ErrorType-class.html">ErrorType</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ErrorType-class.html">ErrorType</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN-class.html#evaluateFunction">evaluateFunction()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.FN-class.html">FN</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#extraction">extraction</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html">EPS</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN-class.html#evaluateDerivative">evaluateDerivative()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.FN-class.html">FN</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.ErrorType-class.html">ErrorType</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN.Type-class.html#EXP">EXP</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.FN.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"> </td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ErrorType-class.html">ErrorType</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#errorView">errorView()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN-class.html#evaluateFunction">evaluateFunction()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.FN-class.html">FN</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.RefineScheme-class.html#EXPLICIT">EXPLICIT</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.RefineScheme-class.html">RefineScheme</a>)</span></td>
 <td width="33%" class="link-index"> </td>
 </tr>
 </table>
@@ -500,373 +551,390 @@
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getInterval">getInterval()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getRQCGReset">getRQCGReset()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getRG">getRG()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ProblemType-class.html#GENERAL">GENERAL</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP.ProblemType-class.html">ProblemType</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG-class.html#getIntervalEndpoints">getIntervalEndpoints()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.RG-class.html">RG</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN-class.html#getScale">getScale()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.FN-class.html">FN</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#getRIILagPreconditioner">getRIILagPreconditioner()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py-module.html#get_include">get_include()</a><br />
 <span class="index-where">(in <a href="slepc4py-module.html">slepc4py</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getInvariantSubspace">getInvariantSubspace()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getScale">getScale()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getRQCGReset">getRQCGReset()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getArnoldiDelayed">getArnoldiDelayed()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#getActiveColumns">getActiveColumns()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getIterationNumber">getIterationNumber()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#getShift">getShift()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN-class.html#getScale">getScale()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.FN-class.html">FN</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getBalance">getBalance()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getArnoldiDelayed">getArnoldiDelayed()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#getIterationNumber">getIterationNumber()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#getSingularTriplet">getSingularTriplet()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getScale">getScale()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getBasis">getBasis()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getBalance">getBalance()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#getIterationNumber">getIterationNumber()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getST">getST()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#getShift">getShift()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getBV">getBV()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getIterationNumber">getIterationNumber()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getBasis">getBasis()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getST">getST()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getIterationNumber">getIterationNumber()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#getSingularTriplet">getSingularTriplet()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#getBV">getBV()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getBV">getBV()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#getIterationNumber">getIterationNumber()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#getState">getState()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#getSizes">getSizes()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#getBV">getBV()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#getBV">getBV()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getKrylovSchurDetectZeros">getKrylovSchurDetectZeros()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getTarget">getTarget()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getST">getST()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getBV">getBV()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#getBV">getBV()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getKrylovSchurDimensions">getKrylovSchurDimensions()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getTolerances">getTolerances()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getST">getST()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getBV">getBV()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getKrylovSchurLocking">getKrylovSchurLocking()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#getState">getState()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#getBV">getBV()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getKrylovSchurLocking">getKrylovSchurLocking()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getKrylovSchurPartitions">getKrylovSchurPartitions()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getTarget">getTarget()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#getColumn">getColumn()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getKrylovSchurRestart">getKrylovSchurRestart()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getTolerances">getTolerances()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#getTolerances">getTolerances()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#getCompact">getCompact()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getKrylovSchurPartitions">getKrylovSchurPartitions()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getKrylovSchurSubcommInfo">getKrylovSchurSubcommInfo()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#getTolerances">getTolerances()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#getTolerances">getTolerances()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG-class.html#getComplement">getComplement()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.RG-class.html">RG</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getKrylovSchurRestart">getKrylovSchurRestart()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getKrylovSchurSubcommMats">getKrylovSchurSubcommMats()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getTolerances">getTolerances()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#getTolerances">getTolerances()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getConverged">getConverged()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getKrylovSchurSubcommInfo">getKrylovSchurSubcommInfo()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getKrylovSchurSubcommPairs">getKrylovSchurSubcommPairs()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#getTolerances">getTolerances()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getTolerances">getTolerances()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#getConverged">getConverged()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getKrylovSchurSubcommPairs">getKrylovSchurSubcommPairs()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getTrackAll">getTrackAll()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#getKSP">getKSP()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#getTolerances">getTolerances()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getConverged">getConverged()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#getKSP">getKSP()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#getTrackAll">getTrackAll()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getLanczosReorthogType">getLanczosReorthogType()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getTrackAll">getTrackAll()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#getConverged">getConverged()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#getLagPreconditioner">getLagPreconditioner()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#getLeadingDimension">getLeadingDimension()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#getTrackAll">getTrackAll()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getTrackAll">getTrackAll()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getConvergedReason">getConvergedReason()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getLanczosReorthogType">getLanczosReorthogType()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#getTransform">getTransform()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getLinearCompanionForm">getLinearCompanionForm()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getTrackAll">getTrackAll()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#getConvergedReason">getConvergedReason()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#getLeadingDimension">getLeadingDimension()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getTrueResidual">getTrueResidual()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getLinearEPS">getLinearEPS()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#getTransform">getTransform()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#getConvergedReason">getConvergedReason()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getLinearCompanionForm">getLinearCompanionForm()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getLinearExplicitMatrix">getLinearExplicitMatrix()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#getType">getType()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getTrueResidual">getTrueResidual()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getConvergedReason">getConvergedReason()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getLinearEPS">getLinearEPS()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#getType">getType()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#getMatMode">getMatMode()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#getType">getType()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#getConvergedReason">getConvergedReason()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getLinearExplicitMatrix">getLinearExplicitMatrix()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getType">getType()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#getMatrix">getMatrix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#getType">getType()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getConvergenceTest">getConvergenceTest()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#getMatMode">getMatMode()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN-class.html#getType">getType()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.FN-class.html">FN</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#getMethod">getMethod()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getType">getType()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getConvergenceTest">getConvergenceTest()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#getMatrix">getMatrix()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#getType">getType()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#getOperator">getOperator()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN-class.html#getType">getType()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.FN-class.html">FN</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#getCrossEPS">getCrossEPS()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#getMethod">getMethod()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#getType">getType()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#getOperator">getOperator()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#getType">getType()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#getCyclicEPS">getCyclicEPS()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#getOperator">getOperator()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getType">getType()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getOperators">getOperators()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#getType">getType()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#getCyclicExplicitMatrix">getCyclicExplicitMatrix()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#getOperator">getOperator()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG-class.html#getType">getType()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.RG-class.html">RG</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getOperators">getOperators()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getType">getType()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#getDimensions">getDimensions()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getOperators">getOperators()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#getType">getType()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#getOperators">getOperators()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG-class.html#getType">getType()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.RG-class.html">RG</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getDimensions">getDimensions()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getOperators">getOperators()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#getType">getType()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#getType">getType()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#getDimensions">getDimensions()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#getOperators">getOperators()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#getValue">getValue()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#getType">getType()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#getDimensions">getDimensions()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#getVectors">getVectors()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#getValue">getValue()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getDimensions">getDimensions()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.Sys-class.html#getVersion">getVersion()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.Sys-class.html">Sys</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.FN-class.html">FN</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#getVectors">getVectors()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#getDimensions">getDimensions()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.Sys-class.html#getVersionInfo">getVersionInfo()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.Sys-class.html#getVersion">getVersion()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.Sys-class.html">Sys</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getDS">getDS()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.FN-class.html">FN</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getWhichEigenpairs">getWhichEigenpairs()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.Sys-class.html#getVersionInfo">getVersionInfo()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.Sys-class.html">Sys</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getEigenpair">getEigenpair()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#getWhichEigenpairs">getWhichEigenpairs()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getWhichEigenpairs">getWhichEigenpairs()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#getEigenpair">getEigenpair()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.RG-class.html">RG</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#getWhichEigenpairs">getWhichEigenpairs()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getWhichEigenpairs">getWhichEigenpairs()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getEigenpair">getEigenpair()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getWhichEigenpairs">getWhichEigenpairs()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#getWhichSingularTriplets">getWhichSingularTriplets()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getEigenvalue">getEigenvalue()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.RG-class.html">RG</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.Type-class.html#GHEP">GHEP</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.DS.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#getWhichSingularTriplets">getWhichSingularTriplets()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getEigenvector">getEigenvector()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ProblemType-class.html#GHEP">GHEP</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ProblemType-class.html">ProblemType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#getOrthogonalization">getOrthogonalization()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.Type-class.html#GHEP">GHEP</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.DS.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG-class.html#getEllipseParameters">getEllipseParameters()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.RG-class.html">RG</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#getOptionsPrefix">getOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.Type-class.html#GHIEP">GHIEP</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.DS.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.lib-module.html#getPathArchSLEPc">getPathArchSLEPc()</a><br />
+<span class="index-where">(in <a href="slepc4py.lib-module.html">slepc4py.lib</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ProblemType-class.html#GHEP">GHEP</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ProblemType-class.html">ProblemType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getErrorEstimate">getErrorEstimate()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#getOrthogonalization">getOrthogonalization()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ProblemType-class.html#GHIEP">GHIEP</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ProblemType-class.html">ProblemType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getPowerShiftType">getPowerShiftType()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.Type-class.html#GHIEP">GHIEP</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.DS.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#getErrorEstimate">getErrorEstimate()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.lib-module.html#getPathArchSLEPc">getPathArchSLEPc()</a><br />
-<span class="index-where">(in <a href="slepc4py.lib-module.html">slepc4py.lib</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.Type-class.html#GNHEP">GNHEP</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.DS.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getProblemType">getProblemType()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ProblemType-class.html#GHIEP">GHIEP</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ProblemType-class.html">ProblemType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getErrorEstimate">getErrorEstimate()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getPowerShiftType">getPowerShiftType()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ProblemType-class.html#GNHEP">GNHEP</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ProblemType-class.html">ProblemType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getProblemType">getProblemType()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.Type-class.html#GNHEP">GNHEP</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.DS.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getExtraction">getExtraction()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getProblemType">getProblemType()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BVOrthogBlockType-class.html#GS">GS</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.BVOrthogBlockType-class.html">BVOrthogBlockType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getRefine">getRefine()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ProblemType-class.html#GNHEP">GNHEP</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ProblemType-class.html">ProblemType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#getExtraRow">getExtraRow()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getProblemType">getProblemType()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ProblemType-class.html#GYROSCOPIC">GYROSCOPIC</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.ProblemType-class.html">ProblemType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#getRefined">getRefined()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV.BlockType-class.html#GS">GS</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV.BlockType-class.html">BlockType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#getFN">getFN()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#getRefine">getRefine()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"> </td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#getRG">getRG()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ProblemType-class.html#GYROSCOPIC">GYROSCOPIC</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.ProblemType-class.html">ProblemType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#getImplicitTranspose">getImplicitTranspose()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#getRefined">getRefined()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#getRG">getRG()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
 <td width="33%" class="link-index"> </td>
 </tr>
 </table>
@@ -907,41 +975,55 @@
 <span class="index-where">(in <a href="slepc4py.SLEPc.BV.RefineType-class.html">RefineType</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.Type-class.html#INTERPOL">INTERPOL</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG-class.html#isTrivial">isTrivial()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.RG-class.html">RG</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html#ITERATING">ITERATING</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.lib-module.html#ImportSLEPc">ImportSLEPc()</a><br />
 <span class="index-where">(in <a href="slepc4py.lib-module.html">slepc4py.lib</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG.Type-class.html#INTERVAL">INTERVAL</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.RG.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html#ITERATING">ITERATING</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN.ConvergedReason-class.html#ITERATING">ITERATING</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.MFN.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py-module.html#init">init()</a><br />
 <span class="index-where">(in <a href="slepc4py-module.html">slepc4py</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#isGeneralized">isGeneralized()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN.Type-class.html#INVSQRT">INVSQRT</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.FN.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html#ITERATING">ITERATING</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.MatMode-class.html#INPLACE">INPLACE</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.ST.MatMode-class.html">MatMode</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#isHermitian">isHermitian()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#isGeneralized">isGeneralized()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html#ITERATING">ITERATING</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.StateType-class.html#INTERMEDIATE">INTERMEDIATE</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.DS.StateType-class.html">StateType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#isPositive">isPositive()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#insertVec">insertVec()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#isHermitian">isHermitian()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html#ITERATING">ITERATING</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 </tr>
+<tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#insertVecs">insertVecs()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#isPositive">isPositive()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.StateType-class.html#INTERMEDIATE">INTERMEDIATE</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.DS.StateType-class.html">StateType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG-class.html#isTrivial">isTrivial()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.RG-class.html">RG</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+</tr>
 </table>
 </td></tr>
 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="J">J</a></h2></td>
@@ -1062,15 +1144,32 @@
 <span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#max_it">max_it</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEPRefine-class.html#MULTIPLE">MULTIPLE</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEPRefine-class.html">PEPRefine</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.Refine-class.html#MULTIPLE">MULTIPLE</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.Refine-class.html">Refine</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.MatStructure-class.html">MatStructure</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#matMult">matMult()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.RefineScheme-class.html#MBE">MBE</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.RefineScheme-class.html">RefineScheme</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Refine-class.html#MULTIPLE">MULTIPLE</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Refine-class.html">Refine</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#matMultHermitianTranspose">matMultHermitianTranspose()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.RefineScheme-class.html#MBE">MBE</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.RefineScheme-class.html">RefineScheme</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN.CombineType-class.html#MULTIPLY">MULTIPLY</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.FN.CombineType-class.html">CombineType</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#matProject">matProject()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html">MFN</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
-<td width="33%" class="link-index"> </td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#multVec">multVec()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
 </tr>
 </table>
 </td></tr>
@@ -1080,30 +1179,46 @@
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.Type-class.html#NARNOLDI">NARNOLDI</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.Type-class.html#NHEP">NHEP</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.DS.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEPRefine-class.html#NONE">NONE</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEPRefine-class.html">PEPRefine</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.Type-class.html#NEP">NEP</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.DS.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ProblemType-class.html#NHEP">NHEP</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ProblemType-class.html">ProblemType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.Type-class.html#NLEIGS">NLEIGS</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Conv-class.html#NORM">NORM</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Conv-class.html">Conv</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html">NEP</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.Type-class.html#NEP">NEP</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.DS.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Balance-class.html#NONE">NONE</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Balance-class.html">Balance</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Conv-class.html#NORM">NORM</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Conv-class.html">Conv</a>)</span></td>
 </tr>
 <tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html">NEP</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.Refine-class.html#NONE">NONE</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.Refine-class.html">Refine</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Extract-class.html#NORM">NORM</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Extract-class.html">Extract</a>)</span></td>
+</tr>
+<tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV.RefineType-class.html#NEVER">NEVER</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.BV.RefineType-class.html">RefineType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Extract-class.html#NONE">NONE</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Extract-class.html">Extract</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#norm">norm()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.Type-class.html#NHEP">NHEP</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.DS.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Refine-class.html#NONE">NONE</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Refine-class.html">Refine</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#normColumn">normColumn()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ProblemType-class.html#NHEP">NHEP</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ProblemType-class.html">ProblemType</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Scale-class.html#NONE">NONE</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Scale-class.html">Scale</a>)</span></td>
 <td width="33%" class="link-index"> </td>
@@ -1118,10 +1233,15 @@
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Balance-class.html">Balance</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#orthogonalizeVec">orthogonalizeVec()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#orthogonalize">orthogonalize()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV.OrthogType-class.html">OrthogType</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
+<td width="33%" class="link-index"> </td>
 </tr>
-<tr><td class="link-index"> </td><td class="link-index"> </td><td class="link-index"> </td></tr>
 </table>
 </td></tr>
 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="P">P</a></h2></td>
@@ -1130,29 +1250,21 @@
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.LanczosReorthogType-class.html#PARTIAL">PARTIAL</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS.LanczosReorthogType-class.html">LanczosReorthogType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ProblemType-class.html#PGNHEP">PGNHEP</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ProblemType-class.html">ProblemType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.Type-class.html#PRECOND">PRECOND</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST.Type-class.html">Type</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.Type-class.html#PEP">PEP</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.DS.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN.Type-class.html#PHI">PHI</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.FN.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Type-class.html#PRIMME">PRIMME</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html">PEP</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.Type-class.html#PEP">PEP</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.DS.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG.Type-class.html#POLYGON">POLYGON</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.RG.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#problem_type">problem_type</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEPRefine-class.html">PEPRefine</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html">PEP</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Type-class.html#POWER">POWER</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Type-class.html">Type</a>)</span></td>
@@ -1167,6 +1279,13 @@
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ProblemType-class.html">ProblemType</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
 </tr>
+<tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ProblemType-class.html#PGNHEP">PGNHEP</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ProblemType-class.html">ProblemType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.Type-class.html#PRECOND">PRECOND</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.ST.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"> </td>
+</tr>
 </table>
 </td></tr>
 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="Q">Q</a></h2></td>
@@ -1188,38 +1307,70 @@
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN.Type-class.html#RATIONAL">RATIONAL</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.FN.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ErrorType-class.html#RELATIVE">RELATIVE</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.ErrorType-class.html">ErrorType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#reset">reset()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Conv-class.html#REL">REL</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Conv-class.html">Conv</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#reset">reset()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.StateType-class.html#RAW">RAW</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.DS.StateType-class.html">StateType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Conv-class.html#REL">REL</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Conv-class.html">Conv</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#reset">reset()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.PowerShiftType-class.html#RAYLEIGH">RAYLEIGH</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.PowerShiftType-class.html">PowerShiftType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ErrorType-class.html#RELATIVE">RELATIVE</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ErrorType-class.html">ErrorType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#reset">reset()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.Refine-class.html">Refine</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ErrorType-class.html#RELATIVE">RELATIVE</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.ErrorType-class.html">ErrorType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Extract-class.html#RESIDUAL">RESIDUAL</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Extract-class.html">Extract</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Refine-class.html">Refine</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ErrorType-class.html#RELATIVE">RELATIVE</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.ErrorType-class.html">ErrorType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#restoreColumn">restoreColumn()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Extraction-class.html#REFINED">REFINED</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Extraction-class.html">Extraction</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.ErrorType-class.html#RELATIVE">RELATIVE</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD.ErrorType-class.html">ErrorType</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG-class.html">RG</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.PowerShiftType-class.html#RAYLEIGH">RAYLEIGH</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.PowerShiftType-class.html">PowerShiftType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Extraction-class.html#REFINED_HARMONIC">REFINED_HARMONIC</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Extraction-class.html">Extraction</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#reset">reset()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.Type-class.html#RII">RII</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Extraction-class.html#REFINED">REFINED</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Extraction-class.html">Extraction</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.RefineScheme-class.html">RefineScheme</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#reset">reset()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG.Type-class.html#RING">RING</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.RG.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Extraction-class.html#REFINED_HARMONIC">REFINED_HARMONIC</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Extraction-class.html">Extraction</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.RefineScheme-class.html">RefineScheme</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#reset">reset()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Extraction-class.html#RITZ">RITZ</a><br />
@@ -1233,477 +1384,481 @@
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Type-class.html#RQCG">RQCG</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Type-class.html">Type</a>)</span></td>
 </tr>
-<tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ErrorType-class.html#RELATIVE">RELATIVE</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ErrorType-class.html">ErrorType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#reset">reset()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"> </td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ErrorType-class.html#RELATIVE">RELATIVE</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.ErrorType-class.html">ErrorType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#reset">reset()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
-<td width="33%" class="link-index"> </td>
-</tr>
 </table>
 </td></tr>
 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="S">S</a></h2></td>
 <td valign="top">
 <table class="link-index" width="100%" border="1">
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.MatStructure-class.html#SAME">SAME</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST.MatStructure-class.html">MatStructure</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Scale-class.html#SCALAR">SCALAR</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Scale-class.html">Scale</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setKrylovSchurRestart">setKrylovSchurRestart()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setType">setType()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#setTransform">setTransform()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Scale-class.html">Scale</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setKrylovSchurSubintervals">setKrylovSchurSubintervals()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#setTRLanczosOneSide">setTRLanczosOneSide()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.MatStructure-class.html#SAME_NONZERO_PATTERN">SAME_NONZERO_PATTERN</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST.MatStructure-class.html">MatStructure</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#scale">scale()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#setKSP">setKSP()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN-class.html#setType">setType()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.FN-class.html">FN</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.MatStructure-class.html#SAME_NZ">SAME_NZ</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST.MatStructure-class.html">MatStructure</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#setLagPreconditioner">setLagPreconditioner()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#setType">setType()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setTrueResidual">setTrueResidual()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Scale-class.html#SCALAR">SCALAR</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Scale-class.html">Scale</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#scaleColumn">scaleColumn()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#setLanczosOneSide">setLanczosOneSide()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#setType">setType()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#setType">setType()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Scale-class.html">Scale</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.RefineScheme-class.html#SCHUR">SCHUR</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.RefineScheme-class.html">RefineScheme</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setLanczosReorthogType">setLanczosReorthogType()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setType">setType()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#setType">setType()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.RefineScheme-class.html#SCHUR">SCHUR</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.RefineScheme-class.html">RefineScheme</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setLinearCompanionForm">setLinearCompanionForm()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setType">setType()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.LanczosReorthogType-class.html#SELECTIVE">SELECTIVE</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS.LanczosReorthogType-class.html">LanczosReorthogType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setLinearCompanionForm">setLinearCompanionForm()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setLinearEPS">setLinearEPS()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG-class.html#setType">setType()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.RG-class.html">RG</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN-class.html#setType">setType()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.FN-class.html">FN</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#setActiveColumns">setActiveColumns()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setLinearExplicitMatrix">setLinearExplicitMatrix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#setType">setType()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setArnoldiDelayed">setArnoldiDelayed()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setLinearEPS">setLinearEPS()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#setType">setType()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#setMatMode">setMatMode()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#setType">setType()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setBalance">setBalance()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setLinearExplicitMatrix">setLinearExplicitMatrix()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#setMatrix">setMatrix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setType">setType()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#setType">setType()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setBasis">setBasis()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#setMatMode">setMatMode()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#setMatStructure">setMatStructure()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setUp">setUp()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG-class.html#setType">setType()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.RG-class.html">RG</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setBV">setBV()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#setMatrix">setMatrix()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#setUp">setUp()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#setMethod">setMethod()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#setType">setType()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#setBV">setBV()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#setMatStructure">setMatStructure()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#setUp">setUp()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#setOperator">setOperator()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#setType">setType()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#setBV">setBV()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#setMethod">setMethod()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setUp">setUp()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#setOperator">setOperator()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setUp">setUp()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setBV">setBV()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#setOperator">setOperator()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setOperators">setOperators()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#setUp">setUp()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#setUp">setUp()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#setBV">setBV()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#setOperator">setOperator()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#setUp">setUp()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setOperators">setOperators()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#setUp">setUp()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#setCayleyAntishift">setCayleyAntishift()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setOperators">setOperators()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setWhichEigenpairs">setWhichEigenpairs()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#setOperators">setOperators()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setUp">setUp()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#setCompact">setCompact()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setOperators">setOperators()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#setWhichEigenpairs">setWhichEigenpairs()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#setUp">setUp()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG-class.html#setComplement">setComplement()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.RG-class.html">RG</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#setOperators">setOperators()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setWhichEigenpairs">setWhichEigenpairs()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#setUp">setUp()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setConvergenceTest">setConvergenceTest()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#setWhichSingularTriplets">setWhichSingularTriplets()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setWhichEigenpairs">setWhichEigenpairs()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setConvergenceTest">setConvergenceTest()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.MatMode-class.html#SHELL">SHELL</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST.MatMode-class.html">MatMode</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.FN-class.html">FN</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#setWhichEigenpairs">setWhichEigenpairs()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#setCrossEPS">setCrossEPS()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.Type-class.html#SHELL">SHELL</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setWhichEigenpairs">setWhichEigenpairs()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#setCyclicEPS">setCyclicEPS()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.FN-class.html">FN</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.Type-class.html#SHIFT">SHIFT</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#setWhichSingularTriplets">setWhichSingularTriplets()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#setCyclicExplicitMatrix">setCyclicExplicitMatrix()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#shift">shift</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.MatMode-class.html#SHELL">SHELL</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.ST.MatMode-class.html">MatMode</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setDeflationSpace">setDeflationSpace()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEPRefine-class.html#SIMPLE">SIMPLE</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEPRefine-class.html">PEPRefine</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.RG-class.html">RG</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.Type-class.html#SHELL">SHELL</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.ST.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#setDimensions">setDimensions()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.Type-class.html#SINVERT">SINVERT</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.Type-class.html#SHIFT">SHIFT</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.ST.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setDimensions">setDimensions()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.RG-class.html">RG</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc-module.html">SLEPc</a><br />
-<span class="index-where">(in <a href="slepc4py-module.html">slepc4py</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#shift">shift</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#setDimensions">setDimensions()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py-module.html">slepc4py</a></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#setOrthogonalization">setOrthogonalization()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.Refine-class.html#SIMPLE">SIMPLE</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.Refine-class.html">Refine</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#setDimensions">setDimensions()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#setOptionsPrefix">setOptionsPrefix()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.Type-class.html#SLP">SLP</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setPowerShiftType">setPowerShiftType()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Refine-class.html#SIMPLE">SIMPLE</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Refine-class.html">Refine</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setDimensions">setDimensions()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#setOrthogonalization">setOrthogonalization()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.Which-class.html#SMALLEST">SMALLEST</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD.Which-class.html">Which</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setProblemType">setProblemType()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.Type-class.html#SINVERT">SINVERT</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.ST.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#setDimensions">setDimensions()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setPowerShiftType">setPowerShiftType()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Which-class.html#SMALLEST_IMAGINARY">SMALLEST_IMAGINARY</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Which-class.html">Which</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setProblemType">setProblemType()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc-module.html">SLEPc</a><br />
+<span class="index-where">(in <a href="slepc4py-module.html">slepc4py</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setDS">setDS()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setProblemType">setProblemType()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.Which-class.html#SMALLEST_IMAGINARY">SMALLEST_IMAGINARY</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.Which-class.html">Which</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#setRandom">setRandom()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py-module.html">slepc4py</a></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG-class.html#setEllipseParameters">setEllipseParameters()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.RG-class.html">RG</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setProblemType">setProblemType()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Which-class.html#SMALLEST_IMAGINARY">SMALLEST_IMAGINARY</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Which-class.html">Which</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN-class.html#setRationalDenominator">setRationalDenominator()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.FN-class.html">FN</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.Type-class.html#SLP">SLP</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setExtraction">setExtraction()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN-class.html#setRationalDenominator">setRationalDenominator()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN-class.html#setRationalNumerator">setRationalNumerator()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.FN-class.html">FN</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Which-class.html#SMALLEST_MAGNITUDE">SMALLEST_MAGNITUDE</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Which-class.html">Which</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.Which-class.html#SMALLEST">SMALLEST</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD.Which-class.html">Which</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#setExtraRow">setExtraRow()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN-class.html#setRationalNumerator">setRationalNumerator()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.FN-class.html">FN</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.Which-class.html#SMALLEST_MAGNITUDE">SMALLEST_MAGNITUDE</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.Which-class.html">Which</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setRefine">setRefine()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Which-class.html#SMALLEST_IMAGINARY">SMALLEST_IMAGINARY</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Which-class.html">Which</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#setFN">setFN()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setRefine">setRefine()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Which-class.html#SMALLEST_MAGNITUDE">SMALLEST_MAGNITUDE</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Which-class.html">Which</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#setRefined">setRefined()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.Which-class.html#SMALLEST_IMAGINARY">SMALLEST_IMAGINARY</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.Which-class.html">Which</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#setFromOptions">setFromOptions()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#setRefined">setRefined()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Which-class.html#SMALLEST_REAL">SMALLEST_REAL</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Which-class.html">Which</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setRG">setRG()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Which-class.html#SMALLEST_IMAGINARY">SMALLEST_IMAGINARY</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Which-class.html">Which</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#setFromOptions">setFromOptions()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setRQCGReset">setRQCGReset()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.Which-class.html#SMALLEST_REAL">SMALLEST_REAL</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.Which-class.html">Which</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#setRG">setRG()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Which-class.html#SMALLEST_MAGNITUDE">SMALLEST_MAGNITUDE</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Which-class.html">Which</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setFromOptions">setFromOptions()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN-class.html#setScale">setScale()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.FN-class.html">FN</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Which-class.html#SMALLEST_REAL">SMALLEST_REAL</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Which-class.html">Which</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setRG">setRG()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.Which-class.html#SMALLEST_MAGNITUDE">SMALLEST_MAGNITUDE</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.Which-class.html">Which</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN-class.html#setFromOptions">setFromOptions()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.FN-class.html">FN</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setScale">setScale()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#solve">solve()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#setRIILagPreconditioner">setRIILagPreconditioner()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Which-class.html#SMALLEST_MAGNITUDE">SMALLEST_MAGNITUDE</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Which-class.html">Which</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#setFromOptions">setFromOptions()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#setShift">setShift()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#solve">solve()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setRQCGReset">setRQCGReset()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Which-class.html#SMALLEST_REAL">SMALLEST_REAL</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Which-class.html">Which</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#setFromOptions">setFromOptions()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#setSplitOperator">setSplitOperator()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#solve">solve()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN-class.html#setScale">setScale()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.FN-class.html">FN</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.Which-class.html#SMALLEST_REAL">SMALLEST_REAL</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.Which-class.html">Which</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setFromOptions">setFromOptions()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setST">setST()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#solve">solve()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setScale">setScale()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Which-class.html#SMALLEST_REAL">SMALLEST_REAL</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Which-class.html">Which</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG-class.html#setFromOptions">setFromOptions()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.RG-class.html">RG</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setST">setST()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#solve">solve()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#setShift">setShift()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#solve">solve()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#setFromOptions">setFromOptions()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#setState">setState()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN.Type-class.html#SQRT">SQRT</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.FN.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#setSizes">setSizes()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#solve">solve()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#setFromOptions">setFromOptions()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setTarget">setTarget()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#st">st</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#setSizesFromVec">setSizesFromVec()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#solve">solve()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#setFunction">setFunction()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setTolerances">setTolerances()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html">ST</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#setSplitOperator">setSplitOperator()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#solve">solve()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#setImplicitTranspose">setImplicitTranspose()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#setTolerances">setTolerances()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.StateType-class.html">StateType</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setST">setST()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#solve">solve()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setInitialSpace">setInitialSpace()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#setTolerances">setTolerances()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Type-class.html#STOAR">STOAR</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setST">setST()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN.Type-class.html#SQRT">SQRT</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.FN.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#setInitialSpace">setInitialSpace()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setTolerances">setTolerances()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.MatStructure-class.html#SUBSET">SUBSET</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST.MatStructure-class.html">MatStructure</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#setState">setState()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#st">st</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setInitialSpace">setInitialSpace()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#setTolerances">setTolerances()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.MatStructure-class.html#SUBSET_NONZERO_PATTERN">SUBSET_NONZERO_PATTERN</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST.MatStructure-class.html">MatStructure</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setTarget">setTarget()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html">ST</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#setInitialSpace">setInitialSpace()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setTrackAll">setTrackAll()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setTolerances">setTolerances()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.MatStructure-class.html#SUBSET_NZ">SUBSET_NZ</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST.MatStructure-class.html">MatStructure</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.StateType-class.html">StateType</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setInterval">setInterval()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#setTrackAll">setTrackAll()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Type-class.html#SUBSPACE">SUBSPACE</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#setTolerances">setTolerances()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Type-class.html#STOAR">STOAR</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG-class.html#setIntervalEndpoints">setIntervalEndpoints()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.RG-class.html">RG</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setTrackAll">setTrackAll()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.Type-class.html#SVD">SVD</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.DS.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#setTolerances">setTolerances()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Extract-class.html#STRUCTURED">STRUCTURED</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Extract-class.html">Extract</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#setJacobian">setJacobian()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#setTransform">setTransform()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html">SVD</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setTolerances">setTolerances()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Type-class.html#SUBSPACE">SUBSPACE</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setKrylovSchurDetectZeros">setKrylovSchurDetectZeros()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#setTRLanczosOneSide">setTRLanczosOneSide()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#setTolerances">setTolerances()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV.Type-class.html#SVEC">SVEC</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.BV.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.Type-class.html#SVD">SVD</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.DS.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setKrylovSchurDimensions">setKrylovSchurDimensions()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setTrueResidual">setTrueResidual()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setTrackAll">setTrackAll()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.Sys-class.html">Sys</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html">SVD</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setKrylovSchurLocking">setKrylovSchurLocking()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#setType">setType()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
-<td width="33%" class="link-index"> </td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#setTrackAll">setTrackAll()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV.Type-class.html#SVEC">SVEC</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#setKrylovSchurPartitions">setKrylovSchurPartitions()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#setType">setType()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
-<td width="33%" class="link-index"> </td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#setTrackAll">setTrackAll()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.Sys-class.html">Sys</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
 </tr>
 </table>
 </td></tr>
@@ -1800,8 +1955,8 @@
 <span class="index-where">(in <a href="slepc4py.SLEPc.DS.MatType-class.html">MatType</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Balance-class.html#USER">USER</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Balance-class.html">Balance</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Which-class.html#USER">USER</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Which-class.html">Which</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.Which-class.html#USER">USER</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.Which-class.html">Which</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#updateExtraRow">updateExtraRow()</a><br />
@@ -1811,6 +1966,14 @@
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Conv-class.html#USER">USER</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Conv-class.html">Conv</a>)</span></td>
 </tr>
+<tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#updateKrylovSchurSubcommMats">updateKrylovSchurSubcommMats()</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Which-class.html#USER">USER</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Which-class.html">Which</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Which-class.html#USER">USER</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Which-class.html">Which</a>)</span></td>
+</tr>
 </table>
 </td></tr>
 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="V">V</a></h2></td>
@@ -1920,169 +2083,178 @@
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc-module.html#__arch__">__arch__</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BVOrthogBlockType-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.BVOrthogBlockType-class.html">BVOrthogBlockType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Basis-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Basis-class.html">Basis</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.MatType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.DS.MatType-class.html">MatType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.Which-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.Which-class.html">Which</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py-module.html#__credits__">__credits__</a><br />
 <span class="index-where">(in <a href="slepc4py-module.html">slepc4py</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.MatType-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.DS.MatType-class.html">MatType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Conv-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Conv-class.html">Conv</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.StateType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.DS.StateType-class.html">StateType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Basis-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Basis-class.html">Basis</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.BV-class.html">BV</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.StateType-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.DS.StateType-class.html">StateType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.Type-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.DS.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Conv-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Conv-class.html">Conv</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.DS-class.html">DS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.DS.Type-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.DS.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ErrorType-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.ErrorType-class.html">ErrorType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Balance-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Balance-class.html">Balance</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.EPS-class.html">EPS</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Balance-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Balance-class.html">Balance</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ProblemType-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.ProblemType-class.html">ProblemType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Conv-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Conv-class.html">Conv</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ErrorType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.ErrorType-class.html">ErrorType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.FN-class.html">FN</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Conv-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Conv-class.html">Conv</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Scale-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Scale-class.html">Scale</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Extract-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Extract-class.html">Extract</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.MFN-class.html">MFN</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Type-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ErrorType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ErrorType-class.html">ErrorType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.ProblemType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.ProblemType-class.html">ProblemType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP-class.html">NEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ErrorType-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ErrorType-class.html">ErrorType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Which-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Which-class.html">Which</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Extraction-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Extraction-class.html">Extraction</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Refine-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Refine-class.html">Refine</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.PEP-class.html">PEP</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Extraction-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Extraction-class.html">Extraction</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEPRefine-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.PEPRefine-class.html">PEPRefine</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.LanczosReorthogType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.LanczosReorthogType-class.html">LanczosReorthogType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.RefineScheme-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.RefineScheme-class.html">RefineScheme</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.RG-class.html">RG</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.LanczosReorthogType-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.LanczosReorthogType-class.html">LanczosReorthogType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG.Type-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.RG.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.PowerShiftType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.PowerShiftType-class.html">PowerShiftType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Scale-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Scale-class.html">Scale</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.ST-class.html">ST</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.PowerShiftType-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.PowerShiftType-class.html">PowerShiftType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.MatMode-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST.MatMode-class.html">MatMode</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ProblemType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ProblemType-class.html">ProblemType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Type-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.SVD-class.html">SVD</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.ProblemType-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.ProblemType-class.html">ProblemType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.MatStructure-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST.MatStructure-class.html">MatStructure</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Type-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.PEP.Which-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.PEP.Which-class.html">Which</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.Sys-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.Sys-class.html">Sys</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Type-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.Type-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.ST.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Which-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Which-class.html">Which</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.RG.Type-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.RG.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc._p_mem-class.html#__new__">__new__()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc._p_mem-class.html" onclick="show_private();">_p_mem</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.EPS.Which-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.EPS.Which-class.html">Which</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN.CombineType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.FN.CombineType-class.html">CombineType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.MatMode-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.ST.MatMode-class.html">MatMode</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc-module.html#__package__">__package__</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.FN.Type-class.html#__qualname__">__qualname__</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.FN.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.ErrorType-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD.ErrorType-class.html">ErrorType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.ST.Type-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.ST.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py-module.html#__package__">__package__</a><br />
 <span class="index-where">(in <a href="slepc4py-module.html">slepc4py</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN.ConvergedReason-class.html#__qualname__">__qualname__</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.MFN.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.Type-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.lib-module.html#__package__">__package__</a><br />
 <span class="index-where">(in <a href="slepc4py.lib-module.html">slepc4py.lib</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.MFN.Type-class.html#__qualname__">__qualname__</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.MFN.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.Which-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.SVD.Which-class.html">Which</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.ErrorType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD.ErrorType-class.html">ErrorType</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc-module.html#__pyx_capi__">__pyx_capi__</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html#__qualname__">__qualname__</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP.ConvergedReason-class.html">ConvergedReason</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc-module.html#_finalize">_finalize()</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.Type-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV.OrthogType-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.BV.OrthogType-class.html">OrthogType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV.BlockType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV.BlockType-class.html">BlockType</a>)</span></td>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.ErrorType-class.html#__qualname__">__qualname__</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.NEP.ErrorType-class.html">ErrorType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc-module.html#_initialize">_initialize()</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.SVD.Which-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.SVD.Which-class.html">Which</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV.OrthogType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.BV.OrthogType-class.html">OrthogType</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.Refine-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.Refine-class.html">Refine</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc-module.html#_finalize">_finalize()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV.RefineType-class.html#__qualname__">__qualname__</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.BV.RefineType-class.html">RefineType</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.Type-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc._p_mem-class.html">_p_mem</a><br />
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.RefineScheme-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.RefineScheme-class.html">RefineScheme</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc-module.html#_initialize">_initialize()</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="slepc4py.SLEPc.BV.Type-class.html#__qualname__">__qualname__</a><br />
 <span class="index-where">(in <a href="slepc4py.SLEPc.BV.Type-class.html">Type</a>)</span></td>
-<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.Which-class.html#__qualname__">__qualname__</a><br />
-<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.Which-class.html">Which</a>)</span></td>
-<td width="33%" class="link-index"> </td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc.NEP.Type-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc.NEP.Type-class.html">Type</a>)</span></td>
+<td width="33%" class="link-index"><a href="slepc4py.SLEPc._p_mem-class.html">_p_mem</a><br />
+<span class="index-where">(in <a href="slepc4py.SLEPc-module.html">slepc4py.SLEPc</a>)</span></td>
 </tr>
 </table>
 </td></tr>
@@ -2111,14 +2283,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:04 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:40 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/module-tree.html b/docs/apiref/module-tree.html
index beacf0f..5f57dde 100644
--- a/docs/apiref/module-tree.html
+++ b/docs/apiref/module-tree.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -91,14 +91,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:04 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:40 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/redirect.html b/docs/apiref/redirect.html
index 51b8b35..60341ba 100644
--- a/docs/apiref/redirect.html
+++ b/docs/apiref/redirect.html
@@ -7,7 +7,7 @@
 <body>
 <script type="text/javascript">
 <!--
-var pages = ["slepc4py.SLEPc.EPS.LanczosReorthogType-c", "slepc4py.SLEPc.EPS.ConvergedReason-c", "slepc4py.SLEPc.MFN.ConvergedReason-c", "slepc4py.SLEPc.NEP.ConvergedReason-c", "slepc4py.SLEPc.PEP.ConvergedReason-c", "slepc4py.SLEPc.SVD.ConvergedReason-c", "slepc4py.SLEPc.EPS.PowerShiftType-c", "slepc4py.SLEPc.BVOrthogBlockType-c", "slepc4py.SLEPc.EPS.ProblemType-c", "slepc4py.SLEPc.PEP.ProblemType-c", "slepc4py.SLEPc.ST.MatStructure-c", "slepc4py.SLEPc.EPS.Extraction-c", "slepc4py.SLEPc [...]
+var pages = ["slepc4py.SLEPc.EPS.LanczosReorthogType-c", "slepc4py.SLEPc.EPS.ConvergedReason-c", "slepc4py.SLEPc.MFN.ConvergedReason-c", "slepc4py.SLEPc.NEP.ConvergedReason-c", "slepc4py.SLEPc.PEP.ConvergedReason-c", "slepc4py.SLEPc.SVD.ConvergedReason-c", "slepc4py.SLEPc.EPS.PowerShiftType-c", "slepc4py.SLEPc.NEP.RefineScheme-c", "slepc4py.SLEPc.PEP.RefineScheme-c", "slepc4py.SLEPc.EPS.ProblemType-c", "slepc4py.SLEPc.PEP.ProblemType-c", "slepc4py.SLEPc.EPS.Extraction-c", "slepc4py.SLEPc [...]
 var dottedName = get_anchor();
 if (dottedName) {
     var target = redirect_url(dottedName);
diff --git a/docs/apiref/slepc4py-module.html b/docs/apiref/slepc4py-module.html
index 46d89b9..23acf63 100644
--- a/docs/apiref/slepc4py-module.html
+++ b/docs/apiref/slepc4py-module.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -70,7 +70,7 @@ a large, sparse, rectangular matrix.</p>
 
 <hr />
 <div class="fields">      <p><strong>Version:</strong>
-        3.6.0
+        3.7.0
       </p>
       <p><strong>Author:</strong>
         Lisandro Dalcin
@@ -284,14 +284,14 @@ Extension('extension_name', ...
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:04 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:40 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc-module.html b/docs/apiref/slepc4py.SLEPc-module.html
index 3c84ec8..7ceff60 100644
--- a/docs/apiref/slepc4py.SLEPc-module.html
+++ b/docs/apiref/slepc4py.SLEPc-module.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -92,14 +92,6 @@ Scalable Library for Eigenvalue Problem Computations.
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a href="slepc4py.SLEPc.BVOrthogBlockType-class.html" class="summary-name">BVOrthogBlockType</a><br />
-      BV block-orthogonalization types
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
         <a href="slepc4py.SLEPc.DS-class.html" class="summary-name">DS</a><br />
       DS
     </td>
@@ -148,14 +140,6 @@ Scalable Library for Eigenvalue Problem Computations.
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a href="slepc4py.SLEPc.PEPRefine-class.html" class="summary-name">PEPRefine</a><br />
-      PEP refinement strategy
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
         <a href="slepc4py.SLEPc.RG-class.html" class="summary-name">RG</a><br />
       RG
     </td>
@@ -262,21 +246,21 @@ Scalable Library for Eigenvalue Problem Computations.
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="COMM_NULL"></a><span class="summary-name">COMM_NULL</span> = <code title="<petsc4py.PETSc.Comm object at 0x15eac50>"><petsc4py.PETSc.Comm object at 0x15eac50></code>
+        <a name="COMM_NULL"></a><span class="summary-name">COMM_NULL</span> = <code title="<petsc4py.PETSc.Comm object at 0x7f795a9b56d0>"><petsc4py.PETSc.Comm object at 0x7f795a9b56d0></code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="COMM_SELF"></a><span class="summary-name">COMM_SELF</span> = <code title="<petsc4py.PETSc.Comm object at 0x15eac90>"><petsc4py.PETSc.Comm object at 0x15eac90></code>
+        <a name="COMM_SELF"></a><span class="summary-name">COMM_SELF</span> = <code title="<petsc4py.PETSc.Comm object at 0x7f795a9b5710>"><petsc4py.PETSc.Comm object at 0x7f795a9b5710></code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="COMM_WORLD"></a><span class="summary-name">COMM_WORLD</span> = <code title="<petsc4py.PETSc.Comm object at 0x15eacd0>"><petsc4py.PETSc.Comm object at 0x15eacd0></code>
+        <a name="COMM_WORLD"></a><span class="summary-name">COMM_WORLD</span> = <code title="<petsc4py.PETSc.Comm object at 0x7f795a9b5750>"><petsc4py.PETSc.Comm object at 0x7f795a9b5750></code>
     </td>
   </tr>
 <tr>
@@ -318,14 +302,14 @@ Scalable Library for Eigenvalue Problem Computations.
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a href="slepc4py.SLEPc-module.html#__pyx_capi__" class="summary-name">__pyx_capi__</a> = <code title="{'PySlepcBV_Get': <capsule object "BV (PyObject *)" at 0x1602690>,
- 'PySlepcBV_New': <capsule object "PyObject *(BV)" at 0x1602660>,
- 'PySlepcDS_Get': <capsule object "DS (PyObject *)" at 0x16026f0>,
- 'PySlepcDS_New': <capsule object "PyObject *(DS)" at 0x16026c0>,
- 'PySlepcEPS_Get': <capsule object "EPS (PyObject *)" at 0x1602810>,
- 'PySlepcEPS_New': <capsule object "PyObject *(EPS)" at 0x16027e0>,
- 'PySlepcFN_Get': <capsule object "FN (PyObject *)" at 0x1602750>,
- 'PySlepcFN_New': <capsule object "PyObject *(FN)" at 0x1602720>,
+        <a href="slepc4py.SLEPc-module.html#__pyx_capi__" class="summary-name">__pyx_capi__</a> = <code title="{'PySlepcBV_Get': <capsule object "BV (PyObject *)" at 0x7f795a9ced50>\
+,
+ 'PySlepcBV_New': <capsule object "PyObject *(BV)" at 0x7f795a9ced20>,
+ 'PySlepcDS_Get': <capsule object "DS (PyObject *)" at 0x7f795a9cedb0>\
+,
+ 'PySlepcDS_New': <capsule object "PyObject *(DS)" at 0x7f795a9ced80>,
+ 'PySlepcEPS_Get': <capsule object "EPS (PyObject *)" at 0x7f795a9ceed\
+0>,
 ..."><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">PySlepcBV_Get</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "BV (PyObject<code class="variable-ellipsis">...</code></code>
     </td>
   </tr>
@@ -360,14 +344,14 @@ Scalable Library for Eigenvalue Problem Computations.
   <dl class="fields">
     <dt>Value:</dt>
       <dd><table><tr><td><pre class="variable">
-<code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">PySlepcBV_Get</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "BV (PyObject *)" at 0x1602690><code class="variable-op">,</code>
- <code class="variable-quote">'</code><code class="variable-string">PySlepcBV_New</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "PyObject *(BV)" at 0x1602660><code class="variable-op">,</code>
- <code class="variable-quote">'</code><code class="variable-string">PySlepcDS_Get</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "DS (PyObject *)" at 0x16026f0><code class="variable-op">,</code>
- <code class="variable-quote">'</code><code class="variable-string">PySlepcDS_New</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "PyObject *(DS)" at 0x16026c0><code class="variable-op">,</code>
- <code class="variable-quote">'</code><code class="variable-string">PySlepcEPS_Get</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "EPS (PyObject *)" at 0x1602810><code class="variable-op">,</code>
- <code class="variable-quote">'</code><code class="variable-string">PySlepcEPS_New</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "PyObject *(EPS)" at 0x16027e0><code class="variable-op">,</code>
- <code class="variable-quote">'</code><code class="variable-string">PySlepcFN_Get</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "FN (PyObject *)" at 0x1602750><code class="variable-op">,</code>
- <code class="variable-quote">'</code><code class="variable-string">PySlepcFN_New</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "PyObject *(FN)" at 0x1602720><code class="variable-op">,</code>
+<code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">PySlepcBV_Get</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "BV (PyObject *)" at 0x7f795a9ced50><code class="variable-op"></code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">PySlepcBV_New</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "PyObject *(BV)" at 0x7f795a9ced20><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">PySlepcDS_Get</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "DS (PyObject *)" at 0x7f795a9cedb0><code class="variable-op"></code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+<code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">PySlepcDS_New</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "PyObject *(DS)" at 0x7f795a9ced80><code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">PySlepcEPS_Get</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "EPS (PyObject *)" at 0x7f795a9ceed<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+0><code class="variable-op">,</code>
 <code class="variable-ellipsis">...</code>
 </pre></td></tr></table>
 </dd>
@@ -399,14 +383,14 @@ Scalable Library for Eigenvalue Problem Computations.
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:04 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:40 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.BV-class.html b/docs/apiref/slepc4py.SLEPc.BV-class.html
index 6c8cf4b..847a0c3 100644
--- a/docs/apiref/slepc4py.SLEPc.BV-class.html
+++ b/docs/apiref/slepc4py.SLEPc.BV-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class BV</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_bv" name="class_hierarchy_for_bv">
-<area shape="rect" id="node1" href="javascript:void(0);" title="petsc4py.PETSc.Object" alt="" coords="5,6,168,31"/>
-<area shape="rect" id="node2" href="slepc4py.SLEPc.BV-class.html" title="BV" alt="" coords="67,62,107,87"/>
+<area shape="rect" id="node1" href="javascript:void(0);" title="petsc4py.PETSc.Object" alt="" coords="5,5,168,31"/>
+<area shape="rect" id="node2" href="slepc4py.SLEPc.BV-class.html" title="BV" alt="" coords="67,60,107,85"/>
 </map>
   <img src="class_hierarchy_for_bv.png" alt='' usemap="#class_hierarchy_for_bv" ismap="ismap" class="graph-without-title" />
 </center>
@@ -94,7 +94,7 @@ BV
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a href="slepc4py.SLEPc.BVOrthogBlockType-class.html" class="summary-name">BlockType</a><br />
+        <a href="slepc4py.SLEPc.BV.BlockType-class.html" class="summary-name">BlockType</a><br />
       BV block-orthogonalization types
     </td>
   </tr>
@@ -102,7 +102,7 @@ BV
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a href="slepc4py.SLEPc.BVOrthogBlockType-class.html" class="summary-name">OrthogBlockType</a><br />
+        <a href="slepc4py.SLEPc.BV.BlockType-class.html" class="summary-name">OrthogBlockType</a><br />
       BV block-orthogonalization types
     </td>
   </tr>
@@ -199,6 +199,23 @@ form.</td>
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="copy"></a><span class="summary-sig-name">copy</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">BV result</span>=<span class="summary-sig-default">None</span>)</span></td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
           <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#create" class="summary-sig-name">create</a>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">comm</span>=<span class="summary-sig-default">None</span>)</span><br />
       Creates the BV object.</td>
@@ -234,6 +251,96 @@ form.</td>
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#dot" class="summary-sig-name">dot</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">BV Y</span>)</span><br />
+      M = Y^H*X (m_ij = y_i^H x_j) or M = Y^H*B*X</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#dotVec" class="summary-sig-name">dotVec</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Vec v</span>)</span><br />
+      Computes multiple dot products of a vector against all the column
+vectors of a BV.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="duplicate"></a><span class="summary-sig-name">duplicate</span>(<span class="summary-sig-arg">self</span>)</span><br />
+      Duplicate the BV object with the same type and dimensions.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#getActiveColumns" class="summary-sig-name">getActiveColumns</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Returns the current active dimensions.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#getColumn" class="summary-sig-name">getColumn</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">int j</span>)</span><br />
+      Returns a Vec object that contains the entries of the requested column
+of the basis vectors object.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
           <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#getMatrix" class="summary-sig-name">getMatrix</a>(<span class="summary-sig-arg">self</span>)</span><br />
       Retrieves the matrix representation of the inner product.</td>
           <td align="right" valign="top">
@@ -286,6 +393,23 @@ database.</td>
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#getSizes" class="summary-sig-name">getSizes</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Returns the local and global sizes, and the number of columns.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
           <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#getType" class="summary-sig-name">getType</a>(<span class="summary-sig-arg">self</span>)</span><br />
       Gets the BV type of this object.</td>
           <td align="right" valign="top">
@@ -303,9 +427,10 @@ database.</td>
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#orthogonalizeVec" class="summary-sig-name">orthogonalizeVec</a>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">Vec v</span>)</span><br />
-      Orthogonalize a vector with respect to a set of vectors.</td>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#insertVec" class="summary-sig-name">insertVec</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">int j</span>,
+        <span class="summary-sig-arg">Vec w</span>)</span><br />
+      Insert a vector into the specified column.</td>
           <td align="right" valign="top">
             
             
@@ -321,8 +446,11 @@ database.</td>
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#setFromOptions" class="summary-sig-name">setFromOptions</a>(<span class="summary-sig-arg">self</span>)</span><br />
-      Sets BV options from the options database.</td>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#insertVecs" class="summary-sig-name">insertVecs</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">int s</span>,
+        <span class="summary-sig-arg">W</span>,
+        <span class="summary-sig-arg">bool orth</span>)</span><br />
+      Insert a set of vectors into specified columns.</td>
           <td align="right" valign="top">
             
             
@@ -338,10 +466,10 @@ database.</td>
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#setMatrix" class="summary-sig-name">setMatrix</a>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">Mat mat</span>,
-        <span class="summary-sig-arg">bool indef</span>)</span><br />
-      Sets the bilinear form to be used for inner products.</td>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#matMult" class="summary-sig-name">matMult</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Mat A</span>,
+        <span class="summary-sig-arg">BV Y</span>=<span class="summary-sig-default">None</span>)</span><br />
+      Computes the matrix-vector product for each column, Y = A*V.</td>
           <td align="right" valign="top">
             
             
@@ -357,10 +485,11 @@ database.</td>
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#setOptionsPrefix" class="summary-sig-name">setOptionsPrefix</a>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">prefix</span>)</span><br />
-      Sets the prefix used for searching for all BV options in the
-database.</td>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#matMultHermitianTranspose" class="summary-sig-name">matMultHermitianTranspose</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Mat A</span>,
+        <span class="summary-sig-arg">BV Y</span>=<span class="summary-sig-default">None</span>)</span><br />
+      Computes the matrix-vector product with the conjugate transpose of a
+matrix for each column, Y=A^H*V.</td>
           <td align="right" valign="top">
             
             
@@ -376,15 +505,10 @@ database.</td>
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#setOrthogonalization" class="summary-sig-name">setOrthogonalization</a>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">type</span>=<span class="summary-sig-default">None</span>,
-        <span class="summary-sig-arg">refine</span>=<span class="summary-sig-default">None</span>,
-        <span class="summary-sig-arg">eta</span>=<span class="summary-sig-default">None</span>,
-        <span class="summary-sig-arg">block</span>=<span class="summary-sig-default">None</span>)</span><br />
-      Specifies the method used for the orthogonalization of vectors
-(classical or modified Gram-Schmidt with or without refinement),
-and for the block-orthogonalization (simultaneous orthogonalization
-of a set of vectors).</td>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#matProject" class="summary-sig-name">matProject</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Mat A</span>,
+        <span class="summary-sig-arg">BV Y</span>)</span><br />
+      Computes the projection of a matrix onto a subspace.</td>
           <td align="right" valign="top">
             
             
@@ -400,9 +524,12 @@ of a set of vectors).</td>
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#setType" class="summary-sig-name">setType</a>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">bv_type</span>)</span><br />
-      Selects the type for the BV object.</td>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#multVec" class="summary-sig-name">multVec</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">alpha</span>,
+        <span class="summary-sig-arg">beta</span>,
+        <span class="summary-sig-arg">Vec y</span>,
+        <span class="summary-sig-arg">q</span>)</span><br />
+      Computes y = beta*y + alpha*X*q.</td>
           <td align="right" valign="top">
             
             
@@ -418,9 +545,9 @@ of a set of vectors).</td>
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#view" class="summary-sig-name">view</a>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">Viewer viewer</span>=<span class="summary-sig-default">None</span>)</span><br />
-      Prints the BV data structure.</td>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#norm" class="summary-sig-name">norm</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">norm_type</span>=<span class="summary-sig-default">None</span>)</span><br />
+      Computes the matrix norm of the BV.</td>
           <td align="right" valign="top">
             
             
@@ -430,372 +557,1336 @@ of a set of vectors).</td>
       
     </td>
   </tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>petsc4py.PETSc.Object</code></b>:
-      <code>__copy__</code>,
-      <code>__deepcopy__</code>,
-      <code>__eq__</code>,
-      <code>__ge__</code>,
-      <code>__gt__</code>,
-      <code>__le__</code>,
-      <code>__lt__</code>,
-      <code>__ne__</code>,
-      <code>__nonzero__</code>,
-      <code>compose</code>,
-      <code>decRef</code>,
-      <code>getAttr</code>,
-      <code>getClassId</code>,
-      <code>getClassName</code>,
-      <code>getComm</code>,
-      <code>getDict</code>,
-      <code>getName</code>,
-      <code>getRefCount</code>,
-      <code>getTabLevel</code>,
-      <code>incRef</code>,
-      <code>incrementTabLevel</code>,
-      <code>query</code>,
-      <code>setAttr</code>,
-      <code>setName</code>,
-      <code>setTabLevel</code>,
-      <code>stateIncrease</code>
-      </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#normColumn" class="summary-sig-name">normColumn</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">int j</span>,
+        <span class="summary-sig-arg">norm_type</span>=<span class="summary-sig-default">None</span>)</span><br />
+      Computes the matrix norm of the BV.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
     </td>
   </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>petsc4py.PETSc.Object</code></b>:
-      <code>classid</code>,
-      <code>comm</code>,
-      <code>fortran</code>,
-      <code>handle</code>,
-      <code>klass</code>,
-      <code>name</code>,
-      <code>prefix</code>,
-      <code>refcount</code>,
-      <code>type</code>
-      </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#orthogonalize" class="summary-sig-name">orthogonalize</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Mat R</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">**kargs</span>)</span><br />
+      Orthogonalize all columns (except leading ones),
+that is, compute the QR decomposition.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
     </td>
   </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#orthogonalizeVec" class="summary-sig-name">orthogonalizeVec</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Vec v</span>)</span><br />
+      Orthogonalize a vector with respect to a set of vectors.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#restoreColumn" class="summary-sig-name">restoreColumn</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">int j</span>,
+        <span class="summary-sig-arg">Vec v</span>)</span><br />
+      Restore a column obtained with BVGetColumn().</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#scale" class="summary-sig-name">scale</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">alpha</span>)</span><br />
+      Multiply the entries by a scalar value.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#scaleColumn" class="summary-sig-name">scaleColumn</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">int j</span>,
+        <span class="summary-sig-arg">alpha</span>)</span><br />
+      Scale column j by alpha</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#setActiveColumns" class="summary-sig-name">setActiveColumns</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">int l</span>,
+        <span class="summary-sig-arg">int k</span>)</span><br />
+      Specify the columns that will be involved in operations.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#setFromOptions" class="summary-sig-name">setFromOptions</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Sets BV options from the options database.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#setMatrix" class="summary-sig-name">setMatrix</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Mat mat</span>,
+        <span class="summary-sig-arg">bool indef</span>)</span><br />
+      Sets the bilinear form to be used for inner products.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#setOptionsPrefix" class="summary-sig-name">setOptionsPrefix</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">prefix</span>)</span><br />
+      Sets the prefix used for searching for all BV options in the
+database.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#setOrthogonalization" class="summary-sig-name">setOrthogonalization</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">type</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">refine</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">eta</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">block</span>=<span class="summary-sig-default">None</span>)</span><br />
+      Specifies the method used for the orthogonalization of vectors
+(classical or modified Gram-Schmidt with or without refinement),
+and for the block-orthogonalization (simultaneous orthogonalization
+of a set of vectors).</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#setRandom" class="summary-sig-name">setRandom</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Set the active columns of BV to random numbers.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#setSizes" class="summary-sig-name">setSizes</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">sizes</span>,
+        <span class="summary-sig-arg">m</span>)</span><br />
+      Sets the local and global sizes, and the number of columns.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#setSizesFromVec" class="summary-sig-name">setSizesFromVec</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Vec w</span>,
+        <span class="summary-sig-arg">m</span>)</span><br />
+      Sets the local and global sizes, and the number of columns.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#setType" class="summary-sig-name">setType</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">bv_type</span>)</span><br />
+      Selects the type for the BV object.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.BV-class.html#view" class="summary-sig-name">view</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Viewer viewer</span>=<span class="summary-sig-default">None</span>)</span><br />
+      Prints the BV data structure.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code>petsc4py.PETSc.Object</code></b>:
+      <code>__copy__</code>,
+      <code>__deepcopy__</code>,
+      <code>__eq__</code>,
+      <code>__ge__</code>,
+      <code>__gt__</code>,
+      <code>__le__</code>,
+      <code>__lt__</code>,
+      <code>__ne__</code>,
+      <code>__nonzero__</code>,
+      <code>compose</code>,
+      <code>decRef</code>,
+      <code>getAttr</code>,
+      <code>getClassId</code>,
+      <code>getClassName</code>,
+      <code>getComm</code>,
+      <code>getDict</code>,
+      <code>getName</code>,
+      <code>getRefCount</code>,
+      <code>getTabLevel</code>,
+      <code>incRef</code>,
+      <code>incrementTabLevel</code>,
+      <code>query</code>,
+      <code>setAttr</code>,
+      <code>setName</code>,
+      <code>setTabLevel</code>,
+      <code>stateIncrease</code>
+      </p>
+    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+      <code>__delattr__</code>,
+      <code>__format__</code>,
+      <code>__getattribute__</code>,
+      <code>__hash__</code>,
+      <code>__init__</code>,
+      <code>__reduce__</code>,
+      <code>__reduce_ex__</code>,
+      <code>__repr__</code>,
+      <code>__setattr__</code>,
+      <code>__sizeof__</code>,
+      <code>__str__</code>,
+      <code>__subclasshook__</code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Properties</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-Properties"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code>petsc4py.PETSc.Object</code></b>:
+      <code>classid</code>,
+      <code>comm</code>,
+      <code>fortran</code>,
+      <code>handle</code>,
+      <code>klass</code>,
+      <code>name</code>,
+      <code>prefix</code>,
+      <code>refcount</code>,
+      <code>type</code>
+      </p>
+    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+      <code>__class__</code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Method Details</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-MethodDetails"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+</table>
+<a name="__new__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">__new__</span>(<span class="sig-arg">S</span>,
+        <span class="sig-arg">...</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  
+  <dl class="fields">
+    <dt>Returns: a new object with type S, a subtype of T</dt>
+    <dt>Overrides:
+        object.__new__
+    </dt>
+  </dl>
+</td></tr></table>
+</div>
+<a name="applyMatrix"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">applyMatrix</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">Vec x</span>,
+        <span class="sig-arg">Vec y</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Multiplies a vector with the matrix associated to the bilinear
+form.</p>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
+<dl class="rst-docutils">
+<dt>x: Vec</dt>
+<dd>The input vector.</dd>
+<dt>y: Vec</dt>
+<dd>The result vector.</dd>
+</dl>
+</div>
+<div class="rst-section" id="rst-notes">
+<h1 class="heading">Notes</h1>
+<p>If the bilinear form has no associated matrix this function
+copies the vector.</p>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="create"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">create</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">comm</span>=<span class="sig-default">None</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Creates the BV object.</p>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
+<dl class="rst-docutils">
+<dt>comm: Comm, optional</dt>
+<dd>MPI communicator; if not provided, it defaults to all
+processes.</dd>
+</dl>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="destroy"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">destroy</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  Destroys the BV object.
+  <dl class="fields">
+    <dt>Overrides:
+        petsc4py.PETSc.Object.destroy
+    </dt>
+  </dl>
+</td></tr></table>
+</div>
+<a name="dot"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">dot</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">BV Y</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <dl class="rst-docutils">
+<dt>Computes the 'block-dot' product of two basis vectors objects.</dt>
+<dd>M = Y^H*X (m_ij = y_i^H x_j) or M = Y^H*B*X</dd>
+</dl>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
+<dl class="rst-docutils">
+<dt>Y: BV</dt>
+<dd>Left basis vectors, can be the same as self, giving M = X^H X.</dd>
+</dl>
+</div>
+<div class="rst-section" id="rst-returns">
+<h1 class="heading">Returns</h1>
+<dl class="rst-docutils">
+<dt>M: Mat</dt>
+<dd>The resulting matrix.</dd>
+</dl>
+</div>
+<div class="rst-section" id="rst-notes">
+<h1 class="heading">Notes</h1>
+<p>This is the generalization of VecDot() for a collection of vectors, M =
+Y^H*X. The result is a matrix M whose entry m_ij is equal to y_i^H x_j
+(where y_i^H denotes the conjugate transpose of y_i).</p>
+<p>X and Y can be the same object.</p>
+<p>If a non-standard inner product has been specified with setMatrix(),
+then the result is M = Y^H*B*X. In this case, both X and Y must have
+the same associated matrix.</p>
+<p>Only rows (resp. columns) of M starting from ly (resp. lx) are
+computed, where ly (resp. lx) is the number of leading columns of Y
+(resp. X).</p>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="dotVec"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">dotVec</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">Vec v</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Computes multiple dot products of a vector against all the column
+vectors of a BV.</p>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
+<dl class="rst-docutils">
+<dt>v: Vec</dt>
+<dd>A vector.</dd>
+</dl>
+</div>
+<div class="rst-section" id="rst-returns">
+<h1 class="heading">Returns</h1>
+<dl class="rst-docutils">
+<dt>m: Vec</dt>
+<dd>A vector with the results.</dd>
+</dl>
+<p>This is analogue to VecMDot(), but using BV to represent a collection
+of vectors. The result is m = X^H*y, so m_i is equal to x_j^H y. Note
+that here X is transposed as opposed to BVDot().</p>
+<p>If a non-standard inner product has been specified with BVSetMatrix(),
+then the result is m = X^H*B*y.</p>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="getActiveColumns"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getActiveColumns</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Returns the current active dimensions.</p>
+<div class="rst-section" id="rst-returns">
+<h1 class="heading">Returns</h1>
+<dl class="rst-docutils">
+<dt>l: int</dt>
+<dd>The leading number of columns.</dd>
+<dt>k: int</dt>
+<dd>The active number of columns.</dd>
+</dl>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="getColumn"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getColumn</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">int j</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Returns a Vec object that contains the entries of the requested column
+of the basis vectors object.</p>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
+<dl class="rst-docutils">
+<dt>j: int</dt>
+<dd>The index of the requested column.</dd>
+</dl>
+</div>
+<div class="rst-section" id="rst-returns">
+<h1 class="heading">Returns</h1>
+<dl class="rst-docutils">
+<dt>v: Vec</dt>
+<dd>The vector containing the jth column.</dd>
+</dl>
+</div>
+<div class="rst-section" id="rst-notes">
+<h1 class="heading">Notes</h1>
+<p>Modifying the returned Vec will change the BV entries as well.</p>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="getMatrix"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getMatrix</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Retrieves the matrix representation of the inner product.</p>
+<div class="rst-section" id="rst-returns">
+<h1 class="heading">Returns</h1>
+<p>mat: the matrix of the inner product</p>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="getOptionsPrefix"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getOptionsPrefix</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Gets the prefix used for searching for all BV options in the
+database.</p>
+<div class="rst-section" id="rst-returns">
+<h1 class="heading">Returns</h1>
+<dl class="rst-docutils">
+<dt>prefix: string</dt>
+<dd>The prefix string set for this BV object.</dd>
+</dl>
+</div>
+  <dl class="fields">
+    <dt>Overrides:
+        petsc4py.PETSc.Object.getOptionsPrefix
+    </dt>
+  </dl>
+</td></tr></table>
+</div>
+<a name="getOrthogonalization"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getOrthogonalization</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Gets the orthogonalization settings from the BV object.</p>
+<div class="rst-section" id="rst-returns">
+<h1 class="heading">Returns</h1>
+<dl class="rst-docutils">
+<dt>type: <a href="slepc4py.SLEPc.BV.OrthogType-class.html" class="link">BV.OrthogType</a> enumerate</dt>
+<dd>The type of orthogonalization technique.</dd>
+<dt>refine: <a href="slepc4py.SLEPc.BV.RefineType-class.html" class="link">BV.OrthogRefineType</a> enumerate</dt>
+<dd>The type of refinement.</dd>
+<dt>eta:  float</dt>
+<dd>Parameter for selective refinement (used when the the
+refinement type <a href="slepc4py.SLEPc.BV.RefineType-class.html#IFNEEDED" class="link">BV.OrthogRefineType.IFNEEDED</a>).</dd>
+<dt>block: <a href="slepc4py.SLEPc.BV.BlockType-class.html" class="link">BV.OrthogBlockType</a> enumerate</dt>
+<dd>The type of block orthogonalization .</dd>
+</dl>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="getSizes"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getSizes</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Returns the local and global sizes, and the number of columns.</p>
+<div class="rst-section" id="rst-returns">
+<h1 class="heading">Returns</h1>
+<dl class="rst-docutils">
+<dt>sizes: two-tuple of int</dt>
+<dd>The local and global sizes <tt class="rst-docutils literal">(n, N)</tt>.</dd>
+<dt>m: int</dt>
+<dd>The number of columns.</dd>
+</dl>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="getType"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getType</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Gets the BV type of this object.</p>
+<div class="rst-section" id="rst-returns">
+<h1 class="heading">Returns</h1>
+<dl class="rst-docutils">
+<dt>type: <a href="slepc4py.SLEPc.BV.Type-class.html" class="link">BV.Type</a> enumerate</dt>
+<dd>The inner product type currently being used.</dd>
+</dl>
+</div>
+  <dl class="fields">
+    <dt>Overrides:
+        petsc4py.PETSc.Object.getType
+    </dt>
+  </dl>
+</td></tr></table>
+</div>
+<a name="insertVec"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">insertVec</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">int j</span>,
+        <span class="sig-arg">Vec w</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Insert a vector into the specified column.</p>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
+<dl class="rst-docutils">
+<dt>j: int</dt>
+<dd>The column to be overwritten.</dd>
+<dt>w: Vec</dt>
+<dd>The vector to be copied.</dd>
+</dl>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="insertVecs"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">insertVecs</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">int s</span>,
+        <span class="sig-arg">W</span>,
+        <span class="sig-arg">bool orth</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Insert a set of vectors into specified columns.</p>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
+<dl class="rst-docutils">
+<dt>s: int</dt>
+<dd>The first column to be overwritten.</dd>
+<dt>W: Vec or sequence of Vec.</dt>
+<dd>Set of vectors to be copied.</dd>
+<dt>orth:</dt>
+<dd>Flag indicating if the vectors must be orthogonalized.</dd>
+</dl>
+</div>
+<div class="rst-section" id="rst-returns">
+<h1 class="heading">Returns</h1>
+<dl class="rst-docutils">
+<dt>m: int</dt>
+<dd>Number of linearly independent vectors.</dd>
+</dl>
+</div>
+<div class="rst-section" id="rst-notes">
+<h1 class="heading">Notes</h1>
+<p>Copies the contents of vectors W into self(:,s:s+n), where n is the
+length of W. If orthogonalization flag is set then the vectors are
+copied one by one then orthogonalized against the previous one.  If any
+are linearly dependent then it is discared and the value of m is
+decreased.</p>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="matMult"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">matMult</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">Mat A</span>,
+        <span class="sig-arg">BV Y</span>=<span class="sig-default">None</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Computes the matrix-vector product for each column, Y = A*V.</p>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
+<dl class="rst-docutils">
+<dt>A: Mat</dt>
+<dd>The matrix.</dd>
+</dl>
+</div>
+<div class="rst-section" id="rst-returns">
+<h1 class="heading">Returns</h1>
+<dl class="rst-docutils">
+<dt>Y: BV</dt>
+<dd>The result.</dd>
+</dl>
+</div>
+<div class="rst-section" id="rst-notes">
+<h1 class="heading">Notes</h1>
+<p>Only active columns (excluding the leading ones) are processed.</p>
+<p>It is possible to choose whether the computation is done column by column
+or using dense matrices using the options database keys:</p>
+<blockquote>
+-bv_matmult_vecs
+-bv_matmult_mat</blockquote>
+<p>The default is bv_matmult_mat.</p>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="matMultHermitianTranspose"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">matMultHermitianTranspose</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">Mat A</span>,
+        <span class="sig-arg">BV Y</span>=<span class="sig-default">None</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Computes the matrix-vector product with the conjugate transpose of a
+matrix for each column, Y=A^H*V.</p>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
+<dl class="rst-docutils">
+<dt>A: Mat</dt>
+<dd>The matrix.</dd>
+</dl>
+</div>
+<div class="rst-section" id="rst-returns">
+<h1 class="heading">Returns</h1>
+<dl class="rst-docutils">
+<dt>Y: BV</dt>
+<dd>The result.</dd>
+</dl>
+</div>
+<div class="rst-section" id="rst-notes">
+<h1 class="heading">Notes</h1>
+<p>Only active columns (excluding the leading ones) are processed.</p>
+<p>As opoosed to matMult(), this operation is always done by column by
+column, with a sequence of calls to MatMultHermitianTranspose().</p>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="matProject"></a>
+<div>
 <table class="details" border="1" cellpadding="3"
        cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Method Details</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-MethodDetails"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-</table>
-<a name="__new__"></a>
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">matProject</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">Mat A</span>,
+        <span class="sig-arg">BV Y</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Computes the projection of a matrix onto a subspace.</p>
+<p>M = Y^H A X</p>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
+<dl class="rst-docutils">
+<dt>A: Mat or None</dt>
+<dd>Matrix to be projected.</dd>
+<dt>Y: BV</dt>
+<dd>Left basis vectors, can be the same as self, giving M = X^H A X.</dd>
+</dl>
+</div>
+<div class="rst-section" id="rst-returns">
+<h1 class="heading">Returns</h1>
+<dl class="rst-docutils">
+<dt>M: Mat</dt>
+<dd>Projection of the matrix A onto the subspace.</dd>
+</dl>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="multVec"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
        cellspacing="0" width="100%" bgcolor="white">
 <tr><td>
   <table width="100%" cellpadding="0" cellspacing="0" border="0">
   <tr valign="top"><td>
-  <h3 class="epydoc"><span class="sig"><span class="sig-name">__new__</span>(<span class="sig-arg">S</span>,
-        <span class="sig-arg">...</span>)</span>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">multVec</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">alpha</span>,
+        <span class="sig-arg">beta</span>,
+        <span class="sig-arg">Vec y</span>,
+        <span class="sig-arg">q</span>)</span>
   </h3>
   </td><td align="right" valign="top"
     > 
     </td>
   </tr></table>
   
-  
+  <p>Computes y = beta*y + alpha*X*q.</p>
+<div class="rst-section" id="rst-parameter">
+<h1 class="heading">Parameter</h1>
+<p>alpha: scalar
+beta: scalar
+q: scalar or sequence of scalars</p>
+</div>
+<div class="rst-section" id="rst-return">
+<h1 class="heading">Return</h1>
+<dl class="rst-docutils">
+<dt>y: Vec</dt>
+<dd>The result.</dd>
+</dl>
+</div>
   <dl class="fields">
-    <dt>Returns: a new object with type S, a subtype of T</dt>
-    <dt>Overrides:
-        object.__new__
-    </dt>
   </dl>
 </td></tr></table>
 </div>
-<a name="applyMatrix"></a>
+<a name="norm"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
        cellspacing="0" width="100%" bgcolor="white">
 <tr><td>
   <table width="100%" cellpadding="0" cellspacing="0" border="0">
   <tr valign="top"><td>
-  <h3 class="epydoc"><span class="sig"><span class="sig-name">applyMatrix</span>(<span class="sig-arg">self</span>,
-        <span class="sig-arg">Vec x</span>,
-        <span class="sig-arg">Vec y</span>)</span>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">norm</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">norm_type</span>=<span class="sig-default">None</span>)</span>
   </h3>
   </td><td align="right" valign="top"
     > 
     </td>
   </tr></table>
   
-  <p>Multiplies a vector with the matrix associated to the bilinear
-form.</p>
+  <p>Computes the matrix norm of the BV.</p>
 <div class="rst-section" id="rst-parameters">
 <h1 class="heading">Parameters</h1>
 <dl class="rst-docutils">
-<dt>x: Vec</dt>
-<dd>The input vector.</dd>
-<dt>y: Vec</dt>
-<dd>The result vector.</dd>
+<dt>norm_type: PETSC.NormType enumerate</dt>
+<dd>The norm type.</dd>
 </dl>
 </div>
+<div class="rst-section" id="rst-returns">
+<h1 class="heading">Returns</h1>
+<p>norm: float</p>
+</div>
 <div class="rst-section" id="rst-notes">
 <h1 class="heading">Notes</h1>
-<p>If the bilinear form has no associated matrix this function
-copies the vector.</p>
+<p>All active columns (except the leading ones) are considered as a
+matrix. The allowed norms are NORM_1, NORM_FROBENIUS, and
+NORM_INFINITY.</p>
+<p>This operation fails if a non-standard inner product has been specified
+with BVSetMatrix().</p>
 </div>
   <dl class="fields">
   </dl>
 </td></tr></table>
 </div>
-<a name="create"></a>
+<a name="normColumn"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
        cellspacing="0" width="100%" bgcolor="white">
 <tr><td>
   <table width="100%" cellpadding="0" cellspacing="0" border="0">
   <tr valign="top"><td>
-  <h3 class="epydoc"><span class="sig"><span class="sig-name">create</span>(<span class="sig-arg">self</span>,
-        <span class="sig-arg">comm</span>=<span class="sig-default">None</span>)</span>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">normColumn</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">int j</span>,
+        <span class="sig-arg">norm_type</span>=<span class="sig-default">None</span>)</span>
   </h3>
   </td><td align="right" valign="top"
     > 
     </td>
   </tr></table>
   
-  <p>Creates the BV object.</p>
+  <p>Computes the matrix norm of the BV.</p>
 <div class="rst-section" id="rst-parameters">
 <h1 class="heading">Parameters</h1>
 <dl class="rst-docutils">
-<dt>comm: Comm, optional</dt>
-<dd>MPI communicator; if not provided, it defaults to all
-processes.</dd>
+<dt>j: int</dt>
+<dd>Index of column.</dd>
+<dt>norm_type: PETSc.NormType (int)</dt>
+<dd>The norm type.</dd>
 </dl>
 </div>
+<div class="rst-section" id="rst-returns">
+<h1 class="heading">Returns</h1>
+<p>norm: float</p>
+</div>
+<div class="rst-section" id="rst-notes">
+<h1 class="heading">Notes</h1>
+<p>The norm of V[j] is computed (NORM_1, NORM_2, or NORM_INFINITY).</p>
+<p>If a non-standard inner product has been specified with BVSetMatrix(),
+then the returned value is <tt class="rst-docutils literal"><span class="pre">sqrt(V[j]'*</span> B*V[j])</tt>, where B is the inner
+product matrix (argument 'type' is ignored).</p>
+</div>
   <dl class="fields">
   </dl>
 </td></tr></table>
 </div>
-<a name="destroy"></a>
+<a name="orthogonalize"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
        cellspacing="0" width="100%" bgcolor="white">
 <tr><td>
   <table width="100%" cellpadding="0" cellspacing="0" border="0">
   <tr valign="top"><td>
-  <h3 class="epydoc"><span class="sig"><span class="sig-name">destroy</span>(<span class="sig-arg">self</span>)</span>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">orthogonalize</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">Mat R</span>=<span class="sig-default">None</span>,
+        <span class="sig-arg">**kargs</span>)</span>
   </h3>
   </td><td align="right" valign="top"
     > 
     </td>
   </tr></table>
   
-  Destroys the BV object.
+  <p>Orthogonalize all columns (except leading ones),
+that is, compute the QR decomposition.</p>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
+<dl class="rst-docutils">
+<dt>R: Mat or None</dt>
+<dd>A sequential dense matrix.</dd>
+</dl>
+</div>
+<div class="rst-section" id="rst-notes">
+<h1 class="heading">Notes</h1>
+<p>The output satisfies <tt class="rst-docutils literal">V0 = V*R</tt> (where V0 represent the input V) and <tt class="rst-docutils literal"><span class="pre">V'*V</span> = I</tt>.</p>
+</div>
   <dl class="fields">
-    <dt>Overrides:
-        petsc4py.PETSc.Object.destroy
-    </dt>
   </dl>
 </td></tr></table>
 </div>
-<a name="getMatrix"></a>
+<a name="orthogonalizeVec"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
        cellspacing="0" width="100%" bgcolor="white">
 <tr><td>
   <table width="100%" cellpadding="0" cellspacing="0" border="0">
   <tr valign="top"><td>
-  <h3 class="epydoc"><span class="sig"><span class="sig-name">getMatrix</span>(<span class="sig-arg">self</span>)</span>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">orthogonalizeVec</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">Vec v</span>)</span>
   </h3>
   </td><td align="right" valign="top"
     > 
     </td>
   </tr></table>
   
-  <p>Retrieves the matrix representation of the inner product.</p>
+  <p>Orthogonalize a vector with respect to a set of vectors.</p>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
+<dl class="rst-docutils">
+<dt>v:  Vec</dt>
+<dd>Vector to be orthogonalized, modified on return.</dd>
+</dl>
+</div>
 <div class="rst-section" id="rst-returns">
 <h1 class="heading">Returns</h1>
-<p>mat: the matrix of the inner product</p>
+<dl class="rst-docutils">
+<dt>norm: float</dt>
+<dd>The norm of the resulting vector.</dd>
+<dt>lindep: boolean</dt>
+<dd>Flag indicating that refinement did not improve the
+quality of orthogonalization.</dd>
+</dl>
+</div>
+<div class="rst-section" id="rst-notes">
+<h1 class="heading">Notes</h1>
+<p>This function applies an orthogonal projector to project
+vector <tt class="rst-docutils literal">v</tt> onto the orthogonal complement of the span of the
+columns of the BV.</p>
+<p>This routine does not normalize the resulting vector.</p>
 </div>
   <dl class="fields">
   </dl>
 </td></tr></table>
 </div>
-<a name="getOptionsPrefix"></a>
+<a name="restoreColumn"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
        cellspacing="0" width="100%" bgcolor="white">
 <tr><td>
   <table width="100%" cellpadding="0" cellspacing="0" border="0">
   <tr valign="top"><td>
-  <h3 class="epydoc"><span class="sig"><span class="sig-name">getOptionsPrefix</span>(<span class="sig-arg">self</span>)</span>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">restoreColumn</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">int j</span>,
+        <span class="sig-arg">Vec v</span>)</span>
   </h3>
   </td><td align="right" valign="top"
     > 
     </td>
   </tr></table>
   
-  <p>Gets the prefix used for searching for all BV options in the
-database.</p>
-<div class="rst-section" id="rst-returns">
-<h1 class="heading">Returns</h1>
+  <p>Restore a column obtained with BVGetColumn().</p>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
 <dl class="rst-docutils">
-<dt>prefix: string</dt>
-<dd>The prefix string set for this BV object.</dd>
+<dt>j: int</dt>
+<dd>The index of the requested column.</dd>
+<dt>v: Vec</dt>
+<dd>The vector obtained with BVGetColumn().</dd>
 </dl>
 </div>
+<div class="rst-section" id="rst-notes">
+<h1 class="heading">Notes</h1>
+<p>The arguments must match the corresponding call to BVGetColumn().</p>
+</div>
   <dl class="fields">
-    <dt>Overrides:
-        petsc4py.PETSc.Object.getOptionsPrefix
-    </dt>
   </dl>
 </td></tr></table>
 </div>
-<a name="getOrthogonalization"></a>
+<a name="scale"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
        cellspacing="0" width="100%" bgcolor="white">
 <tr><td>
   <table width="100%" cellpadding="0" cellspacing="0" border="0">
   <tr valign="top"><td>
-  <h3 class="epydoc"><span class="sig"><span class="sig-name">getOrthogonalization</span>(<span class="sig-arg">self</span>)</span>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">scale</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">alpha</span>)</span>
   </h3>
   </td><td align="right" valign="top"
     > 
     </td>
   </tr></table>
   
-  <p>Gets the orthogonalization settings from the BV object.</p>
-<div class="rst-section" id="rst-returns">
-<h1 class="heading">Returns</h1>
+  <p>Multiply the entries by a scalar value.</p>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
 <dl class="rst-docutils">
-<dt>type: <a href="slepc4py.SLEPc.BV.OrthogType-class.html" class="link">BV.OrthogType</a> enumerate</dt>
-<dd>The type of orthogonalization technique.</dd>
-<dt>refine: <a href="slepc4py.SLEPc.BV.RefineType-class.html" class="link">BV.OrthogRefineType</a> enumerate</dt>
-<dd>The type of refinement.</dd>
-<dt>eta:  float</dt>
-<dd>Parameter for selective refinement (used when the the
-refinement type <a href="slepc4py.SLEPc.BV.RefineType-class.html#IFNEEDED" class="link">BV.OrthogRefineType.IFNEEDED</a>).</dd>
-<dt>block: <a href="slepc4py.SLEPc.BVOrthogBlockType-class.html" class="link">BV.OrthogBlockType</a> enumerate</dt>
-<dd>The type of block orthogonalization .</dd>
+<dt>alpha: float</dt>
+<dd>scaling factor.</dd>
 </dl>
 </div>
+<div class="rst-section" id="rst-notes">
+<h1 class="heading">Notes</h1>
+<p>All active columns (except the leading ones) are scaled.</p>
+</div>
   <dl class="fields">
   </dl>
 </td></tr></table>
 </div>
-<a name="getType"></a>
+<a name="scaleColumn"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
        cellspacing="0" width="100%" bgcolor="white">
 <tr><td>
   <table width="100%" cellpadding="0" cellspacing="0" border="0">
   <tr valign="top"><td>
-  <h3 class="epydoc"><span class="sig"><span class="sig-name">getType</span>(<span class="sig-arg">self</span>)</span>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">scaleColumn</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">int j</span>,
+        <span class="sig-arg">alpha</span>)</span>
   </h3>
   </td><td align="right" valign="top"
     > 
     </td>
   </tr></table>
   
-  <p>Gets the BV type of this object.</p>
-<div class="rst-section" id="rst-returns">
-<h1 class="heading">Returns</h1>
+  <p>Scale column j by alpha</p>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
 <dl class="rst-docutils">
-<dt>type: <a href="slepc4py.SLEPc.BV.Type-class.html" class="link">BV.Type</a> enumerate</dt>
-<dd>The inner product type currently being used.</dd>
+<dt>j: int</dt>
+<dd>column number to be scaled.</dd>
+<dt>alpha: float</dt>
+<dd>scaling factor.</dd>
 </dl>
 </div>
   <dl class="fields">
-    <dt>Overrides:
-        petsc4py.PETSc.Object.getType
-    </dt>
   </dl>
 </td></tr></table>
 </div>
-<a name="orthogonalizeVec"></a>
+<a name="setActiveColumns"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
        cellspacing="0" width="100%" bgcolor="white">
 <tr><td>
   <table width="100%" cellpadding="0" cellspacing="0" border="0">
   <tr valign="top"><td>
-  <h3 class="epydoc"><span class="sig"><span class="sig-name">orthogonalizeVec</span>(<span class="sig-arg">self</span>,
-        <span class="sig-arg">Vec v</span>)</span>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">setActiveColumns</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">int l</span>,
+        <span class="sig-arg">int k</span>)</span>
   </h3>
   </td><td align="right" valign="top"
     > 
     </td>
   </tr></table>
   
-  <p>Orthogonalize a vector with respect to a set of vectors.</p>
+  <p>Specify the columns that will be involved in operations.</p>
 <div class="rst-section" id="rst-parameters">
 <h1 class="heading">Parameters</h1>
 <dl class="rst-docutils">
-<dt>v:  Vec</dt>
-<dd>Vector to be orthogonalized, modified on return.</dd>
-</dl>
-</div>
-<div class="rst-section" id="rst-returns">
-<h1 class="heading">Returns</h1>
-<dl class="rst-docutils">
-<dt>norm: float</dt>
-<dd>The norm of the resulting vector.</dd>
-<dt>lindep: boolean</dt>
-<dd>Flag indicating that refinement did not improve the
-quality of orthogonalization.</dd>
+<dt>l: int</dt>
+<dd>The leading number of columns.</dd>
+<dt>k: int</dt>
+<dd>The active number of columns.</dd>
 </dl>
 </div>
-<div class="rst-section" id="rst-notes">
-<h1 class="heading">Notes</h1>
-<p>This function applies an orthogonal projector to project
-vector <tt class="rst-docutils literal">v</tt> onto the orthogonal complement of the span of the
-columns of the BV.</p>
-<p>This routine does not normalize the resulting vector.</p>
-</div>
   <dl class="fields">
   </dl>
 </td></tr></table>
@@ -926,7 +2017,7 @@ of a set of vectors).</p>
 <dd>The type of refinement.</dd>
 <dt>eta:  float, optional</dt>
 <dd>Parameter for selective refinement.</dd>
-<dt>block: <a href="slepc4py.SLEPc.BVOrthogBlockType-class.html" class="link">BV.OrthogBlockType</a> enumerate, optional</dt>
+<dt>block: <a href="slepc4py.SLEPc.BV.BlockType-class.html" class="link">BV.OrthogBlockType</a> enumerate, optional</dt>
 <dd>The type of block orthogonalization.</dd>
 </dl>
 </div>
@@ -945,6 +2036,96 @@ computation is done column by column with the vector orthogonalization.</p>
   </dl>
 </td></tr></table>
 </div>
+<a name="setRandom"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">setRandom</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Set the active columns of BV to random numbers.</p>
+<div class="rst-section" id="rst-notes">
+<h1 class="heading">Notes</h1>
+<p>All active columns (except the leading ones) are modified.</p>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="setSizes"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">setSizes</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">sizes</span>,
+        <span class="sig-arg">m</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Sets the local and global sizes, and the number of columns.</p>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
+<dl class="rst-docutils">
+<dt>sizes: int or two-tuple of int</dt>
+<dd>The global size <tt class="rst-docutils literal">N</tt> or a two-tuple <tt class="rst-docutils literal">(n, N)</tt>
+with the local and global sizes.</dd>
+<dt>m: int</dt>
+<dd>The number of columns.</dd>
+</dl>
+</div>
+<div class="rst-section" id="rst-notes">
+<h1 class="heading">Notes</h1>
+<p>Either <tt class="rst-docutils literal">n</tt> or <tt class="rst-docutils literal">N</tt> (but not both) can be <tt class="rst-docutils literal">PETSc.DECIDE</tt>
+or <tt class="rst-docutils literal">None</tt> to have it automatically set.</p>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="setSizesFromVec"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">setSizesFromVec</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">Vec w</span>,
+        <span class="sig-arg">m</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Sets the local and global sizes, and the number of columns. Local and
+global sizes are specified indirectly by passing a template vector.</p>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
+<dl class="rst-docutils">
+<dt>w: Vec</dt>
+<dd>The template vector.</dd>
+<dt>m: int</dt>
+<dd>The number of columns.</dd>
+</dl>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
 <a name="setType"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
@@ -1028,14 +2209,14 @@ output is used.</dd>
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:04 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:40 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.BVOrthogBlockType-class.html b/docs/apiref/slepc4py.SLEPc.BV.BlockType-class.html
similarity index 87%
rename from docs/apiref/slepc4py.SLEPc.BVOrthogBlockType-class.html
rename to docs/apiref/slepc4py.SLEPc.BV.BlockType-class.html
index ed22641..5a22734 100644
--- a/docs/apiref/slepc4py.SLEPc.BVOrthogBlockType-class.html
+++ b/docs/apiref/slepc4py.SLEPc.BV.BlockType-class.html
@@ -3,7 +3,7 @@
           "DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-  <title>slepc4py.SLEPc.BVOrthogBlockType</title>
+  <title>slepc4py.SLEPc.BV.BlockType</title>
   <link rel="stylesheet" href="epydoc.css" type="text/css" />
   <script type="text/javascript" src="epydoc.js"></script>
 </head>
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -44,7 +44,8 @@
       <span class="breadcrumbs">
         <a href="slepc4py-module.html">Package slepc4py</a> ::
         <a href="slepc4py.SLEPc-module.html">Module SLEPc</a> ::
-        Class BVOrthogBlockType
+        <a href="slepc4py.SLEPc.BV-class.html">Class BV</a> ::
+        Class BlockType
       </span>
     </td>
     <td>
@@ -54,26 +55,26 @@
     onclick="toggle_private();">hide private</a>]</span></td></tr>
         <tr><td align="right"><span class="options"
             >[<a href="frames.html" target="_top">frames</a
-            >] | <a href="slepc4py.SLEPc.BVOrthogBlockType-class.html"
+            >] | <a href="slepc4py.SLEPc.BV.BlockType-class.html"
             target="_top">no frames</a>]</span></td></tr>
       </table>
     </td>
   </tr>
 </table>
 <!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class BVOrthogBlockType</h1><p class="nomargin-top"></p>
+<h1 class="epydoc">Class BlockType</h1><p class="nomargin-top"></p>
 <center>
-<center>  <map id="class_hierarchy_for_bvorthogbl" name="class_hierarchy_for_bvorthogbl">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.BVOrthogBlockType-class.html" title="BVOrthogBlockType" alt="" coords="5,6,147,31"/>
+<center>  <map id="class_hierarchy_for_blocktype" name="class_hierarchy_for_blocktype">
+<area shape="rect" id="node1" href="slepc4py.SLEPc.BV.BlockType-class.html" title="BlockType" alt="" coords="5,5,89,31"/>
 </map>
-  <img src="class_hierarchy_for_bvorthogbl.png" alt='' usemap="#class_hierarchy_for_bvorthogbl" ismap="ismap" class="graph-without-title" />
+  <img src="class_hierarchy_for_blocktype.png" alt='' usemap="#class_hierarchy_for_blocktype" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
 <p>BV block-orthogonalization types</p>
 <ul class="rst-simple">
-<li><a href="slepc4py.SLEPc.BVOrthogBlockType-class.html#GS" class="link">GS</a>:   Gram-Schmidt.</li>
-<li><a href="slepc4py.SLEPc.BVOrthogBlockType-class.html#CHOL" class="link">CHOL</a>: Cholesky.</li>
+<li><a href="slepc4py.SLEPc.BV.BlockType-class.html#GS" class="link">GS</a>:   Gram-Schmidt.</li>
+<li><a href="slepc4py.SLEPc.BV.BlockType-class.html#CHOL" class="link">CHOL</a>: Cholesky.</li>
 </ul>
 
 <!-- ==================== INSTANCE METHODS ==================== -->
@@ -201,14 +202,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:04 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:40 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.BV.OrthogType-class.html b/docs/apiref/slepc4py.SLEPc.BV.OrthogType-class.html
index 7c9da22..9d8d81a 100644
--- a/docs/apiref/slepc4py.SLEPc.BV.OrthogType-class.html
+++ b/docs/apiref/slepc4py.SLEPc.BV.OrthogType-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class OrthogType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_orthogtype" name="class_hierarchy_for_orthogtype">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.BV.OrthogType-class.html" title="OrthogType" alt="" coords="5,6,96,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.BV.OrthogType-class.html" title="OrthogType" alt="" coords="5,5,96,31"/>
 </map>
   <img src="class_hierarchy_for_orthogtype.png" alt='' usemap="#class_hierarchy_for_orthogtype" ismap="ismap" class="graph-without-title" />
 </center>
@@ -202,14 +202,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:04 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:40 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.BV.RefineType-class.html b/docs/apiref/slepc4py.SLEPc.BV.RefineType-class.html
index 2c671bf..c832cab 100644
--- a/docs/apiref/slepc4py.SLEPc.BV.RefineType-class.html
+++ b/docs/apiref/slepc4py.SLEPc.BV.RefineType-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class RefineType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_refinetype" name="class_hierarchy_for_refinetype">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.BV.RefineType-class.html" title="RefineType" alt="" coords="5,6,93,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.BV.RefineType-class.html" title="RefineType" alt="" coords="5,5,95,31"/>
 </map>
   <img src="class_hierarchy_for_refinetype.png" alt='' usemap="#class_hierarchy_for_refinetype" ismap="ismap" class="graph-without-title" />
 </center>
@@ -210,14 +210,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:04 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:40 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.BV.Type-class.html b/docs/apiref/slepc4py.SLEPc.BV.Type-class.html
index 18c0c06..980d054 100644
--- a/docs/apiref/slepc4py.SLEPc.BV.Type-class.html
+++ b/docs/apiref/slepc4py.SLEPc.BV.Type-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Type</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_type" name="class_hierarchy_for_type">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.BV.Type-class.html" title="Type" alt="" coords="5,6,56,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.BV.Type-class.html" title="Type" alt="" coords="5,5,56,31"/>
 </map>
   <img src="class_hierarchy_for_type.png" alt='' usemap="#class_hierarchy_for_type" ismap="ismap" class="graph-without-title" />
 </center>
@@ -212,14 +212,14 @@ BV type
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:04 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:40 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.DS-class.html b/docs/apiref/slepc4py.SLEPc.DS-class.html
index 225bb4c..a98f6f5 100644
--- a/docs/apiref/slepc4py.SLEPc.DS-class.html
+++ b/docs/apiref/slepc4py.SLEPc.DS-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class DS</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_ds" name="class_hierarchy_for_ds">
-<area shape="rect" id="node1" href="javascript:void(0);" title="petsc4py.PETSc.Object" alt="" coords="5,6,168,31"/>
-<area shape="rect" id="node2" href="slepc4py.SLEPc.DS-class.html" title="DS" alt="" coords="66,62,107,87"/>
+<area shape="rect" id="node1" href="javascript:void(0);" title="petsc4py.PETSc.Object" alt="" coords="5,5,168,31"/>
+<area shape="rect" id="node2" href="slepc4py.SLEPc.DS-class.html" title="DS" alt="" coords="66,60,107,85"/>
 </map>
   <img src="class_hierarchy_for_ds.png" alt='' usemap="#class_hierarchy_for_ds" ismap="ismap" class="graph-without-title" />
 </center>
@@ -1434,14 +1434,14 @@ output is used.</dd>
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:04 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:40 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.DS.MatType-class.html b/docs/apiref/slepc4py.SLEPc.DS.MatType-class.html
index 815cc5f..cd4c2b5 100644
--- a/docs/apiref/slepc4py.SLEPc.DS.MatType-class.html
+++ b/docs/apiref/slepc4py.SLEPc.DS.MatType-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class MatType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_mattype" name="class_hierarchy_for_mattype">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.DS.MatType-class.html" title="MatType" alt="" coords="5,6,77,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.DS.MatType-class.html" title="MatType" alt="" coords="5,5,79,31"/>
 </map>
   <img src="class_hierarchy_for_mattype.png" alt='' usemap="#class_hierarchy_for_mattype" ismap="ismap" class="graph-without-title" />
 </center>
@@ -282,14 +282,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:04 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:40 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.DS.StateType-class.html b/docs/apiref/slepc4py.SLEPc.DS.StateType-class.html
index 9ea771a..7e635f5 100644
--- a/docs/apiref/slepc4py.SLEPc.DS.StateType-class.html
+++ b/docs/apiref/slepc4py.SLEPc.DS.StateType-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class StateType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_statetype" name="class_hierarchy_for_statetype">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.DS.StateType-class.html" title="StateType" alt="" coords="5,6,88,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.DS.StateType-class.html" title="StateType" alt="" coords="5,5,88,31"/>
 </map>
   <img src="class_hierarchy_for_statetype.png" alt='' usemap="#class_hierarchy_for_statetype" ismap="ismap" class="graph-without-title" />
 </center>
@@ -218,14 +218,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:04 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:40 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.DS.Type-class.html b/docs/apiref/slepc4py.SLEPc.DS.Type-class.html
index c93a678..771292b 100644
--- a/docs/apiref/slepc4py.SLEPc.DS.Type-class.html
+++ b/docs/apiref/slepc4py.SLEPc.DS.Type-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Type</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_type_2" name="class_hierarchy_for_type_2">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.DS.Type-class.html" title="Type" alt="" coords="5,6,56,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.DS.Type-class.html" title="Type" alt="" coords="5,5,56,31"/>
 </map>
   <img src="class_hierarchy_for_type_2.png" alt='' usemap="#class_hierarchy_for_type_2" ismap="ismap" class="graph-without-title" />
 </center>
@@ -240,14 +240,14 @@ DS type
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:04 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:40 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.EPS-class.html b/docs/apiref/slepc4py.SLEPc.EPS-class.html
index b68a2ea..3656c47 100644
--- a/docs/apiref/slepc4py.SLEPc.EPS-class.html
+++ b/docs/apiref/slepc4py.SLEPc.EPS-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class EPS</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_eps" name="class_hierarchy_for_eps">
-<area shape="rect" id="node1" href="javascript:void(0);" title="petsc4py.PETSc.Object" alt="" coords="5,6,168,31"/>
-<area shape="rect" id="node2" href="slepc4py.SLEPc.EPS-class.html" title="EPS" alt="" coords="62,62,111,87"/>
+<area shape="rect" id="node1" href="javascript:void(0);" title="petsc4py.PETSc.Object" alt="" coords="5,5,168,31"/>
+<area shape="rect" id="node2" href="slepc4py.SLEPc.EPS-class.html" title="EPS" alt="" coords="62,60,111,85"/>
 </map>
   <img src="class_hierarchy_for_eps.png" alt='' usemap="#class_hierarchy_for_eps" ismap="ismap" class="graph-without-title" />
 </center>
@@ -302,6 +302,26 @@ computed eigenpair.</td>
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.EPS-class.html#errorView" class="summary-sig-name">errorView</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">etype</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">Viewer viewer</span>=<span class="summary-sig-default">None</span>)</span><br />
+      Displays the errors associated with the computed solution
+(as well as the eigenvalues).</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
           <td><span class="summary-sig"><a href="slepc4py.SLEPc.EPS-class.html#getArnoldiDelayed" class="summary-sig-name">getArnoldiDelayed</a>(<span class="summary-sig-arg">self</span>)</span><br />
       Gets the type of reorthogonalization used during the Arnoldi
 iteration.</td>
@@ -693,6 +713,24 @@ for a computational interval with multiple communicators.</td>
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.EPS-class.html#getKrylovSchurSubcommMats" class="summary-sig-name">getKrylovSchurSubcommMats</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the eigenproblem matrices stored internally in the subcommunicator
+to which the calling process belongs.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
           <td><span class="summary-sig"><a href="slepc4py.SLEPc.EPS-class.html#getKrylovSchurSubcommPairs" class="summary-sig-name">getKrylovSchurSubcommPairs</a>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">int i</span>,
         <span class="summary-sig-arg">Vec V</span>)</span><br />
@@ -800,6 +838,23 @@ database.</td>
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.EPS-class.html#getRG" class="summary-sig-name">getRG</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Obtain the region object associated to the eigensolver.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
           <td><span class="summary-sig"><a href="slepc4py.SLEPc.EPS-class.html#getRQCGReset" class="summary-sig-name">getRQCGReset</a>(<span class="summary-sig-arg">self</span>)</span><br />
       Gets the reset parameter used in the RQCG method.</td>
           <td align="right" valign="top">
@@ -1317,6 +1372,24 @@ after restart.</td>
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.EPS-class.html#setKrylovSchurSubintervals" class="summary-sig-name">setKrylovSchurSubintervals</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">subint</span>)</span><br />
+      Sets the subinterval boundaries for spectrum slicing with a computational interval.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
           <td><span class="summary-sig"><a href="slepc4py.SLEPc.EPS-class.html#setLanczosReorthogType" class="summary-sig-name">setLanczosReorthogType</a>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">reorthog</span>)</span><br />
       Sets the type of reorthogonalization used during the Lanczos
@@ -1410,6 +1483,24 @@ database.</td>
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.EPS-class.html#setRG" class="summary-sig-name">setRG</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">RG rg</span>)</span><br />
+      Associates a region object to the eigensolver.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
           <td><span class="summary-sig"><a href="slepc4py.SLEPc.EPS-class.html#setRQCGReset" class="summary-sig-name">setRQCGReset</a>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">nrest</span>)</span><br />
       Sets the reset parameter of the RQCG iteration.</td>
@@ -1594,6 +1685,32 @@ execution of the eigensolver.</td>
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.EPS-class.html#updateKrylovSchurSubcommMats" class="summary-sig-name">updateKrylovSchurSubcommMats</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">s</span>=<span class="summary-sig-default">1.0</span>,
+        <span class="summary-sig-arg">a</span>=<span class="summary-sig-default">1.0</span>,
+        <span class="summary-sig-arg">Mat Au</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">t</span>=<span class="summary-sig-default">1.0</span>,
+        <span class="summary-sig-arg">b</span>=<span class="summary-sig-default">1.0</span>,
+        <span class="summary-sig-arg">Mat Bu</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">structure</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">globalup</span>=<span class="summary-sig-default">False</span>)</span><br />
+      Update the eigenproblem matrices stored internally in the subcommunicator
+to which the calling process belongs.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
           <td><span class="summary-sig"><a href="slepc4py.SLEPc.EPS-class.html#view" class="summary-sig-name">view</a>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">Viewer viewer</span>=<span class="summary-sig-default">None</span>)</span><br />
       Prints the EPS data structure.</td>
@@ -1910,6 +2027,45 @@ processes.</dd>
   </dl>
 </td></tr></table>
 </div>
+<a name="errorView"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">errorView</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">etype</span>=<span class="sig-default">None</span>,
+        <span class="sig-arg">Viewer viewer</span>=<span class="sig-default">None</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Displays the errors associated with the computed solution
+(as well as the eigenvalues).</p>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
+<dl class="rst-docutils">
+<dt>etype: <a href="slepc4py.SLEPc.EPS.ErrorType-class.html" class="link">EPS.ErrorType</a> enumerate, optional</dt>
+<dd>The error type to compute.</dd>
+<dt>viewer: Viewer, optional.</dt>
+<dd>Visualization context; if not provided, the standard
+output is used.</dd>
+</dl>
+</div>
+<div class="rst-section" id="rst-notes">
+<h1 class="heading">Notes</h1>
+<p>By default, this function checks the error of all eigenpairs and prints
+the eigenvalues if all of them are below the requested tolerance.
+If the viewer has format <tt class="rst-docutils literal">ASCII_INFO_DETAIL</tt> then a table with
+eigenvalues and corresponding errors is printed.</p>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
 <a name="getArnoldiDelayed"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
@@ -2601,6 +2757,41 @@ compatible for locally computed eigenvectors.</dd>
   </dl>
 </td></tr></table>
 </div>
+<a name="getKrylovSchurSubcommMats"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getKrylovSchurSubcommMats</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Gets the eigenproblem matrices stored internally in the subcommunicator
+to which the calling process belongs.</p>
+<div class="rst-section" id="rst-returns">
+<h1 class="heading">Returns</h1>
+<dl class="rst-docutils">
+<dt>A: Mat</dt>
+<dd>The matrix associated with the eigensystem.</dd>
+<dt>B: Mat</dt>
+<dd>The second matrix in the case of generalized eigenproblems.</dd>
+</dl>
+</div>
+<div class="rst-section" id="rst-notes">
+<h1 class="heading">Notes</h1>
+<p>This is the analog of <a href="slepc4py.SLEPc.EPS-class.html#getOperators" class="link">getOperators()</a>, but returns the matrices distributed
+differently (in the subcommunicator rather than in the parent communicator).</p>
+<p>These matrices should not be modified by the user.</p>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
 <a name="getKrylovSchurSubcommPairs"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
@@ -2782,6 +2973,32 @@ database.</p>
   </dl>
 </td></tr></table>
 </div>
+<a name="getRG"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getRG</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Obtain the region object associated to the eigensolver.</p>
+<div class="rst-section" id="rst-returns">
+<h1 class="heading">Returns</h1>
+<dl class="rst-docutils">
+<dt>rg: RG</dt>
+<dd>The region context.</dd>
+</dl>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
 <a name="getRQCGReset"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
@@ -3651,6 +3868,42 @@ after restart.</p>
   </dl>
 </td></tr></table>
 </div>
+<a name="setKrylovSchurSubintervals"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">setKrylovSchurSubintervals</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">subint</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Sets the subinterval boundaries for spectrum slicing with a computational interval.</p>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
+<p>subint: list of real values specifying subintervals</p>
+</div>
+<div class="rst-section" id="rst-notes">
+<h1 class="heading">Notes</h1>
+<p>Logically Collective on EPS
+This function must be called after setKrylovSchurPartitions().
+For npart partitions, the argument subint must contain npart+1
+real values sorted in ascending order:
+subint_0, subint_1, ..., subint_npart,
+where the first and last values must coincide with the interval
+endpoints set with EPSSetInterval().
+The subintervals are then defined by two consecutive points:
+[subint_0,subint_1], [subint_1,subint_2], and so on.</p>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
 <a name="setLanczosReorthogType"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
@@ -3843,6 +4096,33 @@ properties.</p>
   </dl>
 </td></tr></table>
 </div>
+<a name="setRG"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">setRG</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">RG rg</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Associates a region object to the eigensolver.</p>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
+<dl class="rst-docutils">
+<dt>rg: RG</dt>
+<dd>The region context.</dd>
+</dl>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
 <a name="setRQCGReset"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
@@ -4122,6 +4402,66 @@ imaginary part for eigenvalue selection.</p>
   </dl>
 </td></tr></table>
 </div>
+<a name="updateKrylovSchurSubcommMats"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">updateKrylovSchurSubcommMats</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">s</span>=<span class="sig-default">1.0</span>,
+        <span class="sig-arg">a</span>=<span class="sig-default">1.0</span>,
+        <span class="sig-arg">Mat Au</span>=<span class="sig-default">None</span>,
+        <span class="sig-arg">t</span>=<span class="sig-default">1.0</span>,
+        <span class="sig-arg">b</span>=<span class="sig-default">1.0</span>,
+        <span class="sig-arg">Mat Bu</span>=<span class="sig-default">None</span>,
+        <span class="sig-arg">structure</span>=<span class="sig-default">None</span>,
+        <span class="sig-arg">globalup</span>=<span class="sig-default">False</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Update the eigenproblem matrices stored internally in the subcommunicator
+to which the calling process belongs.</p>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
+<dl class="rst-docutils">
+<dt>s: float (real or complex)</dt>
+<dd>Scalar that multiplies the existing A matrix.</dd>
+<dt>a: float (real or complex)</dt>
+<dd>Scalar used in the axpy operation on A.</dd>
+<dt>Au: Mat, optional</dt>
+<dd>The matrix used in the axpy operation on A.</dd>
+<dt>t: float (real or complex)</dt>
+<dd>Scalar that multiplies the existing B matrix.</dd>
+<dt>b: float (real or complex)</dt>
+<dd>Scalar used in the axpy operation on B.</dd>
+<dt>Bu: Mat, optional</dt>
+<dd>The matrix used in the axpy operation on B.</dd>
+<dt>structure: <code class="link">PETSc.Mat.Structure</code> enumerate</dt>
+<dd>Either same, different, or a subset of the non-zero sparsity pattern.</dd>
+<dt>globalup: bool</dt>
+<dd>Whether global matrices must be updated or not.</dd>
+</dl>
+</div>
+<div class="rst-section" id="rst-notes">
+<h1 class="heading">Notes</h1>
+<p>This function modifies the eigenproblem matrices at subcommunicator level,
+and optionally updates the global matrices in the parent communicator.
+The updates are expressed as <tt class="rst-docutils literal">A <span class="pre"><--</span> s*A + a*Au</tt>,  <tt class="rst-docutils literal">B <span class="pre"><--</span> t*B + b*Bu</tt>.</p>
+<p>It is possible to update one of the matrices, or both.</p>
+<p>The matrices <code class="link">Au</code> and <code class="link">Bu</code> must be equal in all subcommunicators.</p>
+<p>The <code class="link">str</code> flag is passed to the <code class="link">Mat.axpy()</code> operations to perform the updates.</p>
+<p>If <code class="link">globalup</code> is True, communication is carried out to reconstruct the updated
+matrices in the parent communicator.</p>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
 <a name="view"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
@@ -4178,14 +4518,14 @@ output is used.</dd>
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:41 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.EPS.Balance-class.html b/docs/apiref/slepc4py.SLEPc.EPS.Balance-class.html
index 91c847c..47a5d5d 100644
--- a/docs/apiref/slepc4py.SLEPc.EPS.Balance-class.html
+++ b/docs/apiref/slepc4py.SLEPc.EPS.Balance-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Balance</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_balance" name="class_hierarchy_for_balance">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.EPS.Balance-class.html" title="Balance" alt="" coords="5,6,75,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.EPS.Balance-class.html" title="Balance" alt="" coords="5,5,75,31"/>
 </map>
   <img src="class_hierarchy_for_balance.png" alt='' usemap="#class_hierarchy_for_balance" ismap="ismap" class="graph-without-title" />
 </center>
@@ -218,14 +218,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:41 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.EPS.Conv-class.html b/docs/apiref/slepc4py.SLEPc.EPS.Conv-class.html
index 2905860..a2e9754 100644
--- a/docs/apiref/slepc4py.SLEPc.EPS.Conv-class.html
+++ b/docs/apiref/slepc4py.SLEPc.EPS.Conv-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Conv</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_conv" name="class_hierarchy_for_conv">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.EPS.Conv-class.html" title="Conv" alt="" coords="5,6,59,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.EPS.Conv-class.html" title="Conv" alt="" coords="5,5,59,31"/>
 </map>
   <img src="class_hierarchy_for_conv.png" alt='' usemap="#class_hierarchy_for_conv" ismap="ismap" class="graph-without-title" />
 </center>
@@ -74,7 +74,7 @@
 <p>EPS convergence test</p>
 <ul class="rst-simple">
 <li><a href="slepc4py.SLEPc.EPS.Conv-class.html#ABS" class="link">ABS</a>:</li>
-<li><a href="slepc4py.SLEPc.EPS.Conv-class.html#EIG" class="link">EIG</a>:</li>
+<li><a href="slepc4py.SLEPc.EPS.Conv-class.html#REL" class="link">REL</a>:</li>
 <li><a href="slepc4py.SLEPc.EPS.Conv-class.html#NORM" class="link">NORM</a>:</li>
 <li><a href="slepc4py.SLEPc.EPS.Conv-class.html#USER" class="link">USER</a>:</li>
 </ul>
@@ -144,14 +144,14 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="EIG"></a><span class="summary-name">EIG</span> = <code title="1">1</code>
+        <a name="NORM"></a><span class="summary-name">NORM</span> = <code title="2">2</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="NORM"></a><span class="summary-name">NORM</span> = <code title="2">2</code>
+        <a name="REL"></a><span class="summary-name">REL</span> = <code title="1">1</code>
     </td>
   </tr>
 <tr>
@@ -218,14 +218,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:41 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.EPS.ConvergedReason-class.html b/docs/apiref/slepc4py.SLEPc.EPS.ConvergedReason-class.html
index b86d8ec..658dc06 100644
--- a/docs/apiref/slepc4py.SLEPc.EPS.ConvergedReason-class.html
+++ b/docs/apiref/slepc4py.SLEPc.EPS.ConvergedReason-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class ConvergedReason</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_convergedr" name="class_hierarchy_for_convergedr">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.EPS.ConvergedReason-class.html" title="ConvergedReason" alt="" coords="5,6,136,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.EPS.ConvergedReason-class.html" title="ConvergedReason" alt="" coords="5,5,136,31"/>
 </map>
   <img src="class_hierarchy_for_convergedr.png" alt='' usemap="#class_hierarchy_for_convergedr" ismap="ismap" class="graph-without-title" />
 </center>
@@ -74,8 +74,10 @@
 <p>EPS convergence reasons</p>
 <ul class="rst-simple">
 <li><a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html#CONVERGED_TOL" class="link">CONVERGED_TOL</a>:</li>
+<li><a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html#CONVERGED_USER" class="link">CONVERGED_USER</a>:</li>
 <li><a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html#DIVERGED_ITS" class="link">DIVERGED_ITS</a>:</li>
 <li><a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html#DIVERGED_BREAKDOWN" class="link">DIVERGED_BREAKDOWN</a>:</li>
+<li><a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html#DIVERGED_SYMMETRY_LOST" class="link">DIVERGED_SYMMETRY_LOST</a>:</li>
 <li><a href="slepc4py.SLEPc.EPS.ConvergedReason-class.html#CONVERGED_ITERATING" class="link">CONVERGED_ITERATING</a>:</li>
 </ul>
 
@@ -144,21 +146,35 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="CONVERGED_TOL"></a><span class="summary-name">CONVERGED_TOL</span> = <code title="2">2</code>
+        <a name="CONVERGED_TOL"></a><span class="summary-name">CONVERGED_TOL</span> = <code title="1">1</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="DIVERGED_BREAKDOWN"></a><span class="summary-name">DIVERGED_BREAKDOWN</span> = <code title="-4">-4</code>
+        <a name="CONVERGED_USER"></a><span class="summary-name">CONVERGED_USER</span> = <code title="2">2</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="DIVERGED_ITS"></a><span class="summary-name">DIVERGED_ITS</span> = <code title="-3">-3</code>
+        <a name="DIVERGED_BREAKDOWN"></a><span class="summary-name">DIVERGED_BREAKDOWN</span> = <code title="-2">-2</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+        <a name="DIVERGED_ITS"></a><span class="summary-name">DIVERGED_ITS</span> = <code title="-1">-1</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+        <a name="DIVERGED_SYMMETRY_LOST"></a><span class="summary-name">DIVERGED_SYMMETRY_LOST</span> = <code title="-3">-3</code>
     </td>
   </tr>
 <tr>
@@ -225,14 +241,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:41 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.EPS.ErrorType-class.html b/docs/apiref/slepc4py.SLEPc.EPS.ErrorType-class.html
index 35ca9dc..707c0db 100644
--- a/docs/apiref/slepc4py.SLEPc.EPS.ErrorType-class.html
+++ b/docs/apiref/slepc4py.SLEPc.EPS.ErrorType-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class ErrorType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_errortype" name="class_hierarchy_for_errortype">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.EPS.ErrorType-class.html" title="ErrorType" alt="" coords="5,6,83,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.EPS.ErrorType-class.html" title="ErrorType" alt="" coords="5,5,84,31"/>
 </map>
   <img src="class_hierarchy_for_errortype.png" alt='' usemap="#class_hierarchy_for_errortype" ismap="ismap" class="graph-without-title" />
 </center>
@@ -210,14 +210,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:41 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.EPS.Extraction-class.html b/docs/apiref/slepc4py.SLEPc.EPS.Extraction-class.html
index aa637cc..3eadbc8 100644
--- a/docs/apiref/slepc4py.SLEPc.EPS.Extraction-class.html
+++ b/docs/apiref/slepc4py.SLEPc.EPS.Extraction-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Extraction</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_extraction" name="class_hierarchy_for_extraction">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.EPS.Extraction-class.html" title="Extraction" alt="" coords="5,6,85,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.EPS.Extraction-class.html" title="Extraction" alt="" coords="5,5,87,31"/>
 </map>
   <img src="class_hierarchy_for_extraction.png" alt='' usemap="#class_hierarchy_for_extraction" ismap="ismap" class="graph-without-title" />
 </center>
@@ -242,14 +242,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:41 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.EPS.LanczosReorthogType-class.html b/docs/apiref/slepc4py.SLEPc.EPS.LanczosReorthogType-class.html
index 3f2ab40..21f3a72 100644
--- a/docs/apiref/slepc4py.SLEPc.EPS.LanczosReorthogType-class.html
+++ b/docs/apiref/slepc4py.SLEPc.EPS.LanczosReorthogType-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class LanczosReorthogType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_lanczosreo" name="class_hierarchy_for_lanczosreo">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.EPS.LanczosReorthogType-class.html" title="LanczosReorthogType" alt="" coords="5,6,157,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.EPS.LanczosReorthogType-class.html" title="LanczosReorthogType" alt="" coords="5,5,159,31"/>
 </map>
   <img src="class_hierarchy_for_lanczosreo.png" alt='' usemap="#class_hierarchy_for_lanczosreo" ismap="ismap" class="graph-without-title" />
 </center>
@@ -234,14 +234,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:41 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.EPS.PowerShiftType-class.html b/docs/apiref/slepc4py.SLEPc.EPS.PowerShiftType-class.html
index ef2bad2..817bd60 100644
--- a/docs/apiref/slepc4py.SLEPc.EPS.PowerShiftType-class.html
+++ b/docs/apiref/slepc4py.SLEPc.EPS.PowerShiftType-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class PowerShiftType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_powershift" name="class_hierarchy_for_powershift">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.EPS.PowerShiftType-class.html" title="PowerShiftType" alt="" coords="5,6,120,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.EPS.PowerShiftType-class.html" title="PowerShiftType" alt="" coords="5,5,120,31"/>
 </map>
   <img src="class_hierarchy_for_powershift.png" alt='' usemap="#class_hierarchy_for_powershift" ismap="ismap" class="graph-without-title" />
 </center>
@@ -210,14 +210,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:41 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.EPS.ProblemType-class.html b/docs/apiref/slepc4py.SLEPc.EPS.ProblemType-class.html
index d0cd9e2..5d7829c 100644
--- a/docs/apiref/slepc4py.SLEPc.EPS.ProblemType-class.html
+++ b/docs/apiref/slepc4py.SLEPc.EPS.ProblemType-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class ProblemType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_problemtyp" name="class_hierarchy_for_problemtyp">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.EPS.ProblemType-class.html" title="ProblemType" alt="" coords="5,6,104,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.EPS.ProblemType-class.html" title="ProblemType" alt="" coords="5,5,104,31"/>
 </map>
   <img src="class_hierarchy_for_problemtyp.png" alt='' usemap="#class_hierarchy_for_problemtyp" ismap="ismap" class="graph-without-title" />
 </center>
@@ -244,14 +244,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:41 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.EPS.Type-class.html b/docs/apiref/slepc4py.SLEPc.EPS.Type-class.html
index c5d450e..e2dd71f 100644
--- a/docs/apiref/slepc4py.SLEPc.EPS.Type-class.html
+++ b/docs/apiref/slepc4py.SLEPc.EPS.Type-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Type</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_type_3" name="class_hierarchy_for_type_3">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.EPS.Type-class.html" title="Type" alt="" coords="5,6,56,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.EPS.Type-class.html" title="Type" alt="" coords="5,5,56,31"/>
 </map>
   <img src="class_hierarchy_for_type_3.png" alt='' usemap="#class_hierarchy_for_type_3" ismap="ismap" class="graph-without-title" />
 </center>
@@ -327,14 +327,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:41 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.EPS.Which-class.html b/docs/apiref/slepc4py.SLEPc.EPS.Which-class.html
index 7dcdd45..028315e 100644
--- a/docs/apiref/slepc4py.SLEPc.EPS.Which-class.html
+++ b/docs/apiref/slepc4py.SLEPc.EPS.Which-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Which</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_which" name="class_hierarchy_for_which">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.EPS.Which-class.html" title="Which" alt="" coords="5,6,64,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.EPS.Which-class.html" title="Which" alt="" coords="5,5,64,31"/>
 </map>
   <img src="class_hierarchy_for_which.png" alt='' usemap="#class_hierarchy_for_which" ismap="ismap" class="graph-without-title" />
 </center>
@@ -274,14 +274,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:41 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.FN-class.html b/docs/apiref/slepc4py.SLEPc.FN-class.html
index 6d95a9f..2908022 100644
--- a/docs/apiref/slepc4py.SLEPc.FN-class.html
+++ b/docs/apiref/slepc4py.SLEPc.FN-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class FN</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_fn" name="class_hierarchy_for_fn">
-<area shape="rect" id="node1" href="javascript:void(0);" title="petsc4py.PETSc.Object" alt="" coords="5,6,168,31"/>
-<area shape="rect" id="node2" href="slepc4py.SLEPc.FN-class.html" title="FN" alt="" coords="67,62,107,87"/>
+<area shape="rect" id="node1" href="javascript:void(0);" title="petsc4py.PETSc.Object" alt="" coords="5,5,168,31"/>
+<area shape="rect" id="node2" href="slepc4py.SLEPc.FN-class.html" title="FN" alt="" coords="67,60,107,85"/>
 </map>
   <img src="class_hierarchy_for_fn.png" alt='' usemap="#class_hierarchy_for_fn" ismap="ismap" class="graph-without-title" />
 </center>
@@ -94,6 +94,14 @@ FN
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a href="slepc4py.SLEPc.FN.CombineType-class.html" class="summary-name">CombineType</a><br />
+      FN type of combination of child functions
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
         <a href="slepc4py.SLEPc.FN.Type-class.html" class="summary-name">Type</a><br />
       FN type
     </td>
@@ -945,14 +953,14 @@ output is used.</dd>
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:41 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.DS.StateType-class.html b/docs/apiref/slepc4py.SLEPc.FN.CombineType-class.html
similarity index 78%
copy from docs/apiref/slepc4py.SLEPc.DS.StateType-class.html
copy to docs/apiref/slepc4py.SLEPc.FN.CombineType-class.html
index 9ea771a..2093b93 100644
--- a/docs/apiref/slepc4py.SLEPc.DS.StateType-class.html
+++ b/docs/apiref/slepc4py.SLEPc.FN.CombineType-class.html
@@ -3,7 +3,7 @@
           "DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-  <title>slepc4py.SLEPc.DS.StateType</title>
+  <title>slepc4py.SLEPc.FN.CombineType</title>
   <link rel="stylesheet" href="epydoc.css" type="text/css" />
   <script type="text/javascript" src="epydoc.js"></script>
 </head>
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -44,8 +44,8 @@
       <span class="breadcrumbs">
         <a href="slepc4py-module.html">Package slepc4py</a> ::
         <a href="slepc4py.SLEPc-module.html">Module SLEPc</a> ::
-        <a href="slepc4py.SLEPc.DS-class.html">Class DS</a> ::
-        Class StateType
+        <a href="slepc4py.SLEPc.FN-class.html">Class FN</a> ::
+        Class CombineType
       </span>
     </td>
     <td>
@@ -55,28 +55,28 @@
     onclick="toggle_private();">hide private</a>]</span></td></tr>
         <tr><td align="right"><span class="options"
             >[<a href="frames.html" target="_top">frames</a
-            >] | <a href="slepc4py.SLEPc.DS.StateType-class.html"
+            >] | <a href="slepc4py.SLEPc.FN.CombineType-class.html"
             target="_top">no frames</a>]</span></td></tr>
       </table>
     </td>
   </tr>
 </table>
 <!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class StateType</h1><p class="nomargin-top"></p>
+<h1 class="epydoc">Class CombineType</h1><p class="nomargin-top"></p>
 <center>
-<center>  <map id="class_hierarchy_for_statetype" name="class_hierarchy_for_statetype">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.DS.StateType-class.html" title="StateType" alt="" coords="5,6,88,31"/>
+<center>  <map id="class_hierarchy_for_combinetyp" name="class_hierarchy_for_combinetyp">
+<area shape="rect" id="node1" href="slepc4py.SLEPc.FN.CombineType-class.html" title="CombineType" alt="" coords="5,5,108,31"/>
 </map>
-  <img src="class_hierarchy_for_statetype.png" alt='' usemap="#class_hierarchy_for_statetype" ismap="ismap" class="graph-without-title" />
+  <img src="class_hierarchy_for_combinetyp.png" alt='' usemap="#class_hierarchy_for_combinetyp" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
-<p>DS state types</p>
+<p>FN type of combination of child functions</p>
 <ul class="rst-simple">
-<li><a href="slepc4py.SLEPc.DS.StateType-class.html#RAW" class="link">RAW</a>: Not processed yet.</li>
-<li><a href="slepc4py.SLEPc.DS.StateType-class.html#INTERMEDIATE" class="link">INTERMEDIATE</a>: Reduced to Hessenberg or tridiagonal form (or equivalent).</li>
-<li><a href="slepc4py.SLEPc.DS.StateType-class.html#CONDENSED" class="link">CONDENSED</a>: Reduced to Schur or diagonal form (or equivalent).</li>
-<li><a href="slepc4py.SLEPc.DS.StateType-class.html#TRUNCATED" class="link">TRUNCATED</a>: Condensed form truncated to a smaller size.</li>
+<li><a href="slepc4py.SLEPc.FN.CombineType-class.html#ADD" class="link">ADD</a>:       Addition         f(x) = f1(x)+f2(x)</li>
+<li><a href="slepc4py.SLEPc.FN.CombineType-class.html#MULTIPLY" class="link">MULTIPLY</a>:  Multiplication   f(x) = f1(x)*f2(x)</li>
+<li><a href="slepc4py.SLEPc.FN.CombineType-class.html#DIVIDE" class="link">DIVIDE</a>:    Division         f(x) = f1(x)/f2(x)</li>
+<li><a href="slepc4py.SLEPc.FN.CombineType-class.html#COMPOSE" class="link">COMPOSE</a>:   Composition      f(x) = f2(f1(x))</li>
 </ul>
 
 <!-- ==================== INSTANCE METHODS ==================== -->
@@ -137,35 +137,35 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="CONDENSED"></a><span class="summary-name">CONDENSED</span> = <code title="2">2</code>
+        <a name="ADD"></a><span class="summary-name">ADD</span> = <code title="0">0</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="INTERMEDIATE"></a><span class="summary-name">INTERMEDIATE</span> = <code title="1">1</code>
+        <a name="COMPOSE"></a><span class="summary-name">COMPOSE</span> = <code title="3">3</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="RAW"></a><span class="summary-name">RAW</span> = <code title="0">0</code>
+        <a name="DIVIDE"></a><span class="summary-name">DIVIDE</span> = <code title="2">2</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="TRUNCATED"></a><span class="summary-name">TRUNCATED</span> = <code title="3">3</code>
+        <a name="MULTIPLY"></a><span class="summary-name">MULTIPLY</span> = <code title="1">1</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="__qualname__"></a><span class="summary-name">__qualname__</span> = <code title="'DSStateType'"><code class="variable-quote">'</code><code class="variable-string">DSStateType</code><code class="variable-quote">'</code></code>
+        <a name="__qualname__"></a><span class="summary-name">__qualname__</span> = <code title="'FNCombineType'"><code class="variable-quote">'</code><code class="variable-string">FNCombineType</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
 </table>
@@ -218,14 +218,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:04 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:41 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.FN.Type-class.html b/docs/apiref/slepc4py.SLEPc.FN.Type-class.html
index 0d7cf06..22875c4 100644
--- a/docs/apiref/slepc4py.SLEPc.FN.Type-class.html
+++ b/docs/apiref/slepc4py.SLEPc.FN.Type-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Type</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_type_4" name="class_hierarchy_for_type_4">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.FN.Type-class.html" title="Type" alt="" coords="5,6,56,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.FN.Type-class.html" title="Type" alt="" coords="5,5,56,31"/>
 </map>
   <img src="class_hierarchy_for_type_4.png" alt='' usemap="#class_hierarchy_for_type_4" ismap="ismap" class="graph-without-title" />
 </center>
@@ -145,6 +145,13 @@ FN type
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="INVSQRT"></a><span class="summary-name">INVSQRT</span> = <code title="'invsqrt'"><code class="variable-quote">'</code><code class="variable-string">invsqrt</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
         <a name="LOG"></a><span class="summary-name">LOG</span> = <code title="'log'"><code class="variable-quote">'</code><code class="variable-string">log</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -226,14 +233,14 @@ FN type
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:41 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.MFN-class.html b/docs/apiref/slepc4py.SLEPc.MFN-class.html
index b1b16fb..789925f 100644
--- a/docs/apiref/slepc4py.SLEPc.MFN-class.html
+++ b/docs/apiref/slepc4py.SLEPc.MFN-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class MFN</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_mfn" name="class_hierarchy_for_mfn">
-<area shape="rect" id="node1" href="javascript:void(0);" title="petsc4py.PETSc.Object" alt="" coords="5,6,168,31"/>
-<area shape="rect" id="node2" href="slepc4py.SLEPc.MFN-class.html" title="MFN" alt="" coords="61,62,112,87"/>
+<area shape="rect" id="node1" href="javascript:void(0);" title="petsc4py.PETSc.Object" alt="" coords="5,5,168,31"/>
+<area shape="rect" id="node2" href="slepc4py.SLEPc.MFN-class.html" title="MFN" alt="" coords="61,60,112,85"/>
 </map>
   <img src="class_hierarchy_for_mfn.png" alt='' usemap="#class_hierarchy_for_mfn" ismap="ismap" class="graph-without-title" />
 </center>
@@ -101,7 +101,8 @@ MFN
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a href="slepc4py.SLEPc.MFN.Type-class.html" class="summary-name">Type</a>
+        <a href="slepc4py.SLEPc.MFN.Type-class.html" class="summary-name">Type</a><br />
+      MFN type
     </td>
   </tr>
 </table>
@@ -1342,14 +1343,14 @@ output is used.</dd>
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:42 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.MFN.ConvergedReason-class.html b/docs/apiref/slepc4py.SLEPc.MFN.ConvergedReason-class.html
index 32d5508..8cf8949 100644
--- a/docs/apiref/slepc4py.SLEPc.MFN.ConvergedReason-class.html
+++ b/docs/apiref/slepc4py.SLEPc.MFN.ConvergedReason-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class ConvergedReason</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_convergedr_2" name="class_hierarchy_for_convergedr_2">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.MFN.ConvergedReason-class.html" title="ConvergedReason" alt="" coords="5,6,136,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.MFN.ConvergedReason-class.html" title="ConvergedReason" alt="" coords="5,5,136,31"/>
 </map>
   <img src="class_hierarchy_for_convergedr_2.png" alt='' usemap="#class_hierarchy_for_convergedr_2" ismap="ismap" class="graph-without-title" />
 </center>
@@ -136,6 +136,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="CONVERGED_ITS"></a><span class="summary-name">CONVERGED_ITS</span> = <code title="3">3</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
         <a name="CONVERGED_TOL"></a><span class="summary-name">CONVERGED_TOL</span> = <code title="2">2</code>
     </td>
   </tr>
@@ -157,6 +164,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="ITERATING"></a><span class="summary-name">ITERATING</span> = <code title="0">0</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
         <a name="__qualname__"></a><span class="summary-name">__qualname__</span> = <code title="'MFNConvergedReason'"><code class="variable-quote">'</code><code class="variable-string">MFNConvergedReason</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -210,14 +224,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:42 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.MFN.Type-class.html b/docs/apiref/slepc4py.SLEPc.MFN.Type-class.html
index 56bdc0b..0158f1a 100644
--- a/docs/apiref/slepc4py.SLEPc.MFN.Type-class.html
+++ b/docs/apiref/slepc4py.SLEPc.MFN.Type-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,12 +65,19 @@
 <h1 class="epydoc">Class Type</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_type_5" name="class_hierarchy_for_type_5">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.MFN.Type-class.html" title="Type" alt="" coords="5,6,56,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.MFN.Type-class.html" title="Type" alt="" coords="5,5,56,31"/>
 </map>
   <img src="class_hierarchy_for_type_5.png" alt='' usemap="#class_hierarchy_for_type_5" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
+<p>MFN type</p>
+<p>Action of a matrix function on a vector.</p>
+<ul class="rst-simple">
+<li><a href="slepc4py.SLEPc.MFN.Type-class.html#KRYLOV" class="link">KRYLOV</a>:  Restarted Krylov solver.</li>
+<li><a href="slepc4py.SLEPc.MFN.Type-class.html#EXPOKIT" class="link">EXPOKIT</a>: Implementation of the method in Expokit.</li>
+</ul>
+
 <!-- ==================== INSTANCE METHODS ==================== -->
 <a name="section-InstanceMethods"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -129,6 +136,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="EXPOKIT"></a><span class="summary-name">EXPOKIT</span> = <code title="'expokit'"><code class="variable-quote">'</code><code class="variable-string">expokit</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
         <a name="KRYLOV"></a><span class="summary-name">KRYLOV</span> = <code title="'krylov'"><code class="variable-quote">'</code><code class="variable-string">krylov</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -189,14 +203,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:42 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.NEP-class.html b/docs/apiref/slepc4py.SLEPc.NEP-class.html
index d07de9a..15f83db 100644
--- a/docs/apiref/slepc4py.SLEPc.NEP-class.html
+++ b/docs/apiref/slepc4py.SLEPc.NEP-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class NEP</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_nep" name="class_hierarchy_for_nep">
-<area shape="rect" id="node1" href="javascript:void(0);" title="petsc4py.PETSc.Object" alt="" coords="5,6,168,31"/>
-<area shape="rect" id="node2" href="slepc4py.SLEPc.NEP-class.html" title="NEP" alt="" coords="61,62,112,87"/>
+<area shape="rect" id="node1" href="javascript:void(0);" title="petsc4py.PETSc.Object" alt="" coords="5,5,168,31"/>
+<area shape="rect" id="node2" href="slepc4py.SLEPc.NEP-class.html" title="NEP" alt="" coords="61,60,112,85"/>
 </map>
   <img src="class_hierarchy_for_nep.png" alt='' usemap="#class_hierarchy_for_nep" ismap="ismap" class="graph-without-title" />
 </center>
@@ -109,6 +109,22 @@ NEP
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a href="slepc4py.SLEPc.NEP.Refine-class.html" class="summary-name">Refine</a><br />
+      NEP refinement strategy
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+        <a href="slepc4py.SLEPc.NEP.RefineScheme-class.html" class="summary-name">RefineScheme</a><br />
+      Scheme for solving linear systems during iterative refinement
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
         <a href="slepc4py.SLEPc.NEP.Type-class.html" class="summary-name">Type</a><br />
       NEP type
     </td>
@@ -252,6 +268,26 @@ computed eigenpair.</td>
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.NEP-class.html#errorView" class="summary-sig-name">errorView</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">etype</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">Viewer viewer</span>=<span class="summary-sig-default">None</span>)</span><br />
+      Displays the errors associated with the computed solution
+(as well as the eigenvalues).</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
           <td><span class="summary-sig"><a href="slepc4py.SLEPc.NEP-class.html#getBV" class="summary-sig-name">getBV</a>(<span class="summary-sig-arg">self</span>)</span><br />
       Obtain the basis vectors object associated to the eigensolver.</td>
           <td align="right" valign="top">
@@ -378,8 +414,9 @@ eigenpair.</td>
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a href="slepc4py.SLEPc.NEP-class.html#getLagPreconditioner" class="summary-sig-name">getLagPreconditioner</a>(<span class="summary-sig-arg">self</span>)</span><br />
-      Indicates how often the preconditioner is rebuilt.</td>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.NEP-class.html#getOptionsPrefix" class="summary-sig-name">getOptionsPrefix</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Gets the prefix used for searching for all NEP options in the
+database.</td>
           <td align="right" valign="top">
             
             
@@ -395,9 +432,25 @@ eigenpair.</td>
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a href="slepc4py.SLEPc.NEP-class.html#getOptionsPrefix" class="summary-sig-name">getOptionsPrefix</a>(<span class="summary-sig-arg">self</span>)</span><br />
-      Gets the prefix used for searching for all NEP options in the
-database.</td>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.NEP-class.html#getRG" class="summary-sig-name">getRG</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Obtain the region object associated to the eigensolver.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.NEP-class.html#getRIILagPreconditioner" class="summary-sig-name">getRIILagPreconditioner</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Indicates how often the preconditioner is rebuilt.</td>
           <td align="right" valign="top">
             
             
@@ -620,10 +673,10 @@ as the location to store the matrix.</td>
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a href="slepc4py.SLEPc.NEP-class.html#setLagPreconditioner" class="summary-sig-name">setLagPreconditioner</a>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">lag</span>)</span><br />
-      Determines when the preconditioner is rebuilt in the
-nonlinear solve.</td>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.NEP-class.html#setOptionsPrefix" class="summary-sig-name">setOptionsPrefix</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">prefix</span>)</span><br />
+      Sets the prefix used for searching for all NEP options in the
+database.</td>
           <td align="right" valign="top">
             
             
@@ -639,10 +692,28 @@ nonlinear solve.</td>
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a href="slepc4py.SLEPc.NEP-class.html#setOptionsPrefix" class="summary-sig-name">setOptionsPrefix</a>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">prefix</span>)</span><br />
-      Sets the prefix used for searching for all NEP options in the
-database.</td>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.NEP-class.html#setRG" class="summary-sig-name">setRG</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">RG rg</span>)</span><br />
+      Associates a region object to the eigensolver.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.NEP-class.html#setRIILagPreconditioner" class="summary-sig-name">setRIILagPreconditioner</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">lag</span>)</span><br />
+      Determines when the preconditioner is rebuilt in the
+nonlinear solve.</td>
           <td align="right" valign="top">
             
             
@@ -680,12 +751,9 @@ in split form.</td>
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
           <td><span class="summary-sig"><a href="slepc4py.SLEPc.NEP-class.html#setTolerances" class="summary-sig-name">setTolerances</a>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">abstol</span>=<span class="summary-sig-default">None</span>,
-        <span class="summary-sig-arg">rtol</span>=<span class="summary-sig-default">None</span>,
-        <span class="summary-sig-arg">stol</span>=<span class="summary-sig-default">None</span>,
-        <span class="summary-sig-arg">maxit</span>=<span class="summary-sig-default">None</span>,
-        <span class="summary-sig-arg">maxf</span>=<span class="summary-sig-default">None</span>)</span><br />
-      Sets various parameters used in convergence tests.</td>
+        <span class="summary-sig-arg">tol</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">maxit</span>=<span class="summary-sig-default">None</span>)</span><br />
+      Sets the tolerance and maximum iteration count used in convergence tests.</td>
           <td align="right" valign="top">
             
             
@@ -1046,6 +1114,45 @@ processes.</dd>
   </dl>
 </td></tr></table>
 </div>
+<a name="errorView"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">errorView</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">etype</span>=<span class="sig-default">None</span>,
+        <span class="sig-arg">Viewer viewer</span>=<span class="sig-default">None</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Displays the errors associated with the computed solution
+(as well as the eigenvalues).</p>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
+<dl class="rst-docutils">
+<dt>etype: <a href="slepc4py.SLEPc.NEP.ErrorType-class.html" class="link">NEP.ErrorType</a> enumerate, optional</dt>
+<dd>The error type to compute.</dd>
+<dt>viewer: Viewer, optional.</dt>
+<dd>Visualization context; if not provided, the standard
+output is used.</dd>
+</dl>
+</div>
+<div class="rst-section" id="rst-notes">
+<h1 class="heading">Notes</h1>
+<p>By default, this function checks the error of all eigenpairs and prints
+the eigenvalues if all of them are below the requested tolerance.
+If the viewer has format <tt class="rst-docutils literal">ASCII_INFO_DETAIL</tt> then a table with
+eigenvalues and corresponding errors is printed.</p>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
 <a name="getBV"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
@@ -1261,59 +1368,85 @@ by the solution method.</p>
   </dl>
 </td></tr></table>
 </div>
-<a name="getLagPreconditioner"></a>
+<a name="getOptionsPrefix"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
        cellspacing="0" width="100%" bgcolor="white">
 <tr><td>
   <table width="100%" cellpadding="0" cellspacing="0" border="0">
   <tr valign="top"><td>
-  <h3 class="epydoc"><span class="sig"><span class="sig-name">getLagPreconditioner</span>(<span class="sig-arg">self</span>)</span>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getOptionsPrefix</span>(<span class="sig-arg">self</span>)</span>
   </h3>
   </td><td align="right" valign="top"
     > 
     </td>
   </tr></table>
   
-  <p>Indicates how often the preconditioner is rebuilt.</p>
+  <p>Gets the prefix used for searching for all NEP options in the
+database.</p>
 <div class="rst-section" id="rst-returns">
 <h1 class="heading">Returns</h1>
 <dl class="rst-docutils">
-<dt>lag: int</dt>
-<dd>The lag parameter.</dd>
+<dt>prefix: string</dt>
+<dd>The prefix string set for this NEP object.</dd>
 </dl>
 </div>
   <dl class="fields">
+    <dt>Overrides:
+        petsc4py.PETSc.Object.getOptionsPrefix
+    </dt>
   </dl>
 </td></tr></table>
 </div>
-<a name="getOptionsPrefix"></a>
+<a name="getRG"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
        cellspacing="0" width="100%" bgcolor="white">
 <tr><td>
   <table width="100%" cellpadding="0" cellspacing="0" border="0">
   <tr valign="top"><td>
-  <h3 class="epydoc"><span class="sig"><span class="sig-name">getOptionsPrefix</span>(<span class="sig-arg">self</span>)</span>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getRG</span>(<span class="sig-arg">self</span>)</span>
   </h3>
   </td><td align="right" valign="top"
     > 
     </td>
   </tr></table>
   
-  <p>Gets the prefix used for searching for all NEP options in the
-database.</p>
+  <p>Obtain the region object associated to the eigensolver.</p>
 <div class="rst-section" id="rst-returns">
 <h1 class="heading">Returns</h1>
 <dl class="rst-docutils">
-<dt>prefix: string</dt>
-<dd>The prefix string set for this NEP object.</dd>
+<dt>rg: RG</dt>
+<dd>The region context.</dd>
+</dl>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="getRIILagPreconditioner"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getRIILagPreconditioner</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Indicates how often the preconditioner is rebuilt.</p>
+<div class="rst-section" id="rst-returns">
+<h1 class="heading">Returns</h1>
+<dl class="rst-docutils">
+<dt>lag: int</dt>
+<dd>The lag parameter.</dd>
 </dl>
 </div>
   <dl class="fields">
-    <dt>Overrides:
-        petsc4py.PETSc.Object.getOptionsPrefix
-    </dt>
   </dl>
 </td></tr></table>
 </div>
@@ -1336,17 +1469,10 @@ default NEP convergence tests.</p>
 <div class="rst-section" id="rst-returns">
 <h1 class="heading">Returns</h1>
 <dl class="rst-docutils">
-<dt>abstol: float</dt>
-<dd>The absolute convergence tolerance.</dd>
-<dt>rtol: float</dt>
-<dd>The relative convergence tolerance.</dd>
-<dt>stol: float</dt>
-<dd>Convergence tolerance in terms of the norm of the change in the
-solution between steps, || delta x || < stol*|| x ||.</dd>
+<dt>tol: float</dt>
+<dd>The convergence tolerance.</dd>
 <dt>maxit: int</dt>
 <dd>The maximum number of iterations.</dd>
-<dt>maxf: int</dt>
-<dd>The maximum number of function evaluations.</dd>
 </dl>
 </div>
   <dl class="fields">
@@ -1618,64 +1744,91 @@ as the location to store the matrix.</p>
   </dl>
 </td></tr></table>
 </div>
-<a name="setLagPreconditioner"></a>
+<a name="setOptionsPrefix"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
        cellspacing="0" width="100%" bgcolor="white">
 <tr><td>
   <table width="100%" cellpadding="0" cellspacing="0" border="0">
   <tr valign="top"><td>
-  <h3 class="epydoc"><span class="sig"><span class="sig-name">setLagPreconditioner</span>(<span class="sig-arg">self</span>,
-        <span class="sig-arg">lag</span>)</span>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">setOptionsPrefix</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">prefix</span>)</span>
   </h3>
   </td><td align="right" valign="top"
     > 
     </td>
   </tr></table>
   
-  <p>Determines when the preconditioner is rebuilt in the
-nonlinear solve.</p>
+  <p>Sets the prefix used for searching for all NEP options in the
+database.</p>
 <div class="rst-section" id="rst-parameters">
 <h1 class="heading">Parameters</h1>
 <dl class="rst-docutils">
-<dt>lag: int</dt>
-<dd>0 indicates NEVER rebuild, 1 means rebuild every time the Jacobian is
-computed within the nonlinear iteration, 2 means every second time
-the Jacobian is built, etc.</dd>
+<dt>prefix: string</dt>
+<dd>The prefix string to prepend to all NEP option requests.</dd>
 </dl>
 </div>
   <dl class="fields">
+    <dt>Overrides:
+        petsc4py.PETSc.Object.setOptionsPrefix
+    </dt>
   </dl>
 </td></tr></table>
 </div>
-<a name="setOptionsPrefix"></a>
+<a name="setRG"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
        cellspacing="0" width="100%" bgcolor="white">
 <tr><td>
   <table width="100%" cellpadding="0" cellspacing="0" border="0">
   <tr valign="top"><td>
-  <h3 class="epydoc"><span class="sig"><span class="sig-name">setOptionsPrefix</span>(<span class="sig-arg">self</span>,
-        <span class="sig-arg">prefix</span>)</span>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">setRG</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">RG rg</span>)</span>
   </h3>
   </td><td align="right" valign="top"
     > 
     </td>
   </tr></table>
   
-  <p>Sets the prefix used for searching for all NEP options in the
-database.</p>
+  <p>Associates a region object to the eigensolver.</p>
 <div class="rst-section" id="rst-parameters">
 <h1 class="heading">Parameters</h1>
 <dl class="rst-docutils">
-<dt>prefix: string</dt>
-<dd>The prefix string to prepend to all NEP option requests.</dd>
+<dt>rg: RG</dt>
+<dd>The region context.</dd>
+</dl>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="setRIILagPreconditioner"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">setRIILagPreconditioner</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">lag</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Determines when the preconditioner is rebuilt in the
+nonlinear solve.</p>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
+<dl class="rst-docutils">
+<dt>lag: int</dt>
+<dd>0 indicates NEVER rebuild, 1 means rebuild every time the Jacobian is
+computed within the nonlinear iteration, 2 means every second time
+the Jacobian is built, etc.</dd>
 </dl>
 </div>
   <dl class="fields">
-    <dt>Overrides:
-        petsc4py.PETSc.Object.setOptionsPrefix
-    </dt>
   </dl>
 </td></tr></table>
 </div>
@@ -1721,32 +1874,22 @@ in split form.</p>
   <table width="100%" cellpadding="0" cellspacing="0" border="0">
   <tr valign="top"><td>
   <h3 class="epydoc"><span class="sig"><span class="sig-name">setTolerances</span>(<span class="sig-arg">self</span>,
-        <span class="sig-arg">abstol</span>=<span class="sig-default">None</span>,
-        <span class="sig-arg">rtol</span>=<span class="sig-default">None</span>,
-        <span class="sig-arg">stol</span>=<span class="sig-default">None</span>,
-        <span class="sig-arg">maxit</span>=<span class="sig-default">None</span>,
-        <span class="sig-arg">maxf</span>=<span class="sig-default">None</span>)</span>
+        <span class="sig-arg">tol</span>=<span class="sig-default">None</span>,
+        <span class="sig-arg">maxit</span>=<span class="sig-default">None</span>)</span>
   </h3>
   </td><td align="right" valign="top"
     > 
     </td>
   </tr></table>
   
-  <p>Sets various parameters used in convergence tests.</p>
+  <p>Sets the tolerance and maximum iteration count used in convergence tests.</p>
 <div class="rst-section" id="rst-parameters">
 <h1 class="heading">Parameters</h1>
 <dl class="rst-docutils">
-<dt>abstol: float, optional</dt>
-<dd>The absolute convergence tolerance.</dd>
-<dt>rtol: float, optional</dt>
-<dd>The relative convergence tolerance.</dd>
-<dt>stol: float, optional</dt>
-<dd>Convergence tolerance in terms of the norm of the change in the
-solution between steps, || delta x || < stol*|| x ||.</dd>
+<dt>tol: float, optional</dt>
+<dd>The convergence tolerance.</dd>
 <dt>maxit: int, optional</dt>
 <dd>The maximum number of iterations.</dd>
-<dt>maxf: int, optional</dt>
-<dd>The maximum number of function evaluations.</dd>
 </dl>
 </div>
   <dl class="fields">
@@ -1891,14 +2034,14 @@ output is used.</dd>
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:42 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.NEP.ConvergedReason-class.html b/docs/apiref/slepc4py.SLEPc.NEP.ConvergedReason-class.html
index 20d6bcd..5cfd232 100644
--- a/docs/apiref/slepc4py.SLEPc.NEP.ConvergedReason-class.html
+++ b/docs/apiref/slepc4py.SLEPc.NEP.ConvergedReason-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class ConvergedReason</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_convergedr_3" name="class_hierarchy_for_convergedr_3">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.NEP.ConvergedReason-class.html" title="ConvergedReason" alt="" coords="5,6,136,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.NEP.ConvergedReason-class.html" title="ConvergedReason" alt="" coords="5,5,136,31"/>
 </map>
   <img src="class_hierarchy_for_convergedr_3.png" alt='' usemap="#class_hierarchy_for_convergedr_3" ismap="ismap" class="graph-without-title" />
 </center>
@@ -129,20 +129,6 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="CONVERGED_FNORM_ABS"></a><span class="summary-name">CONVERGED_FNORM_ABS</span> = <code title="2">2</code>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
-        <a name="CONVERGED_FNORM_RELATIVE"></a><span class="summary-name">CONVERGED_FNORM_RELATIVE</span> = <code title="3">3</code>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
         <a name="CONVERGED_ITERATING"></a><span class="summary-name">CONVERGED_ITERATING</span> = <code title="0">0</code>
     </td>
   </tr>
@@ -150,42 +136,35 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="CONVERGED_SNORM_RELATIVE"></a><span class="summary-name">CONVERGED_SNORM_RELATIVE</span> = <code title="4">4</code>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
-        <a name="DIVERGED_BREAKDOWN"></a><span class="summary-name">DIVERGED_BREAKDOWN</span> = <code title="-4">-4</code>
+        <a name="CONVERGED_TOL"></a><span class="summary-name">CONVERGED_TOL</span> = <code title="1">1</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="DIVERGED_FNORM_NAN"></a><span class="summary-name">DIVERGED_FNORM_NAN</span> = <code title="-5">-5</code>
+        <a name="CONVERGED_USER"></a><span class="summary-name">CONVERGED_USER</span> = <code title="2">2</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="DIVERGED_FUNCTION_COUNT"></a><span class="summary-name">DIVERGED_FUNCTION_COUNT</span> = <code title="-2">-2</code>
+        <a name="DIVERGED_BREAKDOWN"></a><span class="summary-name">DIVERGED_BREAKDOWN</span> = <code title="-2">-2</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="DIVERGED_LINEAR_SOLVE"></a><span class="summary-name">DIVERGED_LINEAR_SOLVE</span> = <code title="-1">-1</code>
+        <a name="DIVERGED_ITS"></a><span class="summary-name">DIVERGED_ITS</span> = <code title="-1">-1</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="DIVERGED_MAX_IT"></a><span class="summary-name">DIVERGED_MAX_IT</span> = <code title="-3">-3</code>
+        <a name="DIVERGED_LINEAR_SOLVE"></a><span class="summary-name">DIVERGED_LINEAR_SOLVE</span> = <code title="-4">-4</code>
     </td>
   </tr>
 <tr>
@@ -252,14 +231,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:42 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.NEP.ErrorType-class.html b/docs/apiref/slepc4py.SLEPc.NEP.ErrorType-class.html
index 24b1660..35c994a 100644
--- a/docs/apiref/slepc4py.SLEPc.NEP.ErrorType-class.html
+++ b/docs/apiref/slepc4py.SLEPc.NEP.ErrorType-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class ErrorType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_errortype_2" name="class_hierarchy_for_errortype_2">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.NEP.ErrorType-class.html" title="ErrorType" alt="" coords="5,6,83,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.NEP.ErrorType-class.html" title="ErrorType" alt="" coords="5,5,84,31"/>
 </map>
   <img src="class_hierarchy_for_errortype_2.png" alt='' usemap="#class_hierarchy_for_errortype_2" ismap="ismap" class="graph-without-title" />
 </center>
@@ -75,6 +75,7 @@
 <ul class="rst-simple">
 <li><a href="slepc4py.SLEPc.NEP.ErrorType-class.html#ABSOLUTE" class="link">ABSOLUTE</a>:  Absolute error.</li>
 <li><a href="slepc4py.SLEPc.NEP.ErrorType-class.html#RELATIVE" class="link">RELATIVE</a>:  Relative error.</li>
+<li><a href="slepc4py.SLEPc.NEP.ErrorType-class.html#BACKWARD" class="link">BACKWARD</a>:  Backward error.</li>
 </ul>
 
 <!-- ==================== INSTANCE METHODS ==================== -->
@@ -142,6 +143,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="BACKWARD"></a><span class="summary-name">BACKWARD</span> = <code title="2">2</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
         <a name="RELATIVE"></a><span class="summary-name">RELATIVE</span> = <code title="1">1</code>
     </td>
   </tr>
@@ -202,14 +210,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:42 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.PEPRefine-class.html b/docs/apiref/slepc4py.SLEPc.NEP.Refine-class.html
similarity index 84%
copy from docs/apiref/slepc4py.SLEPc.PEPRefine-class.html
copy to docs/apiref/slepc4py.SLEPc.NEP.Refine-class.html
index 6fd412e..2df8996 100644
--- a/docs/apiref/slepc4py.SLEPc.PEPRefine-class.html
+++ b/docs/apiref/slepc4py.SLEPc.NEP.Refine-class.html
@@ -3,7 +3,7 @@
           "DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-  <title>slepc4py.SLEPc.PEPRefine</title>
+  <title>slepc4py.SLEPc.NEP.Refine</title>
   <link rel="stylesheet" href="epydoc.css" type="text/css" />
   <script type="text/javascript" src="epydoc.js"></script>
 </head>
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -44,7 +44,8 @@
       <span class="breadcrumbs">
         <a href="slepc4py-module.html">Package slepc4py</a> ::
         <a href="slepc4py.SLEPc-module.html">Module SLEPc</a> ::
-        Class PEPRefine
+        <a href="slepc4py.SLEPc.NEP-class.html">Class NEP</a> ::
+        Class Refine
       </span>
     </td>
     <td>
@@ -54,27 +55,27 @@
     onclick="toggle_private();">hide private</a>]</span></td></tr>
         <tr><td align="right"><span class="options"
             >[<a href="frames.html" target="_top">frames</a
-            >] | <a href="slepc4py.SLEPc.PEPRefine-class.html"
+            >] | <a href="slepc4py.SLEPc.NEP.Refine-class.html"
             target="_top">no frames</a>]</span></td></tr>
       </table>
     </td>
   </tr>
 </table>
 <!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class PEPRefine</h1><p class="nomargin-top"></p>
+<h1 class="epydoc">Class Refine</h1><p class="nomargin-top"></p>
 <center>
-<center>  <map id="class_hierarchy_for_peprefine" name="class_hierarchy_for_peprefine">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.PEPRefine-class.html" title="PEPRefine" alt="" coords="5,6,91,31"/>
+<center>  <map id="class_hierarchy_for_refine" name="class_hierarchy_for_refine">
+<area shape="rect" id="node1" href="slepc4py.SLEPc.NEP.Refine-class.html" title="Refine" alt="" coords="5,5,65,31"/>
 </map>
-  <img src="class_hierarchy_for_peprefine.png" alt='' usemap="#class_hierarchy_for_peprefine" ismap="ismap" class="graph-without-title" />
+  <img src="class_hierarchy_for_refine.png" alt='' usemap="#class_hierarchy_for_refine" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
-<p>PEP refinement strategy</p>
+<p>NEP refinement strategy</p>
 <ul class="rst-simple">
-<li><a href="slepc4py.SLEPc.PEPRefine-class.html#NONE" class="link">NONE</a>:</li>
-<li><a href="slepc4py.SLEPc.PEPRefine-class.html#SIMPLE" class="link">SIMPLE</a>:</li>
-<li><a href="slepc4py.SLEPc.PEPRefine-class.html#MULTIPLE" class="link">MULTIPLE</a>:</li>
+<li><a href="slepc4py.SLEPc.NEP.Refine-class.html#NONE" class="link">NONE</a>:     No refinement.</li>
+<li><a href="slepc4py.SLEPc.NEP.Refine-class.html#SIMPLE" class="link">SIMPLE</a>:   Refine eigenpairs one by one.</li>
+<li><a href="slepc4py.SLEPc.NEP.Refine-class.html#MULTIPLE" class="link">MULTIPLE</a>: Refine all eigenpairs simultaneously (invariant pair).</li>
 </ul>
 
 <!-- ==================== INSTANCE METHODS ==================== -->
@@ -156,7 +157,7 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="__qualname__"></a><span class="summary-name">__qualname__</span> = <code title="'PEPRefine'"><code class="variable-quote">'</code><code class="variable-string">PEPRefine</code><code class="variable-quote">'</code></code>
+        <a name="__qualname__"></a><span class="summary-name">__qualname__</span> = <code title="'NEPRefine'"><code class="variable-quote">'</code><code class="variable-string">NEPRefine</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
 </table>
@@ -209,14 +210,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:42 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.BV.RefineType-class.html b/docs/apiref/slepc4py.SLEPc.NEP.RefineScheme-class.html
similarity index 80%
copy from docs/apiref/slepc4py.SLEPc.BV.RefineType-class.html
copy to docs/apiref/slepc4py.SLEPc.NEP.RefineScheme-class.html
index 2c671bf..239ac3d 100644
--- a/docs/apiref/slepc4py.SLEPc.BV.RefineType-class.html
+++ b/docs/apiref/slepc4py.SLEPc.NEP.RefineScheme-class.html
@@ -3,7 +3,7 @@
           "DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-  <title>slepc4py.SLEPc.BV.RefineType</title>
+  <title>slepc4py.SLEPc.NEP.RefineScheme</title>
   <link rel="stylesheet" href="epydoc.css" type="text/css" />
   <script type="text/javascript" src="epydoc.js"></script>
 </head>
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -44,8 +44,8 @@
       <span class="breadcrumbs">
         <a href="slepc4py-module.html">Package slepc4py</a> ::
         <a href="slepc4py.SLEPc-module.html">Module SLEPc</a> ::
-        <a href="slepc4py.SLEPc.BV-class.html">Class BV</a> ::
-        Class RefineType
+        <a href="slepc4py.SLEPc.NEP-class.html">Class NEP</a> ::
+        Class RefineScheme
       </span>
     </td>
     <td>
@@ -55,27 +55,27 @@
     onclick="toggle_private();">hide private</a>]</span></td></tr>
         <tr><td align="right"><span class="options"
             >[<a href="frames.html" target="_top">frames</a
-            >] | <a href="slepc4py.SLEPc.BV.RefineType-class.html"
+            >] | <a href="slepc4py.SLEPc.NEP.RefineScheme-class.html"
             target="_top">no frames</a>]</span></td></tr>
       </table>
     </td>
   </tr>
 </table>
 <!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class RefineType</h1><p class="nomargin-top"></p>
+<h1 class="epydoc">Class RefineScheme</h1><p class="nomargin-top"></p>
 <center>
-<center>  <map id="class_hierarchy_for_refinetype" name="class_hierarchy_for_refinetype">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.BV.RefineType-class.html" title="RefineType" alt="" coords="5,6,93,31"/>
+<center>  <map id="class_hierarchy_for_refinesche" name="class_hierarchy_for_refinesche">
+<area shape="rect" id="node1" href="slepc4py.SLEPc.NEP.RefineScheme-class.html" title="RefineScheme" alt="" coords="5,5,113,31"/>
 </map>
-  <img src="class_hierarchy_for_refinetype.png" alt='' usemap="#class_hierarchy_for_refinetype" ismap="ismap" class="graph-without-title" />
+  <img src="class_hierarchy_for_refinesche.png" alt='' usemap="#class_hierarchy_for_refinesche" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
-<p>BV orthogonalization refinement types</p>
+<p>Scheme for solving linear systems during iterative refinement</p>
 <ul class="rst-simple">
-<li><a href="slepc4py.SLEPc.BV.RefineType-class.html#IFNEEDED" class="link">IFNEEDED</a>: Reorthogonalize if a criterion is satisfied.</li>
-<li><a href="slepc4py.SLEPc.BV.RefineType-class.html#NEVER" class="link">NEVER</a>:    Never reorthogonalize.</li>
-<li><a href="slepc4py.SLEPc.BV.RefineType-class.html#ALWAYS" class="link">ALWAYS</a>:   Always reorthogonalize.</li>
+<li><a href="slepc4py.SLEPc.NEP.RefineScheme-class.html#SCHUR" class="link">SCHUR</a>:    Schur complement.</li>
+<li><a href="slepc4py.SLEPc.NEP.RefineScheme-class.html#MBE" class="link">MBE</a>:      Mixed block elimination.</li>
+<li><a href="slepc4py.SLEPc.NEP.RefineScheme-class.html#EXPLICIT" class="link">EXPLICIT</a>: Build the explicit matrix.</li>
 </ul>
 
 <!-- ==================== INSTANCE METHODS ==================== -->
@@ -136,28 +136,28 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="ALWAYS"></a><span class="summary-name">ALWAYS</span> = <code title="2">2</code>
+        <a name="EXPLICIT"></a><span class="summary-name">EXPLICIT</span> = <code title="3">3</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="IFNEEDED"></a><span class="summary-name">IFNEEDED</span> = <code title="0">0</code>
+        <a name="MBE"></a><span class="summary-name">MBE</span> = <code title="2">2</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="NEVER"></a><span class="summary-name">NEVER</span> = <code title="1">1</code>
+        <a name="SCHUR"></a><span class="summary-name">SCHUR</span> = <code title="1">1</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="__qualname__"></a><span class="summary-name">__qualname__</span> = <code title="'BVOrthogRefineType'"><code class="variable-quote">'</code><code class="variable-string">BVOrthogRefineType</code><code class="variable-quote">'</code></code>
+        <a name="__qualname__"></a><span class="summary-name">__qualname__</span> = <code title="'NEPRefineScheme'"><code class="variable-quote">'</code><code class="variable-string">NEPRefineScheme</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
 </table>
@@ -210,14 +210,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:04 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:42 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.NEP.Type-class.html b/docs/apiref/slepc4py.SLEPc.NEP.Type-class.html
index fe7fdc8..639d307 100644
--- a/docs/apiref/slepc4py.SLEPc.NEP.Type-class.html
+++ b/docs/apiref/slepc4py.SLEPc.NEP.Type-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Type</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_type_6" name="class_hierarchy_for_type_6">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.NEP.Type-class.html" title="Type" alt="" coords="5,6,56,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.NEP.Type-class.html" title="Type" alt="" coords="5,5,56,31"/>
 </map>
   <img src="class_hierarchy_for_type_6.png" alt='' usemap="#class_hierarchy_for_type_6" ismap="ismap" class="graph-without-title" />
 </center>
@@ -79,6 +79,7 @@
 <li><a href="slepc4py.SLEPc.NEP.Type-class.html#NARNOLDI" class="link">NARNOLDI</a>: Nonlinear Arnoldi.</li>
 <li><a href="slepc4py.SLEPc.NEP.Type-class.html#CISS" class="link">CISS</a>:     Contour integral spectrum slice.</li>
 <li><a href="slepc4py.SLEPc.NEP.Type-class.html#INTERPOL" class="link">INTERPOL</a>: Polynomial interpolation.</li>
+<li><a href="slepc4py.SLEPc.NEP.Type-class.html#NLEIGS" class="link">NLEIGS</a>:   Fully rational Krylov method for nonlinear eigenproblems.</li>
 </ul>
 
 <!-- ==================== INSTANCE METHODS ==================== -->
@@ -160,6 +161,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="NLEIGS"></a><span class="summary-name">NLEIGS</span> = <code title="'nleigs'"><code class="variable-quote">'</code><code class="variable-string">nleigs</code><code class="variable-quote">'</code></code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
         <a name="RII"></a><span class="summary-name">RII</span> = <code title="'rii'"><code class="variable-quote">'</code><code class="variable-string">rii</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -227,14 +235,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:42 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.NEP.Which-class.html b/docs/apiref/slepc4py.SLEPc.NEP.Which-class.html
index 4d5a476..22a650d 100644
--- a/docs/apiref/slepc4py.SLEPc.NEP.Which-class.html
+++ b/docs/apiref/slepc4py.SLEPc.NEP.Which-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Which</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_which_2" name="class_hierarchy_for_which_2">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.NEP.Which-class.html" title="Which" alt="" coords="5,6,64,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.NEP.Which-class.html" title="Which" alt="" coords="5,5,64,31"/>
 </map>
   <img src="class_hierarchy_for_which_2.png" alt='' usemap="#class_hierarchy_for_which_2" ismap="ismap" class="graph-without-title" />
 </center>
@@ -129,6 +129,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="ALL"></a><span class="summary-name">ALL</span> = <code title="10">10</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
         <a name="LARGEST_IMAGINARY"></a><span class="summary-name">LARGEST_IMAGINARY</span> = <code title="5">5</code>
     </td>
   </tr>
@@ -192,6 +199,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="USER"></a><span class="summary-name">USER</span> = <code title="11">11</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
         <a name="__qualname__"></a><span class="summary-name">__qualname__</span> = <code title="'NEPWhich'"><code class="variable-quote">'</code><code class="variable-string">NEPWhich</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -245,14 +259,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:42 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.PEP-class.html b/docs/apiref/slepc4py.SLEPc.PEP-class.html
index 19a9aad..bc66e8a 100644
--- a/docs/apiref/slepc4py.SLEPc.PEP-class.html
+++ b/docs/apiref/slepc4py.SLEPc.PEP-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class PEP</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_pep" name="class_hierarchy_for_pep">
-<area shape="rect" id="node1" href="javascript:void(0);" title="petsc4py.PETSc.Object" alt="" coords="5,6,168,31"/>
-<area shape="rect" id="node2" href="slepc4py.SLEPc.PEP-class.html" title="PEP" alt="" coords="62,62,111,87"/>
+<area shape="rect" id="node1" href="javascript:void(0);" title="petsc4py.PETSc.Object" alt="" coords="5,5,168,31"/>
+<area shape="rect" id="node2" href="slepc4py.SLEPc.PEP-class.html" title="PEP" alt="" coords="62,60,111,85"/>
 </map>
   <img src="class_hierarchy_for_pep.png" alt='' usemap="#class_hierarchy_for_pep" ismap="ismap" class="graph-without-title" />
 </center>
@@ -125,6 +125,15 @@ PEP
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a href="slepc4py.SLEPc.PEP.Extract-class.html" class="summary-name">Extract</a><br />
+      Extraction strategy used to obtain eigenvectors of the PEP from the
+eigenvectors of the linearization
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
         <a href="slepc4py.SLEPc.PEP.ProblemType-class.html" class="summary-name">ProblemType</a><br />
       PEP problem type
     </td>
@@ -133,7 +142,7 @@ PEP
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a href="slepc4py.SLEPc.PEPRefine-class.html" class="summary-name">Refine</a><br />
+        <a href="slepc4py.SLEPc.PEP.Refine-class.html" class="summary-name">Refine</a><br />
       PEP refinement strategy
     </td>
   </tr>
@@ -141,7 +150,16 @@ PEP
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a href="slepc4py.SLEPc.PEP.Scale-class.html" class="summary-name">Scale</a>
+        <a href="slepc4py.SLEPc.PEP.RefineScheme-class.html" class="summary-name">RefineScheme</a><br />
+      Scheme for solving linear systems during iterative refinement
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+        <a href="slepc4py.SLEPc.PEP.Scale-class.html" class="summary-name">Scale</a><br />
+      PEP scaling strategy
     </td>
   </tr>
 <tr>
@@ -292,6 +310,26 @@ computed eigenpair.</td>
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.PEP-class.html#errorView" class="summary-sig-name">errorView</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">etype</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">Viewer viewer</span>=<span class="summary-sig-default">None</span>)</span><br />
+      Displays the errors associated with the computed solution
+(as well as the eigenvalues).</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
           <td><span class="summary-sig"><a href="slepc4py.SLEPc.PEP-class.html#getBV" class="summary-sig-name">getBV</a>(<span class="summary-sig-arg">self</span>)</span><br />
       Obtain the basis vectors object associated to the eigensolver.</td>
           <td align="right" valign="top">
@@ -560,6 +598,23 @@ database.</td>
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.PEP-class.html#getRG" class="summary-sig-name">getRG</a>(<span class="summary-sig-arg">self</span>)</span><br />
+      Obtain the region object associated to the eigensolver.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
           <td><span class="summary-sig"><a href="slepc4py.SLEPc.PEP-class.html#getRefine" class="summary-sig-name">getRefine</a>(<span class="summary-sig-arg">self</span>)</span><br />
       Gets the refinement strategy used by the PEP object,
 and the associated parameters.</td>
@@ -926,12 +981,30 @@ database.</td>
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.PEP-class.html#setRG" class="summary-sig-name">setRG</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">RG rg</span>)</span><br />
+      Associates a region object to the eigensolver.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
           <td><span class="summary-sig"><a href="slepc4py.SLEPc.PEP-class.html#setRefine" class="summary-sig-name">setRefine</a>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">ref</span>,
         <span class="summary-sig-arg">npart</span>=<span class="summary-sig-default">None</span>,
         <span class="summary-sig-arg">tol</span>=<span class="summary-sig-default">None</span>,
         <span class="summary-sig-arg">its</span>=<span class="summary-sig-default">None</span>,
-        <span class="summary-sig-arg">schur</span>=<span class="summary-sig-default">None</span>)</span><br />
+        <span class="summary-sig-arg">scheme</span>=<span class="summary-sig-default">None</span>)</span><br />
       Sets the refinement strategy used by the PEP object,
 and the associated parameters.</td>
           <td align="right" valign="top">
@@ -1362,6 +1435,45 @@ processes.</dd>
   </dl>
 </td></tr></table>
 </div>
+<a name="errorView"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">errorView</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">etype</span>=<span class="sig-default">None</span>,
+        <span class="sig-arg">Viewer viewer</span>=<span class="sig-default">None</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Displays the errors associated with the computed solution
+(as well as the eigenvalues).</p>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
+<dl class="rst-docutils">
+<dt>etype: <a href="slepc4py.SLEPc.PEP.ErrorType-class.html" class="link">PEP.ErrorType</a> enumerate, optional</dt>
+<dd>The error type to compute.</dd>
+<dt>viewer: Viewer, optional.</dt>
+<dd>Visualization context; if not provided, the standard
+output is used.</dd>
+</dl>
+</div>
+<div class="rst-section" id="rst-notes">
+<h1 class="heading">Notes</h1>
+<p>By default, this function checks the error of all eigenpairs and prints
+the eigenvalues if all of them are below the requested tolerance.
+If the viewer has format <tt class="rst-docutils literal">ASCII_INFO_DETAIL</tt> then a table with
+eigenvalues and corresponding errors is printed.</p>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
 <a name="getBV"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
@@ -1792,6 +1904,32 @@ database.</p>
   </dl>
 </td></tr></table>
 </div>
+<a name="getRG"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">getRG</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Obtain the region object associated to the eigensolver.</p>
+<div class="rst-section" id="rst-returns">
+<h1 class="heading">Returns</h1>
+<dl class="rst-docutils">
+<dt>rg: RG</dt>
+<dd>The region context.</dd>
+</dl>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
 <a name="getRefine"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
@@ -1819,8 +1957,8 @@ and the associated parameters.</p>
 <dd>The convergence tolerance.</dd>
 <dt>its: int</dt>
 <dd>The maximum number of refinement iterations.</dd>
-<dt>schur: bool</dt>
-<dd>Whether the Schur complement approach is being used</dd>
+<dt>scheme: PEP.RefineScheme</dt>
+<dd>Scheme for solving linear systems</dd>
 </dl>
 </div>
   <dl class="fields">
@@ -2347,6 +2485,33 @@ database.</p>
   </dl>
 </td></tr></table>
 </div>
+<a name="setRG"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">setRG</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">RG rg</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Associates a region object to the eigensolver.</p>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
+<dl class="rst-docutils">
+<dt>rg: RG</dt>
+<dd>The region context.</dd>
+</dl>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
 <a name="setRefine"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
@@ -2359,7 +2524,7 @@ database.</p>
         <span class="sig-arg">npart</span>=<span class="sig-default">None</span>,
         <span class="sig-arg">tol</span>=<span class="sig-default">None</span>,
         <span class="sig-arg">its</span>=<span class="sig-default">None</span>,
-        <span class="sig-arg">schur</span>=<span class="sig-default">None</span>)</span>
+        <span class="sig-arg">scheme</span>=<span class="sig-default">None</span>)</span>
   </h3>
   </td><td align="right" valign="top"
     > 
@@ -2379,8 +2544,8 @@ and the associated parameters.</p>
 <dd>The convergence tolerance.</dd>
 <dt>its: int, optional</dt>
 <dd>The maximum number of refinement iterations.</dd>
-<dt>schur: bool, optional</dt>
-<dd>Whether the Schur complement approach is being used</dd>
+<dt>scheme: PEP.RefineScheme, optional</dt>
+<dd>Scheme for linear system solves</dd>
 </dl>
 </div>
   <dl class="fields">
@@ -2627,14 +2792,14 @@ output is used.</dd>
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:42 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.PEP.Basis-class.html b/docs/apiref/slepc4py.SLEPc.PEP.Basis-class.html
index 4a6f0aa..f2eb403 100644
--- a/docs/apiref/slepc4py.SLEPc.PEP.Basis-class.html
+++ b/docs/apiref/slepc4py.SLEPc.PEP.Basis-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Basis</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_basis" name="class_hierarchy_for_basis">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.PEP.Basis-class.html" title="Basis" alt="" coords="5,6,59,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.PEP.Basis-class.html" title="Basis" alt="" coords="5,5,60,31"/>
 </map>
   <img src="class_hierarchy_for_basis.png" alt='' usemap="#class_hierarchy_for_basis" ismap="ismap" class="graph-without-title" />
 </center>
@@ -224,14 +224,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:43 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.PEP.Conv-class.html b/docs/apiref/slepc4py.SLEPc.PEP.Conv-class.html
index f13600c..32c400e 100644
--- a/docs/apiref/slepc4py.SLEPc.PEP.Conv-class.html
+++ b/docs/apiref/slepc4py.SLEPc.PEP.Conv-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Conv</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_conv_2" name="class_hierarchy_for_conv_2">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.PEP.Conv-class.html" title="Conv" alt="" coords="5,6,59,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.PEP.Conv-class.html" title="Conv" alt="" coords="5,5,59,31"/>
 </map>
   <img src="class_hierarchy_for_conv_2.png" alt='' usemap="#class_hierarchy_for_conv_2" ismap="ismap" class="graph-without-title" />
 </center>
@@ -74,7 +74,7 @@
 <p>PEP convergence test</p>
 <ul class="rst-simple">
 <li><a href="slepc4py.SLEPc.PEP.Conv-class.html#ABS" class="link">ABS</a>:</li>
-<li><a href="slepc4py.SLEPc.PEP.Conv-class.html#EIG" class="link">EIG</a>:</li>
+<li><a href="slepc4py.SLEPc.PEP.Conv-class.html#REL" class="link">REL</a>:</li>
 <li><a href="slepc4py.SLEPc.PEP.Conv-class.html#NORM" class="link">NORM</a>:</li>
 <li><a href="slepc4py.SLEPc.PEP.Conv-class.html#USER" class="link">USER</a>:</li>
 </ul>
@@ -144,14 +144,14 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="EIG"></a><span class="summary-name">EIG</span> = <code title="1">1</code>
+        <a name="NORM"></a><span class="summary-name">NORM</span> = <code title="2">2</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="NORM"></a><span class="summary-name">NORM</span> = <code title="2">2</code>
+        <a name="REL"></a><span class="summary-name">REL</span> = <code title="1">1</code>
     </td>
   </tr>
 <tr>
@@ -218,14 +218,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:43 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.PEP.ConvergedReason-class.html b/docs/apiref/slepc4py.SLEPc.PEP.ConvergedReason-class.html
index b174a20..998331d 100644
--- a/docs/apiref/slepc4py.SLEPc.PEP.ConvergedReason-class.html
+++ b/docs/apiref/slepc4py.SLEPc.PEP.ConvergedReason-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class ConvergedReason</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_convergedr_4" name="class_hierarchy_for_convergedr_4">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.PEP.ConvergedReason-class.html" title="ConvergedReason" alt="" coords="5,6,136,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.PEP.ConvergedReason-class.html" title="ConvergedReason" alt="" coords="5,5,136,31"/>
 </map>
   <img src="class_hierarchy_for_convergedr_4.png" alt='' usemap="#class_hierarchy_for_convergedr_4" ismap="ismap" class="graph-without-title" />
 </center>
@@ -74,8 +74,10 @@
 <p>PEP convergence reasons</p>
 <ul class="rst-simple">
 <li><a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html#CONVERGED_TOL" class="link">CONVERGED_TOL</a>:</li>
+<li><a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html#CONVERGED_USER" class="link">CONVERGED_USER</a>:</li>
 <li><a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html#DIVERGED_ITS" class="link">DIVERGED_ITS</a>:</li>
 <li><a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html#DIVERGED_BREAKDOWN" class="link">DIVERGED_BREAKDOWN</a>:</li>
+<li><a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html#DIVERGED_SYMMETRY_LOST" class="link">DIVERGED_SYMMETRY_LOST</a>:</li>
 <li><a href="slepc4py.SLEPc.PEP.ConvergedReason-class.html#CONVERGED_ITERATING" class="link">CONVERGED_ITERATING</a>:</li>
 </ul>
 
@@ -144,21 +146,35 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="CONVERGED_TOL"></a><span class="summary-name">CONVERGED_TOL</span> = <code title="2">2</code>
+        <a name="CONVERGED_TOL"></a><span class="summary-name">CONVERGED_TOL</span> = <code title="1">1</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="DIVERGED_BREAKDOWN"></a><span class="summary-name">DIVERGED_BREAKDOWN</span> = <code title="-4">-4</code>
+        <a name="CONVERGED_USER"></a><span class="summary-name">CONVERGED_USER</span> = <code title="2">2</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="DIVERGED_ITS"></a><span class="summary-name">DIVERGED_ITS</span> = <code title="-3">-3</code>
+        <a name="DIVERGED_BREAKDOWN"></a><span class="summary-name">DIVERGED_BREAKDOWN</span> = <code title="-2">-2</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+        <a name="DIVERGED_ITS"></a><span class="summary-name">DIVERGED_ITS</span> = <code title="-1">-1</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+        <a name="DIVERGED_SYMMETRY_LOST"></a><span class="summary-name">DIVERGED_SYMMETRY_LOST</span> = <code title="-3">-3</code>
     </td>
   </tr>
 <tr>
@@ -225,14 +241,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:43 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.PEP.ErrorType-class.html b/docs/apiref/slepc4py.SLEPc.PEP.ErrorType-class.html
index b2a4dcc..9191566 100644
--- a/docs/apiref/slepc4py.SLEPc.PEP.ErrorType-class.html
+++ b/docs/apiref/slepc4py.SLEPc.PEP.ErrorType-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class ErrorType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_errortype_3" name="class_hierarchy_for_errortype_3">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.PEP.ErrorType-class.html" title="ErrorType" alt="" coords="5,6,83,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.PEP.ErrorType-class.html" title="ErrorType" alt="" coords="5,5,84,31"/>
 </map>
   <img src="class_hierarchy_for_errortype_3.png" alt='' usemap="#class_hierarchy_for_errortype_3" ismap="ismap" class="graph-without-title" />
 </center>
@@ -210,14 +210,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:43 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.PEP.Conv-class.html b/docs/apiref/slepc4py.SLEPc.PEP.Extract-class.html
similarity index 79%
copy from docs/apiref/slepc4py.SLEPc.PEP.Conv-class.html
copy to docs/apiref/slepc4py.SLEPc.PEP.Extract-class.html
index f13600c..824fb65 100644
--- a/docs/apiref/slepc4py.SLEPc.PEP.Conv-class.html
+++ b/docs/apiref/slepc4py.SLEPc.PEP.Extract-class.html
@@ -3,7 +3,7 @@
           "DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-  <title>slepc4py.SLEPc.PEP.Conv</title>
+  <title>slepc4py.SLEPc.PEP.Extract</title>
   <link rel="stylesheet" href="epydoc.css" type="text/css" />
   <script type="text/javascript" src="epydoc.js"></script>
 </head>
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -45,7 +45,7 @@
         <a href="slepc4py-module.html">Package slepc4py</a> ::
         <a href="slepc4py.SLEPc-module.html">Module SLEPc</a> ::
         <a href="slepc4py.SLEPc.PEP-class.html">Class PEP</a> ::
-        Class Conv
+        Class Extract
       </span>
     </td>
     <td>
@@ -55,28 +55,29 @@
     onclick="toggle_private();">hide private</a>]</span></td></tr>
         <tr><td align="right"><span class="options"
             >[<a href="frames.html" target="_top">frames</a
-            >] | <a href="slepc4py.SLEPc.PEP.Conv-class.html"
+            >] | <a href="slepc4py.SLEPc.PEP.Extract-class.html"
             target="_top">no frames</a>]</span></td></tr>
       </table>
     </td>
   </tr>
 </table>
 <!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Conv</h1><p class="nomargin-top"></p>
+<h1 class="epydoc">Class Extract</h1><p class="nomargin-top"></p>
 <center>
-<center>  <map id="class_hierarchy_for_conv_2" name="class_hierarchy_for_conv_2">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.PEP.Conv-class.html" title="Conv" alt="" coords="5,6,59,31"/>
+<center>  <map id="class_hierarchy_for_extract" name="class_hierarchy_for_extract">
+<area shape="rect" id="node1" href="slepc4py.SLEPc.PEP.Extract-class.html" title="Extract" alt="" coords="5,5,69,31"/>
 </map>
-  <img src="class_hierarchy_for_conv_2.png" alt='' usemap="#class_hierarchy_for_conv_2" ismap="ismap" class="graph-without-title" />
+  <img src="class_hierarchy_for_extract.png" alt='' usemap="#class_hierarchy_for_extract" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
-<p>PEP convergence test</p>
+<p>Extraction strategy used to obtain eigenvectors of the PEP from the
+eigenvectors of the linearization</p>
 <ul class="rst-simple">
-<li><a href="slepc4py.SLEPc.PEP.Conv-class.html#ABS" class="link">ABS</a>:</li>
-<li><a href="slepc4py.SLEPc.PEP.Conv-class.html#EIG" class="link">EIG</a>:</li>
-<li><a href="slepc4py.SLEPc.PEP.Conv-class.html#NORM" class="link">NORM</a>:</li>
-<li><a href="slepc4py.SLEPc.PEP.Conv-class.html#USER" class="link">USER</a>:</li>
+<li><a href="slepc4py.SLEPc.PEP.Extract-class.html#NONE" class="link">NONE</a>:       Use the first block.</li>
+<li><a href="slepc4py.SLEPc.PEP.Extract-class.html#NORM" class="link">NORM</a>:       Use the first or last block depending on norm of H.</li>
+<li><a href="slepc4py.SLEPc.PEP.Extract-class.html#RESIDUAL" class="link">RESIDUAL</a>:   Use the block with smallest residual.</li>
+<li><a href="slepc4py.SLEPc.PEP.Extract-class.html#STRUCTURED" class="link">STRUCTURED</a>: Combine all blocks in a certain way.</li>
 </ul>
 
 <!-- ==================== INSTANCE METHODS ==================== -->
@@ -137,35 +138,35 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="ABS"></a><span class="summary-name">ABS</span> = <code title="0">0</code>
+        <a name="NONE"></a><span class="summary-name">NONE</span> = <code title="1">1</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="EIG"></a><span class="summary-name">EIG</span> = <code title="1">1</code>
+        <a name="NORM"></a><span class="summary-name">NORM</span> = <code title="2">2</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="NORM"></a><span class="summary-name">NORM</span> = <code title="2">2</code>
+        <a name="RESIDUAL"></a><span class="summary-name">RESIDUAL</span> = <code title="3">3</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="USER"></a><span class="summary-name">USER</span> = <code title="3">3</code>
+        <a name="STRUCTURED"></a><span class="summary-name">STRUCTURED</span> = <code title="4">4</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="__qualname__"></a><span class="summary-name">__qualname__</span> = <code title="'PEPConv'"><code class="variable-quote">'</code><code class="variable-string">PEPConv</code><code class="variable-quote">'</code></code>
+        <a name="__qualname__"></a><span class="summary-name">__qualname__</span> = <code title="'PEPExtract'"><code class="variable-quote">'</code><code class="variable-string">PEPExtract</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
 </table>
@@ -218,14 +219,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:43 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.PEP.ProblemType-class.html b/docs/apiref/slepc4py.SLEPc.PEP.ProblemType-class.html
index 160c798..23c77e1 100644
--- a/docs/apiref/slepc4py.SLEPc.PEP.ProblemType-class.html
+++ b/docs/apiref/slepc4py.SLEPc.PEP.ProblemType-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class ProblemType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_problemtyp_2" name="class_hierarchy_for_problemtyp_2">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.PEP.ProblemType-class.html" title="ProblemType" alt="" coords="5,6,104,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.PEP.ProblemType-class.html" title="ProblemType" alt="" coords="5,5,104,31"/>
 </map>
   <img src="class_hierarchy_for_problemtyp_2.png" alt='' usemap="#class_hierarchy_for_problemtyp_2" ismap="ismap" class="graph-without-title" />
 </center>
@@ -210,14 +210,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:43 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.PEPRefine-class.html b/docs/apiref/slepc4py.SLEPc.PEP.Refine-class.html
similarity index 86%
rename from docs/apiref/slepc4py.SLEPc.PEPRefine-class.html
rename to docs/apiref/slepc4py.SLEPc.PEP.Refine-class.html
index 6fd412e..bb17598 100644
--- a/docs/apiref/slepc4py.SLEPc.PEPRefine-class.html
+++ b/docs/apiref/slepc4py.SLEPc.PEP.Refine-class.html
@@ -3,7 +3,7 @@
           "DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-  <title>slepc4py.SLEPc.PEPRefine</title>
+  <title>slepc4py.SLEPc.PEP.Refine</title>
   <link rel="stylesheet" href="epydoc.css" type="text/css" />
   <script type="text/javascript" src="epydoc.js"></script>
 </head>
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -44,7 +44,8 @@
       <span class="breadcrumbs">
         <a href="slepc4py-module.html">Package slepc4py</a> ::
         <a href="slepc4py.SLEPc-module.html">Module SLEPc</a> ::
-        Class PEPRefine
+        <a href="slepc4py.SLEPc.PEP-class.html">Class PEP</a> ::
+        Class Refine
       </span>
     </td>
     <td>
@@ -54,27 +55,27 @@
     onclick="toggle_private();">hide private</a>]</span></td></tr>
         <tr><td align="right"><span class="options"
             >[<a href="frames.html" target="_top">frames</a
-            >] | <a href="slepc4py.SLEPc.PEPRefine-class.html"
+            >] | <a href="slepc4py.SLEPc.PEP.Refine-class.html"
             target="_top">no frames</a>]</span></td></tr>
       </table>
     </td>
   </tr>
 </table>
 <!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class PEPRefine</h1><p class="nomargin-top"></p>
+<h1 class="epydoc">Class Refine</h1><p class="nomargin-top"></p>
 <center>
-<center>  <map id="class_hierarchy_for_peprefine" name="class_hierarchy_for_peprefine">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.PEPRefine-class.html" title="PEPRefine" alt="" coords="5,6,91,31"/>
+<center>  <map id="class_hierarchy_for_refine_2" name="class_hierarchy_for_refine_2">
+<area shape="rect" id="node1" href="slepc4py.SLEPc.PEP.Refine-class.html" title="Refine" alt="" coords="5,5,65,31"/>
 </map>
-  <img src="class_hierarchy_for_peprefine.png" alt='' usemap="#class_hierarchy_for_peprefine" ismap="ismap" class="graph-without-title" />
+  <img src="class_hierarchy_for_refine_2.png" alt='' usemap="#class_hierarchy_for_refine_2" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
 <p>PEP refinement strategy</p>
 <ul class="rst-simple">
-<li><a href="slepc4py.SLEPc.PEPRefine-class.html#NONE" class="link">NONE</a>:</li>
-<li><a href="slepc4py.SLEPc.PEPRefine-class.html#SIMPLE" class="link">SIMPLE</a>:</li>
-<li><a href="slepc4py.SLEPc.PEPRefine-class.html#MULTIPLE" class="link">MULTIPLE</a>:</li>
+<li><a href="slepc4py.SLEPc.PEP.Refine-class.html#NONE" class="link">NONE</a>:     No refinement.</li>
+<li><a href="slepc4py.SLEPc.PEP.Refine-class.html#SIMPLE" class="link">SIMPLE</a>:   Refine eigenpairs one by one.</li>
+<li><a href="slepc4py.SLEPc.PEP.Refine-class.html#MULTIPLE" class="link">MULTIPLE</a>: Refine all eigenpairs simultaneously (invariant pair).</li>
 </ul>
 
 <!-- ==================== INSTANCE METHODS ==================== -->
@@ -209,14 +210,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:43 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.PEP.ProblemType-class.html b/docs/apiref/slepc4py.SLEPc.PEP.RefineScheme-class.html
similarity index 80%
copy from docs/apiref/slepc4py.SLEPc.PEP.ProblemType-class.html
copy to docs/apiref/slepc4py.SLEPc.PEP.RefineScheme-class.html
index 160c798..7654d02 100644
--- a/docs/apiref/slepc4py.SLEPc.PEP.ProblemType-class.html
+++ b/docs/apiref/slepc4py.SLEPc.PEP.RefineScheme-class.html
@@ -3,7 +3,7 @@
           "DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-  <title>slepc4py.SLEPc.PEP.ProblemType</title>
+  <title>slepc4py.SLEPc.PEP.RefineScheme</title>
   <link rel="stylesheet" href="epydoc.css" type="text/css" />
   <script type="text/javascript" src="epydoc.js"></script>
 </head>
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -45,7 +45,7 @@
         <a href="slepc4py-module.html">Package slepc4py</a> ::
         <a href="slepc4py.SLEPc-module.html">Module SLEPc</a> ::
         <a href="slepc4py.SLEPc.PEP-class.html">Class PEP</a> ::
-        Class ProblemType
+        Class RefineScheme
       </span>
     </td>
     <td>
@@ -55,27 +55,27 @@
     onclick="toggle_private();">hide private</a>]</span></td></tr>
         <tr><td align="right"><span class="options"
             >[<a href="frames.html" target="_top">frames</a
-            >] | <a href="slepc4py.SLEPc.PEP.ProblemType-class.html"
+            >] | <a href="slepc4py.SLEPc.PEP.RefineScheme-class.html"
             target="_top">no frames</a>]</span></td></tr>
       </table>
     </td>
   </tr>
 </table>
 <!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class ProblemType</h1><p class="nomargin-top"></p>
+<h1 class="epydoc">Class RefineScheme</h1><p class="nomargin-top"></p>
 <center>
-<center>  <map id="class_hierarchy_for_problemtyp_2" name="class_hierarchy_for_problemtyp_2">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.PEP.ProblemType-class.html" title="ProblemType" alt="" coords="5,6,104,31"/>
+<center>  <map id="class_hierarchy_for_refinesche_2" name="class_hierarchy_for_refinesche_2">
+<area shape="rect" id="node1" href="slepc4py.SLEPc.PEP.RefineScheme-class.html" title="RefineScheme" alt="" coords="5,5,113,31"/>
 </map>
-  <img src="class_hierarchy_for_problemtyp_2.png" alt='' usemap="#class_hierarchy_for_problemtyp_2" ismap="ismap" class="graph-without-title" />
+  <img src="class_hierarchy_for_refinesche_2.png" alt='' usemap="#class_hierarchy_for_refinesche_2" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
-<p>PEP problem type</p>
+<p>Scheme for solving linear systems during iterative refinement</p>
 <ul class="rst-simple">
-<li><a href="slepc4py.SLEPc.PEP.ProblemType-class.html#GENERAL" class="link">GENERAL</a>:      No structure.</li>
-<li><a href="slepc4py.SLEPc.PEP.ProblemType-class.html#HERMITIAN" class="link">HERMITIAN</a>:    Hermitian structure.</li>
-<li><a href="slepc4py.SLEPc.PEP.ProblemType-class.html#GYROSCOPIC" class="link">GYROSCOPIC</a>:   Hamiltonian structure.</li>
+<li><a href="slepc4py.SLEPc.PEP.RefineScheme-class.html#SCHUR" class="link">SCHUR</a>:    Schur complement.</li>
+<li><a href="slepc4py.SLEPc.PEP.RefineScheme-class.html#MBE" class="link">MBE</a>:      Mixed block elimination.</li>
+<li><a href="slepc4py.SLEPc.PEP.RefineScheme-class.html#EXPLICIT" class="link">EXPLICIT</a>: Build the explicit matrix.</li>
 </ul>
 
 <!-- ==================== INSTANCE METHODS ==================== -->
@@ -136,28 +136,28 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="GENERAL"></a><span class="summary-name">GENERAL</span> = <code title="1">1</code>
+        <a name="EXPLICIT"></a><span class="summary-name">EXPLICIT</span> = <code title="3">3</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="GYROSCOPIC"></a><span class="summary-name">GYROSCOPIC</span> = <code title="3">3</code>
+        <a name="MBE"></a><span class="summary-name">MBE</span> = <code title="2">2</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="HERMITIAN"></a><span class="summary-name">HERMITIAN</span> = <code title="2">2</code>
+        <a name="SCHUR"></a><span class="summary-name">SCHUR</span> = <code title="1">1</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="__qualname__"></a><span class="summary-name">__qualname__</span> = <code title="'PEPProblemType'"><code class="variable-quote">'</code><code class="variable-string">PEPProblemType</code><code class="variable-quote">'</code></code>
+        <a name="__qualname__"></a><span class="summary-name">__qualname__</span> = <code title="'PEPRefineScheme'"><code class="variable-quote">'</code><code class="variable-string">PEPRefineScheme</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
 </table>
@@ -210,14 +210,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:43 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.PEP.Scale-class.html b/docs/apiref/slepc4py.SLEPc.PEP.Scale-class.html
index b11a52c..d65c07d 100644
--- a/docs/apiref/slepc4py.SLEPc.PEP.Scale-class.html
+++ b/docs/apiref/slepc4py.SLEPc.PEP.Scale-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,12 +65,20 @@
 <h1 class="epydoc">Class Scale</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_scale" name="class_hierarchy_for_scale">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.PEP.Scale-class.html" title="Scale" alt="" coords="5,6,59,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.PEP.Scale-class.html" title="Scale" alt="" coords="5,5,60,31"/>
 </map>
   <img src="class_hierarchy_for_scale.png" alt='' usemap="#class_hierarchy_for_scale" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
+<p>PEP scaling strategy</p>
+<ul class="rst-simple">
+<li><a href="slepc4py.SLEPc.PEP.Scale-class.html#NONE" class="link">NONE</a>:     No scaling.</li>
+<li><a href="slepc4py.SLEPc.PEP.Scale-class.html#SCALAR" class="link">SCALAR</a>:   Parameter scaling.</li>
+<li><a href="slepc4py.SLEPc.PEP.Scale-class.html#DIAGONAL" class="link">DIAGONAL</a>: Diagonal scaling.</li>
+<li><a href="slepc4py.SLEPc.PEP.Scale-class.html#BOTH" class="link">BOTH</a>:     Both parameter and diagonal scaling.</li>
+</ul>
+
 <!-- ==================== INSTANCE METHODS ==================== -->
 <a name="section-InstanceMethods"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -210,14 +218,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:43 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.PEP.Type-class.html b/docs/apiref/slepc4py.SLEPc.PEP.Type-class.html
index 3cc4409..4c88c92 100644
--- a/docs/apiref/slepc4py.SLEPc.PEP.Type-class.html
+++ b/docs/apiref/slepc4py.SLEPc.PEP.Type-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Type</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_type_7" name="class_hierarchy_for_type_7">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.PEP.Type-class.html" title="Type" alt="" coords="5,6,56,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.PEP.Type-class.html" title="Type" alt="" coords="5,5,56,31"/>
 </map>
   <img src="class_hierarchy_for_type_7.png" alt='' usemap="#class_hierarchy_for_type_7" ismap="ismap" class="graph-without-title" />
 </center>
@@ -227,14 +227,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:43 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.PEP.Which-class.html b/docs/apiref/slepc4py.SLEPc.PEP.Which-class.html
index 663e42c..5c24880 100644
--- a/docs/apiref/slepc4py.SLEPc.PEP.Which-class.html
+++ b/docs/apiref/slepc4py.SLEPc.PEP.Which-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Which</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_which_3" name="class_hierarchy_for_which_3">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.PEP.Which-class.html" title="Which" alt="" coords="5,6,64,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.PEP.Which-class.html" title="Which" alt="" coords="5,5,64,31"/>
 </map>
   <img src="class_hierarchy_for_which_3.png" alt='' usemap="#class_hierarchy_for_which_3" ismap="ismap" class="graph-without-title" />
 </center>
@@ -82,6 +82,7 @@
 <li><a href="slepc4py.SLEPc.PEP.Which-class.html#TARGET_MAGNITUDE" class="link">TARGET_MAGNITUDE</a>:   Closest to target (in magnitude).</li>
 <li><a href="slepc4py.SLEPc.PEP.Which-class.html#TARGET_REAL" class="link">TARGET_REAL</a>:        Real part closest to target.</li>
 <li><a href="slepc4py.SLEPc.PEP.Which-class.html#TARGET_IMAGINARY" class="link">TARGET_IMAGINARY</a>:   Imaginary part closest to target.</li>
+<li><a href="slepc4py.SLEPc.PEP.Which-class.html#USER" class="link">USER</a>:               User-defined criterion.</li>
 </ul>
 
 <!-- ==================== INSTANCE METHODS ==================== -->
@@ -205,6 +206,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="USER"></a><span class="summary-name">USER</span> = <code title="10">10</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
         <a name="__qualname__"></a><span class="summary-name">__qualname__</span> = <code title="'PEPWhich'"><code class="variable-quote">'</code><code class="variable-string">PEPWhich</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -258,14 +266,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:43 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.RG-class.html b/docs/apiref/slepc4py.SLEPc.RG-class.html
index 0a8c039..0ae981b 100644
--- a/docs/apiref/slepc4py.SLEPc.RG-class.html
+++ b/docs/apiref/slepc4py.SLEPc.RG-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class RG</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_rg" name="class_hierarchy_for_rg">
-<area shape="rect" id="node1" href="javascript:void(0);" title="petsc4py.PETSc.Object" alt="" coords="5,6,168,31"/>
-<area shape="rect" id="node2" href="slepc4py.SLEPc.RG-class.html" title="RG" alt="" coords="65,62,108,87"/>
+<area shape="rect" id="node1" href="javascript:void(0);" title="petsc4py.PETSc.Object" alt="" coords="5,5,168,31"/>
+<area shape="rect" id="node2" href="slepc4py.SLEPc.RG-class.html" title="RG" alt="" coords="65,60,108,85"/>
 </map>
   <img src="class_hierarchy_for_rg.png" alt='' usemap="#class_hierarchy_for_rg" ismap="ismap" class="graph-without-title" />
 </center>
@@ -998,14 +998,14 @@ output is used.</dd>
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:05 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:43 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.RG.Type-class.html b/docs/apiref/slepc4py.SLEPc.RG.Type-class.html
index 21439e8..c5e926c 100644
--- a/docs/apiref/slepc4py.SLEPc.RG.Type-class.html
+++ b/docs/apiref/slepc4py.SLEPc.RG.Type-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Type</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_type_8" name="class_hierarchy_for_type_8">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.RG.Type-class.html" title="Type" alt="" coords="5,6,56,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.RG.Type-class.html" title="Type" alt="" coords="5,5,56,31"/>
 </map>
   <img src="class_hierarchy_for_type_8.png" alt='' usemap="#class_hierarchy_for_type_8" ismap="ismap" class="graph-without-title" />
 </center>
@@ -212,14 +212,14 @@ RG type
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:06 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:43 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.ST-class.html b/docs/apiref/slepc4py.SLEPc.ST-class.html
index 4199b70..cec5fc6 100644
--- a/docs/apiref/slepc4py.SLEPc.ST-class.html
+++ b/docs/apiref/slepc4py.SLEPc.ST-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class ST</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_st" name="class_hierarchy_for_st">
-<area shape="rect" id="node1" href="javascript:void(0);" title="petsc4py.PETSc.Object" alt="" coords="5,6,168,31"/>
-<area shape="rect" id="node2" href="slepc4py.SLEPc.ST-class.html" title="ST" alt="" coords="67,62,105,87"/>
+<area shape="rect" id="node1" href="javascript:void(0);" title="petsc4py.PETSc.Object" alt="" coords="5,5,168,31"/>
+<area shape="rect" id="node2" href="slepc4py.SLEPc.ST-class.html" title="ST" alt="" coords="67,60,106,85"/>
 </map>
   <img src="class_hierarchy_for_st.png" alt='' usemap="#class_hierarchy_for_st" ismap="ismap" class="graph-without-title" />
 </center>
@@ -102,14 +102,6 @@ ST
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a href="slepc4py.SLEPc.ST.MatStructure-class.html" class="summary-name">MatStructure</a><br />
-      <a href="slepc4py.SLEPc.ST.MatStructure-class.html#SAME" class="link">SAME</a>: Same non-zero pattern.
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
         <a href="slepc4py.SLEPc.ST.Type-class.html" class="summary-name">Type</a><br />
       ST types
     </td>
@@ -448,7 +440,7 @@ shift-and-invert and Cayley spectral transformations.</td>
         <tr>
           <td><span class="summary-sig"><a href="slepc4py.SLEPc.ST-class.html#setMatStructure" class="summary-sig-name">setMatStructure</a>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">structure</span>)</span><br />
-      Sets an internal MatStructure attribute to indicate which is
+      Sets an internal Mat.Structure attribute to indicate which is
 the relation of the sparsity pattern of the two matrices <tt class="rst-docutils literal">A</tt>
 and <tt class="rst-docutils literal">B</tt> constituting the generalized eigenvalue
 problem.</td>
@@ -1206,7 +1198,7 @@ efficiency of this computation can be controlled with
     </td>
   </tr></table>
   
-  <p>Sets an internal MatStructure attribute to indicate which is
+  <p>Sets an internal Mat.Structure attribute to indicate which is
 the relation of the sparsity pattern of the two matrices <tt class="rst-docutils literal">A</tt>
 and <tt class="rst-docutils literal">B</tt> constituting the generalized eigenvalue
 problem. This function has no effect in the case of standard
@@ -1214,7 +1206,7 @@ eigenproblems.</p>
 <div class="rst-section" id="rst-parameters">
 <h1 class="heading">Parameters</h1>
 <dl class="rst-docutils">
-<dt>structure: <a href="slepc4py.SLEPc.ST.MatStructure-class.html" class="link">ST.MatStructure</a> enumerate</dt>
+<dt>structure: <code class="link">PETSc.Mat.Structure</code> enumerate</dt>
 <dd>Either same, different, or a subset of the non-zero
 sparsity pattern.</dd>
 </dl>
@@ -1452,14 +1444,14 @@ output is used.</dd>
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:06 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:44 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.ST.MatMode-class.html b/docs/apiref/slepc4py.SLEPc.ST.MatMode-class.html
index 705dc2f..c8adf1d 100644
--- a/docs/apiref/slepc4py.SLEPc.ST.MatMode-class.html
+++ b/docs/apiref/slepc4py.SLEPc.ST.MatMode-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class MatMode</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_matmode" name="class_hierarchy_for_matmode">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.ST.MatMode-class.html" title="MatMode" alt="" coords="5,6,80,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.ST.MatMode-class.html" title="MatMode" alt="" coords="5,5,81,31"/>
 </map>
   <img src="class_hierarchy_for_matmode.png" alt='' usemap="#class_hierarchy_for_matmode" ismap="ismap" class="graph-without-title" />
 </center>
@@ -211,14 +211,14 @@ implicit matrix.</li>
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:06 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:44 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.ST.MatStructure-class.html b/docs/apiref/slepc4py.SLEPc.ST.MatStructure-class.html
deleted file mode 100644
index d595191..0000000
--- a/docs/apiref/slepc4py.SLEPc.ST.MatStructure-class.html
+++ /dev/null
@@ -1,280 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-          "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>slepc4py.SLEPc.ST.MatStructure</title>
-  <link rel="stylesheet" href="epydoc.css" type="text/css" />
-  <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
-      alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th>   <a
-        href="slepc4py-module.html">Home</a>   </th>
-
-  <!-- Tree link -->
-      <th>   <a
-        href="module-tree.html">Trees</a>   </th>
-
-  <!-- Index link -->
-      <th>   <a
-        href="identifier-index.html">Indices</a>   </th>
-
-  <!-- Help link -->
-      <th>   <a
-        href="help.html">Help</a>   </th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
-  <tr valign="top">
-    <td width="100%">
-      <span class="breadcrumbs">
-        <a href="slepc4py-module.html">Package slepc4py</a> ::
-        <a href="slepc4py.SLEPc-module.html">Module SLEPc</a> ::
-        <a href="slepc4py.SLEPc.ST-class.html">Class ST</a> ::
-        Class MatStructure
-      </span>
-    </td>
-    <td>
-      <table cellpadding="0" cellspacing="0">
-        <!-- hide/show private -->
-        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
-    onclick="toggle_private();">hide private</a>]</span></td></tr>
-        <tr><td align="right"><span class="options"
-            >[<a href="frames.html" target="_top">frames</a
-            >] | <a href="slepc4py.SLEPc.ST.MatStructure-class.html"
-            target="_top">no frames</a>]</span></td></tr>
-      </table>
-    </td>
-  </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class MatStructure</h1><p class="nomargin-top"></p>
-<center>
-<center>  <map id="class_hierarchy_for_matstructu" name="class_hierarchy_for_matstructu">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.ST.MatStructure-class.html" title="MatStructure" alt="" coords="5,6,101,31"/>
-</map>
-  <img src="class_hierarchy_for_matstructu.png" alt='' usemap="#class_hierarchy_for_matstructu" ismap="ismap" class="graph-without-title" />
-</center>
-</center>
-<hr />
-<ul class="rst-simple">
-<li><a href="slepc4py.SLEPc.ST.MatStructure-class.html#SAME" class="link">SAME</a>: Same non-zero pattern.</li>
-<li><a href="slepc4py.SLEPc.ST.MatStructure-class.html#SUBSET" class="link">SUBSET</a>: Subset of non-zero pattern.</li>
-<li><a href="slepc4py.SLEPc.ST.MatStructure-class.html#DIFFERENT" class="link">DIFFERENT</a>: Different non-zero pattern.</li>
-</ul>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
-<!-- ==================== CLASS VARIABLES ==================== -->
-<a name="section-ClassVariables"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Class Variables</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-ClassVariables"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
-        <a name="DIFFERENT"></a><span class="summary-name">DIFFERENT</span> = <code title="0">0</code>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
-        <a name="DIFFERENT_NONZERO_PATTERN"></a><span class="summary-name">DIFFERENT_NONZERO_PATTERN</span> = <code title="0">0</code>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
-        <a name="DIFFERENT_NZ"></a><span class="summary-name">DIFFERENT_NZ</span> = <code title="0">0</code>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
-        <a name="SAME"></a><span class="summary-name">SAME</span> = <code title="2">2</code>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
-        <a name="SAME_NONZERO_PATTERN"></a><span class="summary-name">SAME_NONZERO_PATTERN</span> = <code title="2">2</code>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
-        <a name="SAME_NZ"></a><span class="summary-name">SAME_NZ</span> = <code title="2">2</code>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
-        <a name="SUBSET"></a><span class="summary-name">SUBSET</span> = <code title="1">1</code>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
-        <a name="SUBSET_NONZERO_PATTERN"></a><span class="summary-name">SUBSET_NONZERO_PATTERN</span> = <code title="1">1</code>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
-        <a name="SUBSET_NZ"></a><span class="summary-name">SUBSET_NZ</span> = <code title="1">1</code>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
-        <a name="__qualname__"></a><span class="summary-name">__qualname__</span> = <code title="'STMatStructure'"><code class="variable-quote">'</code><code class="variable-string">STMatStructure</code><code class="variable-quote">'</code></code>
-    </td>
-  </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th>   <a
-        href="slepc4py-module.html">Home</a>   </th>
-
-  <!-- Tree link -->
-      <th>   <a
-        href="module-tree.html">Trees</a>   </th>
-
-  <!-- Index link -->
-      <th>   <a
-        href="identifier-index.html">Indices</a>   </th>
-
-  <!-- Help link -->
-      <th>   <a
-        href="help.html">Help</a>   </th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
-  <tr>
-    <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:06 2015
-    </td>
-    <td align="right" class="footer">
-      <a target="mainFrame" href="http://epydoc.sourceforge.net"
-        >http://epydoc.sourceforge.net</a>
-    </td>
-  </tr>
-</table>
-
-<script type="text/javascript">
-  <!--
-  // Private objects are initially displayed (because if
-  // javascript is turned off then we want them to be
-  // visible); but by default, we want to hide them.  So hide
-  // them unless we have a cookie that says to show them.
-  checkCookie();
-  // -->
-</script>
-</body>
-</html>
diff --git a/docs/apiref/slepc4py.SLEPc.ST.Type-class.html b/docs/apiref/slepc4py.SLEPc.ST.Type-class.html
index b55dec3..6607cea 100644
--- a/docs/apiref/slepc4py.SLEPc.ST.Type-class.html
+++ b/docs/apiref/slepc4py.SLEPc.ST.Type-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Type</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_type_9" name="class_hierarchy_for_type_9">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.ST.Type-class.html" title="Type" alt="" coords="5,6,56,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.ST.Type-class.html" title="Type" alt="" coords="5,5,56,31"/>
 </map>
   <img src="class_hierarchy_for_type_9.png" alt='' usemap="#class_hierarchy_for_type_9" ismap="ismap" class="graph-without-title" />
 </center>
@@ -226,14 +226,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:06 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:44 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.SVD-class.html b/docs/apiref/slepc4py.SLEPc.SVD-class.html
index 8eeada1..9de833c 100644
--- a/docs/apiref/slepc4py.SLEPc.SVD-class.html
+++ b/docs/apiref/slepc4py.SLEPc.SVD-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -64,8 +64,8 @@
 <h1 class="epydoc">Class SVD</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_svd" name="class_hierarchy_for_svd">
-<area shape="rect" id="node1" href="javascript:void(0);" title="petsc4py.PETSc.Object" alt="" coords="5,6,168,31"/>
-<area shape="rect" id="node2" href="slepc4py.SLEPc.SVD-class.html" title="SVD" alt="" coords="61,62,112,87"/>
+<area shape="rect" id="node1" href="javascript:void(0);" title="petsc4py.PETSc.Object" alt="" coords="5,5,168,31"/>
+<area shape="rect" id="node2" href="slepc4py.SLEPc.SVD-class.html" title="SVD" alt="" coords="61,60,112,85"/>
 </map>
   <img src="class_hierarchy_for_svd.png" alt='' usemap="#class_hierarchy_for_svd" ismap="ismap" class="graph-without-title" />
 </center>
@@ -254,6 +254,26 @@ singular triplet.</td>
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a href="slepc4py.SLEPc.SVD-class.html#errorView" class="summary-sig-name">errorView</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">etype</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">Viewer viewer</span>=<span class="summary-sig-default">None</span>)</span><br />
+      Displays the errors associated with the computed solution
+(as well as the eigenvalues).</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
           <td><span class="summary-sig"><a href="slepc4py.SLEPc.SVD-class.html#getBV" class="summary-sig-name">getBV</a>(<span class="summary-sig-arg">self</span>)</span><br />
       Obtain the basis vectors objects associated to the SVD object.</td>
           <td align="right" valign="top">
@@ -1191,6 +1211,45 @@ processes.</dd>
   </dl>
 </td></tr></table>
 </div>
+<a name="errorView"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">errorView</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">etype</span>=<span class="sig-default">None</span>,
+        <span class="sig-arg">Viewer viewer</span>=<span class="sig-default">None</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  <p>Displays the errors associated with the computed solution
+(as well as the eigenvalues).</p>
+<div class="rst-section" id="rst-parameters">
+<h1 class="heading">Parameters</h1>
+<dl class="rst-docutils">
+<dt>etype: <a href="slepc4py.SLEPc.SVD.ErrorType-class.html" class="link">SVD.ErrorType</a> enumerate, optional</dt>
+<dd>The error type to compute.</dd>
+<dt>viewer: Viewer, optional.</dt>
+<dd>Visualization context; if not provided, the standard
+output is used.</dd>
+</dl>
+</div>
+<div class="rst-section" id="rst-notes">
+<h1 class="heading">Notes</h1>
+<p>By default, this function checks the error of all eigenpairs and prints
+the eigenvalues if all of them are below the requested tolerance.
+If the viewer has format <tt class="rst-docutils literal">ASCII_INFO_DETAIL</tt> then a table with
+eigenvalues and corresponding errors is printed.</p>
+</div>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
 <a name="getBV"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
@@ -2300,14 +2359,14 @@ output is used.</dd>
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:06 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:44 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.SVD.ConvergedReason-class.html b/docs/apiref/slepc4py.SLEPc.SVD.ConvergedReason-class.html
index 18f9a83..5b62519 100644
--- a/docs/apiref/slepc4py.SLEPc.SVD.ConvergedReason-class.html
+++ b/docs/apiref/slepc4py.SLEPc.SVD.ConvergedReason-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class ConvergedReason</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_convergedr_5" name="class_hierarchy_for_convergedr_5">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.SVD.ConvergedReason-class.html" title="ConvergedReason" alt="" coords="5,6,136,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.SVD.ConvergedReason-class.html" title="ConvergedReason" alt="" coords="5,5,136,31"/>
 </map>
   <img src="class_hierarchy_for_convergedr_5.png" alt='' usemap="#class_hierarchy_for_convergedr_5" ismap="ismap" class="graph-without-title" />
 </center>
@@ -74,6 +74,7 @@
 <p>SVD convergence reasons</p>
 <ul class="rst-simple">
 <li><a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html#CONVERGED_TOL" class="link">CONVERGED_TOL</a>:</li>
+<li><a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html#CONVERGED_USER" class="link">CONVERGED_USER</a>:</li>
 <li><a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html#DIVERGED_ITS" class="link">DIVERGED_ITS</a>:</li>
 <li><a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html#DIVERGED_BREAKDOWN" class="link">DIVERGED_BREAKDOWN</a>:</li>
 <li><a href="slepc4py.SLEPc.SVD.ConvergedReason-class.html#CONVERGED_ITERATING" class="link">CONVERGED_ITERATING</a>:</li>
@@ -144,21 +145,28 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="CONVERGED_TOL"></a><span class="summary-name">CONVERGED_TOL</span> = <code title="2">2</code>
+        <a name="CONVERGED_TOL"></a><span class="summary-name">CONVERGED_TOL</span> = <code title="1">1</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="DIVERGED_BREAKDOWN"></a><span class="summary-name">DIVERGED_BREAKDOWN</span> = <code title="-4">-4</code>
+        <a name="CONVERGED_USER"></a><span class="summary-name">CONVERGED_USER</span> = <code title="2">2</code>
     </td>
   </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="DIVERGED_ITS"></a><span class="summary-name">DIVERGED_ITS</span> = <code title="-3">-3</code>
+        <a name="DIVERGED_BREAKDOWN"></a><span class="summary-name">DIVERGED_BREAKDOWN</span> = <code title="-2">-2</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+        <a name="DIVERGED_ITS"></a><span class="summary-name">DIVERGED_ITS</span> = <code title="-1">-1</code>
     </td>
   </tr>
 <tr>
@@ -225,14 +233,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:06 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:44 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.SVD.ErrorType-class.html b/docs/apiref/slepc4py.SLEPc.SVD.ErrorType-class.html
index 433b6b1..a1123f2 100644
--- a/docs/apiref/slepc4py.SLEPc.SVD.ErrorType-class.html
+++ b/docs/apiref/slepc4py.SLEPc.SVD.ErrorType-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class ErrorType</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_errortype_4" name="class_hierarchy_for_errortype_4">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.SVD.ErrorType-class.html" title="ErrorType" alt="" coords="5,6,83,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.SVD.ErrorType-class.html" title="ErrorType" alt="" coords="5,5,84,31"/>
 </map>
   <img src="class_hierarchy_for_errortype_4.png" alt='' usemap="#class_hierarchy_for_errortype_4" ismap="ismap" class="graph-without-title" />
 </center>
@@ -202,14 +202,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:06 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:44 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.SVD.Type-class.html b/docs/apiref/slepc4py.SLEPc.SVD.Type-class.html
index 7113ded..72e5677 100644
--- a/docs/apiref/slepc4py.SLEPc.SVD.Type-class.html
+++ b/docs/apiref/slepc4py.SLEPc.SVD.Type-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Type</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_type_10" name="class_hierarchy_for_type_10">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.SVD.Type-class.html" title="Type" alt="" coords="5,6,56,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.SVD.Type-class.html" title="Type" alt="" coords="5,5,56,31"/>
 </map>
   <img src="class_hierarchy_for_type_10.png" alt='' usemap="#class_hierarchy_for_type_10" ismap="ismap" class="graph-without-title" />
 </center>
@@ -226,14 +226,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:06 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:44 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.SVD.Which-class.html b/docs/apiref/slepc4py.SLEPc.SVD.Which-class.html
index e9ceba0..c2c18c0 100644
--- a/docs/apiref/slepc4py.SLEPc.SVD.Which-class.html
+++ b/docs/apiref/slepc4py.SLEPc.SVD.Which-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -65,7 +65,7 @@
 <h1 class="epydoc">Class Which</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_which_4" name="class_hierarchy_for_which_4">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.SVD.Which-class.html" title="Which" alt="" coords="5,6,64,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.SVD.Which-class.html" title="Which" alt="" coords="5,5,64,31"/>
 </map>
   <img src="class_hierarchy_for_which_4.png" alt='' usemap="#class_hierarchy_for_which_4" ismap="ismap" class="graph-without-title" />
 </center>
@@ -202,14 +202,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:06 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:44 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc.Sys-class.html b/docs/apiref/slepc4py.SLEPc.Sys-class.html
index dbff75d..be6e278 100644
--- a/docs/apiref/slepc4py.SLEPc.Sys-class.html
+++ b/docs/apiref/slepc4py.SLEPc.Sys-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -64,7 +64,7 @@
 <h1 class="epydoc">Class Sys</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_sys" name="class_hierarchy_for_sys">
-<area shape="rect" id="node1" href="slepc4py.SLEPc.Sys-class.html" title="Sys" alt="" coords="5,6,51,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc.Sys-class.html" title="Sys" alt="" coords="5,5,51,31"/>
 </map>
   <img src="class_hierarchy_for_sys.png" alt='' usemap="#class_hierarchy_for_sys" ismap="ismap" class="graph-without-title" />
 </center>
@@ -251,14 +251,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:06 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:44 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.SLEPc._p_mem-class.html b/docs/apiref/slepc4py.SLEPc._p_mem-class.html
index a5880ff..1a75043 100644
--- a/docs/apiref/slepc4py.SLEPc._p_mem-class.html
+++ b/docs/apiref/slepc4py.SLEPc._p_mem-class.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -64,7 +64,7 @@
 <h1 class="epydoc">Class _p_mem</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for__p_mem" name="class_hierarchy_for__p_mem">
-<area shape="rect" id="node1" href="slepc4py.SLEPc._p_mem-class.html" title="_p_mem" alt="" coords="5,6,77,31"/>
+<area shape="rect" id="node1" href="slepc4py.SLEPc._p_mem-class.html" title="_p_mem" alt="" coords="5,5,77,31"/>
 </map>
   <img src="class_hierarchy_for__p_mem.png" alt='' usemap="#class_hierarchy_for__p_mem" ismap="ismap" class="graph-without-title" />
 </center>
@@ -215,14 +215,14 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:06 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:44 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/slepc4py.lib-module.html b/docs/apiref/slepc4py.lib-module.html
index 568800e..e01d016 100644
--- a/docs/apiref/slepc4py.lib-module.html
+++ b/docs/apiref/slepc4py.lib-module.html
@@ -34,7 +34,7 @@
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
@@ -174,14 +174,14 @@ environmental variable, or a configuration file.</p>
       <th class="navbar" align="right" width="100%">
         <table border="0" cellpadding="0" cellspacing="0">
           <tr><th class="navbar" align="center"
-            ><a class="navbar" target="_top" href="http://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
+            ><a class="navbar" target="_top" href="https://bitbucket.org/slepc/slepc4py">SLEPc for Python</a></th>
           </tr></table></th>
   </tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jul  5 11:42:04 2015
+    Generated by Epydoc 3.0.1 on Sun May 22 14:34:40 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/toc-everything.html b/docs/apiref/toc-everything.html
index 268d72f..311839e 100644
--- a/docs/apiref/toc-everything.html
+++ b/docs/apiref/toc-everything.html
@@ -14,11 +14,11 @@
 <hr />
   <h2 class="toc">All Classes</h2>
     <a target="mainFrame" href="slepc4py.SLEPc.BV-class.html"
-     >slepc4py.SLEPc.BV</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.BV.OrthogType-class.html"
+     >slepc4py.SLEPc.BV</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.BV.BlockType-class.html"
+     >slepc4py.SLEPc.BV.BlockType</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.BV.OrthogType-class.html"
      >slepc4py.SLEPc.BV.OrthogType</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.BV.RefineType-class.html"
      >slepc4py.SLEPc.BV.RefineType</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.BV.Type-class.html"
-     >slepc4py.SLEPc.BV.Type</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.BVOrthogBlockType-class.html"
-     >slepc4py.SLEPc.BVOrthogBlockType</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.DS-class.html"
+     >slepc4py.SLEPc.BV.Type</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.DS-class.html"
      >slepc4py.SLEPc.DS</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.DS.MatType-class.html"
      >slepc4py.SLEPc.DS.MatType</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.DS.StateType-class.html"
      >slepc4py.SLEPc.DS.StateType</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.DS.Type-class.html"
@@ -34,31 +34,35 @@
      >slepc4py.SLEPc.EPS.ProblemType</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.EPS.Type-class.html"
      >slepc4py.SLEPc.EPS.Type</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.EPS.Which-class.html"
      >slepc4py.SLEPc.EPS.Which</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.FN-class.html"
-     >slepc4py.SLEPc.FN</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.FN.Type-class.html"
+     >slepc4py.SLEPc.FN</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.FN.CombineType-class.html"
+     >slepc4py.SLEPc.FN.CombineType</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.FN.Type-class.html"
      >slepc4py.SLEPc.FN.Type</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.MFN-class.html"
      >slepc4py.SLEPc.MFN</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.MFN.ConvergedReason-class.html"
      >slepc4py.SLEPc.MFN.ConvergedReason</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.MFN.Type-class.html"
      >slepc4py.SLEPc.MFN.Type</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.NEP-class.html"
      >slepc4py.SLEPc.NEP</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.NEP.ConvergedReason-class.html"
      >slepc4py.SLEPc.NEP.ConvergedReason</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.NEP.ErrorType-class.html"
-     >slepc4py.SLEPc.NEP.ErrorType</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.NEP.Type-class.html"
+     >slepc4py.SLEPc.NEP.ErrorType</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.NEP.Refine-class.html"
+     >slepc4py.SLEPc.NEP.Refine</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.NEP.RefineScheme-class.html"
+     >slepc4py.SLEPc.NEP.RefineScheme</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.NEP.Type-class.html"
      >slepc4py.SLEPc.NEP.Type</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.NEP.Which-class.html"
      >slepc4py.SLEPc.NEP.Which</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.PEP-class.html"
      >slepc4py.SLEPc.PEP</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.PEP.Basis-class.html"
      >slepc4py.SLEPc.PEP.Basis</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.PEP.Conv-class.html"
      >slepc4py.SLEPc.PEP.Conv</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.PEP.ConvergedReason-class.html"
      >slepc4py.SLEPc.PEP.ConvergedReason</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.PEP.ErrorType-class.html"
-     >slepc4py.SLEPc.PEP.ErrorType</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.PEP.ProblemType-class.html"
-     >slepc4py.SLEPc.PEP.ProblemType</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.PEP.Scale-class.html"
+     >slepc4py.SLEPc.PEP.ErrorType</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.PEP.Extract-class.html"
+     >slepc4py.SLEPc.PEP.Extract</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.PEP.ProblemType-class.html"
+     >slepc4py.SLEPc.PEP.ProblemType</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.PEP.Refine-class.html"
+     >slepc4py.SLEPc.PEP.Refine</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.PEP.RefineScheme-class.html"
+     >slepc4py.SLEPc.PEP.RefineScheme</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.PEP.Scale-class.html"
      >slepc4py.SLEPc.PEP.Scale</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.PEP.Type-class.html"
      >slepc4py.SLEPc.PEP.Type</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.PEP.Which-class.html"
-     >slepc4py.SLEPc.PEP.Which</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.PEPRefine-class.html"
-     >slepc4py.SLEPc.PEPRefine</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.RG-class.html"
+     >slepc4py.SLEPc.PEP.Which</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.RG-class.html"
      >slepc4py.SLEPc.RG</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.RG.Type-class.html"
      >slepc4py.SLEPc.RG.Type</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.ST-class.html"
      >slepc4py.SLEPc.ST</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.ST.MatMode-class.html"
-     >slepc4py.SLEPc.ST.MatMode</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.ST.MatStructure-class.html"
-     >slepc4py.SLEPc.ST.MatStructure</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.ST.Type-class.html"
+     >slepc4py.SLEPc.ST.MatMode</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.ST.Type-class.html"
      >slepc4py.SLEPc.ST.Type</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.SVD-class.html"
      >slepc4py.SLEPc.SVD</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.SVD.ConvergedReason-class.html"
      >slepc4py.SLEPc.SVD.ConvergedReason</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.SVD.ErrorType-class.html"
diff --git a/docs/apiref/toc-slepc4py.SLEPc-module.html b/docs/apiref/toc-slepc4py.SLEPc-module.html
index f65faa4..c8f02f5 100644
--- a/docs/apiref/toc-slepc4py.SLEPc-module.html
+++ b/docs/apiref/toc-slepc4py.SLEPc-module.html
@@ -14,15 +14,13 @@
 <hr />
   <h2 class="toc">Classes</h2>
     <a target="mainFrame" href="slepc4py.SLEPc.BV-class.html"
-     >BV</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.BVOrthogBlockType-class.html"
-     >BVOrthogBlockType</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.DS-class.html"
+     >BV</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.DS-class.html"
      >DS</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.EPS-class.html"
      >EPS</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.FN-class.html"
      >FN</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.MFN-class.html"
      >MFN</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.NEP-class.html"
      >NEP</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.PEP-class.html"
-     >PEP</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.PEPRefine-class.html"
-     >PEPRefine</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.RG-class.html"
+     >PEP</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.RG-class.html"
      >RG</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.ST-class.html"
      >ST</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.SVD-class.html"
      >SVD</a><br />    <a target="mainFrame" href="slepc4py.SLEPc.Sys-class.html"
diff --git a/docs/index.html b/docs/index.html
index eec3346..a5aed52 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -3,10 +3,9 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.11: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.12: http://docutils.sourceforge.net/" />
 <title>SLEPc for Python</title>
 <meta name="author" content="Lisandro Dalcin" />
-<meta name="organization" content="CIMEC" />
 <style type="text/css">
 
 /*
@@ -350,13 +349,6 @@ ul.auto-toc {
 <td>Lisandro Dalcin</td></tr>
 <tr><th class="docinfo-name">Contact:</th>
 <td><a class="first last reference external" href="mailto:dalcinl%40gmail.com">dalcinl<span>@</span>gmail<span>.</span>com</a></td></tr>
-<tr><th class="docinfo-name">Organization:</th>
-<td><a class="first reference external" href="http://www.cimec.org.ar/">CIMEC</a></td></tr>
-<tr><th class="docinfo-name">Address:</th>
-<td><pre class="address">
-CCT CONICET, 3000 Santa Fe, Argentina
-</pre>
-</td></tr>
 </tbody>
 </table>
 <div class="section" id="online-documentation">
@@ -380,20 +372,41 @@ CCT CONICET, 3000 Santa Fe, Argentina
 <div class="section" id="downloads-and-development">
 <h1>Downloads and Development</h1>
 <ul>
+<li><p class="first">Project Site:    <a class="reference external" href="https://bitbucket.org/slepc/slepc4py">https://bitbucket.org/slepc/slepc4py</a></p>
+</li>
 <li><p class="first">Source Releases: <a class="reference external" href="https://bitbucket.org/slepc/slepc4py/downloads/">https://bitbucket.org/slepc/slepc4py/downloads/</a></p>
 </li>
 <li><p class="first">Issue Tracker:   <a class="reference external" href="https://bitbucket.org/slepc/slepc4py/issues/">https://bitbucket.org/slepc/slepc4py/issues/</a></p>
 </li>
-<li><p class="first">Repository:      <a class="reference external" href="https://bitbucket.org/slepc/slepc4py.git">https://bitbucket.org/slepc/slepc4py.git</a></p>
+<li><p class="first">Git Repository:  <a class="reference external" href="https://bitbucket.org/slepc/slepc4py.git">https://bitbucket.org/slepc/slepc4py.git</a></p>
+</li>
+</ul>
+</div>
+<div class="section" id="citations">
+<h1>Citations</h1>
+<p>If SLEPc for Python been significant to a project that leads to an
+academic publication, please acknowledge that fact by citing the
+project.</p>
+<ul>
+<li><p class="first">L. Dalcin, P. Kler, R. Paz, and A. Cosimo,
+<em>Parallel Distributed Computing using Python</em>,
+Advances in Water Resources, 34(9):1124-1139, 2011.
+<a class="reference external" href="http://dx.doi.org/10.1016/j.advwatres.2011.04.013">http://dx.doi.org/10.1016/j.advwatres.2011.04.013</a></p>
+</li>
+<li><p class="first">V. Hernandez, J.E. Roman, and V. Vidal,
+<em>SLEPc: A scalable and flexible toolkit for the solution of eigenvalue problems</em>,
+ACM Transactions on Mathematical Software, 31(3):351-362, 2005.
+<a class="reference external" href="http://dx.doi.org/10.1145/1089014.1089019">http://dx.doi.org/10.1145/1089014.1089019</a></p>
 </li>
 </ul>
 </div>
 <div class="section" id="acknowledgments">
 <h1>Acknowledgments</h1>
-<p>This project was partially supported by the Center for Numerical
-Porous Media, Division of Computer, Electrical, and Mathematical
-Sciences & Engineering, King Abdullah University of Science and
-Technology (KAUST).</p>
+<p>This project was partially supported by the
+Extreme Computing Research Center (ECRC),
+Division of Computer, Electrical, and
+Mathematical Sciences & Engineering (CEMSE),
+King Abdullah University of Science and Technology (KAUST).</p>
 </div>
 </div>
 </body>
diff --git a/docs/index.rst b/docs/index.rst
index a0d7912..4c2f9df 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -4,8 +4,6 @@ SLEPc for Python
 
 :Author:       Lisandro Dalcin
 :Contact:      dalcinl at gmail.com
-:Organization: `CIMEC <http://www.cimec.org.ar/>`_
-:Address:      CCT CONICET, 3000 Santa Fe, Argentina
 
 
 Online Documentation
@@ -32,15 +30,35 @@ Discussion and Support
 Downloads and Development
 -------------------------
 
++ Project Site:    https://bitbucket.org/slepc/slepc4py
 + Source Releases: https://bitbucket.org/slepc/slepc4py/downloads/
 + Issue Tracker:   https://bitbucket.org/slepc/slepc4py/issues/
-+ Repository:      https://bitbucket.org/slepc/slepc4py.git
++ Git Repository:  https://bitbucket.org/slepc/slepc4py.git
+
+
+Citations
+---------
+
+If SLEPc for Python been significant to a project that leads to an
+academic publication, please acknowledge that fact by citing the
+project.
+
+* L. Dalcin, P. Kler, R. Paz, and A. Cosimo,
+  *Parallel Distributed Computing using Python*,
+  Advances in Water Resources, 34(9):1124-1139, 2011.
+  http://dx.doi.org/10.1016/j.advwatres.2011.04.013
+
+* V. Hernandez, J.E. Roman, and V. Vidal,
+  *SLEPc: A scalable and flexible toolkit for the solution of eigenvalue problems*,
+  ACM Transactions on Mathematical Software, 31(3):351-362, 2005.
+  http://dx.doi.org/10.1145/1089014.1089019
 
 
 Acknowledgments
 ---------------
 
-This project was partially supported by the Center for Numerical
-Porous Media, Division of Computer, Electrical, and Mathematical
-Sciences & Engineering, King Abdullah University of Science and
-Technology (KAUST).
+This project was partially supported by the
+Extreme Computing Research Center (ECRC),
+Division of Computer, Electrical, and
+Mathematical Sciences & Engineering (CEMSE),
+King Abdullah University of Science and Technology (KAUST).
diff --git a/docs/slepc4py.1 b/docs/slepc4py.1
index fde9c50..1162a0a 100644
--- a/docs/slepc4py.1
+++ b/docs/slepc4py.1
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "SLEPC4PY" "1" "July 05, 2015" "3.6" "SLEPc for Python"
+.TH "SLEPC4PY" "1" "May 22, 2016" "3.7" "SLEPc for Python"
 .SH NAME
 slepc4py \- SLEPc for Python
 .
@@ -30,33 +30,6 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
-.
-.nr rst2man-indent-level 0
-.
-.de1 rstReportMargin
-\\$1 \\n[an-margin]
-level \\n[rst2man-indent-level]
-level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
--
-\\n[rst2man-indent0]
-\\n[rst2man-indent1]
-\\n[rst2man-indent2]
-..
-.de1 INDENT
-.\" .rstReportMargin pre:
-. RS \\$1
-. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
-. nr rst2man-indent-level +1
-.\" .rstReportMargin post:
-..
-.de UNINDENT
-. RE
-.\" indent \\n[an-margin]
-.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
-.nr rst2man-indent-level -1
-.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
-.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
-..
 .INDENT 0.0
 .TP
 .B Authors
@@ -65,14 +38,11 @@ Lisandro Dalcin, Jose E. Roman
 .B Contact
 \fI\%dalcinl at gmail.com\fP, \fI\%jroman at dsic.upv.es\fP
 .TP
-.B Organization
-\fI\%CIMEC\fP, \fI\%UPV\fP
-.TP
 .B Web Site
 \fI\%https://bitbucket.org/slepc/slepc4py\fP
 .TP
 .B Date
-July 05, 2015
+May 22, 2016
 .UNINDENT
 .SS Abstract
 .sp
@@ -867,15 +837,14 @@ L. Dalcin, P. Kler, R. Paz, and A. Cosimo,
 Advances in Water Resources, 34(9):1124\-1139, 2011.
 \fI\%http://dx.doi.org/10.1016/j.advwatres.2011.04.013\fP
 .IP \(bu 2
-V. Hernandez, J.E. Roman and V. Vidal.
-\fISLEPc: A Scalable and Flexible Toolkit for the
-Solution of Eigenvalue Problems\fP,
+V. Hernandez, J.E. Roman, and V. Vidal,
+\fISLEPc: A scalable and flexible toolkit for the solution of eigenvalue problems\fP,
 ACM Transactions on Mathematical Software, 31(3):351\-362, 2005.
 \fI\%http://dx.doi.org/10.1145/1089014.1089019\fP
 .UNINDENT
 .SH AUTHOR
 Lisandro Dalcin
 .SH COPYRIGHT
-2015, Lisandro Dalcin
+2016, Lisandro Dalcin
 .\" Generated by docutils manpage writer.
 .
diff --git a/docs/slepc4py.info b/docs/slepc4py.info
index 514590e..f4123ce 100644
--- a/docs/slepc4py.info
+++ b/docs/slepc4py.info
@@ -1,11 +1,11 @@
-This is slepc4py.info, produced by makeinfo version 5.1 from
+This is slepc4py.info, produced by makeinfo version 6.0 from
 slepc4py.texi.
 
-     SLEPc for Python 3.6.0, July 05, 2015
+     SLEPc for Python 3.7.0, May 22, 2016
 
      Lisandro Dalcin
 
-     Copyright © 2015, Lisandro Dalcin
+     Copyright © 2016, Lisandro Dalcin
 
 INFO-DIR-SECTION Miscellaneous
 START-INFO-DIR-ENTRY
@@ -13,7 +13,7 @@ START-INFO-DIR-ENTRY
 END-INFO-DIR-ENTRY
 
 
-   Generated by Sphinx 1.1.3.
+   Generated by Sphinx 1.2.3.
 
 
 File: slepc4py.info,  Node: Top,  Next: Contents,  Up: (dir)
@@ -21,38 +21,39 @@ File: slepc4py.info,  Node: Top,  Next: Contents,  Up: (dir)
 SLEPc for Python
 ****************
 
-     SLEPc for Python 3.6.0, July 05, 2015
+     SLEPc for Python 3.7.0, May 22, 2016
 
      Lisandro Dalcin
 
-     Copyright © 2015, Lisandro Dalcin
+     Copyright © 2016, Lisandro Dalcin
 
-     Authors: Lisandro Dalcin, Jose E. Roman
 
-     Contact: <dalcinl at gmail.com>, <jroman at dsic.upv.es>
+Authors: Lisandro Dalcin, Jose E. Roman
 
-     Organization: CIMEC(1), UPV(2)
 
-     Web Site: ‘https://bitbucket.org/slepc/slepc4py’
+Contact: <dalcinl at gmail.com>, <jroman at dsic.upv.es>
 
-     Date: July 05, 2015
+
+Web Site: ‘https://bitbucket.org/slepc/slepc4py’
+
+
+Date: May 22, 2016
 
 Abstract
 ========
 
-This document describes slepc4py(3), a Python(4) port to the SLEPc(5)
+This document describes slepc4py(1), a Python(2) port to the SLEPc(3)
 libraries.
 
-  SLEPc(6) is a software package for the parallel solution of
-large-scale eigenvalue problems.  It can be used for computing
-eigenvalues and eigenvectors of large, sparse matrices, or matrix pairs,
-and also for computing singular values and vectors of a rectangular
-matrix.
+SLEPc(4) is a software package for the parallel solution of large-scale
+eigenvalue problems.  It can be used for computing eigenvalues and
+eigenvectors of large, sparse matrices, or matrix pairs, and also for
+computing singular values and vectors of a rectangular matrix.
 
-  SLEPc(7) relies on PETSc(8) for basic functionality such as the
+SLEPc(5) relies on PETSc(6) for basic functionality such as the
 representation of matrices and vectors, and the solution of linear
-systems of equations.  Thus, slepc4py(9) must be used together with its
-companion petsc4py(10).
+systems of equations.  Thus, slepc4py(7) must be used together with its
+companion petsc4py(8).
 
 * Menu:
 
@@ -93,25 +94,21 @@ Using distutils
 
    ---------- Footnotes ----------
 
-   (1) http://www.cimec.org.ar
+   (1) http://bitbucket.org/slepc/slepc4py
 
-   (2) http://www.upv.es
+   (2) http://www.python.org
 
-   (3) http://bitbucket.org/slepc/slepc4py
+   (3) http://slepc.upv.es
 
-   (4) http://www.python.org
+   (4) http://slepc.upv.es
 
    (5) http://slepc.upv.es
 
-   (6) http://slepc.upv.es
-
-   (7) http://slepc.upv.es
-
-   (8) http://www.mcs.anl.gov/petsc/
+   (6) http://www.mcs.anl.gov/petsc/
 
-   (9) http://bitbucket.org/slepc/slepc4py
+   (7) http://bitbucket.org/slepc/slepc4py
 
-   (10) http://bitbucket.org/petsc/petsc4py
+   (8) http://bitbucket.org/petsc/petsc4py
 
 
 File: slepc4py.info,  Node: Contents,  Next: Index,  Prev: Top,  Up: Top
@@ -126,38 +123,16 @@ File: slepc4py.info,  Node: Contents,  Next: Index,  Prev: Top,  Up: Top
 * Installation:: 
 * Citations:: 
 
-Overview
-
-* Features:: 
-* Components:: 
-
-Tutorial
-
-* Commented source of a simple example:: 
-* Example of command-line usage:: 
-
-Installation
-
-* Using pip or easy_install:: 
-* Using distutils:: 
-
-Using distutils
-
-* Requirements:: 
-* Downloading:: 
-* Building:: 
-* Installing:: 
-
 
 File: slepc4py.info,  Node: Overview,  Next: Tutorial,  Up: Contents
 
 1.1 Overview
 ============
 
-_SLEPc for Python_ (slepc4py) is a Python package that provides
+`SLEPc for Python' (slepc4py) is a Python package that provides
 convenient access to the functionality of SLEPc.
 
-  SLEPc (1), (2) implements algorithms and tools for the numerical
+SLEPc (1), (2) implements algorithms and tools for the numerical
 solution of large, sparse eigenvalue problems on parallel computers.  It
 can be used for linear eigenvalue problems in either standard or
 generalized form, with real or complex arithmetic.  It can also be used
@@ -166,13 +141,13 @@ to solve nonlinear eigenvalue problems (polynomial or general).
 Additionally, SLEPc provides solvers for the computation of the action
 of a matrix function on a vector.
 
-  SLEPc is intended for computing a subset of the spectrum of a matrix
-(or matrix pair).  One can for instance approximate the largest
-magnitude eigenvalues, or the smallest ones, or even those eigenvalues
-located near a given region of the complex plane.  Interior eigenvalues
-are harder to compute, so SLEPc provides different methodologies.  One
-such method is to use a spectral transformation.  Cheaper alternatives
-are also available.
+SLEPc is intended for computing a subset of the spectrum of a matrix (or
+matrix pair).  One can for instance approximate the largest magnitude
+eigenvalues, or the smallest ones, or even those eigenvalues located
+near a given region of the complex plane.  Interior eigenvalues are
+harder to compute, so SLEPc provides different methodologies.  One such
+method is to use a spectral transformation.  Cheaper alternatives are
+also available.
 
 * Menu:
 
@@ -197,24 +172,23 @@ File: slepc4py.info,  Node: Features,  Next: Components,  Up: Overview
 
 Currently, the following types of eigenproblems can be addressed:
 
-   * Standard eigenvalue problem, _Ax=kx_, either for Hermitian or
+   * Standard eigenvalue problem, `Ax=kx', either for Hermitian or
      non-Hermitian matrices.
 
-   * Generalized eigenvalue problem, _Ax=kBx_, either Hermitian
+   * Generalized eigenvalue problem, `Ax=kBx', either Hermitian
      positive-definite or not.
 
    * Partial singular value decomposition of a rectangular matrix,
-     _Au=sv_.
+     `Au=sv'.
 
-   * Polynomial eigenvalue problem, _P(k)x=0_.
+   * Polynomial eigenvalue problem, `P(k)x=0'.
 
-   * Nonlinear eigenvalue problem, _T(k)x=0_.
+   * Nonlinear eigenvalue problem, `T(k)x=0'.
 
-   * Computing the action of a matrix function on a vector, _w=f(alpha
-     A)v_.
+   * Computing the action of a matrix function on a vector, `w=f(alpha
+     A)v'.
 
-  For the linear eigenvalue problem, the following methods are
-available:
+For the linear eigenvalue problem, the following methods are available:
 
    * Krylov eigensolvers, particularly Krylov-Schur, Arnoldi, and
      Lanczos.
@@ -229,19 +203,17 @@ available:
 
    * A contour integral solver.
 
-  For singular value computations, the following alternatives can be
-used:
+For singular value computations, the following alternatives can be used:
 
-   * Use an eigensolver via the cross-product matrix _A’A_ or the cyclic
-     matrix _[0 A; A’ 0]_.
+   * Use an eigensolver via the cross-product matrix `A’A' or the cyclic
+     matrix `[0 A; A’ 0]'.
 
    * Explicitly restarted Lanczos bidiagonalization.
 
    * Implicitly restarted Lanczos bidiagonalization (thick-restart
      Lanczos).
 
-  For polynomial eigenvalue problems, the following methods are
-available:
+For polynomial eigenvalue problems, the following methods are available:
 
    * Use an eigensolver to solve the generalized eigenvalue problem
      obtained after linearization.
@@ -249,18 +221,18 @@ available:
    * TOAR and Q-Arnoldi, memory efficient variants of Arnoldi for
      polynomial eigenproblems.
 
-  Computation of interior eigenvalues is supported by means of the
+Computation of interior eigenvalues is supported by means of the
 following methodologies:
 
    * Spectral transformations, such as shift-and-invert.  This technique
-     implicitly uses the inverse of the shifted matrix _(A-tI)_ in order
-     to compute eigenvalues closest to a given target value, _t_.
+     implicitly uses the inverse of the shifted matrix `(A-tI)' in order
+     to compute eigenvalues closest to a given target value, `t'.
 
    * Harmonic extraction, a cheap alternative to shift-and-invert that
-     also tries to approximate eigenvalues closest to a target, _t_, but
+     also tries to approximate eigenvalues closest to a target, `t', but
      without requiring a matrix inversion.
 
-  Other remarkable features include:
+Other remarkable features include:
 
    * High computational efficiency, by using NumPy and SLEPc under the
      hood.
@@ -286,57 +258,65 @@ for its use from Python.  The first five components are solvers for
 different classes of problems, while the rest can be considered
 auxiliary object.
 
-     EPS: The Eigenvalue Problem Solver is the component that provides
-     all the functionality necessary to define and solve an
-     eigenproblem.  It provides mechanisms for completely specifying the
-     problem: the problem type (e.g.  standard symmetric), number of
-     eigenvalues to compute, part of the spectrum of interest.  Once the
-     problem has been defined, a collection of solvers can be used to
-     compute the required solutions.  The behaviour of the solvers can
-     be tuned by means of a few parameters, such as the maximum
-     dimension of the subspace to be used during the computation.
-
-     SVD: This component is the analog of EPS for the case of Singular
-     Value Decompositions.  The user provides a rectangular matrix and
-     specifies how many singular values and vectors are to be computed,
-     whether the largest or smallest ones, as well as some other
-     parameters for fine tuning the computation.  Different solvers are
-     available, as in the case of EPS.
-
-     PEP: This component is the analog of EPS for the case of Polynomial
-     Eigenvalue Problems.  The user provides the coefficient matrices of
-     the polynomial.  Several parameters can be specified, as in the
-     case of EPS. It is also possible to indicate whether the problem
-     belongs to a special type, e.g., symmetric or gyroscopic.
-
-     NEP: This component covers the case of general nonlinear
-     eigenproblems, T(lambda)x=0.
-
-     MFN: This component provides the functionality for computing the
-     action of a matrix function on a vector.  Given a matrix A and a
-     vector b, the call MFNSolve(mfn,b,x) computes x=f(A)b, where f is a
-     function such as the exponential.
-
-     ST: The Spectral Transformation is a component that provides
-     convenient implementations of common spectral transformations.
-     These are simple transformations that map eigenvalues to different
-     positions, in such a way that convergence to wanted eigenvalues is
-     enhanced.  The most common spectral transformation is
-     shift-and-invert, that allows for the computation of eigenvalues
-     closest to a given target value.
-
-     BV: This component encapsulates the concept of a set of Basis
-     Vectors spanning a vector space.  This component provides
-     convenient access to common operations such as orthogonalization of
-     vectors.  The BV component is usually not required by end-users.
-
-     DS: The Dense System (or Direct Solver) component, used internally
-     to solve dense eigenproblems of small size that appear in the
-     course of iterative eigensolvers.
-
-     FN: A component used to define mathematical functions.  This is
-     required by the end-user for instance to define function T(.)  when
-     solving nonlinear eigenproblems with NEP in split form.
+
+EPS: The Eigenvalue Problem Solver is the component that provides all
+the functionality necessary to define and solve an eigenproblem.  It
+provides mechanisms for completely specifying the problem: the problem
+type (e.g.  standard symmetric), number of eigenvalues to compute, part
+of the spectrum of interest.  Once the problem has been defined, a
+collection of solvers can be used to compute the required solutions.
+The behaviour of the solvers can be tuned by means of a few parameters,
+such as the maximum dimension of the subspace to be used during the
+computation.
+
+
+SVD: This component is the analog of EPS for the case of Singular Value
+Decompositions.  The user provides a rectangular matrix and specifies
+how many singular values and vectors are to be computed, whether the
+largest or smallest ones, as well as some other parameters for fine
+tuning the computation.  Different solvers are available, as in the case
+of EPS.
+
+
+PEP: This component is the analog of EPS for the case of Polynomial
+Eigenvalue Problems.  The user provides the coefficient matrices of the
+polynomial.  Several parameters can be specified, as in the case of EPS.
+It is also possible to indicate whether the problem belongs to a special
+type, e.g., symmetric or gyroscopic.
+
+
+NEP: This component covers the case of general nonlinear eigenproblems,
+T(lambda)x=0.
+
+
+MFN: This component provides the functionality for computing the action
+of a matrix function on a vector.  Given a matrix A and a vector b, the
+call MFNSolve(mfn,b,x) computes x=f(A)b, where f is a function such as
+the exponential.
+
+
+ST: The Spectral Transformation is a component that provides convenient
+implementations of common spectral transformations.  These are simple
+transformations that map eigenvalues to different positions, in such a
+way that convergence to wanted eigenvalues is enhanced.  The most common
+spectral transformation is shift-and-invert, that allows for the
+computation of eigenvalues closest to a given target value.
+
+
+BV: This component encapsulates the concept of a set of Basis Vectors
+spanning a vector space.  This component provides convenient access to
+common operations such as orthogonalization of vectors.  The BV
+component is usually not required by end-users.
+
+
+DS: The Dense System (or Direct Solver) component, used internally to
+solve dense eigenproblems of small size that appear in the course of
+iterative eigensolvers.
+
+
+FN: A component used to define mathematical functions.  This is required
+by the end-user for instance to define function T(.)  when solving
+nonlinear eigenproblems with NEP in split form.
 
 
 File: slepc4py.info,  Node: Tutorial,  Next: Installation,  Prev: Overview,  Up: Contents
@@ -362,24 +342,24 @@ File: slepc4py.info,  Node: Commented source of a simple example,  Next: Example
 In this section, we include the source code of example ‘demo/ex1.py’
 available in the slepc4py distribution, with comments inserted inline.
 
-  The first thing to do is initialize the libraries.  This is normally
-not required, as it is done automatically at import time.  However, if
-you want to gain access to the facilities for accesing command-line
-options, the following lines must be executed by the main script prior
-to any petsc4py or slepc4py calls:
+The first thing to do is initialize the libraries.  This is normally not
+required, as it is done automatically at import time.  However, if you
+want to gain access to the facilities for accesing command-line options,
+the following lines must be executed by the main script prior to any
+petsc4py or slepc4py calls:
 
      import sys, slepc4py
      slepc4py.init(sys.argv)
 
-  Next, we have to import the relevant modules.  Normally, both PETSc
-and SLEPc modules have to be imported in all slepc4py programs.  It may
-be useful to import NumPy as well:
+Next, we have to import the relevant modules.  Normally, both PETSc and
+SLEPc modules have to be imported in all slepc4py programs.  It may be
+useful to import NumPy as well:
 
      from petsc4py import PETSc
      from slepc4py import SLEPc
      import numpy
 
-  At this point, we can use any petsc4py and slepc4py operations.  For
+At this point, we can use any petsc4py and slepc4py operations.  For
 instance, the following lines allow the user to specify an integer
 command-line argument ‘n’ with a default value of 30 (see the next
 section for example usage of command-line options):
@@ -387,7 +367,7 @@ section for example usage of command-line options):
      opts = PETSc.Options()
      n = opts.getInt('n', 30)
 
-  It is necessary to build a matrix to define an eigenproblem (or two in
+It is necessary to build a matrix to define an eigenproblem (or two in
 the case of generalized eigenproblems).  The following fragment of code
 creates the matrix object and then fills the non-zero elements one by
 one.  The matrix of this particular example is tridiagonal, with value 2
@@ -415,12 +395,12 @@ documentation for details about matrix objects:
 
      A.assemble()
 
-  The solver object is created in a similar way as other objects in
+The solver object is created in a similar way as other objects in
 petsc4py:
 
      E = SLEPc.EPS(); E.create()
 
-  Once the object is created, the eigenvalue problem must be specified.
+Once the object is created, the eigenvalue problem must be specified.
 At least one matrix must be provided.  The problem type must be
 indicated as well, in this case it is HEP (Hermitian eigenvalue
 problem).  Apart from these, other settings could be provided here (for
@@ -433,12 +413,12 @@ solver object:
      E.setProblemType(SLEPc.EPS.ProblemType.HEP)
      E.setFromOptions()
 
-  After that, the ‘solve()’ method will run the selected eigensolver,
+After that, the ‘solve()’ method will run the selected eigensolver,
 keeping the solution stored internally:
 
      E.solve()
 
-  Once the computation has finished, we are ready to print the results.
+Once the computation has finished, we are ready to print the results.
 First, some informative data can be retrieved from the solver object:
 
      Print = PETSc.Sys.Print
@@ -461,14 +441,14 @@ First, some informative data can be retrieved from the solver object:
      tol, maxit = E.getTolerances()
      Print("Stopping condition: tol=%.4g, maxit=%d" % (tol, maxit))
 
-  For retrieving the solution, it is necessary to find out how many
+For retrieving the solution, it is necessary to find out how many
 eigenpairs have converged to the requested precision:
 
      nconv = E.getConverged()
      Print("Number of converged eigenpairs %d" % nconv)
 
-  For each of the ‘nconv’ eigenpairs, we can retrieve the eigenvalue
-‘k’, and the eigenvector, which is represented by means of two petsc4py
+For each of the ‘nconv’ eigenpairs, we can retrieve the eigenvalue ‘k’,
+and the eigenvector, which is represented by means of two petsc4py
 vectors ‘vr’ and ‘vi’ (the real and imaginary part of the eigenvector,
 since for real matrices the eigenvalue and eigenvector may be complex).
 We also compute the corresponding relative errors in order to make sure
@@ -500,7 +480,7 @@ File: slepc4py.info,  Node: Example of command-line usage,  Prev: Commented sour
 Now we illustrate how to specify command-line options in order to
 extract the full potential of slepc4py.
 
-  A simple execution of the ‘demo/ex1.py’ script will result in the
+A simple execution of the ‘demo/ex1.py’ script will result in the
 following output:
 
      $ python demo/ex1.py
@@ -522,17 +502,17 @@ following output:
           3.908279        6.74118e-08
           3.837916        8.34269e-08
 
-  For specifying different setting for the solver parameters, we can use
+For specifying different setting for the solver parameters, we can use
 SLEPc command-line options with the ‘-eps’ prefix.  For instance, to
 change the number of requested eigenvalues and the tolerance:
 
      $ python demo/ex1.py -eps_nev 10 -eps_tol 1e-11
 
-  The method used by the solver object can also be set at run time:
+The method used by the solver object can also be set at run time:
 
      $ python demo/ex1.py -eps_type lanczos
 
-  All the above settings can also be change within the source code by
+All the above settings can also be change within the source code by
 making use of the appropriate slepc4py method.  Since options can be set
 from within the code and the command-line, it is often useful to view
 the particular settings that are currently being used:
@@ -563,16 +543,16 @@ the particular settings that are currently being used:
        shift: 0
        number of matrices: 1
 
-  Note that for computing eigenvalues of smallest magnitude we can use
-the option ‘-eps_smallest_magnitude’, but for interior eigenvalues
-things are not so straightforward.  One possibility is to try with
-harmonic extraction, for instance to get the eigenvalues closest to 0.6:
+Note that for computing eigenvalues of smallest magnitude we can use the
+option ‘-eps_smallest_magnitude’, but for interior eigenvalues things
+are not so straightforward.  One possibility is to try with harmonic
+extraction, for instance to get the eigenvalues closest to 0.6:
 
      $ python demo/ex1.py -eps_harmonic -eps_target 0.6
 
-  Depending on the problem, harmonic extraction may fail to converge.
-In those cases, it is necessary to specify a spectral transformation
-other than the default.  In the command-line, this is indicated with the
+Depending on the problem, harmonic extraction may fail to converge.  In
+those cases, it is necessary to specify a spectral transformation other
+than the default.  In the command-line, this is indicated with the
 ‘-st_’ prefix.  For example, shift-and-invert with a value of the shift
 equal to 0.6 would be:
 
@@ -592,23 +572,23 @@ File: slepc4py.info,  Node: Installation,  Next: Citations,  Prev: Tutorial,  Up
 
 File: slepc4py.info,  Node: Using pip or easy_install,  Next: Using distutils,  Up: Installation
 
-1.3.1 Using *pip* or *easy_install*
+1.3.1 Using `pip' or `easy_install'
 -----------------------------------
 
-You can use *pip* to install ‘slepc4py’ and its dependencies (‘mpi4py’
+You can use `pip' to install ‘slepc4py’ and its dependencies (‘mpi4py’
 is optional but highly recommended):
 
      $ pip install [--user] numpy mpi4py
      $ pip install [--user] petsc petsc4py
      $ pip install [--user] slepc slepc4py
 
-  Alternatively, you can use *easy_install* (deprecated):
+Alternatively, you can use `easy_install' (deprecated):
 
      $ easy_install [--user] slepc4py
 
-  If you already have working PETSc and SLEPc installs, set environment
+If you already have working PETSc and SLEPc installs, set environment
 variables ‘SLEPC_DIR’ and ‘PETSC_DIR’ (and perhaps ‘PETSC_ARCH’ for
-non-prefix installs) to appropriate values and next use *pip*:
+non-prefix installs) to appropriate values and next use `pip':
 
      $ export SLEPC_DIR=/path/to/slepc
      $ export PETSC_DIR=/path/to/petsc
@@ -618,7 +598,7 @@ non-prefix installs) to appropriate values and next use *pip*:
 
 File: slepc4py.info,  Node: Using distutils,  Prev: Using pip or easy_install,  Up: Installation
 
-1.3.2 Using *distutils*
+1.3.2 Using `distutils'
 -----------------------
 
 * Menu:
@@ -635,7 +615,7 @@ File: slepc4py.info,  Node: Requirements,  Next: Downloading,  Up: Using distuti
 ....................
 
 You need to have the following software properly installed in order to
-build _SLEPc for Python_:
+build `SLEPc for Python':
 
    * Any MPI(1) implementation (2) (e.g., MPICH(3) or Open MPI(4)),
      built with shared libraries.
@@ -673,15 +653,15 @@ File: slepc4py.info,  Node: Downloading,  Next: Building,  Prev: Requirements,
 1.3.2.2 Downloading
 ...................
 
-The _SLEPc for Python_ package is available for download at the project
-website generously hosted by Bitbucket.  You can use *curl* or *wget* to
+The `SLEPc for Python' package is available for download at the project
+website generously hosted by Bitbucket.  You can use `curl' or `wget' to
 get a release tarball.
 
-   * Using *curl*:
+   * Using `curl':
 
           $ curl -O https://bitbucket.org/slepc/slepc4py/downloads/slepc4py-X.Y.tar.gz
 
-   * Using *wget*:
+   * Using `wget':
 
           $ wget https://bitbucket.org/slepc/slepc4py/downloads/slepc4py-X.Y.tar.gz
 
@@ -696,13 +676,13 @@ After unpacking the release tarball:
      $ tar -zxf slepc4py-X.Y.tar.gz
      $ cd slepc4py-X.Y
 
-  the distribution is ready for building.
+the distribution is ready for building.
 
-     Note: *Mac OS X* users employing a Python distribution built with
-     *universal binaries* may need to set the environment variables
+     Note: `Mac OS X' users employing a Python distribution built with
+     `universal binaries' may need to set the environment variables
      ‘MACOSX_DEPLOYMENT_TARGET’, ‘SDKROOT’, and ‘ARCHFLAGS’ to
      appropriate values.  As an example, assume your Mac is running
-     *Snow Leopard* on a *64-bit Intel* processor and you want to
+     `Snow Leopard' on a `64-bit Intel' processor and you want to
      override the hard-wired cross-development SDK in Python
      configuration, your environment should be modified like this:
 
@@ -710,17 +690,17 @@ After unpacking the release tarball:
           $ export SDKROOT=/
           $ export ARCHFLAGS='-arch x86_64'
 
-  Some environment configuration is needed to inform the location of
-PETSc and SLEPc.  You can set (using *setenv*, *export* or what applies
-to you shell or system) the environment variables ‘SLEPC_DIR`’,
-‘PETSC_DIR’, and ‘PETSC_ARCH’ indicating where you have built/installed
-SLEPc and PETSc:
+Some environment configuration is needed to inform the location of PETSc
+and SLEPc.  You can set (using `setenv', `export' or what applies to you
+shell or system) the environment variables ‘SLEPC_DIR`’, ‘PETSC_DIR’,
+and ‘PETSC_ARCH’ indicating where you have built/installed SLEPc and
+PETSc:
 
      $ export SLEPC_DIR=/usr/local/slepc
      $ export PETSC_DIR=/usr/local/petsc
      $ export PETSC_ARCH=arch-linux2-c-opt
 
-  Alternatively, you can edit the file ‘setup.cfg’ and provide the
+Alternatively, you can edit the file ‘setup.cfg’ and provide the
 required information below the ‘[config]’ section:
 
      [config]
@@ -729,7 +709,7 @@ required information below the ‘[config]’ section:
      petsc_arch = arch-linux2-c-opt
      ...
 
-  Finally, you can build the distribution by typing:
+Finally, you can build the distribution by typing:
 
      $ python setup.py build
 
@@ -741,17 +721,17 @@ File: slepc4py.info,  Node: Installing,  Prev: Building,  Up: Using distutils
 
 After building, the distribution is ready for installation.
 
-  If you have root privileges (either by log-in as the root user of by
-using *sudo*) and you want to install _SLEPc for Python_ in your system
+If you have root privileges (either by log-in as the root user of by
+using `sudo') and you want to install `SLEPc for Python' in your system
 for all users, just do:
 
      $ python setup.py install
 
-  The previous steps will install the ‘slepc4py’ package at standard
-location ‘_prefix_/lib/python_X_._X_/site-packages’.
+The previous steps will install the ‘slepc4py’ package at standard
+location ‘`prefix'/lib/python`X'.`X'/site-packages’.
 
-  If you do not have root privileges or you want to install _SLEPc for
-Python_ for your private use, just do:
+If you do not have root privileges or you want to install `SLEPc for
+Python' for your private use, just do:
 
      $ python setup.py install --user
 
@@ -765,13 +745,13 @@ If SLEPc for Python been significant to a project that leads to an
 academic publication, please acknowledge that fact by citing the
 project.
 
-   * L. Dalcin, P. Kler, R. Paz, and A. Cosimo, _Parallel Distributed
-     Computing using Python_, Advances in Water Resources,
+   * L. Dalcin, P. Kler, R. Paz, and A. Cosimo, `Parallel Distributed
+     Computing using Python', Advances in Water Resources,
      34(9):1124-1139, 2011.
      ‘http://dx.doi.org/10.1016/j.advwatres.2011.04.013’
 
-   * V. Hernandez, J.E. Roman and V. Vidal.  _SLEPc: A Scalable and
-     Flexible Toolkit for the Solution of Eigenvalue Problems_, ACM
+   * V. Hernandez, J.E. Roman, and V. Vidal, `SLEPc: A scalable and
+     flexible toolkit for the solution of eigenvalue problems', ACM
      Transactions on Mathematical Software, 31(3):351-362, 2005.
      ‘http://dx.doi.org/10.1145/1089014.1089019’
 
@@ -812,85 +792,83 @@ Index
 
 
 Tag Table:
-Node: Top335
-Ref: index doc541
-Ref: 0541
-Ref: Top-Footnote-11831
-Ref: Top-Footnote-21863
-Ref: Top-Footnote-31889
-Ref: Top-Footnote-41933
-Ref: Top-Footnote-51963
-Ref: Top-Footnote-61991
-Ref: Top-Footnote-72019
-Ref: Top-Footnote-82047
-Ref: Top-Footnote-92085
-Ref: Top-Footnote-102129
-Node: Contents2174
-Ref: index slepc-for-python2250
-Ref: 12250
-Ref: index contents2250
-Ref: 22250
-Node: Overview2623
-Ref: overview overview2695
-Ref: 32695
-Ref: overview doc2695
-Ref: 42695
-Ref: Overview-Footnote-13872
-Ref: Overview-Footnote-24063
-Node: Features4258
-Ref: overview features4332
-Ref: 54332
-Node: Components6930
-Ref: overview components7004
-Ref: 67004
-Node: Tutorial10073
-Ref: tutorial doc10166
-Ref: 710166
-Ref: tutorial tutorial10166
-Ref: 810166
-Node: Commented source of a simple example10448
-Ref: tutorial commented-source-of-a-simple-example10569
-Ref: 910569
-Node: Example of command-line usage15323
-Ref: tutorial example-of-command-line-usage15444
-Ref: a15444
-Node: Installation18590
-Ref: install installation18684
-Ref: b18684
-Ref: install doc18684
-Ref: c18684
-Node: Using pip or easy_install18781
-Ref: install using-pip-or-easy-install18881
-Ref: d18881
-Node: Using distutils19681
-Ref: install using-distutils19781
-Ref: e19781
-Node: Requirements19905
-Ref: install requirements19991
-Ref: f19991
-Ref: Requirements-Footnote-120454
-Ref: Requirements-Footnote-220487
-Ref: Requirements-Footnote-320613
-Ref: Requirements-Footnote-420642
-Ref: Requirements-Footnote-520674
-Ref: Requirements-Footnote-620712
-Ref: Requirements-Footnote-720740
-Ref: Requirements-Footnote-820769
-Node: Downloading20813
-Ref: install downloading20916
-Ref: 1020916
-Node: Building21339
-Ref: install building21440
-Ref: 1121440
-Node: Installing22990
-Ref: install installing23071
-Ref: 1223071
-Node: Citations23652
-Ref: citing citations23729
-Ref: 1323729
-Ref: citing doc23729
-Ref: 1423729
-Node: Index24374
+Node: Top334
+Ref: index doc539
+Ref: 0539
+Ref: Top-Footnote-11770
+Ref: Top-Footnote-21814
+Ref: Top-Footnote-31844
+Ref: Top-Footnote-41872
+Ref: Top-Footnote-51900
+Ref: Top-Footnote-61928
+Ref: Top-Footnote-71966
+Ref: Top-Footnote-82010
+Node: Contents2054
+Ref: index slepc-for-python2130
+Ref: 12130
+Ref: index contents2130
+Ref: 22130
+Node: Overview2224
+Ref: overview overview2296
+Ref: 32296
+Ref: overview doc2296
+Ref: 42296
+Ref: Overview-Footnote-13469
+Ref: Overview-Footnote-23660
+Node: Features3855
+Ref: overview features3929
+Ref: 53929
+Node: Components6517
+Ref: overview components6591
+Ref: 66591
+Node: Tutorial9454
+Ref: tutorial doc9547
+Ref: 79547
+Ref: tutorial tutorial9547
+Ref: 89547
+Node: Commented source of a simple example9829
+Ref: tutorial commented-source-of-a-simple-example9950
+Ref: 99950
+Node: Example of command-line usage14684
+Ref: tutorial example-of-command-line-usage14805
+Ref: a14805
+Node: Installation17940
+Ref: install installation18034
+Ref: b18034
+Ref: install doc18034
+Ref: c18034
+Node: Using pip or easy_install18131
+Ref: install using-pip-or-easy-install18231
+Ref: d18231
+Node: Using distutils19027
+Ref: install using-distutils19127
+Ref: e19127
+Node: Requirements19251
+Ref: install requirements19337
+Ref: f19337
+Ref: Requirements-Footnote-119800
+Ref: Requirements-Footnote-219833
+Ref: Requirements-Footnote-319959
+Ref: Requirements-Footnote-419988
+Ref: Requirements-Footnote-520020
+Ref: Requirements-Footnote-620058
+Ref: Requirements-Footnote-720086
+Ref: Requirements-Footnote-820115
+Node: Downloading20159
+Ref: install downloading20262
+Ref: 1020262
+Node: Building20685
+Ref: install building20786
+Ref: 1120786
+Node: Installing22328
+Ref: install installing22409
+Ref: 1222409
+Node: Citations22984
+Ref: citing citations23061
+Ref: 1323061
+Ref: citing doc23061
+Ref: 1423061
+Node: Index23706
 
 End Tag Table
 
diff --git a/docs/slepc4py.pdf b/docs/slepc4py.pdf
index dd2f064..65d6ff2 100644
Binary files a/docs/slepc4py.pdf and b/docs/slepc4py.pdf differ
diff --git a/docs/source/citing.rst b/docs/source/citing.rst
index 0f9ffb6..0e10a3b 100644
--- a/docs/source/citing.rst
+++ b/docs/source/citing.rst
@@ -10,8 +10,7 @@ project.
   Advances in Water Resources, 34(9):1124-1139, 2011.
   http://dx.doi.org/10.1016/j.advwatres.2011.04.013
 
-* V. Hernandez, J.E. Roman and V. Vidal.
-  *SLEPc: A Scalable and Flexible Toolkit for the
-  Solution of Eigenvalue Problems*,
+* V. Hernandez, J.E. Roman, and V. Vidal,
+  *SLEPc: A scalable and flexible toolkit for the solution of eigenvalue problems*,
   ACM Transactions on Mathematical Software, 31(3):351-362, 2005.
   http://dx.doi.org/10.1145/1089014.1089019
diff --git a/docs/source/conf.py b/docs/source/conf.py
index 93aaacf..cfcb0de 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -48,7 +48,7 @@ master_doc = 'index'
 
 # General information about the project.
 project = u'SLEPc for Python'
-copyright = u'2015, Lisandro Dalcin'
+copyright = u'2016, Lisandro Dalcin'
 
 # The version info for the project you're documenting, acts as replacement for
 # |version| and |release|, also used in various other places throughout the
@@ -271,7 +271,7 @@ texinfo_documents = [
 epub_title = u'slepc4py'
 epub_author = u'Lisandro Dalcin'
 epub_publisher = u'Lisandro Dalcin'
-epub_copyright = u'2015, Lisandro Dalcin'
+epub_copyright = u'2016, Lisandro Dalcin'
 
 # The basename for the epub file. It defaults to the project name.
 epub_basename = u'slepc4py'
diff --git a/docs/source/index.rst b/docs/source/index.rst
index c76cafb..b268cb4 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -4,7 +4,6 @@ SLEPc for Python
 
 :Authors:      Lisandro Dalcin, Jose E. Roman
 :Contact:      dalcinl at gmail.com, jroman at dsic.upv.es
-:Organization: CIMEC_, UPV_
 :Web Site:     https://bitbucket.org/slepc/slepc4py
 :Date:         |today|
 
diff --git a/docs/source/links.txt b/docs/source/links.txt
index e7b54be..747a722 100644
--- a/docs/source/links.txt
+++ b/docs/source/links.txt
@@ -8,8 +8,6 @@
 
 .. _SLEPc:        http://slepc.upv.es
 
-.. _TAO:          http://www.mcs.anl.gov/tao/
-
 .. _Python:       http://www.python.org
 
 .. _NumPy:        http://www.numpy.org
@@ -20,12 +18,6 @@
 
 .. _slepc4py:     http://bitbucket.org/slepc/slepc4py
 
-.. _tao4py:       http://bitbucket.org/dalcinl/tao4py
-
-.. _CIMEC:        http://www.cimec.org.ar
-
-.. _UPV:          http://www.upv.es
-
 .. Local Variables:
 .. mode: rst
 .. End:
diff --git a/docs/source/make.bat b/docs/source/make.bat
index f2dc40f..7e72b89 100644
--- a/docs/source/make.bat
+++ b/docs/source/make.bat
@@ -1,228 +1,228 @@
- at ECHO OFF
-
-REM Command file for Sphinx documentation
-
-if "%SPHINXBUILD%" == "" (
-	set SPHINXBUILD=sphinx-build
-)
-set BUILDDIR=_build
-set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .
-set I18NSPHINXOPTS=%SPHINXOPTS% .
-if NOT "%PAPER%" == "" (
-	set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
-	set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%
-)
-
-if "%1" == "" goto help
-
-if "%1" == "help" (
-	:help
-	echo.Please use `make ^<target^>` where ^<target^> is one of
-	echo.  html       to make standalone HTML files
-	echo.  dirhtml    to make HTML files named index.html in directories
-	echo.  singlehtml to make a single large HTML file
-	echo.  pickle     to make pickle files
-	echo.  json       to make JSON files
-	echo.  htmlhelp   to make HTML files and a HTML help project
-	echo.  qthelp     to make HTML files and a qthelp project
-	echo.  devhelp    to make HTML files and a Devhelp project
-	echo.  epub       to make an epub
-	echo.  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter
-	echo.  text       to make text files
-	echo.  man        to make manual pages
-	echo.  texinfo    to make Texinfo files
-	echo.  gettext    to make PO message catalogs
-	echo.  changes    to make an overview over all changed/added/deprecated items
-	echo.  xml        to make Docutils-native XML files
-	echo.  pseudoxml  to make pseudoxml-XML files for display purposes
-	echo.  linkcheck  to check all external links for integrity
-	echo.  doctest    to run all doctests embedded in the documentation if enabled
-	goto end
-)
-
-if "%1" == "clean" (
-	for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
-	del /q /s %BUILDDIR%\*
-	goto end
-)
-
-if "%1" == "html" (
-	%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The HTML pages are in %BUILDDIR%/html.
-	goto end
-)
-
-if "%1" == "dirhtml" (
-	%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
-	goto end
-)
-
-if "%1" == "singlehtml" (
-	%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
-	goto end
-)
-
-if "%1" == "pickle" (
-	%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished; now you can process the pickle files.
-	goto end
-)
-
-if "%1" == "json" (
-	%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished; now you can process the JSON files.
-	goto end
-)
-
-if "%1" == "htmlhelp" (
-	%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished; now you can run HTML Help Workshop with the ^
-.hhp project file in %BUILDDIR%/htmlhelp.
-	goto end
-)
-
-if "%1" == "qthelp" (
-	%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished; now you can run "qcollectiongenerator" with the ^
-.qhcp project file in %BUILDDIR%/qthelp, like this:
-	echo.^> qcollectiongenerator %BUILDDIR%\qthelp\slepc4py.qhcp
-	echo.To view the help file:
-	echo.^> assistant -collectionFile %BUILDDIR%\qthelp\slepc4py.ghc
-	goto end
-)
-
-if "%1" == "devhelp" (
-	%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished.
-	goto end
-)
-
-if "%1" == "epub" (
-	%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The epub file is in %BUILDDIR%/epub.
-	goto end
-)
-
-if "%1" == "latex" (
-	%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
-	goto end
-)
-
-if "%1" == "latexpdf" (
-	%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
-	cd %BUILDDIR%/latex
-	make all-pdf
-	cd %BUILDDIR%/..
-	echo.
-	echo.Build finished; the PDF files are in %BUILDDIR%/latex.
-	goto end
-)
-
-if "%1" == "latexpdfja" (
-	%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
-	cd %BUILDDIR%/latex
-	make all-pdf-ja
-	cd %BUILDDIR%/..
-	echo.
-	echo.Build finished; the PDF files are in %BUILDDIR%/latex.
-	goto end
-)
-
-if "%1" == "text" (
-	%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The text files are in %BUILDDIR%/text.
-	goto end
-)
-
-if "%1" == "man" (
-	%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The manual pages are in %BUILDDIR%/man.
-	goto end
-)
-
-if "%1" == "texinfo" (
-	%SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.
-	goto end
-)
-
-if "%1" == "gettext" (
-	%SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The message catalogs are in %BUILDDIR%/locale.
-	goto end
-)
-
-if "%1" == "changes" (
-	%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.The overview file is in %BUILDDIR%/changes.
-	goto end
-)
-
-if "%1" == "linkcheck" (
-	%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Link check complete; look for any errors in the above output ^
-or in %BUILDDIR%/linkcheck/output.txt.
-	goto end
-)
-
-if "%1" == "doctest" (
-	%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Testing of doctests in the sources finished, look at the ^
-results in %BUILDDIR%/doctest/output.txt.
-	goto end
-)
-
-if "%1" == "xml" (
-	%SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The XML files are in %BUILDDIR%/xml.
-	goto end
-)
-
-if "%1" == "pseudoxml" (
-	%SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml.
-	goto end
-)
-
-:end
+ at ECHO OFF
+
+REM Command file for Sphinx documentation
+
+if "%SPHINXBUILD%" == "" (
+	set SPHINXBUILD=sphinx-build
+)
+set BUILDDIR=_build
+set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .
+set I18NSPHINXOPTS=%SPHINXOPTS% .
+if NOT "%PAPER%" == "" (
+	set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
+	set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%
+)
+
+if "%1" == "" goto help
+
+if "%1" == "help" (
+	:help
+	echo.Please use `make ^<target^>` where ^<target^> is one of
+	echo.  html       to make standalone HTML files
+	echo.  dirhtml    to make HTML files named index.html in directories
+	echo.  singlehtml to make a single large HTML file
+	echo.  pickle     to make pickle files
+	echo.  json       to make JSON files
+	echo.  htmlhelp   to make HTML files and a HTML help project
+	echo.  qthelp     to make HTML files and a qthelp project
+	echo.  devhelp    to make HTML files and a Devhelp project
+	echo.  epub       to make an epub
+	echo.  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter
+	echo.  text       to make text files
+	echo.  man        to make manual pages
+	echo.  texinfo    to make Texinfo files
+	echo.  gettext    to make PO message catalogs
+	echo.  changes    to make an overview over all changed/added/deprecated items
+	echo.  xml        to make Docutils-native XML files
+	echo.  pseudoxml  to make pseudoxml-XML files for display purposes
+	echo.  linkcheck  to check all external links for integrity
+	echo.  doctest    to run all doctests embedded in the documentation if enabled
+	goto end
+)
+
+if "%1" == "clean" (
+	for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
+	del /q /s %BUILDDIR%\*
+	goto end
+)
+
+if "%1" == "html" (
+	%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The HTML pages are in %BUILDDIR%/html.
+	goto end
+)
+
+if "%1" == "dirhtml" (
+	%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
+	goto end
+)
+
+if "%1" == "singlehtml" (
+	%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
+	goto end
+)
+
+if "%1" == "pickle" (
+	%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished; now you can process the pickle files.
+	goto end
+)
+
+if "%1" == "json" (
+	%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished; now you can process the JSON files.
+	goto end
+)
+
+if "%1" == "htmlhelp" (
+	%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished; now you can run HTML Help Workshop with the ^
+.hhp project file in %BUILDDIR%/htmlhelp.
+	goto end
+)
+
+if "%1" == "qthelp" (
+	%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished; now you can run "qcollectiongenerator" with the ^
+.qhcp project file in %BUILDDIR%/qthelp, like this:
+	echo.^> qcollectiongenerator %BUILDDIR%\qthelp\slepc4py.qhcp
+	echo.To view the help file:
+	echo.^> assistant -collectionFile %BUILDDIR%\qthelp\slepc4py.ghc
+	goto end
+)
+
+if "%1" == "devhelp" (
+	%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished.
+	goto end
+)
+
+if "%1" == "epub" (
+	%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The epub file is in %BUILDDIR%/epub.
+	goto end
+)
+
+if "%1" == "latex" (
+	%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
+	goto end
+)
+
+if "%1" == "latexpdf" (
+	%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
+	cd %BUILDDIR%/latex
+	make all-pdf
+	cd %BUILDDIR%/..
+	echo.
+	echo.Build finished; the PDF files are in %BUILDDIR%/latex.
+	goto end
+)
+
+if "%1" == "latexpdfja" (
+	%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
+	cd %BUILDDIR%/latex
+	make all-pdf-ja
+	cd %BUILDDIR%/..
+	echo.
+	echo.Build finished; the PDF files are in %BUILDDIR%/latex.
+	goto end
+)
+
+if "%1" == "text" (
+	%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The text files are in %BUILDDIR%/text.
+	goto end
+)
+
+if "%1" == "man" (
+	%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The manual pages are in %BUILDDIR%/man.
+	goto end
+)
+
+if "%1" == "texinfo" (
+	%SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.
+	goto end
+)
+
+if "%1" == "gettext" (
+	%SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The message catalogs are in %BUILDDIR%/locale.
+	goto end
+)
+
+if "%1" == "changes" (
+	%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.The overview file is in %BUILDDIR%/changes.
+	goto end
+)
+
+if "%1" == "linkcheck" (
+	%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Link check complete; look for any errors in the above output ^
+or in %BUILDDIR%/linkcheck/output.txt.
+	goto end
+)
+
+if "%1" == "doctest" (
+	%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Testing of doctests in the sources finished, look at the ^
+results in %BUILDDIR%/doctest/output.txt.
+	goto end
+)
+
+if "%1" == "xml" (
+	%SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The XML files are in %BUILDDIR%/xml.
+	goto end
+)
+
+if "%1" == "pseudoxml" (
+	%SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml
+	if errorlevel 1 exit /b 1
+	echo.
+	echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml.
+	goto end
+)
+
+:end
diff --git a/docs/usrman/.buildinfo b/docs/usrman/.buildinfo
index f3ea0d2..cf50ce4 100644
--- a/docs/usrman/.buildinfo
+++ b/docs/usrman/.buildinfo
@@ -1,4 +1,4 @@
 # 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: 8374c6afd724398a83cee7a0ac881602
-tags: fbb0d17656682115ca4d033fb2f83ba1
+config: f63cdeff1cd3914759980a6d91e1f35e
+tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/docs/usrman/_sources/citing.txt b/docs/usrman/_sources/citing.txt
index 0f9ffb6..0e10a3b 100644
--- a/docs/usrman/_sources/citing.txt
+++ b/docs/usrman/_sources/citing.txt
@@ -10,8 +10,7 @@ project.
   Advances in Water Resources, 34(9):1124-1139, 2011.
   http://dx.doi.org/10.1016/j.advwatres.2011.04.013
 
-* V. Hernandez, J.E. Roman and V. Vidal.
-  *SLEPc: A Scalable and Flexible Toolkit for the
-  Solution of Eigenvalue Problems*,
+* V. Hernandez, J.E. Roman, and V. Vidal,
+  *SLEPc: A scalable and flexible toolkit for the solution of eigenvalue problems*,
   ACM Transactions on Mathematical Software, 31(3):351-362, 2005.
   http://dx.doi.org/10.1145/1089014.1089019
diff --git a/docs/usrman/_sources/index.txt b/docs/usrman/_sources/index.txt
index c76cafb..b268cb4 100644
--- a/docs/usrman/_sources/index.txt
+++ b/docs/usrman/_sources/index.txt
@@ -4,7 +4,6 @@ SLEPc for Python
 
 :Authors:      Lisandro Dalcin, Jose E. Roman
 :Contact:      dalcinl at gmail.com, jroman at dsic.upv.es
-:Organization: CIMEC_, UPV_
 :Web Site:     https://bitbucket.org/slepc/slepc4py
 :Date:         |today|
 
diff --git a/docs/usrman/_static/basic.css b/docs/usrman/_static/basic.css
index 43e8baf..967e36c 100644
--- a/docs/usrman/_static/basic.css
+++ b/docs/usrman/_static/basic.css
@@ -4,7 +4,7 @@
  *
  * Sphinx stylesheet -- basic theme.
  *
- * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
@@ -89,6 +89,7 @@ div.sphinxsidebar #searchbox input[type="submit"] {
 
 img {
     border: 0;
+    max-width: 100%;
 }
 
 /* -- search page ----------------------------------------------------------- */
@@ -401,10 +402,6 @@ dl.glossary dt {
     margin: 0;
 }
 
-.refcount {
-    color: #060;
-}
-
 .optional {
     font-size: 1.3em;
 }
diff --git a/docs/usrman/_static/default.css b/docs/usrman/_static/default.css
index 21f3f50..5f1399a 100644
--- a/docs/usrman/_static/default.css
+++ b/docs/usrman/_static/default.css
@@ -4,7 +4,7 @@
  *
  * Sphinx stylesheet -- default theme.
  *
- * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
diff --git a/docs/usrman/_static/doctools.js b/docs/usrman/_static/doctools.js
index d4619fd..c5455c9 100644
--- a/docs/usrman/_static/doctools.js
+++ b/docs/usrman/_static/doctools.js
@@ -4,7 +4,7 @@
  *
  * Sphinx JavaScript utilities for all documentation.
  *
- * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
@@ -32,7 +32,7 @@ if (!window.console || !console.firebug) {
  */
 jQuery.urldecode = function(x) {
   return decodeURIComponent(x).replace(/\+/g, ' ');
-}
+};
 
 /**
  * small helper function to urlencode strings
@@ -62,18 +62,6 @@ jQuery.getQueryParameters = function(s) {
 };
 
 /**
- * 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.
  */
@@ -180,6 +168,9 @@ var Documentation = {
     var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
     if (terms.length) {
       var body = $('div.body');
+      if (!body.length) {
+        body = $('body');
+      }
       window.setTimeout(function() {
         $.each(terms, function() {
           body.highlightText(this.toLowerCase(), 'highlighted');
diff --git a/docs/usrman/_static/jquery.js b/docs/usrman/_static/jquery.js
index 7c24308..3883779 100644
--- a/docs/usrman/_static/jquery.js
+++ b/docs/usrman/_static/jquery.js
@@ -1,154 +1,2 @@
-/*!
- * 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<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j); [...]
-e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget) [...]
-j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g," [...]
-"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua [...]
-true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]* [...]
-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[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.getElementsByTagNam [...]
-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.c [...]
-"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:fu [...]
-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<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.i [...]
-c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMConten [...]
-L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"construc [...]
-"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Functi [...]
-a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d) [...]
-d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++ [...]
-a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d [...]
-!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if [...]
-true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left [...]
-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 [...]
-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.noCl [...]
-false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";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="non [...]
-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:{embe [...]
-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.rem [...]
-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. [...]
-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; [...]
-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|inpu [...]
-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<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.cla [...]
-i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+ [...]
-" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);thi [...]
-this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-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< [...]
-e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",t [...]
-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 proper [...]
-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=functi [...]
-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) [...]
-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 [...]
-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<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove [...]
-null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf(" [...]
-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(! [...]
-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.e [...]
-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<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange at [...]
-fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b. [...]
-d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.e [...]
-"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type) [...]
-a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented [...]
-isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submit [...]
-{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialS [...]
-if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-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,"_ [...]
-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.t [...]
-"_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.addEventLi [...]
-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;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a=== [...]
-!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return  [...]
-toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j| [...]
-u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unl [...]
-function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++ [...]
-if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?: [...]
-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]) [...]
-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||( [...]
-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<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q [...]
-for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.spli [...]
-1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG" [...]
-CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attr [...]
-relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m+ [...]
-l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){ [...]
-h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG: [...]
-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 [...]
-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:functio [...]
-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.no [...]
-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 h<l[3]-0},gt:function(g,h,l){return h>l[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=== [...]
-h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0; [...]
-m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/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 [...]
-"="?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+) [...]
-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<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocume [...]
-!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createR [...]
-h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";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!= [...]
-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.innerHTM [...]
-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="<p class='TEST'></p>";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]; [...]
-(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";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.compareDocumentPositi [...]
-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<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Unti [...]
-gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f+ [...]
-c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=thi [...]
-{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-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||t [...]
-"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,"par [...]
-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.nodeNam [...]
-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.nodeTy [...]
-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=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b, [...]
-a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_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<div>","</div>"];c.fn. [...]
-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(th [...]
-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.appendChi [...]
-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.pa [...]
-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.firstChi [...]
-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].i [...]
-""):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;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith [...]
-this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagNam [...]
-u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childN [...]
-1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||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=== [...]
-return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?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 [...]
-""])[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]==="<table>"&&!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.pu [...]
-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 [...]
-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":"styl [...]
-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")| [...]
-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 [...]
-"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.getComputedSty [...]
-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. [...]
-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=/<script(.|\s)*?\/script>/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:funct [...]
-"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("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}}) [...]
-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 [...]
-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: [...]
-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:{} [...]
-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 [...]
-"&":"?")+(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;i [...]
-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 [...]
-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.se [...]
-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== [...]
-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 [...]
-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== [...]
-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==="st [...]
-"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) [...]
-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<b;a++){var d=c.data(this[a], [...]
-this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").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<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!==" [...]
-"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacit [...]
-animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){ [...]
-j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a [...]
-this.each(function(){for(var f=d.length-1;f>=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.f [...]
-"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._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.n [...]
-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.st [...]
-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. [...]
-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.length;b++)a[b]()||a.splice(b--,1);a [...]
-c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClien [...]
-function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:fun [...]
-this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.cu [...]
-k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o. [...]
-f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></d [...]
-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 [...]
-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= [...]
-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{ [...]
-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?"pag [...]
-"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" [...]
-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);
+/*! jQuery v1.8.3 jquery.com | jquery.org/license */
+(function(e,t){function _(e){var t=M[e]={};return v.each(e.split(y),function(e,n){t[n]=!0}),t}function H(e,n,r){if(r===t&&e.nodeType===1){var i="data-"+n.replace(P,"-$1").toLowerCase();r=e.getAttribute(i);if(typeof r=="string"){try{r=r==="true"?!0:r==="false"?!1:r==="null"?null:+r+""===r?+r:D.test(r)?v.parseJSON(r):r}catch(s){}v.data(e,n,r)}else r=t}return r}function B(e){var t;for(t in e){if(t==="data"&&v.isEmptyObject(e[t]))continue;if(t!=="toJSON")return!1}return!0}function et(){retur [...]
\ No newline at end of file
diff --git a/docs/usrman/_static/pygments.css b/docs/usrman/_static/pygments.css
index d79caa1..8213e90 100644
--- a/docs/usrman/_static/pygments.css
+++ b/docs/usrman/_static/pygments.css
@@ -4,8 +4,10 @@
 .highlight .err { border: 1px solid #FF0000 } /* Error */
 .highlight .k { color: #007020; font-weight: bold } /* Keyword */
 .highlight .o { color: #666666 } /* Operator */
+.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */
 .highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */
 .highlight .cp { color: #007020 } /* Comment.Preproc */
+.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */
 .highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */
 .highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */
 .highlight .gd { color: #A00000 } /* Generic.Deleted */
@@ -40,6 +42,7 @@
 .highlight .nv { color: #bb60d5 } /* Name.Variable */
 .highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
 .highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mb { color: #208050 } /* Literal.Number.Bin */
 .highlight .mf { color: #208050 } /* Literal.Number.Float */
 .highlight .mh { color: #208050 } /* Literal.Number.Hex */
 .highlight .mi { color: #208050 } /* Literal.Number.Integer */
diff --git a/docs/usrman/_static/searchtools.js b/docs/usrman/_static/searchtools.js
index 663be4c..6e1f06b 100644
--- a/docs/usrman/_static/searchtools.js
+++ b/docs/usrman/_static/searchtools.js
@@ -4,38 +4,11 @@
  *
  * Sphinx JavaScript utilties for the full-text search.
  *
- * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2014 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 = $('<div class="context"></div>').text(excerpt);
-  $.each(hlwords, function() {
-    rv = rv.highlightText(this, 'highlighted');
-  });
-  return rv;
-}
-
 
 /**
  * Porter Stemmer
@@ -220,6 +193,38 @@ var Stemmer = function() {
 }
 
 
+
+/**
+ * Simple result scoring code.
+ */
+var Scorer = {
+  // Implement the following function to further tweak the score for each result
+  // The function takes a result array [filename, title, anchor, descr, score]
+  // and returns the new score.
+  /*
+  score: function(result) {
+    return result[4];
+  },
+  */
+
+  // query matches the full name of an object
+  objNameMatch: 11,
+  // or matches in the last dotted part of the object name
+  objPartialMatch: 6,
+  // Additive scores depending on the priority of the object
+  objPrio: {0:  15,   // used to be importantResults
+            1:  5,   // used to be objectResults
+            2: -5},  // used to be unimportantResults
+  //  Used when the priority is not in the mapping.
+  objPrioDefault: 0,
+
+  // query found in title
+  title: 15,
+  // query found in terms
+  term: 5
+};
+
+
 /**
  * Search Module
  */
@@ -239,8 +244,13 @@ var Search = {
   },
 
   loadIndex : function(url) {
-    $.ajax({type: "GET", url: url, data: null, success: null,
-            dataType: "script", cache: true});
+    $.ajax({type: "GET", url: url, data: null,
+            dataType: "script", cache: true,
+            complete: function(jqxhr, textstatus) {
+              if (textstatus != "success") {
+                document.getElementById("searchindexloader").src = url;
+              }
+            }});
   },
 
   setIndex : function(index) {
@@ -268,19 +278,20 @@ var Search = {
     if (this._pulse_status >= 0)
         return;
     function pulse() {
+      var i;
       Search._pulse_status = (Search._pulse_status + 1) % 4;
       var dotString = '';
-      for (var i = 0; i < Search._pulse_status; i++)
+      for (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
+   * perform a search for something (or wait until index is loaded)
    */
   performSearch : function(query) {
     // create the required interface elements
@@ -300,41 +311,46 @@ var Search = {
       this.deferQuery(query);
   },
 
+  /**
+   * execute search (requires search index to be loaded)
+   */
   query : function(query) {
-    var stopwords = ["and","then","into","it","as","are","in","if","for","no","there","their","was","is","be","to","that","but","they","not","such","with","by","a","on","these","of","will","this","near","the","or","at"];
+    var i;
+    var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
 
-    // Stem the searchterms and add them to the correct list
+    // stem the searchterms and add them to the correct list
     var stemmer = new Stemmer();
     var searchterms = [];
     var excluded = [];
     var hlterms = [];
     var tmp = query.split(/\s+/);
     var objectterms = [];
-    for (var i = 0; i < tmp.length; i++) {
-      if (tmp[i] != "") {
+    for (i = 0; i < tmp.length; i++) {
+      if (tmp[i] !== "") {
           objectterms.push(tmp[i].toLowerCase());
       }
 
-      if ($u.indexOf(stopwords, tmp[i]) != -1 || tmp[i].match(/^\d+$/) ||
-          tmp[i] == "") {
+      if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i].match(/^\d+$/) ||
+          tmp[i] === "") {
         // skip this "word"
         continue;
       }
       // stem the word
-      var word = stemmer.stemWord(tmp[i]).toLowerCase();
+      var word = stemmer.stemWord(tmp[i].toLowerCase());
+      var toAppend;
       // select the correct list
       if (word[0] == '-') {
-        var toAppend = excluded;
+        toAppend = excluded;
         word = word.substr(1);
       }
       else {
-        var toAppend = searchterms;
+        toAppend = searchterms;
         hlterms.push(tmp[i].toLowerCase());
       }
       // only add if not already in the list
-      if (!$.contains(toAppend, word))
+      if (!$u.contains(toAppend, word))
         toAppend.push(word);
-    };
+    }
     var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
 
     // console.debug('SEARCH: searching for:');
@@ -342,89 +358,51 @@ var Search = {
     // console.info('excluded: ', excluded);
 
     // prepare search
-    var filenames = this._index.filenames;
-    var titles = this._index.titles;
     var terms = this._index.terms;
-    var fileMap = {};
-    var files = null;
-    // different result priorities
-    var importantResults = [];
-    var objectResults = [];
-    var regularResults = [];
-    var unimportantResults = [];
+    var titleterms = this._index.titleterms;
+
+    // array of [filename, title, anchor, descr, score]
+    var results = [];
     $('#search-progress').empty();
 
     // lookup as object
-    for (var i = 0; i < objectterms.length; i++) {
-      var others = [].concat(objectterms.slice(0,i),
-                             objectterms.slice(i+1, objectterms.length))
-      var results = this.performObjectSearch(objectterms[i], others);
-      // Assume first word is most likely to be the object,
-      // other words more likely to be in description.
-      // Therefore put matches for earlier words first.
-      // (Results are eventually used in reverse order).
-      objectResults = results[0].concat(objectResults);
-      importantResults = results[1].concat(importantResults);
-      unimportantResults = results[2].concat(unimportantResults);
+    for (i = 0; i < objectterms.length; i++) {
+      var others = [].concat(objectterms.slice(0, i),
+                             objectterms.slice(i+1, objectterms.length));
+      results = results.concat(this.performObjectSearch(objectterms[i], others));
     }
 
-    // perform the search on the required terms
-    for (var i = 0; i < searchterms.length; i++) {
-      var word = searchterms[i];
-      // no match but word was a required one
-      if ((files = terms[word]) == null)
-        break;
-      if (files.length == undefined) {
-        files = [files];
-      }
-      // create the mapping
-      for (var j = 0; j < files.length; j++) {
-        var file = files[j];
-        if (file in fileMap)
-          fileMap[file].push(word);
-        else
-          fileMap[file] = [word];
-      }
-    }
-
-    // now check if the files don't contain excluded terms
-    for (var file in fileMap) {
-      var valid = true;
-
-      // check if all requirements are matched
-      if (fileMap[file].length != searchterms.length)
-        continue;
-
-      // ensure that none of the excluded terms is in the
-      // search result.
-      for (var i = 0; i < excluded.length; i++) {
-        if (terms[excluded[i]] == file ||
-            $.contains(terms[excluded[i]] || [], file)) {
-          valid = false;
-          break;
-        }
-      }
+    // lookup as search terms in fulltext
+    results = results.concat(this.performTermsSearch(searchterms, excluded, terms, Scorer.term))
+                     .concat(this.performTermsSearch(searchterms, excluded, titleterms, Scorer.title));
 
-      // if we have still a valid result we can add it
-      // to the result list
-      if (valid)
-        regularResults.push([filenames[file], titles[file], '', null]);
+    // let the scorer override scores with a custom scoring function
+    if (Scorer.score) {
+      for (i = 0; i < results.length; i++)
+        results[i][4] = Scorer.score(results[i]);
     }
 
-    // delete unused variables in order to not waste
-    // memory until list is retrieved completely
-    delete filenames, titles, terms;
-
-    // now sort the regular results descending by title
-    regularResults.sort(function(a, b) {
-      var left = a[1].toLowerCase();
-      var right = b[1].toLowerCase();
-      return (left > right) ? -1 : ((left < right) ? 1 : 0);
+    // now sort the results by score (in opposite order of appearance, since the
+    // display function below uses pop() to retrieve items) and then
+    // alphabetically
+    results.sort(function(a, b) {
+      var left = a[4];
+      var right = b[4];
+      if (left > right) {
+        return 1;
+      } else if (left < right) {
+        return -1;
+      } else {
+        // same score: sort alphabetically
+        left = a[1].toLowerCase();
+        right = b[1].toLowerCase();
+        return (left > right) ? -1 : ((left < right) ? 1 : 0);
+      }
     });
 
-    // combine all results
-    var results = unimportantResults.concat(regularResults)
-      .concat(objectResults).concat(importantResults);
+    // for debugging
+    //Search.lastresults = results.slice();  // a copy
+    //console.info('search results:', Search.lastresults);
 
     // print the results
     var resultCount = results.length;
@@ -433,7 +411,7 @@ var Search = {
       if (results.length) {
         var item = results.pop();
         var listItem = $('<li style="display:none"></li>');
-        if (DOCUMENTATION_OPTIONS.FILE_SUFFIX == '') {
+        if (DOCUMENTATION_OPTIONS.FILE_SUFFIX === '') {
           // dirhtml builder
           var dirname = item[0] + '/';
           if (dirname.match(/\/index\/$/)) {
@@ -457,16 +435,18 @@ var Search = {
             displayNextItem();
           });
         } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
-          $.get(DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' +
-                item[0] + '.txt', function(data) {
-            if (data != '') {
-              listItem.append($.makeSearchSummary(data, searchterms, hlterms));
-              Search.output.append(listItem);
-            }
-            listItem.slideDown(5, function() {
-              displayNextItem();
-            });
-          }, "text");
+          $.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[0] + '.txt',
+                  dataType: "text",
+                  complete: function(jqxhr, textstatus) {
+                    var data = jqxhr.responseText;
+                    if (data !== '') {
+                      listItem.append(Search.makeSearchSummary(data, searchterms, hlterms));
+                    }
+                    Search.output.append(listItem);
+                    listItem.slideDown(5, function() {
+                      displayNextItem();
+                    });
+                  }});
         } else {
           // no source available, just display title
           Search.output.append(listItem);
@@ -489,20 +469,32 @@ var Search = {
     displayNextItem();
   },
 
+  /**
+   * search for object names
+   */
   performObjectSearch : function(object, otherterms) {
     var filenames = this._index.filenames;
     var objects = this._index.objects;
     var objnames = this._index.objnames;
     var titles = this._index.titles;
 
-    var importantResults = [];
-    var objectResults = [];
-    var unimportantResults = [];
+    var i;
+    var results = [];
 
     for (var prefix in objects) {
       for (var name in objects[prefix]) {
         var fullname = (prefix ? prefix + '.' : '') + name;
         if (fullname.toLowerCase().indexOf(object) > -1) {
+          var score = 0;
+          var parts = fullname.split('.');
+          // check for different match types: exact matches of full name or
+          // "last name" (i.e. last dotted part)
+          if (fullname == object || parts[parts.length - 1] == object) {
+            score += Scorer.objNameMatch;
+          // matches in last name
+          } else if (parts[parts.length - 1].indexOf(object) > -1) {
+            score += Scorer.objPartialMatch;
+          }
           var match = objects[prefix][name];
           var objname = objnames[match[1]][2];
           var title = titles[match[0]];
@@ -512,7 +504,7 @@ var Search = {
             var haystack = (prefix + ' ' + name + ' ' +
                             objname + ' ' + title).toLowerCase();
             var allfound = true;
-            for (var i = 0; i < otherterms.length; i++) {
+            for (i = 0; i < otherterms.length; i++) {
               if (haystack.indexOf(otherterms[i]) == -1) {
                 allfound = false;
                 break;
@@ -523,37 +515,107 @@ var Search = {
             }
           }
           var descr = objname + _(', in ') + title;
-          anchor = match[3];
-          if (anchor == '')
+
+          var anchor = match[3];
+          if (anchor === '')
             anchor = fullname;
           else if (anchor == '-')
             anchor = objnames[match[1]][1] + '-' + fullname;
-          result = [filenames[match[0]], fullname, '#'+anchor, descr];
-          switch (match[2]) {
-          case 1: objectResults.push(result); break;
-          case 0: importantResults.push(result); break;
-          case 2: unimportantResults.push(result); break;
+          // add custom score for some objects according to scorer
+          if (Scorer.objPrio.hasOwnProperty(match[2])) {
+            score += Scorer.objPrio[match[2]];
+          } else {
+            score += Scorer.objPrioDefault;
           }
+          results.push([filenames[match[0]], fullname, '#'+anchor, descr, score]);
         }
       }
     }
 
-    // sort results descending
-    objectResults.sort(function(a, b) {
-      return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
-    });
+    return results;
+  },
 
-    importantResults.sort(function(a, b) {
-      return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
-    });
+  /**
+   * search for full-text terms in the index
+   */
+  performTermsSearch : function(searchterms, excluded, terms, score) {
+    var filenames = this._index.filenames;
+    var titles = this._index.titles;
 
-    unimportantResults.sort(function(a, b) {
-      return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
-    });
+    var i, j, file, files;
+    var fileMap = {};
+    var results = [];
+
+    // perform the search on the required terms
+    for (i = 0; i < searchterms.length; i++) {
+      var word = searchterms[i];
+      // no match but word was a required one
+      if ((files = terms[word]) === undefined)
+        break;
+      if (files.length === undefined) {
+        files = [files];
+      }
+      // create the mapping
+      for (j = 0; j < files.length; j++) {
+        file = files[j];
+        if (file in fileMap)
+          fileMap[file].push(word);
+        else
+          fileMap[file] = [word];
+      }
+    }
+
+    // now check if the files don't contain excluded terms
+    for (file in fileMap) {
+      var valid = true;
+
+      // check if all requirements are matched
+      if (fileMap[file].length != searchterms.length)
+          continue;
+
+      // ensure that none of the excluded terms is in the search result
+      for (i = 0; i < excluded.length; i++) {
+        if (terms[excluded[i]] == file ||
+          $u.contains(terms[excluded[i]] || [], file)) {
+          valid = false;
+          break;
+        }
+      }
+
+      // if we have still a valid result we can add it to the result list
+      if (valid) {
+        results.push([filenames[file], titles[file], '', null, score]);
+      }
+    }
+    return results;
+  },
 
-    return [importantResults, objectResults, unimportantResults]
+  /**
+   * 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.
+   */
+  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 = $('<div class="context"></div>').text(excerpt);
+    $.each(hlwords, function() {
+      rv = rv.highlightText(this, 'highlighted');
+    });
+    return rv;
   }
-}
+};
 
 $(document).ready(function() {
   Search.init();
diff --git a/docs/usrman/_static/sidebar.js b/docs/usrman/_static/sidebar.js
index a45e192..4f09a0d 100644
--- a/docs/usrman/_static/sidebar.js
+++ b/docs/usrman/_static/sidebar.js
@@ -16,12 +16,20 @@
  * Once the browser is closed the cookie is deleted and the position
  * reset to the default (expanded).
  *
- * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
 
 $(function() {
+  
+  
+  
+  
+  
+  
+  
+
   // global elements used by the functions.
   // the 'sidebarbutton' element is defined as global after its
   // creation, in the add_sidebar_button function
@@ -134,7 +142,7 @@ $(function() {
     var items = document.cookie.split(';');
     for(var k=0; k<items.length; k++) {
       var key_val = items[k].split('=');
-      var key = key_val[0];
+      var key = key_val[0].replace(/ /, "");  // strip leading spaces
       if (key == 'sidebar') {
         var value = key_val[1];
         if ((value == 'collapsed') && (!sidebar_is_collapsed()))
@@ -148,4 +156,4 @@ $(function() {
   add_sidebar_button();
   var sidebarbutton = $('#sidebarbutton');
   set_position_from_cookie();
-});
+});
\ No newline at end of file
diff --git a/docs/usrman/_static/underscore.js b/docs/usrman/_static/underscore.js
index 5d89914..5b55f32 100644
--- a/docs/usrman/_static/underscore.js
+++ b/docs/usrman/_static/underscore.js
@@ -1,23 +1,31 @@
-// Underscore.js 0.5.5
-// (c) 2009 Jeremy Ashkenas, DocumentCloud Inc.
-// Underscore is freely distributable under the terms of the MIT license.
-// Portions of Underscore are inspired by or borrowed from Prototype.js,
+// Underscore.js 1.3.1
+// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
+// Underscore is freely distributable under the MIT license.
+// Portions of Underscore are inspired or borrowed from Prototype,
 // Oliver Steele's Functional, and John Resig's Micro-Templating.
 // For all details and documentation:
-// http://documentcloud.github.com/underscore/
-(function(){var j=this,n=j._,i=function(a){this._wrapped=a},m=typeof StopIteration!=="undefined"?StopIteration:"__break__",b=j._=function(a){return new i(a)};if(typeof exports!=="undefined")exports._=b;var k=Array.prototype.slice,o=Array.prototype.unshift,p=Object.prototype.toString,q=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;b.VERSION="0.5.5";b.each=function(a,c,d){try{if(a.forEach)a.forEach(c,d);else if(b.isArray(a)||b.isArguments(a))for(var e=0,f=a.length [...]
-a[e],e,a);else{var g=b.keys(a);f=g.length;for(e=0;e<f;e++)c.call(d,a[g[e]],g[e],a)}}catch(h){if(h!=m)throw h;}return a};b.map=function(a,c,d){if(a&&b.isFunction(a.map))return a.map(c,d);var e=[];b.each(a,function(f,g,h){e.push(c.call(d,f,g,h))});return e};b.reduce=function(a,c,d,e){if(a&&b.isFunction(a.reduce))return a.reduce(b.bind(d,e),c);b.each(a,function(f,g,h){c=d.call(e,c,f,g,h)});return c};b.reduceRight=function(a,c,d,e){if(a&&b.isFunction(a.reduceRight))return a.reduceRight(b.bin [...]
-var f=b.clone(b.toArray(a)).reverse();b.each(f,function(g,h){c=d.call(e,c,g,h,a)});return c};b.detect=function(a,c,d){var e;b.each(a,function(f,g,h){if(c.call(d,f,g,h)){e=f;b.breakLoop()}});return e};b.select=function(a,c,d){if(a&&b.isFunction(a.filter))return a.filter(c,d);var e=[];b.each(a,function(f,g,h){c.call(d,f,g,h)&&e.push(f)});return e};b.reject=function(a,c,d){var e=[];b.each(a,function(f,g,h){!c.call(d,f,g,h)&&e.push(f)});return e};b.all=function(a,c,d){c=c||b.identity;if(a&&b [...]
-d);var e=true;b.each(a,function(f,g,h){(e=e&&c.call(d,f,g,h))||b.breakLoop()});return e};b.any=function(a,c,d){c=c||b.identity;if(a&&b.isFunction(a.some))return a.some(c,d);var e=false;b.each(a,function(f,g,h){if(e=c.call(d,f,g,h))b.breakLoop()});return e};b.include=function(a,c){if(b.isArray(a))return b.indexOf(a,c)!=-1;var d=false;b.each(a,function(e){if(d=e===c)b.breakLoop()});return d};b.invoke=function(a,c){var d=b.rest(arguments,2);return b.map(a,function(e){return(c?e[c]:e).apply( [...]
-function(a,c){return b.map(a,function(d){return d[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);var e={computed:-Infinity};b.each(a,function(f,g,h){g=c?c.call(d,f,g,h):f;g>=e.computed&&(e={value:f,computed:g})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);var e={computed:Infinity};b.each(a,function(f,g,h){g=c?c.call(d,f,g,h):f;g<e.computed&&(e={value:f,computed:g})});return e.value};b.sortBy=function(a,c,d){retur [...]
-function(e,f,g){return{value:e,criteria:c.call(d,e,f,g)}}).sort(function(e,f){e=e.criteria;f=f.criteria;return e<f?-1:e>f?1:0}),"value")};b.sortedIndex=function(a,c,d){d=d||b.identity;for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?(e=g+1):(f=g)}return e};b.toArray=function(a){if(!a)return[];if(a.toArray)return a.toArray();if(b.isArray(a))return a;if(b.isArguments(a))return k.call(a);return b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=function(a,c,d){return  [...]
-0,c):a[0]};b.rest=function(a,c,d){return k.call(a,b.isUndefined(c)||d?1:c)};b.last=function(a){return a[a.length-1]};b.compact=function(a){return b.select(a,function(c){return!!c})};b.flatten=function(a){return b.reduce(a,[],function(c,d){if(b.isArray(d))return c.concat(b.flatten(d));c.push(d);return c})};b.without=function(a){var c=b.rest(arguments);return b.select(a,function(d){return!b.include(c,d)})};b.uniq=function(a,c){return b.reduce(a,[],function(d,e,f){if(0==f||(c===true?b.last( [...]
-e)))d.push(e);return d})};b.intersect=function(a){var c=b.rest(arguments);return b.select(b.uniq(a),function(d){return b.all(c,function(e){return b.indexOf(e,d)>=0})})};b.zip=function(){for(var a=b.toArray(arguments),c=b.max(b.pluck(a,"length")),d=new Array(c),e=0;e<c;e++)d[e]=b.pluck(a,String(e));return d};b.indexOf=function(a,c){if(a.indexOf)return a.indexOf(c);for(var d=0,e=a.length;d<e;d++)if(a[d]===c)return d;return-1};b.lastIndexOf=function(a,c){if(a.lastIndexOf)return a.lastIndexO [...]
-a.length;d--;)if(a[d]===c)return d;return-1};b.range=function(a,c,d){var e=b.toArray(arguments),f=e.length<=1;a=f?0:e[0];c=f?e[0]:e[1];d=e[2]||1;e=Math.ceil((c-a)/d);if(e<=0)return[];e=new Array(e);f=a;for(var g=0;1;f+=d){if((d>0?f-c:c-f)>=0)return e;e[g++]=f}};b.bind=function(a,c){var d=b.rest(arguments,2);return function(){return a.apply(c||j,d.concat(b.toArray(arguments)))}};b.bindAll=function(a){var c=b.rest(arguments);if(c.length==0)c=b.functions(a);b.each(c,function(d){a[d]=b.bind( [...]
-return a};b.delay=function(a,c){var d=b.rest(arguments,2);return setTimeout(function(){return a.apply(a,d)},c)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(b.rest(arguments)))};b.wrap=function(a,c){return function(){var d=[a].concat(b.toArray(arguments));return c.apply(c,d)}};b.compose=function(){var a=b.toArray(arguments);return function(){for(var c=b.toArray(arguments),d=a.length-1;d>=0;d--)c=[a[d].apply(this,c)];return c[0]}};b.keys=function(a){if(b.isArray(a))return b.ran [...]
-var c=[];for(var d in a)q.call(a,d)&&c.push(d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=function(a){return b.select(b.keys(a),function(c){return b.isFunction(a[c])}).sort()};b.extend=function(a,c){for(var d in c)a[d]=c[d];return a};b.clone=function(a){if(b.isArray(a))return a.slice(0);return b.extend({},a)};b.tap=function(a,c){c(a);return a};b.isEqual=function(a,c){if(a===c)return true;var d=typeof a;if(d!=typeof c)return false;if(a==c)return true;if(!a&&c|| [...]
-if(a.isEqual)return a.isEqual(c);if(b.isDate(a)&&b.isDate(c))return a.getTime()===c.getTime();if(b.isNaN(a)&&b.isNaN(c))return true;if(b.isRegExp(a)&&b.isRegExp(c))return a.source===c.source&&a.global===c.global&&a.ignoreCase===c.ignoreCase&&a.multiline===c.multiline;if(d!=="object")return false;if(a.length&&a.length!==c.length)return false;d=b.keys(a);var e=b.keys(c);if(d.length!=e.length)return false;for(var f in a)if(!b.isEqual(a[f],c[f]))return false;return true};b.isEmpty=function(a [...]
-0};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=function(a){return!!(a&&a.concat&&a.unshift)};b.isArguments=function(a){return a&&b.isNumber(a.length)&&!b.isArray(a)&&!r.call(a,"length")};b.isFunction=function(a){return!!(a&&a.constructor&&a.call&&a.apply)};b.isString=function(a){return!!(a===""||a&&a.charCodeAt&&a.substr)};b.isNumber=function(a){return p.call(a)==="[object Number]"};b.isDate=function(a){return!!(a&&a.getTimezoneOffset&&a.setUTCFullYear)};b.isRegExp=func [...]
-a.test&&a.exec&&(a.ignoreCase||a.ignoreCase===false))};b.isNaN=function(a){return b.isNumber(a)&&isNaN(a)};b.isNull=function(a){return a===null};b.isUndefined=function(a){return typeof a=="undefined"};b.noConflict=function(){j._=n;return this};b.identity=function(a){return a};b.breakLoop=function(){throw m;};var s=0;b.uniqueId=function(a){var c=s++;return a?a+c:c};b.template=function(a,c){a=new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+a.re [...]
-" ").replace(/'(?=[^%]*%>)/g,"\t").split("'").join("\\'").split("\t").join("'").replace(/<%=(.+?)%>/g,"',$1,'").split("<%").join("');").split("%>").join("p.push('")+"');}return p.join('');");return c?a(c):a};b.forEach=b.each;b.foldl=b.inject=b.reduce;b.foldr=b.reduceRight;b.filter=b.select;b.every=b.all;b.some=b.any;b.head=b.first;b.tail=b.rest;b.methods=b.functions;var l=function(a,c){return c?b(a).chain():a};b.each(b.functions(b),function(a){var c=b[a];i.prototype[a]=function(){var d=b [...]
-o.call(d,this._wrapped);return l(c.apply(b,d),this._chain)}});b.each(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var c=Array.prototype[a];i.prototype[a]=function(){c.apply(this._wrapped,arguments);return l(this._wrapped,this._chain)}});b.each(["concat","join","slice"],function(a){var c=Array.prototype[a];i.prototype[a]=function(){return l(c.apply(this._wrapped,arguments),this._chain)}});i.prototype.chain=function(){this._chain=true;return this};i.prototype.valu [...]
+// http://documentcloud.github.com/underscore
+(function(){function q(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return a==String(c);case "[object Number]":return a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object [...]
+c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&q(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&q(a[h],c[h],d))))break;if(g){for(h i [...]
+h)&&!f--)break;g=!f}}d.pop();return g}var r=this,G=r._,n={},k=Array.prototype,o=Object.prototype,i=k.slice,H=k.unshift,l=o.toString,I=o.hasOwnProperty,w=k.forEach,x=k.map,y=k.reduce,z=k.reduceRight,A=k.filter,B=k.every,C=k.some,p=k.indexOf,D=k.lastIndexOf,o=Array.isArray,J=Object.keys,s=Function.prototype.bind,b=function(a){return new m(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else r._=b;b.VERSION="1.3.1";var [...]
+b.forEach=function(a,c,d){if(a!=null)if(w&&a.forEach===w)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(d,a[e],e,a)===n)break}else for(e in a)if(b.has(a,e)&&c.call(d,a[e],e,a)===n)break};b.map=b.collect=function(a,c,b){var e=[];if(a==null)return e;if(x&&a.map===x)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});if(a.length===+a.length)e.length=a.length;return e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var f=arguments.l [...]
+null&&(a=[]);if(y&&a.reduce===y)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(z&&a.reduceRight===z)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.f [...]
+function(a,c,b){var e;E(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(A&&a.filter===A)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(B&&a.every===B)return a.every(c,b);j(a,function(a,g, [...]
+e&&c.call(b,a,g,h)))return n});return e};var E=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(C&&a.some===C)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return n});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return p&&a.indexOf===p?a.indexOf(c)!=-1:b=E(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d) [...]
+function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&(e={value:a [...]
+return e.value};b.shuffle=function(a){var b=[],d;j(a,function(a,f){f==0?b[0]=a:(d=Math.floor(Math.random()*(f+1)),b[f]=b[d],b[d]=a)});return b};b.sortBy=function(a,c,d){return b.pluck(b.map(a,function(a,b,g){return{value:a,criteria:c.call(d,a,b,g)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;return c<d?-1:c>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedInd [...]
+c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:a.toArray?a.toArray():b.isArray(a)?i.call(a):b.isArguments(a)?i.call(a):b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=b.head=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length- [...]
+b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,e=[];b.reduce(d,function(d,g,h){if(0==h||(c===true?b.last(d)!=g:!b.include(d,g)))d[d.length]=g,e[e.length]=a[h];retur [...]
+return e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=func [...]
+d){if(a==null)return-1;var e;if(d)return d=b.sortedIndex(a,c),a[d]===c?d:-1;if(p&&a.indexOf===p)return a.indexOf(c);for(d=0,e=a.length;d<e;d++)if(d in a&&a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(D&&a.lastIndexOf===D)return a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return d;return-1};b.range=function(a,b,d){arguments.length<=1&&(b=a||0,a=0);for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;)g[f++]=a,a+=d; [...]
+var F=function(){};b.bind=function(a,c){var d,e;if(a.bind===s&&s)return s.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));F.prototype=a.prototype;var b=new F,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.mem [...]
+c){var d={};c||(c=b.identity);return function(){var e=c.apply(this,arguments);return b.has(d,e)?d[e]:d[e]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(a,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i=b.debounce(function(){h=g=false},c);return function(){d=this;e=arguments;var b;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);i()},c)) [...]
+a.apply(d,e);i();g=true}};b.debounce=function(a,b){var d;return function(){var e=this,f=arguments;clearTimeout(d);d=setTimeout(function(){d=null;a.apply(e,f)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=[a].concat(i.call(arguments,0));return b.apply(this,d)}};b.compose=function(){var a=arguments;return function(){for(var b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)] [...]
+b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=J||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.defaults=function( [...]
+1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return q(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=o||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){ret [...]
+b.isArguments=function(a){return l.call(a)=="[object Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!b.has(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a) [...]
+b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,b){return I.call(a,b)};b.noConflict=function(){r._=G;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"&#x27;").replace(/\//g,"&#x2F;")};b.mixin [...]
+function(c){K(c,b[c]=a[c])})};var L=0;b.uniqueId=function(a){var b=L++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var t=/.^/,u=function(a){return a.replace(/\\\\/g,"\\").replace(/\\'/g,"'")};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape||t,function(a,b){return [...]
+u(b)+"),'"}).replace(d.interpolate||t,function(a,b){return"',"+u(b)+",'"}).replace(d.evaluate||t,function(a,b){return"');"+u(b).replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e.call(this,a,b)}};b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var v=function(a,c){return c?b(a).chain():a},K=func [...]
+function(){var a=i.call(arguments);H.call(a,this._wrapped);return v(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return v(d,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return v(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.ch [...]
+true;return this};m.prototype.value=function(){return this._wrapped}}).call(this);
diff --git a/docs/usrman/_static/websupport.js b/docs/usrman/_static/websupport.js
index e9bd1b8..71c0a13 100644
--- a/docs/usrman/_static/websupport.js
+++ b/docs/usrman/_static/websupport.js
@@ -4,7 +4,7 @@
  *
  * sphinx.websupport utilties for all documentation.
  *
- * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
diff --git a/docs/usrman/citing.html b/docs/usrman/citing.html
index 27c8eea..e76667d 100644
--- a/docs/usrman/citing.html
+++ b/docs/usrman/citing.html
@@ -1,5 +1,3 @@
-
-
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
@@ -8,15 +6,15 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Citations — SLEPc for Python 3.6.0 documentation</title>
+    <title>Citations — SLEPc for Python 3.7.0 documentation</title>
     
     <link rel="stylesheet" href="_static/default.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
-        URL_ROOT:    '',
-        VERSION:     '3.6.0',
+        URL_ROOT:    './',
+        VERSION:     '3.7.0',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +23,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="SLEPc for Python 3.6.0 documentation" href="index.html" />
+    <link rel="top" title="SLEPc for Python 3.7.0 documentation" href="index.html" />
     <link rel="prev" title="Installation" href="install.html" /> 
   </head>
   <body>
@@ -38,7 +36,7 @@
         <li class="right" >
           <a href="install.html" title="Installation"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">SLEPc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">SLEPc for Python 3.7.0 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -57,9 +55,8 @@ project.</p>
 <em>Parallel Distributed Computing using Python</em>,
 Advances in Water Resources, 34(9):1124-1139, 2011.
 <a class="reference external" href="http://dx.doi.org/10.1016/j.advwatres.2011.04.013">http://dx.doi.org/10.1016/j.advwatres.2011.04.013</a></li>
-<li>V. Hernandez, J.E. Roman and V. Vidal.
-<em>SLEPc: A Scalable and Flexible Toolkit for the
-Solution of Eigenvalue Problems</em>,
+<li>V. Hernandez, J.E. Roman, and V. Vidal,
+<em>SLEPc: A scalable and flexible toolkit for the solution of eigenvalue problems</em>,
 ACM Transactions on Mathematical Software, 31(3):351-362, 2005.
 <a class="reference external" href="http://dx.doi.org/10.1145/1089014.1089019">http://dx.doi.org/10.1145/1089014.1089019</a></li>
 </ul>
@@ -105,12 +102,12 @@ ACM Transactions on Mathematical Software, 31(3):351-362, 2005.
         <li class="right" >
           <a href="install.html" title="Installation"
              >previous</a> |</li>
-        <li><a href="index.html">SLEPc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">SLEPc for Python 3.7.0 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
-        © Copyright 2015, Lisandro Dalcin.
-      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
+        © Copyright 2016, Lisandro Dalcin.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/docs/usrman/genindex.html b/docs/usrman/genindex.html
index d7a05db..0e9972d 100644
--- a/docs/usrman/genindex.html
+++ b/docs/usrman/genindex.html
@@ -1,7 +1,4 @@
 
-
-
-
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
@@ -10,15 +7,15 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Index — SLEPc for Python 3.6.0 documentation</title>
+    <title>Index — SLEPc for Python 3.7.0 documentation</title>
     
     <link rel="stylesheet" href="_static/default.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
-        URL_ROOT:    '',
-        VERSION:     '3.6.0',
+        URL_ROOT:    './',
+        VERSION:     '3.7.0',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -27,7 +24,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="SLEPc for Python 3.6.0 documentation" href="index.html" /> 
+    <link rel="top" title="SLEPc for Python 3.7.0 documentation" href="index.html" /> 
   </head>
   <body>
     <div class="related">
@@ -36,7 +33,7 @@
         <li class="right" style="margin-right: 10px">
           <a href="#" title="General Index"
              accesskey="I">index</a></li>
-        <li><a href="index.html">SLEPc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">SLEPc for Python 3.7.0 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -186,12 +183,12 @@
         <li class="right" style="margin-right: 10px">
           <a href="#" title="General Index"
              >index</a></li>
-        <li><a href="index.html">SLEPc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">SLEPc for Python 3.7.0 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
-        © Copyright 2015, Lisandro Dalcin.
-      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
+        © Copyright 2016, Lisandro Dalcin.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/docs/usrman/index.html b/docs/usrman/index.html
index 78dd869..08f1042 100644
--- a/docs/usrman/index.html
+++ b/docs/usrman/index.html
@@ -1,5 +1,3 @@
-
-
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
@@ -8,15 +6,15 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>SLEPc for Python — SLEPc for Python 3.6.0 documentation</title>
+    <title>SLEPc for Python — SLEPc for Python 3.7.0 documentation</title>
     
     <link rel="stylesheet" href="_static/default.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
-        URL_ROOT:    '',
-        VERSION:     '3.6.0',
+        URL_ROOT:    './',
+        VERSION:     '3.7.0',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +23,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="SLEPc for Python 3.6.0 documentation" href="#" />
+    <link rel="top" title="SLEPc for Python 3.7.0 documentation" href="#" />
     <link rel="next" title="Overview" href="overview.html" /> 
   </head>
   <body>
@@ -38,7 +36,7 @@
         <li class="right" >
           <a href="overview.html" title="Overview"
              accesskey="N">next</a> |</li>
-        <li><a href="#">SLEPc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="#">SLEPc for Python 3.7.0 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -57,11 +55,9 @@
 </tr>
 <tr class="field-even field"><th class="field-name">Contact:</th><td class="field-body"><a class="reference external" href="mailto:dalcinl%40gmail.com">dalcinl<span>@</span>gmail<span>.</span>com</a>, <a class="reference external" href="mailto:jroman%40dsic.upv.es">jroman<span>@</span>dsic<span>.</span>upv<span>.</span>es</a></td>
 </tr>
-<tr class="field-odd field"><th class="field-name">Organization:</th><td class="field-body"><a class="reference external" href="http://www.cimec.org.ar">CIMEC</a>, <a class="reference external" href="http://www.upv.es">UPV</a></td>
-</tr>
-<tr class="field-even field"><th class="field-name">Web Site:</th><td class="field-body"><a class="reference external" href="https://bitbucket.org/slepc/slepc4py">https://bitbucket.org/slepc/slepc4py</a></td>
+<tr class="field-odd field"><th class="field-name">Web Site:</th><td class="field-body"><a class="reference external" href="https://bitbucket.org/slepc/slepc4py">https://bitbucket.org/slepc/slepc4py</a></td>
 </tr>
-<tr class="field-odd field"><th class="field-name">Date:</th><td class="field-body">July 05, 2015</td>
+<tr class="field-even field"><th class="field-name">Date:</th><td class="field-body">May 22, 2016</td>
 </tr>
 </tbody>
 </table>
@@ -113,9 +109,7 @@ its companion <a class="reference external" href="http://bitbucket.org/petsc/pet
   <h3><a href="#">Table Of Contents</a></h3>
   <ul>
 <li><a class="reference internal" href="#">SLEPc for Python</a><ul>
-<li><a class="reference internal" href="#contents">Contents</a><ul>
-</ul>
-</li>
+<li><a class="reference internal" href="#contents">Contents</a></li>
 </ul>
 </li>
 </ul>
@@ -154,12 +148,12 @@ its companion <a class="reference external" href="http://bitbucket.org/petsc/pet
         <li class="right" >
           <a href="overview.html" title="Overview"
              >next</a> |</li>
-        <li><a href="#">SLEPc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="#">SLEPc for Python 3.7.0 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
-        © Copyright 2015, Lisandro Dalcin.
-      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
+        © Copyright 2016, Lisandro Dalcin.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/docs/usrman/install.html b/docs/usrman/install.html
index 5c6bfc7..301b151 100644
--- a/docs/usrman/install.html
+++ b/docs/usrman/install.html
@@ -1,5 +1,3 @@
-
-
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
@@ -8,15 +6,15 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Installation — SLEPc for Python 3.6.0 documentation</title>
+    <title>Installation — SLEPc for Python 3.7.0 documentation</title>
     
     <link rel="stylesheet" href="_static/default.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
-        URL_ROOT:    '',
-        VERSION:     '3.6.0',
+        URL_ROOT:    './',
+        VERSION:     '3.7.0',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +23,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="SLEPc for Python 3.6.0 documentation" href="index.html" />
+    <link rel="top" title="SLEPc for Python 3.7.0 documentation" href="index.html" />
     <link rel="next" title="Citations" href="citing.html" />
     <link rel="prev" title="Tutorial" href="tutorial.html" /> 
   </head>
@@ -42,7 +40,7 @@
         <li class="right" >
           <a href="tutorial.html" title="Tutorial"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">SLEPc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">SLEPc for Python 3.7.0 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -57,21 +55,24 @@
 <h2>Using <strong>pip</strong> or <strong>easy_install</strong><a class="headerlink" href="#using-pip-or-easy-install" title="Permalink to this headline">¶</a></h2>
 <p>You can use <strong class="program">pip</strong> to install <tt class="xref py py-mod docutils literal"><span class="pre">slepc4py</span></tt> and its
 dependencies (<tt class="xref py py-mod docutils literal"><span class="pre">mpi4py</span></tt> is optional but highly recommended):</p>
-<div class="highlight-python"><pre>$ pip install [--user] numpy mpi4py
+<div class="highlight-python"><div class="highlight"><pre><span></span>$ pip install [--user] numpy mpi4py
 $ pip install [--user] petsc petsc4py
-$ pip install [--user] slepc slepc4py</pre>
+$ pip install [--user] slepc slepc4py
+</pre></div>
 </div>
 <p>Alternatively, you can use <strong class="program">easy_install</strong> (deprecated):</p>
-<div class="highlight-python"><pre>$ easy_install [--user] slepc4py</pre>
+<div class="highlight-python"><div class="highlight"><pre><span></span>$ easy_install [--user] slepc4py
+</pre></div>
 </div>
 <p>If you already have working PETSc and SLEPc installs, set environment
 variables <span class="target" id="index-0"></span><tt class="xref std std-envvar docutils literal"><span class="pre">SLEPC_DIR</span></tt> and <span class="target" id="index-1"></span><tt class="xref std std-envvar docutils literal"><span class="pre">PETSC_DIR</span></tt> (and perhaps
 <span class="target" id="index-2"></span><tt class="xref std std-envvar docutils literal"><span class="pre">PETSC_ARCH</span></tt> for non-prefix installs) to appropriate values
 and next use <strong class="program">pip</strong>:</p>
-<div class="highlight-python"><pre>$ export SLEPC_DIR=/path/to/slepc
+<div class="highlight-python"><div class="highlight"><pre><span></span>$ export SLEPC_DIR=/path/to/slepc
 $ export PETSC_DIR=/path/to/petsc
 $ export PETSC_ARCH=arch-linux2-c-opt
-$ pip install [--user] petsc4py slepc4py</pre>
+$ pip install [--user] petsc4py slepc4py
+</pre></div>
 </div>
 </div>
 <div class="section" id="using-distutils">
@@ -110,11 +111,13 @@ project website generously hosted by Bitbucket. You can use
 <strong class="program">curl</strong> or <strong class="program">wget</strong> to get a release tarball.</p>
 <ul>
 <li><p class="first">Using <strong class="program">curl</strong>:</p>
-<div class="highlight-python"><pre>$ curl -O https://bitbucket.org/slepc/slepc4py/downloads/slepc4py-X.Y.tar.gz</pre>
+<div class="highlight-python"><div class="highlight"><pre><span></span>$ curl -O https://bitbucket.org/slepc/slepc4py/downloads/slepc4py-X.Y.tar.gz
+</pre></div>
 </div>
 </li>
 <li><p class="first">Using <strong class="program">wget</strong>:</p>
-<div class="highlight-python"><pre>$ wget https://bitbucket.org/slepc/slepc4py/downloads/slepc4py-X.Y.tar.gz</pre>
+<div class="highlight-python"><div class="highlight"><pre><span></span>$ wget https://bitbucket.org/slepc/slepc4py/downloads/slepc4py-X.Y.tar.gz
+</pre></div>
 </div>
 </li>
 </ul>
@@ -122,8 +125,9 @@ project website generously hosted by Bitbucket. You can use
 <div class="section" id="building">
 <h3>Building<a class="headerlink" href="#building" title="Permalink to this headline">¶</a></h3>
 <p>After unpacking the release tarball:</p>
-<div class="highlight-python"><pre>$ tar -zxf slepc4py-X.Y.tar.gz
-$ cd slepc4py-X.Y</pre>
+<div class="highlight-python"><div class="highlight"><pre><span></span>$ tar -zxf slepc4py-X.Y.tar.gz
+$ cd slepc4py-X.Y
+</pre></div>
 </div>
 <p>the distribution is ready for building.</p>
 <div class="admonition note">
@@ -136,9 +140,10 @@ assume your Mac is running <strong>Snow Leopard</strong> on a <strong>64-bit Int
 processor and you want to override the hard-wired cross-development
 SDK in Python configuration, your environment should be modified
 like this:</p>
-<div class="last highlight-python"><pre>$ export MACOSX_DEPLOYMENT_TARGET=10.6
+<div class="last highlight-python"><div class="highlight"><pre><span></span>$ export MACOSX_DEPLOYMENT_TARGET=10.6
 $ export SDKROOT=/
-$ export ARCHFLAGS='-arch x86_64'</pre>
+$ export ARCHFLAGS='-arch x86_64'
+</pre></div>
 </div>
 </div>
 <p>Some environment configuration is needed to inform the location of
@@ -147,20 +152,23 @@ PETSc and SLEPc. You can set (using <strong class="command">setenv</strong>,
 environment variables <span class="target" id="index-6"></span><tt class="xref std std-envvar docutils literal"><span class="pre">SLEPC_DIR`</span></tt>, <span class="target" id="index-7"></span><tt class="xref std std-envvar docutils literal"><span class="pre">PETSC_DIR</span></tt>, and
 <span class="target" id="index-8"></span><tt class="xref std std-envvar docutils literal"><span class="pre">PETSC_ARCH</span></tt> indicating where you have built/installed SLEPc
 and PETSc:</p>
-<div class="highlight-python"><pre>$ export SLEPC_DIR=/usr/local/slepc
+<div class="highlight-python"><div class="highlight"><pre><span></span>$ export SLEPC_DIR=/usr/local/slepc
 $ export PETSC_DIR=/usr/local/petsc
-$ export PETSC_ARCH=arch-linux2-c-opt</pre>
+$ export PETSC_ARCH=arch-linux2-c-opt
+</pre></div>
 </div>
 <p>Alternatively, you can edit the file <tt class="file docutils literal"><span class="pre">setup.cfg</span></tt> and provide the
 required information below the <tt class="docutils literal"><span class="pre">[config]</span></tt> section:</p>
-<div class="highlight-python"><pre>[config]
+<div class="highlight-python"><div class="highlight"><pre><span></span>[config]
 slepc_dir  = /usr/local/slepc
 petsc_dir  = /usr/local/petsc
 petsc_arch = arch-linux2-c-opt
-...</pre>
+...
+</pre></div>
 </div>
 <p>Finally, you can build the distribution by typing:</p>
-<div class="highlight-python"><pre>$ python setup.py build</pre>
+<div class="highlight-python"><div class="highlight"><pre><span></span>$ python setup.py build
+</pre></div>
 </div>
 </div>
 <div class="section" id="installing">
@@ -169,13 +177,15 @@ petsc_arch = arch-linux2-c-opt
 <p>If you have root privileges (either by log-in as the root user of by
 using <strong class="command">sudo</strong>) and you want to install <em>SLEPc for Python</em> in
 your system for all users, just do:</p>
-<div class="highlight-python"><pre>$ python setup.py install</pre>
+<div class="highlight-python"><div class="highlight"><pre><span></span>$ python setup.py install
+</pre></div>
 </div>
 <p>The previous steps will install the <tt class="xref py py-mod docutils literal"><span class="pre">slepc4py</span></tt> package at standard
 location <tt class="file docutils literal"><em><span class="pre">prefix</span></em><span class="pre">/lib/python</span><em><span class="pre">X</span></em><span class="pre">.</span><em><span class="pre">X</span></em><span class="pre">/site-packages</span></tt>.</p>
 <p>If you do not have root privileges or you want to install <em>SLEPc for
 Python</em> for your private use, just do:</p>
-<div class="highlight-python"><pre>$ python setup.py install --user</pre>
+<div class="highlight-python"><div class="highlight"><pre><span></span>$ python setup.py install --user
+</pre></div>
 </div>
 </div>
 </div>
@@ -242,12 +252,12 @@ Python</em> for your private use, just do:</p>
         <li class="right" >
           <a href="tutorial.html" title="Tutorial"
              >previous</a> |</li>
-        <li><a href="index.html">SLEPc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">SLEPc for Python 3.7.0 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
-        © Copyright 2015, Lisandro Dalcin.
-      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
+        © Copyright 2016, Lisandro Dalcin.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/docs/usrman/manual.html b/docs/usrman/manual.html
index 3b62f82..f7d58dd 100644
--- a/docs/usrman/manual.html
+++ b/docs/usrman/manual.html
@@ -1,5 +1,3 @@
-
-
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
@@ -8,15 +6,15 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>SLEPc for Python — SLEPc for Python 3.6.0 documentation</title>
+    <title>SLEPc for Python — SLEPc for Python 3.7.0 documentation</title>
     
     <link rel="stylesheet" href="_static/default.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
-        URL_ROOT:    '',
-        VERSION:     '3.6.0',
+        URL_ROOT:    './',
+        VERSION:     '3.7.0',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +23,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="SLEPc for Python 3.6.0 documentation" href="index.html" /> 
+    <link rel="top" title="SLEPc for Python 3.7.0 documentation" href="index.html" /> 
   </head>
   <body>
     <div class="related">
@@ -34,7 +32,7 @@
         <li class="right" style="margin-right: 10px">
           <a href="genindex.html" title="General Index"
              accesskey="I">index</a></li>
-        <li><a href="index.html">SLEPc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">SLEPc for Python 3.7.0 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -115,12 +113,12 @@ its companion <a class="reference external" href="http://bitbucket.org/petsc/pet
         <li class="right" style="margin-right: 10px">
           <a href="genindex.html" title="General Index"
              >index</a></li>
-        <li><a href="index.html">SLEPc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">SLEPc for Python 3.7.0 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
-        © Copyright 2015, Lisandro Dalcin.
-      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
+        © Copyright 2016, Lisandro Dalcin.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/docs/usrman/objects.inv b/docs/usrman/objects.inv
index 9a624f7..e158fcc 100644
Binary files a/docs/usrman/objects.inv and b/docs/usrman/objects.inv differ
diff --git a/docs/usrman/overview.html b/docs/usrman/overview.html
index a1f2c82..2255715 100644
--- a/docs/usrman/overview.html
+++ b/docs/usrman/overview.html
@@ -1,5 +1,3 @@
-
-
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
@@ -8,15 +6,15 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Overview — SLEPc for Python 3.6.0 documentation</title>
+    <title>Overview — SLEPc for Python 3.7.0 documentation</title>
     
     <link rel="stylesheet" href="_static/default.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
-        URL_ROOT:    '',
-        VERSION:     '3.6.0',
+        URL_ROOT:    './',
+        VERSION:     '3.7.0',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +23,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="SLEPc for Python 3.6.0 documentation" href="index.html" />
+    <link rel="top" title="SLEPc for Python 3.7.0 documentation" href="index.html" />
     <link rel="next" title="Tutorial" href="tutorial.html" />
     <link rel="prev" title="SLEPc for Python" href="index.html" /> 
   </head>
@@ -42,7 +40,7 @@
         <li class="right" >
           <a href="index.html" title="SLEPc for Python"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">SLEPc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">SLEPc for Python 3.7.0 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -275,12 +273,12 @@ nonlinear eigenproblems with NEP in split form.</td>
         <li class="right" >
           <a href="index.html" title="SLEPc for Python"
              >previous</a> |</li>
-        <li><a href="index.html">SLEPc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">SLEPc for Python 3.7.0 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
-        © Copyright 2015, Lisandro Dalcin.
-      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
+        © Copyright 2016, Lisandro Dalcin.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/docs/usrman/search.html b/docs/usrman/search.html
index 76e0fa0..c451daa 100644
--- a/docs/usrman/search.html
+++ b/docs/usrman/search.html
@@ -1,5 +1,3 @@
-
-
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
@@ -8,15 +6,15 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Search — SLEPc for Python 3.6.0 documentation</title>
+    <title>Search — SLEPc for Python 3.7.0 documentation</title>
     
     <link rel="stylesheet" href="_static/default.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
-        URL_ROOT:    '',
-        VERSION:     '3.6.0',
+        URL_ROOT:    './',
+        VERSION:     '3.7.0',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -26,10 +24,12 @@
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
     <script type="text/javascript" src="_static/searchtools.js"></script>
-    <link rel="top" title="SLEPc for Python 3.6.0 documentation" href="index.html" />
+    <link rel="top" title="SLEPc for Python 3.7.0 documentation" href="index.html" />
   <script type="text/javascript">
     jQuery(function() { Search.loadIndex("searchindex.js"); });
   </script>
+  
+  <script type="text/javascript" id="searchindexloader"></script>
    
 
   </head>
@@ -40,7 +40,7 @@
         <li class="right" style="margin-right: 10px">
           <a href="genindex.html" title="General Index"
              accesskey="I">index</a></li>
-        <li><a href="index.html">SLEPc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">SLEPc for Python 3.7.0 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -88,12 +88,12 @@
         <li class="right" style="margin-right: 10px">
           <a href="genindex.html" title="General Index"
              >index</a></li>
-        <li><a href="index.html">SLEPc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">SLEPc for Python 3.7.0 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
-        © Copyright 2015, Lisandro Dalcin.
-      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
+        © Copyright 2016, Lisandro Dalcin.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/docs/usrman/searchindex.js b/docs/usrman/searchindex.js
index 1bf4913..15bc657 100644
--- a/docs/usrman/searchindex.js
+++ b/docs/usrman/searchindex.js
@@ -1 +1 @@
-Search.setIndex({objects:{},terms:{represent:[0,2,1],all:[1,5,4],concept:1,partial:1,orthogon:[1,5],illustr:5,definit:1,global:5,signific:3,code:5,abil:1,follow:[1,5,4],row:5,privat:4,depend:[5,4],rayleigh:1,init:5,program:5,under:1,petsc_dir:4,cimec:0,emploi:4,mpd:5,sourc:[0,2,5],straightforward:5,mpi:[5,4],mechan:1,implicitli:1,relev:5,paz:3,tri:1,solver:[1,5],prefix:[5,4],iter:[1,5],"try":5,vector:[0,2,5,1],matric:[0,2,5,1],upv:0,refer:5,pleas:3,x86_64:4,getdimens:5,cfg:4,dimens:[1,5] [...]
\ No newline at end of file
+Search.setIndex({envversion:42,terms:{represent:[0,2,1],all:[1,5,4],concept:1,partial:1,orthogon:[1,5],illustr:5,definit:1,global:5,signific:3,code:5,abil:1,follow:[1,5,4],row:5,privat:4,depend:[5,4],rayleigh:1,init:5,program:5,under:1,petsc_dir:4,emploi:4,mpd:5,sourc:[0,2],straightforward:5,mpi:[5,4],mechan:1,implicitli:1,relev:5,paz:3,tri:1,solver:[1,5],prefix:[5,4],iter:[1,5],"try":5,vector:[0,2,5,1],matric:[0,2,5,1],upv:0,refer:5,pleas:3,x86_64:4,getdimens:5,cfg:4,dimens:[1,5],direct [...]
\ No newline at end of file
diff --git a/docs/usrman/tutorial.html b/docs/usrman/tutorial.html
index 81d4ee6..cd265d0 100644
--- a/docs/usrman/tutorial.html
+++ b/docs/usrman/tutorial.html
@@ -1,5 +1,3 @@
-
-
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
@@ -8,15 +6,15 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>Tutorial — SLEPc for Python 3.6.0 documentation</title>
+    <title>Tutorial — SLEPc for Python 3.7.0 documentation</title>
     
     <link rel="stylesheet" href="_static/default.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
-        URL_ROOT:    '',
-        VERSION:     '3.6.0',
+        URL_ROOT:    './',
+        VERSION:     '3.7.0',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
@@ -25,7 +23,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <link rel="top" title="SLEPc for Python 3.6.0 documentation" href="index.html" />
+    <link rel="top" title="SLEPc for Python 3.7.0 documentation" href="index.html" />
     <link rel="next" title="Installation" href="install.html" />
     <link rel="prev" title="Overview" href="overview.html" /> 
   </head>
@@ -42,7 +40,7 @@
         <li class="right" >
           <a href="overview.html" title="Overview"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">SLEPc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">SLEPc for Python 3.7.0 documentation</a> »</li> 
       </ul>
     </div>  
 
@@ -65,14 +63,14 @@ not required, as it is done automatically at import time. However, if
 you want to gain access to the facilities for accesing command-line
 options, the following lines must be executed by the main script prior
 to any petsc4py or slepc4py calls:</p>
-<div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">sys</span><span class="o">,</span> <span class="nn">slepc4py</span>
+<div class="highlight-python"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">sys</span><span class="o">,</span> <span class="nn">slepc4py</span>
 <span class="n">slepc4py</span><span class="o">.</span><span class="n">init</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">)</span>
 </pre></div>
 </div>
 <p>Next, we have to import the relevant modules. Normally, both PETSc and
 SLEPc modules have to be imported in all slepc4py programs. It may be
 useful to import NumPy as well:</p>
-<div class="highlight-python"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">petsc4py</span> <span class="kn">import</span> <span class="n">PETSc</span>
+<div class="highlight-python"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">petsc4py</span> <span class="kn">import</span> <span class="n">PETSc</span>
 <span class="kn">from</span> <span class="nn">slepc4py</span> <span class="kn">import</span> <span class="n">SLEPc</span>
 <span class="kn">import</span> <span class="nn">numpy</span>
 </pre></div>
@@ -81,8 +79,8 @@ useful to import NumPy as well:</p>
 instance, the following lines allow the user to specify an integer
 command-line argument <tt class="docutils literal"><span class="pre">n</span></tt> with a default value of 30 (see the next
 section for example usage of command-line options):</p>
-<div class="highlight-python"><div class="highlight"><pre><span class="n">opts</span> <span class="o">=</span> <span class="n">PETSc</span><span class="o">.</span><span class="n">Options</span><span class="p">()</span>
-<span class="n">n</span> <span class="o">=</span> <span class="n">opts</span><span class="o">.</span><span class="n">getInt</span><span class="p">(</span><span class="s">'n'</span><span class="p">,</span> <span class="mi">30</span><span class="p">)</span>
+<div class="highlight-python"><div class="highlight"><pre><span></span><span class="n">opts</span> <span class="o">=</span> <span class="n">PETSc</span><span class="o">.</span><span class="n">Options</span><span class="p">()</span>
+<span class="n">n</span> <span class="o">=</span> <span class="n">opts</span><span class="o">.</span><span class="n">getInt</span><span class="p">(</span><span class="s1">'n'</span><span class="p">,</span> <span class="mi">30</span><span class="p">)</span>
 </pre></div>
 </div>
 <p>It is necessary to build a matrix to define an eigenproblem (or two in
@@ -91,22 +89,22 @@ creates the matrix object and then fills the non-zero elements one by
 one. The matrix of this particular example is tridiagonal, with value
 2 in the diagonal, and -1 in off-diagonal positions. See petsc4py
 documentation for details about matrix objects:</p>
-<div class="highlight-python"><div class="highlight"><pre><span class="n">A</span> <span class="o">=</span> <span class="n">PETSc</span><span class="o">.</span><span class="n">Mat</span><span class="p">()</span><span class="o">.</span><span class="n">create</span><span class="p">()</span>
+<div class="highlight-python"><div class="highlight"><pre><span></span><span class="n">A</span> <span class="o">=</span> <span class="n">PETSc</span><span class="o">.</span><span class="n">Mat</span><span class="p">()</span><span class="o">.</span><span class="n">create</span><span class="p">()</span>
 <span class="n">A</span><span class="o">.</span><span class="n">setSizes</span><span class="p">([</span><span class="n">n</span><span class="p">,</span> <span class="n">n</span><span class="p">])</span>
 <span class="n">A</span><span class="o">.</span><span class="n">setFromOptions</span><span class="p">()</span>
 <span class="n">A</span><span class="o">.</span><span class="n">setUp</span><span class="p">()</span>
 
 <span class="n">rstart</span><span class="p">,</span> <span class="n">rend</span> <span class="o">=</span> <span class="n">A</span><span class="o">.</span><span class="n">getOwnershipRange</span><span class="p">()</span>
 
-<span class="c"># first row</span>
+<span class="c1"># first row</span>
 <span class="k">if</span> <span class="n">rstart</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
     <span class="n">A</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="p">:</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">]</span>
     <span class="n">rstart</span> <span class="o">+=</span> <span class="mi">1</span>
-<span class="c"># last row</span>
+<span class="c1"># last row</span>
 <span class="k">if</span> <span class="n">rend</span> <span class="o">==</span> <span class="n">n</span><span class="p">:</span>
     <span class="n">A</span><span class="p">[</span><span class="n">n</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">2</span><span class="p">:]</span> <span class="o">=</span> <span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">]</span>
     <span class="n">rend</span> <span class="o">-=</span> <span class="mi">1</span>
-<span class="c"># other rows</span>
+<span class="c1"># other rows</span>
 <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">rstart</span><span class="p">,</span> <span class="n">rend</span><span class="p">):</span>
     <span class="n">A</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">:</span><span class="n">i</span><span class="o">+</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="o">-</span [...]
 
@@ -115,7 +113,7 @@ documentation for details about matrix objects:</p>
 </div>
 <p>The solver object is created in a similar way as other objects in
 petsc4py:</p>
-<div class="highlight-python"><div class="highlight"><pre><span class="n">E</span> <span class="o">=</span> <span class="n">SLEPc</span><span class="o">.</span><span class="n">EPS</span><span class="p">();</span> <span class="n">E</span><span class="o">.</span><span class="n">create</span><span class="p">()</span>
+<div class="highlight-python"><div class="highlight"><pre><span></span><span class="n">E</span> <span class="o">=</span> <span class="n">SLEPc</span><span class="o">.</span><span class="n">EPS</span><span class="p">();</span> <span class="n">E</span><span class="o">.</span><span class="n">create</span><span class="p">()</span>
 </pre></div>
 </div>
 <p>Once the object is created, the eigenvalue problem must be
@@ -126,43 +124,43 @@ instance, the tolerance for the computation). After all options have
 been set, the user should call the <tt class="docutils literal"><span class="pre">setFromOptions()</span></tt> operation, so
 that any options specified at run time in the command line are passed
 to the solver object:</p>
-<div class="highlight-python"><div class="highlight"><pre><span class="n">E</span><span class="o">.</span><span class="n">setOperators</span><span class="p">(</span><span class="n">A</span><span class="p">)</span>
+<div class="highlight-python"><div class="highlight"><pre><span></span><span class="n">E</span><span class="o">.</span><span class="n">setOperators</span><span class="p">(</span><span class="n">A</span><span class="p">)</span>
 <span class="n">E</span><span class="o">.</span><span class="n">setProblemType</span><span class="p">(</span><span class="n">SLEPc</span><span class="o">.</span><span class="n">EPS</span><span class="o">.</span><span class="n">ProblemType</span><span class="o">.</span><span class="n">HEP</span><span class="p">)</span>
 <span class="n">E</span><span class="o">.</span><span class="n">setFromOptions</span><span class="p">()</span>
 </pre></div>
 </div>
 <p>After that, the <tt class="docutils literal"><span class="pre">solve()</span></tt> method will run the selected eigensolver,
 keeping the solution stored internally:</p>
-<div class="highlight-python"><div class="highlight"><pre><span class="n">E</span><span class="o">.</span><span class="n">solve</span><span class="p">()</span>
+<div class="highlight-python"><div class="highlight"><pre><span></span><span class="n">E</span><span class="o">.</span><span class="n">solve</span><span class="p">()</span>
 </pre></div>
 </div>
 <p>Once the computation has finished, we are ready to print the results.
 First, some informative data can be retrieved from the solver object:</p>
-<div class="highlight-python"><div class="highlight"><pre><span class="n">Print</span> <span class="o">=</span> <span class="n">PETSc</span><span class="o">.</span><span class="n">Sys</span><span class="o">.</span><span class="n">Print</span>
+<div class="highlight-python"><div class="highlight"><pre><span></span><span class="n">Print</span> <span class="o">=</span> <span class="n">PETSc</span><span class="o">.</span><span class="n">Sys</span><span class="o">.</span><span class="n">Print</span>
 
 <span class="n">Print</span><span class="p">()</span>
-<span class="n">Print</span><span class="p">(</span><span class="s">"******************************"</span><span class="p">)</span>
-<span class="n">Print</span><span class="p">(</span><span class="s">"*** SLEPc Solution Results ***"</span><span class="p">)</span>
-<span class="n">Print</span><span class="p">(</span><span class="s">"******************************"</span><span class="p">)</span>
+<span class="n">Print</span><span class="p">(</span><span class="s2">"******************************"</span><span class="p">)</span>
+<span class="n">Print</span><span class="p">(</span><span class="s2">"*** SLEPc Solution Results ***"</span><span class="p">)</span>
+<span class="n">Print</span><span class="p">(</span><span class="s2">"******************************"</span><span class="p">)</span>
 <span class="n">Print</span><span class="p">()</span>
 
 <span class="n">its</span> <span class="o">=</span> <span class="n">E</span><span class="o">.</span><span class="n">getIterationNumber</span><span class="p">()</span>
-<span class="n">Print</span><span class="p">(</span><span class="s">"Number of iterations of the method: </span><span class="si">%d</span><span class="s">"</span> <span class="o">%</span> <span class="n">its</span><span class="p">)</span>
+<span class="n">Print</span><span class="p">(</span><span class="s2">"Number of iterations of the method: </span><span class="si">%d</span><span class="s2">"</span> <span class="o">%</span> <span class="n">its</span><span class="p">)</span>
 
 <span class="n">eps_type</span> <span class="o">=</span> <span class="n">E</span><span class="o">.</span><span class="n">getType</span><span class="p">()</span>
-<span class="n">Print</span><span class="p">(</span><span class="s">"Solution method: </span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="n">eps_type</span><span class="p">)</span>
+<span class="n">Print</span><span class="p">(</span><span class="s2">"Solution method: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">eps_type</span><span class="p">)</span>
 
 <span class="n">nev</span><span class="p">,</span> <span class="n">ncv</span><span class="p">,</span> <span class="n">mpd</span> <span class="o">=</span> <span class="n">E</span><span class="o">.</span><span class="n">getDimensions</span><span class="p">()</span>
-<span class="n">Print</span><span class="p">(</span><span class="s">"Number of requested eigenvalues: </span><span class="si">%d</span><span class="s">"</span> <span class="o">%</span> <span class="n">nev</span><span class="p">)</span>
+<span class="n">Print</span><span class="p">(</span><span class="s2">"Number of requested eigenvalues: </span><span class="si">%d</span><span class="s2">"</span> <span class="o">%</span> <span class="n">nev</span><span class="p">)</span>
 
 <span class="n">tol</span><span class="p">,</span> <span class="n">maxit</span> <span class="o">=</span> <span class="n">E</span><span class="o">.</span><span class="n">getTolerances</span><span class="p">()</span>
-<span class="n">Print</span><span class="p">(</span><span class="s">"Stopping condition: tol=</span><span class="si">%.4g</span><span class="s">, maxit=</span><span class="si">%d</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">tol</span><span class="p">,</span> <span class="n">maxit</span><span class="p">))</span>
+<span class="n">Print</span><span class="p">(</span><span class="s2">"Stopping condition: tol=</span><span class="si">%.4g</span><span class="s2">, maxit=</span><span class="si">%d</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">tol</span><span class="p">,</span> <span class="n">maxit</span><span class="p">))</span>
 </pre></div>
 </div>
 <p>For retrieving the solution, it is necessary to find out how many
 eigenpairs have converged to the requested precision:</p>
-<div class="highlight-python"><div class="highlight"><pre><span class="n">nconv</span> <span class="o">=</span> <span class="n">E</span><span class="o">.</span><span class="n">getConverged</span><span class="p">()</span>
-<span class="n">Print</span><span class="p">(</span><span class="s">"Number of converged eigenpairs </span><span class="si">%d</span><span class="s">"</span> <span class="o">%</span> <span class="n">nconv</span><span class="p">)</span>
+<div class="highlight-python"><div class="highlight"><pre><span></span><span class="n">nconv</span> <span class="o">=</span> <span class="n">E</span><span class="o">.</span><span class="n">getConverged</span><span class="p">()</span>
+<span class="n">Print</span><span class="p">(</span><span class="s2">"Number of converged eigenpairs </span><span class="si">%d</span><span class="s2">"</span> <span class="o">%</span> <span class="n">nconv</span><span class="p">)</span>
 </pre></div>
 </div>
 <p>For each of the <tt class="docutils literal"><span class="pre">nconv</span></tt> eigenpairs, we can retrieve the eigenvalue
@@ -171,21 +169,21 @@ petsc4py vectors <tt class="docutils literal"><span class="pre">vr</span></tt> a
 eigenvector, since for real matrices the eigenvalue and eigenvector
 may be complex).  We also compute the corresponding relative errors in
 order to make sure that the computed solution is indeed correct:</p>
-<div class="highlight-python"><div class="highlight"><pre><span class="k">if</span> <span class="n">nconv</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
-    <span class="c"># Create the results vectors</span>
+<div class="highlight-python"><div class="highlight"><pre><span></span><span class="k">if</span> <span class="n">nconv</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
+    <span class="c1"># Create the results vectors</span>
     <span class="n">vr</span><span class="p">,</span> <span class="n">wr</span> <span class="o">=</span> <span class="n">A</span><span class="o">.</span><span class="n">getVecs</span><span class="p">()</span>
     <span class="n">vi</span><span class="p">,</span> <span class="n">wi</span> <span class="o">=</span> <span class="n">A</span><span class="o">.</span><span class="n">getVecs</span><span class="p">()</span>
-    <span class="c">#</span>
+    <span class="c1">#</span>
     <span class="n">Print</span><span class="p">()</span>
-    <span class="n">Print</span><span class="p">(</span><span class="s">"        k          ||Ax-kx||/||kx|| "</span><span class="p">)</span>
-    <span class="n">Print</span><span class="p">(</span><span class="s">"----------------- ------------------"</span><span class="p">)</span>
+    <span class="n">Print</span><span class="p">(</span><span class="s2">"        k          ||Ax-kx||/||kx|| "</span><span class="p">)</span>
+    <span class="n">Print</span><span class="p">(</span><span class="s2">"----------------- ------------------"</span><span class="p">)</span>
     <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">nconv</span><span class="p">):</span>
         <span class="n">k</span> <span class="o">=</span> <span class="n">E</span><span class="o">.</span><span class="n">getEigenpair</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">vr</span><span class="p">,</span> <span class="n">vi</span><span class="p">)</span>
         <span class="n">error</span> <span class="o">=</span> <span class="n">E</span><span class="o">.</span><span class="n">computeError</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
         <span class="k">if</span> <span class="n">k</span><span class="o">.</span><span class="n">imag</span> <span class="o">!=</span> <span class="mf">0.0</span><span class="p">:</span>
-            <span class="n">Print</span><span class="p">(</span><span class="s">" </span><span class="si">%9f%+9f</span><span class="s"> j </span><span class="si">%12g</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">k</span><span class="o">.</span><span class="n">real</span><span class="p">,</span> <span class="n">k</span><span class="o">.</span><span class="n">imag</span><span class="p">,</span> <span class="n">error</span><span  [...]
+            <span class="n">Print</span><span class="p">(</span><span class="s2">" </span><span class="si">%9f%+9f</span><span class="s2"> j </span><span class="si">%12g</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">k</span><span class="o">.</span><span class="n">real</span><span class="p">,</span> <span class="n">k</span><span class="o">.</span><span class="n">imag</span><span class="p">,</span> <span class="n">error</span><sp [...]
         <span class="k">else</span><span class="p">:</span>
-            <span class="n">Print</span><span class="p">(</span><span class="s">" </span><span class="si">%12f</span><span class="s">      </span><span class="si">%12g</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">k</span><span class="o">.</span><span class="n">real</span><span class="p">,</span> <span class="n">error</span><span class="p">))</span>
+            <span class="n">Print</span><span class="p">(</span><span class="s2">" </span><span class="si">%12f</span><span class="s2">      </span><span class="si">%12g</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">k</span><span class="o">.</span><span class="n">real</span><span class="p">,</span> <span class="n">error</span><span class="p">))</span>
     <span class="n">Print</span><span class="p">()</span>
 </pre></div>
 </div>
@@ -196,7 +194,7 @@ order to make sure that the computed solution is indeed correct:</p>
 extract the full potential of slepc4py.</p>
 <p>A simple execution of the <tt class="docutils literal"><span class="pre">demo/ex1.py</span></tt> script will result in the
 following output:</p>
-<div class="highlight-python"><pre>$ python demo/ex1.py
+<div class="highlight-python"><div class="highlight"><pre><span></span>$ python demo/ex1.py
 
 ******************************
 *** SLEPc Solution Results ***
@@ -213,21 +211,24 @@ Number of converged eigenpairs 4
      3.989739        5.76012e-09
      3.959060        1.41957e-08
      3.908279        6.74118e-08
-     3.837916        8.34269e-08</pre>
+     3.837916        8.34269e-08
+</pre></div>
 </div>
 <p>For specifying different setting for the solver parameters, we can use
 SLEPc command-line options with the <tt class="docutils literal"><span class="pre">-eps</span></tt> prefix. For instance, to
 change the number of requested eigenvalues and the tolerance:</p>
-<div class="highlight-python"><pre>$ python demo/ex1.py -eps_nev 10 -eps_tol 1e-11</pre>
+<div class="highlight-python"><div class="highlight"><pre><span></span>$ python demo/ex1.py -eps_nev 10 -eps_tol 1e-11
+</pre></div>
 </div>
 <p>The method used by the solver object can also be set at run time:</p>
-<div class="highlight-python"><pre>$ python demo/ex1.py -eps_type lanczos</pre>
+<div class="highlight-python"><div class="highlight"><pre><span></span>$ python demo/ex1.py -eps_type lanczos
+</pre></div>
 </div>
 <p>All the above settings can also be change within the source code by
 making use of the appropriate slepc4py method. Since options can be
 set from within the code and the command-line, it is often useful to
 view the particular settings that are currently being used:</p>
-<div class="highlight-python"><pre>$ python demo/ex1.py -eps_view
+<div class="highlight-python"><div class="highlight"><pre><span></span>$ python demo/ex1.py -eps_view
 
 EPS Object: 1 MPI processes
   type: krylovschur
@@ -251,21 +252,24 @@ DS Object: 1 MPI processes
 ST Object: 1 MPI processes
   type: shift
   shift: 0
-  number of matrices: 1</pre>
+  number of matrices: 1
+</pre></div>
 </div>
 <p>Note that for computing eigenvalues of smallest magnitude we can use
 the option <tt class="docutils literal"><span class="pre">-eps_smallest_magnitude</span></tt>, but for interior eigenvalues
 things are not so straightforward. One possibility is to try with
 harmonic extraction, for instance to get the eigenvalues closest to
 0.6:</p>
-<div class="highlight-python"><pre>$ python demo/ex1.py -eps_harmonic -eps_target 0.6</pre>
+<div class="highlight-python"><div class="highlight"><pre><span></span>$ python demo/ex1.py -eps_harmonic -eps_target 0.6
+</pre></div>
 </div>
 <p>Depending on the problem, harmonic extraction may fail to converge. In
 those cases, it is necessary to specify a spectral transformation
 other than the default. In the command-line, this is indicated with
 the <tt class="docutils literal"><span class="pre">-st_</span></tt> prefix. For example, shift-and-invert with a value of the
 shift equal to 0.6 would be:</p>
-<div class="highlight-python"><pre>$ python demo/ex1.py -st_type sinvert -eps_target 0.6</pre>
+<div class="highlight-python"><div class="highlight"><pre><span></span>$ python demo/ex1.py -st_type sinvert -eps_target 0.6
+</pre></div>
 </div>
 </div>
 </div>
@@ -325,12 +329,12 @@ shift equal to 0.6 would be:</p>
         <li class="right" >
           <a href="overview.html" title="Overview"
              >previous</a> |</li>
-        <li><a href="index.html">SLEPc for Python 3.6.0 documentation</a> »</li> 
+        <li><a href="index.html">SLEPc for Python 3.7.0 documentation</a> »</li> 
       </ul>
     </div>
     <div class="footer">
-        © Copyright 2015, Lisandro Dalcin.
-      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
+        © Copyright 2016, Lisandro Dalcin.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/setup.cfg b/setup.cfg
index 635f70d..c576b60 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -14,7 +14,6 @@ where = test
 
 [bdist_rpm]
 packager = Lisandro Dalcin <dalcinl at gmail.com>
-vendor = CIMEC <http://www.cimec.org.ar>
 group = Libraries/Python
 doc_files = README.rst CHANGES.rst LICENSE.rst
 
diff --git a/setup.py b/setup.py
index 972dc6a..0b4ffa2 100755
--- a/setup.py
+++ b/setup.py
@@ -119,7 +119,8 @@ def run_setup():
                                             'include/slepc4py/*.i',
                                             'include/slepc4py/*.pxd',
                                             'include/slepc4py/*.pxi',
-                                            'include/slepc4py/*.pyx',],
+                                            'include/slepc4py/*.pyx',
+                                            'SLEPc.pxd',],
                           'slepc4py.lib' : ['slepc.cfg'],},
           ext_modules  = get_ext_modules(Extension),
           cmdclass     = {'config'     : config,
diff --git a/slepc4py.egg-info/PKG-INFO b/slepc4py.egg-info/PKG-INFO
index 07a9b1b..30b541e 100644
--- a/slepc4py.egg-info/PKG-INFO
+++ b/slepc4py.egg-info/PKG-INFO
@@ -1,12 +1,12 @@
 Metadata-Version: 1.1
 Name: slepc4py
-Version: 3.6.0
+Version: 3.7.0
 Summary: SLEPc for Python
 Home-page: https://bitbucket.org/slepc/slepc4py/
 Author: Lisandro Dalcin
 Author-email: dalcinl at gmail.com
 License: BSD
-Download-URL: https://bitbucket.org/slepc/slepc4py/downloads/slepc4py-3.6.0.tar.gz
+Download-URL: https://bitbucket.org/slepc/slepc4py/downloads/slepc4py-3.7.0.tar.gz
 Description: SLEPc for Python
         ================
         
diff --git a/slepc4py.egg-info/SOURCES.txt b/slepc4py.egg-info/SOURCES.txt
index e421d35..754c0fb 100644
--- a/slepc4py.egg-info/SOURCES.txt
+++ b/slepc4py.egg-info/SOURCES.txt
@@ -13,6 +13,8 @@ conf/epydocify.py
 conf/metadata.py
 conf/slepcconf.py
 demo/ex1.py
+demo/ex10.py
+demo/ex11.py
 demo/ex2.py
 demo/ex3.py
 demo/ex4.py
@@ -34,8 +36,9 @@ docs/apiref/class-tree.html
 docs/apiref/class_hierarchy_for__p_mem.png
 docs/apiref/class_hierarchy_for_balance.png
 docs/apiref/class_hierarchy_for_basis.png
+docs/apiref/class_hierarchy_for_blocktype.png
 docs/apiref/class_hierarchy_for_bv.png
-docs/apiref/class_hierarchy_for_bvorthogbl.png
+docs/apiref/class_hierarchy_for_combinetyp.png
 docs/apiref/class_hierarchy_for_conv.png
 docs/apiref/class_hierarchy_for_conv_2.png
 docs/apiref/class_hierarchy_for_convergedr.png
@@ -49,20 +52,23 @@ docs/apiref/class_hierarchy_for_errortype.png
 docs/apiref/class_hierarchy_for_errortype_2.png
 docs/apiref/class_hierarchy_for_errortype_3.png
 docs/apiref/class_hierarchy_for_errortype_4.png
+docs/apiref/class_hierarchy_for_extract.png
 docs/apiref/class_hierarchy_for_extraction.png
 docs/apiref/class_hierarchy_for_fn.png
 docs/apiref/class_hierarchy_for_lanczosreo.png
 docs/apiref/class_hierarchy_for_matmode.png
-docs/apiref/class_hierarchy_for_matstructu.png
 docs/apiref/class_hierarchy_for_mattype.png
 docs/apiref/class_hierarchy_for_mfn.png
 docs/apiref/class_hierarchy_for_nep.png
 docs/apiref/class_hierarchy_for_orthogtype.png
 docs/apiref/class_hierarchy_for_pep.png
-docs/apiref/class_hierarchy_for_peprefine.png
 docs/apiref/class_hierarchy_for_powershift.png
 docs/apiref/class_hierarchy_for_problemtyp.png
 docs/apiref/class_hierarchy_for_problemtyp_2.png
+docs/apiref/class_hierarchy_for_refine.png
+docs/apiref/class_hierarchy_for_refine_2.png
+docs/apiref/class_hierarchy_for_refinesche.png
+docs/apiref/class_hierarchy_for_refinesche_2.png
 docs/apiref/class_hierarchy_for_refinetype.png
 docs/apiref/class_hierarchy_for_rg.png
 docs/apiref/class_hierarchy_for_scale.png
@@ -96,10 +102,10 @@ docs/apiref/redirect.html
 docs/apiref/slepc4py-module.html
 docs/apiref/slepc4py.SLEPc-module.html
 docs/apiref/slepc4py.SLEPc.BV-class.html
+docs/apiref/slepc4py.SLEPc.BV.BlockType-class.html
 docs/apiref/slepc4py.SLEPc.BV.OrthogType-class.html
 docs/apiref/slepc4py.SLEPc.BV.RefineType-class.html
 docs/apiref/slepc4py.SLEPc.BV.Type-class.html
-docs/apiref/slepc4py.SLEPc.BVOrthogBlockType-class.html
 docs/apiref/slepc4py.SLEPc.DS-class.html
 docs/apiref/slepc4py.SLEPc.DS.MatType-class.html
 docs/apiref/slepc4py.SLEPc.DS.StateType-class.html
@@ -116,6 +122,7 @@ docs/apiref/slepc4py.SLEPc.EPS.ProblemType-class.html
 docs/apiref/slepc4py.SLEPc.EPS.Type-class.html
 docs/apiref/slepc4py.SLEPc.EPS.Which-class.html
 docs/apiref/slepc4py.SLEPc.FN-class.html
+docs/apiref/slepc4py.SLEPc.FN.CombineType-class.html
 docs/apiref/slepc4py.SLEPc.FN.Type-class.html
 docs/apiref/slepc4py.SLEPc.MFN-class.html
 docs/apiref/slepc4py.SLEPc.MFN.ConvergedReason-class.html
@@ -123,6 +130,8 @@ docs/apiref/slepc4py.SLEPc.MFN.Type-class.html
 docs/apiref/slepc4py.SLEPc.NEP-class.html
 docs/apiref/slepc4py.SLEPc.NEP.ConvergedReason-class.html
 docs/apiref/slepc4py.SLEPc.NEP.ErrorType-class.html
+docs/apiref/slepc4py.SLEPc.NEP.Refine-class.html
+docs/apiref/slepc4py.SLEPc.NEP.RefineScheme-class.html
 docs/apiref/slepc4py.SLEPc.NEP.Type-class.html
 docs/apiref/slepc4py.SLEPc.NEP.Which-class.html
 docs/apiref/slepc4py.SLEPc.PEP-class.html
@@ -130,16 +139,17 @@ docs/apiref/slepc4py.SLEPc.PEP.Basis-class.html
 docs/apiref/slepc4py.SLEPc.PEP.Conv-class.html
 docs/apiref/slepc4py.SLEPc.PEP.ConvergedReason-class.html
 docs/apiref/slepc4py.SLEPc.PEP.ErrorType-class.html
+docs/apiref/slepc4py.SLEPc.PEP.Extract-class.html
 docs/apiref/slepc4py.SLEPc.PEP.ProblemType-class.html
+docs/apiref/slepc4py.SLEPc.PEP.Refine-class.html
+docs/apiref/slepc4py.SLEPc.PEP.RefineScheme-class.html
 docs/apiref/slepc4py.SLEPc.PEP.Scale-class.html
 docs/apiref/slepc4py.SLEPc.PEP.Type-class.html
 docs/apiref/slepc4py.SLEPc.PEP.Which-class.html
-docs/apiref/slepc4py.SLEPc.PEPRefine-class.html
 docs/apiref/slepc4py.SLEPc.RG-class.html
 docs/apiref/slepc4py.SLEPc.RG.Type-class.html
 docs/apiref/slepc4py.SLEPc.ST-class.html
 docs/apiref/slepc4py.SLEPc.ST.MatMode-class.html
-docs/apiref/slepc4py.SLEPc.ST.MatStructure-class.html
 docs/apiref/slepc4py.SLEPc.ST.Type-class.html
 docs/apiref/slepc4py.SLEPc.SVD-class.html
 docs/apiref/slepc4py.SLEPc.SVD.ConvergedReason-class.html
@@ -211,6 +221,7 @@ slepc4py.egg-info/not-zip-safe
 slepc4py.egg-info/requires.txt
 slepc4py.egg-info/top_level.txt
 src/SLEPc.c
+src/SLEPc.pxd
 src/SLEPc.py
 src/__init__.py
 src/__main__.py
diff --git a/slepc4py.egg-info/requires.txt b/slepc4py.egg-info/requires.txt
index b84b16a..5fadf7b 100644
--- a/slepc4py.egg-info/requires.txt
+++ b/slepc4py.egg-info/requires.txt
@@ -1 +1 @@
-petsc4py>=3.6,<3.7
+petsc4py>=3.7,<3.8
diff --git a/src/SLEPc.pxd b/src/SLEPc.pxd
new file mode 100644
index 0000000..25a1881
--- /dev/null
+++ b/src/SLEPc.pxd
@@ -0,0 +1,4 @@
+# Author:  Lisandro Dalcin
+# Contact: dalcinl at gmail.com
+
+include "include/slepc4py/SLEPc.pxd"
diff --git a/src/SLEPc/BV.pyx b/src/SLEPc/BV.pyx
index dd80870..1379d19 100644
--- a/src/SLEPc/BV.pyx
+++ b/src/SLEPc/BV.pyx
@@ -98,6 +98,22 @@ cdef class BV(Object):
         SlepcCLEAR(self.obj); self.bv = newbv
         return self
 
+    def duplicate(self):
+        """
+        Duplicate the BV object with the same type and dimensions.
+        """
+        cdef BV bv = type(self)()
+        CHKERR( BVDuplicate(self.bv, &bv.bv) )
+        return bv
+
+    def copy(self, BV result=None):
+        if result is None:
+            result = type(self)()
+        if result.bv == NULL:
+            CHKERR( BVDuplicate(self.bv, &result.bv) )
+        CHKERR( BVCopy(self.bv, result.bv) )
+        return result
+
     def setType(self, bv_type):
         """
         Selects the type for the BV object.
@@ -124,6 +140,59 @@ cdef class BV(Object):
         CHKERR( BVGetType(self.bv, &bv_type) )
         return bytes2str(bv_type)
 
+    def setSizes(self, sizes, m):
+        """
+        Sets the local and global sizes, and the number of columns.
+
+        Parameters
+        ----------
+        sizes: int or two-tuple of int
+              The global size ``N`` or a two-tuple ``(n, N)``
+              with the local and global sizes.
+        m: int
+              The number of columns.
+
+        Notes
+        -----
+        Either ``n`` or ``N`` (but not both) can be ``PETSc.DECIDE``
+        or ``None`` to have it automatically set.
+        """
+        cdef PetscInt n=0, N=0
+        cdef PetscInt ival = asInt(m)
+        BV_Sizes(sizes, &n, &N)
+        CHKERR( BVSetSizes(self.bv, n, N, ival) )
+
+    def setSizesFromVec(self, Vec w not None, m):
+        """
+        Sets the local and global sizes, and the number of columns. Local and
+        global sizes are specified indirectly by passing a template vector.
+
+        Parameters
+        ----------
+        w: Vec
+            The template vector.
+        m: int
+            The number of columns.
+        """
+        cdef PetscInt ival = asInt(m)
+        CHKERR( BVSetSizesFromVec(self.bv, w.vec, ival) )
+
+    def getSizes(self):
+        """
+        Returns the local and global sizes, and the number of columns.
+
+        Returns
+        -------
+        sizes: two-tuple of int
+                The local and global sizes ``(n, N)``.
+        m: int
+                The number of columns.
+        """
+        cdef PetscInt n=0, N=0, m=0
+        CHKERR( BVGetSizes(self.bv, &n, &N, &m) )
+        return ((toInt(n), toInt(N)), toInt(m))
+
+
     def setOptionsPrefix(self, prefix):
         """
         Sets the prefix used for searching for all BV options in the
@@ -231,9 +300,10 @@ cdef class BV(Object):
         cdef SlepcBVOrthogRefineType val2 = BV_ORTHOG_REFINE_IFNEEDED
         cdef SlepcBVOrthogBlockType val3 = BV_ORTHOG_BLOCK_GS
         cdef PetscReal rval = PETSC_DEFAULT
-        if type   is not None: val1= type
-        if refine is not None: val2= refine
-        if block  is not None: val3= block
+        CHKERR( BVGetOrthogonalization(self.bv, &val1, &val2, &rval, &val3) )
+        if type   is not None: val1 = type
+        if refine is not None: val2 = refine
+        if block  is not None: val3 = block
         if eta    is not None: rval = asReal(eta)
         CHKERR( BVSetOrthogonalization(self.bv, val1, val2, rval, val3) )
 
@@ -264,11 +334,9 @@ cdef class BV(Object):
         indef: bool, optional
                Whether the matrix is indefinite
         """
-        cdef PetscMat m = NULL
-        if mat is not None: m = mat.mat
-        cdef PetscBool cflag = PETSC_FALSE
-        if indef: cflag = PETSC_TRUE
-        CHKERR( BVSetMatrix(self.bv, m, cflag) )
+        cdef PetscMat m = NULL if mat is None else mat.mat
+        cdef PetscBool tval = PETSC_TRUE if indef else PETSC_FALSE
+        CHKERR( BVSetMatrix(self.bv, m, tval) )
 
     def applyMatrix(self, Vec x not None, Vec y not None):
         """
@@ -289,6 +357,441 @@ cdef class BV(Object):
         """
         CHKERR( BVApplyMatrix(self.bv, x.vec, y.vec) )
 
+    def setActiveColumns(self, int l, int k):
+        """
+        Specify the columns that will be involved in operations.
+
+        Parameters
+        ----------
+        l: int
+            The leading number of columns.
+        k: int
+            The active number of columns.
+        """
+        CHKERR( BVSetActiveColumns(self.bv, l, k) )
+
+    def getActiveColumns(self):
+        """
+        Returns the current active dimensions.
+
+        Returns
+        -------
+        l: int
+            The leading number of columns.
+        k: int
+            The active number of columns.
+        """
+        cdef PetscInt l=0, k=0
+        CHKERR( BVGetActiveColumns(self.bv, &l, &k) )
+        return (toInt(l), toInt(k))
+
+    def scaleColumn(self, int j, alpha):
+        """
+        Scale column j by alpha
+
+        Parameters
+        ----------
+        j: int
+            column number to be scaled.
+        alpha: float
+            scaling factor.
+        """
+        cdef PetscScalar sval = asScalar(alpha)
+        CHKERR( BVScaleColumn(self.bv, j, sval) )
+
+    def scale(self, alpha):
+        """
+        Multiply the entries by a scalar value.
+
+        Parameters
+        ----------
+        alpha: float
+            scaling factor.
+
+        Notes
+        -----
+        All active columns (except the leading ones) are scaled.
+        """
+        cdef PetscScalar sval = asScalar(alpha)
+        CHKERR( BVScale(self.bv, sval) )
+
+    def insertVec(self, int j, Vec w not None):
+        """
+        Insert a vector into the specified column.
+
+        Parameters
+        ----------
+        j: int
+            The column to be overwritten.
+        w: Vec
+            The vector to be copied.
+        """
+        CHKERR( BVInsertVec(self.bv, j, w.vec) )
+
+    def insertVecs(self, int s, W not None, bint orth):
+        """
+        Insert a set of vectors into specified columns.
+
+        Parameters
+        ----------
+        s: int
+            The first column to be overwritten.
+        W: Vec or sequence of Vec.
+            Set of vectors to be copied.
+        orth:
+            Flag indicating if the vectors must be orthogonalized.
+
+        Returns
+        -------
+        m: int
+            Number of linearly independent vectors.
+
+        Notes
+        -----
+        Copies the contents of vectors W into self(:,s:s+n), where n is the
+        length of W. If orthogonalization flag is set then the vectors are
+        copied one by one then orthogonalized against the previous one.  If any
+        are linearly dependent then it is discared and the value of m is
+        decreased.
+        """
+        if isinstance(W, Vec): W = [W]
+        cdef PetscVec *ws = NULL
+        cdef Py_ssize_t i = 0, ns = len(W)
+        cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&ws)
+        for i in range(ns): ws[i] = (<Vec?>W[i]).vec
+        cdef PetscInt m = <PetscInt>ns
+        cdef PetscBool tval = PETSC_TRUE if orth else PETSC_FALSE
+        CHKERR( BVInsertVecs(self.bv, <PetscInt>s, &m, ws, tval) )
+        return toInt(m)
+
+    def dotVec(self, Vec v not None):
+        """
+        Computes multiple dot products of a vector against all the column
+        vectors of a BV.
+
+        Parameters
+        ----------
+        v: Vec
+            A vector.
+
+        Returns
+        -------
+        m: Vec
+            A vector with the results.
+
+        This is analogue to VecMDot(), but using BV to represent a collection
+        of vectors. The result is m = X^H*y, so m_i is equal to x_j^H y. Note
+        that here X is transposed as opposed to BVDot().
+
+        If a non-standard inner product has been specified with BVSetMatrix(),
+        then the result is m = X^H*B*y.
+        """
+        l, k = self.getActiveColumns()
+        cdef PetscScalar* mval = NULL
+        cdef tmp = allocate(<size_t>(k - l)*sizeof(PetscScalar),<void**>&mval)
+
+        CHKERR( BVDotVec(self.bv, v.vec, mval) )
+
+        v = Vec().create(COMM_SELF)
+        v.setType('seq')
+        v.setSizes((DECIDE,k-l))
+        v.setArray([mval[i] for i in range(0, k - l)])
+        v.ghostUpdate()
+
+        return v
+
+    def getColumn(self, int j):
+        """
+        Returns a Vec object that contains the entries of the requested column
+        of the basis vectors object.
+
+        Parameters
+        ----------
+        j: int
+            The index of the requested column.
+
+        Returns
+        -------
+        v: Vec
+            The vector containing the jth column.
+
+        Notes
+        -----
+        Modifying the returned Vec will change the BV entries as well.
+        """
+        cdef Vec v = Vec()
+        CHKERR( BVGetColumn(self.bv, j, &v.vec) )
+        return v
+
+    def restoreColumn(self, int j, Vec v not None):
+        """
+        Restore a column obtained with BVGetColumn().
+
+        Parameters
+        ----------
+        j: int
+            The index of the requested column.
+
+        v: Vec
+            The vector obtained with BVGetColumn().
+
+        Notes
+        -----
+        The arguments must match the corresponding call to BVGetColumn().
+        """
+        CHKERR( BVRestoreColumn(self.bv, j, &v.vec) )
+
+    def dot(self, BV Y not None):
+        """
+        Computes the 'block-dot' product of two basis vectors objects.
+            M = Y^H*X (m_ij = y_i^H x_j) or M = Y^H*B*X
+
+        Parameters
+        ----------
+        Y: BV
+            Left basis vectors, can be the same as self, giving M = X^H X.
+
+        Returns
+        -------
+        M: Mat
+            The resulting matrix.
+
+        Notes
+        -----
+        This is the generalization of VecDot() for a collection of vectors, M =
+        Y^H*X. The result is a matrix M whose entry m_ij is equal to y_i^H x_j
+        (where y_i^H denotes the conjugate transpose of y_i).
+
+        X and Y can be the same object.
+
+        If a non-standard inner product has been specified with setMatrix(),
+        then the result is M = Y^H*B*X. In this case, both X and Y must have
+        the same associated matrix.
+
+        Only rows (resp. columns) of M starting from ly (resp. lx) are
+        computed, where ly (resp. lx) is the number of leading columns of Y
+        (resp. X).
+        """
+        cdef BV X = self
+        cdef PetscInt ky=0, kx=0
+        CHKERR( BVGetActiveColumns(Y.bv, NULL, &ky) )
+        CHKERR( BVGetActiveColumns(X.bv, NULL, &kx) )
+        cdef Mat M = Mat().createDense((ky, kx), comm=COMM_SELF).setUp()
+        CHKERR( BVDot(X.bv, Y.bv, M.mat) )
+        return M
+
+    def matProject(self, Mat A, BV Y not None):
+        """
+        Computes the projection of a matrix onto a subspace.
+
+        M = Y^H A X
+
+        Parameters
+        ----------
+        A: Mat or None
+            Matrix to be projected.
+
+        Y: BV
+            Left basis vectors, can be the same as self, giving M = X^H A X.
+
+        Returns
+        -------
+        M: Mat
+            Projection of the matrix A onto the subspace.
+        """
+        cdef BV X = self
+        cdef PetscInt ky=0, kx=0
+        CHKERR( BVGetActiveColumns(Y.bv, NULL, &ky) )
+        CHKERR( BVGetActiveColumns(X.bv, NULL, &kx) )
+        cdef Mat M = Mat().createDense((ky, kx), comm=COMM_SELF).setUp()
+        cdef PetscMat Amat = NULL if A is None else A.mat
+        CHKERR( BVMatProject(X.bv, Amat, Y.bv, M.mat) )
+        return M
+
+    def matMult(self, Mat A not None, BV Y=None):
+        """
+        Computes the matrix-vector product for each column, Y = A*V.
+
+        Parameters
+        ----------
+        A: Mat
+            The matrix.
+
+        Returns
+        -------
+        Y: BV
+            The result.
+
+        Notes
+        -----
+        Only active columns (excluding the leading ones) are processed.
+
+        It is possible to choose whether the computation is done column by column
+        or using dense matrices using the options database keys:
+
+            -bv_matmult_vecs
+            -bv_matmult_mat
+
+        The default is bv_matmult_mat.
+        """
+        cdef MPI_Comm comm = PetscObjectComm(<PetscObject>self.bv)
+        cdef SlepcBVType bv_type = NULL
+        cdef PetscInt n=0, N=0, m=0
+        cdef SlepcBVOrthogType val1 = BV_ORTHOG_CGS
+        cdef SlepcBVOrthogRefineType val2 = BV_ORTHOG_REFINE_IFNEEDED
+        cdef SlepcBVOrthogBlockType val3 = BV_ORTHOG_BLOCK_GS
+        cdef PetscReal rval = PETSC_DEFAULT
+        if Y is None: Y = BV()
+        if Y.bv == NULL:
+            CHKERR( BVGetType(self.bv, &bv_type) )
+            CHKERR( MatGetLocalSize(A.mat, &n, NULL) )
+            CHKERR( MatGetSize(A.mat, &N, NULL) )
+            CHKERR( BVGetSizes(self.bv, NULL, NULL, &m) )
+            CHKERR( BVGetOrthogonalization(self.bv, &val1, &val2, &rval, &val3) )
+        if Y.bv == NULL:
+            CHKERR( BVCreate(comm, &Y.bv) )
+            CHKERR( BVSetType(Y.bv, bv_type) )
+            CHKERR( BVSetSizes(Y.bv, n, N, m) )
+            CHKERR( BVSetOrthogonalization(Y.bv, val1, val2, rval, val3) )
+        CHKERR( BVMatMult(self.bv, A.mat, Y.bv) )
+        return Y
+
+    def matMultHermitianTranspose(self, Mat A not None, BV Y=None):
+        """
+        Computes the matrix-vector product with the conjugate transpose of a
+        matrix for each column, Y=A^H*V.
+
+        Parameters
+        ----------
+        A: Mat
+            The matrix.
+
+        Returns
+        -------
+        Y: BV
+            The result.
+
+        Notes
+        -----
+        Only active columns (excluding the leading ones) are processed.
+
+        As opoosed to matMult(), this operation is always done by column by
+        column, with a sequence of calls to MatMultHermitianTranspose().
+        """
+        cdef MPI_Comm comm = PetscObjectComm(<PetscObject>self.bv)
+        cdef SlepcBVType bv_type = NULL
+        cdef PetscInt n=0, N=0, m=0
+        cdef SlepcBVOrthogType val1 = BV_ORTHOG_CGS
+        cdef SlepcBVOrthogRefineType val2 = BV_ORTHOG_REFINE_IFNEEDED
+        cdef SlepcBVOrthogBlockType val3 = BV_ORTHOG_BLOCK_GS
+        cdef PetscReal rval = PETSC_DEFAULT
+        if Y is None: Y = BV()
+        if Y.bv == NULL:
+            CHKERR( BVGetType(self.bv, &bv_type) )
+            CHKERR( MatGetLocalSize(A.mat, &n, NULL) )
+            CHKERR( MatGetSize(A.mat, &N, NULL) )
+            CHKERR( BVGetSizes(self.bv, NULL, NULL, &m) )
+            CHKERR( BVGetOrthogonalization(self.bv, &val1, &val2, &rval, &val3) )
+        if Y.bv == NULL:
+            CHKERR( BVCreate(comm, &Y.bv) )
+            CHKERR( BVSetType(Y.bv, bv_type) )
+            CHKERR( BVSetSizes(Y.bv, n, N, m) )
+            CHKERR( BVSetOrthogonalization(Y.bv, val1, val2, rval, val3) )
+        CHKERR( BVMatMultHermitianTranspose(self.bv, A.mat, Y.bv) )
+        return Y
+
+    def multVec(self, alpha, beta, Vec y not None, q):
+        """
+        Computes y = beta*y + alpha*X*q.
+
+        Parameter
+        ---------
+        alpha: scalar
+        beta: scalar
+        q: scalar or sequence of scalars
+
+        Return
+        ------
+        y: Vec
+            The result.
+        """
+        cdef PetscScalar sval1 = asScalar(alpha)
+        cdef PetscScalar sval2 = asScalar(beta)
+        cdef PetscInt nq = 0
+        cdef PetscScalar* qval = NULL
+        cdef tmp = iarray_s(q, &nq, &qval)
+        cdef PetscInt l=0, k=0
+        CHKERR( BVGetActiveColumns(self.bv, &l, &k) )
+        assert nq == k-l
+        CHKERR( BVMultVec(self.bv, sval1, sval2, y.vec, qval) )
+
+    def normColumn(self, int j, norm_type=None):
+        """
+        Computes the matrix norm of the BV.
+
+        Parameters
+        ----------
+        j: int
+            Index of column.
+        norm_type: PETSc.NormType (int)
+            The norm type.
+
+        Returns
+        -------
+        norm: float
+
+        Notes
+        -----
+        The norm of V[j] is computed (NORM_1, NORM_2, or NORM_INFINITY).
+
+        If a non-standard inner product has been specified with BVSetMatrix(),
+        then the returned value is ``sqrt(V[j]'* B*V[j])``, where B is the inner
+        product matrix (argument 'type' is ignored).
+        """
+        cdef PetscNormType ntype = PETSC_NORM_2
+        if norm_type is not None: ntype = norm_type
+        cdef PetscReal norm = 0
+        CHKERR( BVNormColumn(self.bv, j, ntype, &norm) )
+        return toReal(norm)
+
+    def norm(self, norm_type=None):
+        """
+        Computes the matrix norm of the BV.
+
+        Parameters
+        ----------
+        norm_type: PETSC.NormType enumerate
+            The norm type.
+
+        Returns
+        -------
+        norm: float
+
+        Notes
+        -----
+        All active columns (except the leading ones) are considered as a
+        matrix. The allowed norms are NORM_1, NORM_FROBENIUS, and
+        NORM_INFINITY.
+
+        This operation fails if a non-standard inner product has been specified
+        with BVSetMatrix().
+        """
+        cdef PetscNormType ntype = PETSC_NORM_FROBENIUS
+        if norm_type is not None: ntype = norm_type
+        cdef PetscReal norm = 0
+        CHKERR( BVNorm(self.bv, ntype, &norm) )
+        return toReal(norm)
+
+    def setRandom(self):
+        """
+        Set the active columns of BV to random numbers.
+
+        Notes
+        -----
+        All active columns (except the leading ones) are modified.
+        """
+        CHKERR( BVSetRandom(self.bv) )
+
     def orthogonalizeVec(self, Vec v not None):
         """
         Orthogonalize a vector with respect to a set of vectors.
@@ -314,15 +817,34 @@ cdef class BV(Object):
 
         This routine does not normalize the resulting vector.
         """
-        cdef PetscReal rval = 0
-        cdef PetscBool tval = PETSC_FALSE
-        CHKERR( BVOrthogonalizeVec(self.bv, v.vec, NULL, &rval, &tval) )
-        return (toReal(rval), <bint>tval)
+        cdef PetscReal norm = 0
+        cdef PetscBool ldep = PETSC_FALSE
+        CHKERR( BVOrthogonalizeVec(self.bv, v.vec, NULL, &norm, &ldep) )
+        return (toReal(norm), <bint>ldep)
+
+    def orthogonalize(self, Mat R=None, **kargs):
+        """
+        Orthogonalize all columns (except leading ones),
+        that is, compute the QR decomposition.
+
+        Parameters
+        ----------
+        R: Mat or None
+            A sequential dense matrix.
+
+        Notes
+        -----
+        The output satisfies ``V0 = V*R`` (where V0 represent the input V) and ``V'*V = I``.
+        """
+        if kargs: self.setOrthogonalization(**kargs)
+        cdef PetscMat Rmat = NULL if R is None else R.mat
+        CHKERR( BVOrthogonalize(self.bv, Rmat) )
 
 # -----------------------------------------------------------------------------
 
 del BVType
 del BVOrthogType
 del BVOrthogRefineType
+del BVOrthogBlockType
 
 # -----------------------------------------------------------------------------
diff --git a/src/SLEPc/EPS.pyx b/src/SLEPc/EPS.pyx
index 169f962..16a4302 100644
--- a/src/SLEPc/EPS.pyx
+++ b/src/SLEPc/EPS.pyx
@@ -146,12 +146,12 @@ class EPSConv(object):
     EPS convergence test
 
     - `ABS`:
-    - `EIG`:
+    - `REL`:
     - `NORM`:
     - `USER`:
     """
     ABS  = EPS_CONV_ABS
-    EIG  = EPS_CONV_EIG
+    REL  = EPS_CONV_REL
     NORM = EPS_CONV_NORM
     USER = EPS_CONV_USER
 
@@ -160,15 +160,19 @@ class EPSConvergedReason(object):
     EPS convergence reasons
 
     - `CONVERGED_TOL`:
+    - `CONVERGED_USER`:
     - `DIVERGED_ITS`:
     - `DIVERGED_BREAKDOWN`:
+    - `DIVERGED_SYMMETRY_LOST`:
     - `CONVERGED_ITERATING`:
     """
-    CONVERGED_TOL         = EPS_CONVERGED_TOL
-    DIVERGED_ITS          = EPS_DIVERGED_ITS
-    DIVERGED_BREAKDOWN    = EPS_DIVERGED_BREAKDOWN
-    CONVERGED_ITERATING   = EPS_CONVERGED_ITERATING
-    ITERATING             = EPS_CONVERGED_ITERATING
+    CONVERGED_TOL          = EPS_CONVERGED_TOL
+    CONVERGED_USER         = EPS_CONVERGED_USER
+    DIVERGED_ITS           = EPS_DIVERGED_ITS
+    DIVERGED_BREAKDOWN     = EPS_DIVERGED_BREAKDOWN
+    DIVERGED_SYMMETRY_LOST = EPS_DIVERGED_SYMMETRY_LOST
+    CONVERGED_ITERATING    = EPS_CONVERGED_ITERATING
+    ITERATING              = EPS_CONVERGED_ITERATING
 
 class EPSPowerShiftType(object):
     """
@@ -701,7 +705,7 @@ cdef class EPS(Object):
             The method used to compute the error estimate 
             used in the convergence test. 
         """
-        cdef SlepcEPSConv conv = EPS_CONV_EIG
+        cdef SlepcEPSConv conv = EPS_CONV_REL
         CHKERR( EPSGetConvergenceTest(self.eps, &conv) )
         return conv
 
@@ -913,6 +917,31 @@ cdef class EPS(Object):
         """
         CHKERR( EPSSetDS(self.eps, ds.ds) )
 
+    def getRG(self):
+        """
+        Obtain the region object associated to the eigensolver.
+
+        Returns
+        -------
+        rg: RG
+            The region context.
+        """
+        cdef RG rg = RG()
+        CHKERR( EPSGetRG(self.eps, &rg.rg) )
+        PetscINCREF(rg.obj)
+        return rg
+
+    def setRG(self, RG rg not None):
+        """
+        Associates a region object to the eigensolver.
+
+        Parameters
+        ----------
+        rg: RG
+            The region context.
+        """
+        CHKERR( EPSSetRG(self.eps, rg.rg) )
+
     def getOperators(self):
         """
         Gets the matrices associated with the eigenvalue problem.
@@ -1267,6 +1296,33 @@ cdef class EPS(Object):
         CHKERR( EPSComputeError(self.eps, i, et, &rval) )
         return toReal(rval)
 
+    def errorView(self, etype=None, Viewer viewer=None):
+        """
+        Displays the errors associated with the computed solution
+        (as well as the eigenvalues).
+
+        Parameters
+        ----------
+        etype: `EPS.ErrorType` enumerate, optional
+           The error type to compute.
+        viewer: Viewer, optional.
+                Visualization context; if not provided, the standard
+                output is used.
+
+        Notes
+        -----
+        By default, this function checks the error of all eigenpairs and prints
+        the eigenvalues if all of them are below the requested tolerance.
+        If the viewer has format ``ASCII_INFO_DETAIL`` then a table with
+        eigenvalues and corresponding errors is printed.
+
+        """
+        cdef SlepcEPSErrorType et = EPS_ERROR_RELATIVE
+        if etype is not None: et = etype
+        cdef PetscViewer vwr = NULL
+        if viewer is not None: vwr = viewer.vwr
+        CHKERR( EPSErrorView(self.eps, et, vwr) )
+
     #
 
     def setPowerShiftType(self, shift):
@@ -1619,8 +1675,111 @@ cdef class EPS(Object):
         CHKERR( EPSKrylovSchurGetSubcommPairs(self.eps, i, &sval, vec) )
         return toScalar(sval)
 
-    #
+    def getKrylovSchurSubcommMats(self):
+        """
+        Gets the eigenproblem matrices stored internally in the subcommunicator
+        to which the calling process belongs.
 
+        Returns
+        -------
+        A: Mat
+           The matrix associated with the eigensystem.
+        B: Mat
+           The second matrix in the case of generalized eigenproblems.
+
+        Notes
+        -----
+        This is the analog of `getOperators()`, but returns the matrices distributed
+        differently (in the subcommunicator rather than in the parent communicator).
+
+        These matrices should not be modified by the user.
+        """
+        cdef Mat A = Mat()
+        cdef Mat B = Mat()
+        CHKERR( EPSKrylovSchurGetSubcommMats(self.eps, &A.mat, &B.mat) )
+        PetscINCREF(A.obj)
+        PetscINCREF(B.obj)
+        return (A, B)
+
+    def updateKrylovSchurSubcommMats(self, s=1.0, a=1.0, Mat Au=None, t=1.0, b=1.0, Mat Bu=None, structure=None, globalup=False):
+        """
+        Update the eigenproblem matrices stored internally in the subcommunicator
+        to which the calling process belongs.
+
+        Parameters
+        ----------
+        s: float (real or complex)
+           Scalar that multiplies the existing A matrix.
+        a: float (real or complex)
+           Scalar used in the axpy operation on A.
+        Au: Mat, optional
+           The matrix used in the axpy operation on A.
+        t: float (real or complex)
+           Scalar that multiplies the existing B matrix.
+        b: float (real or complex)
+           Scalar used in the axpy operation on B.
+        Bu: Mat, optional
+           The matrix used in the axpy operation on B.
+        structure: `PETSc.Mat.Structure` enumerate
+           Either same, different, or a subset of the non-zero sparsity pattern.
+        globalup: bool
+           Whether global matrices must be updated or not.
+
+        Notes
+        -----
+        This function modifies the eigenproblem matrices at subcommunicator level,
+        and optionally updates the global matrices in the parent communicator.
+        The updates are expressed as ``A <-- s*A + a*Au``,  ``B <-- t*B + b*Bu``.
+
+        It is possible to update one of the matrices, or both.
+
+        The matrices `Au` and `Bu` must be equal in all subcommunicators.
+
+        The `str` flag is passed to the `Mat.axpy()` operations to perform the updates.
+
+        If `globalup` is True, communication is carried out to reconstruct the updated
+        matrices in the parent communicator.
+        """
+        cdef PetscMat Amat = NULL
+        if Au is not None: Amat = Au.mat
+        cdef PetscMat Bmat = NULL
+        if Bu is not None: Bmat = Bu.mat
+        cdef PetscMatStructure vstr = matstructure(structure)
+        cdef PetscBool tval = globalup
+        CHKERR( EPSKrylovSchurUpdateSubcommMats(self.eps, s, a, Amat, t, b, Bmat, vstr, tval) )
+
+    def setKrylovSchurSubintervals(self, subint):
+        """
+        Sets the subinterval boundaries for spectrum slicing with a computational interval.
+        
+        Parameters
+        ----------
+        subint: list of real values specifying subintervals
+
+        Notes
+        -----
+        Logically Collective on EPS
+        This function must be called after setKrylovSchurPartitions(). 
+        For npart partitions, the argument subint must contain npart+1 
+        real values sorted in ascending order: 
+        subint_0, subint_1, ..., subint_npart, 
+        where the first and last values must coincide with the interval 
+        endpoints set with EPSSetInterval().
+        The subintervals are then defined by two consecutive points: 
+        [subint_0,subint_1], [subint_1,subint_2], and so on.
+        """
+        cdef PetscBool match = PETSC_FALSE
+        CHKERR( PetscObjectTypeCompare(<PetscObject>self.eps, EPSKRYLOVSCHUR, &match) )
+        if match == PETSC_FALSE: return
+        cdef PetscReal *subintarray = NULL
+        cdef Py_ssize_t i = 0, n = len(subint)
+        cdef PetscInt nparts = 0
+        CHKERR( EPSKrylovSchurGetPartitions(self.eps, &nparts) )
+        assert n >= nparts
+        cdef tmp = allocate(n*sizeof(PetscReal),<void**>&subintarray)
+        for i in range(n): subintarray[i] = asReal(subint[i])
+        CHKERR(EPSKrylovSchurSetSubintervals(self.eps, subintarray))
+        
     def setRQCGReset(self, nrest):
         """
         Sets the reset parameter of the RQCG iteration. Every nrest iterations,
diff --git a/src/SLEPc/FN.pyx b/src/SLEPc/FN.pyx
index 81eb81d..0999731 100644
--- a/src/SLEPc/FN.pyx
+++ b/src/SLEPc/FN.pyx
@@ -10,6 +10,7 @@ class FNType(object):
     LOG      = S_(FNLOG)
     PHI      = S_(FNPHI)
     SQRT     = S_(FNSQRT)
+    INVSQRT  = S_(FNINVSQRT)
 
 class FNCombineType(object):
     """
@@ -33,7 +34,8 @@ cdef class FN(Object):
     FN
     """
 
-    Type = FNType
+    Type        = FNType
+    CombineType = FNCombineType
 
     def __cinit__(self):
         self.obj = <PetscObject*> &self.fn
diff --git a/src/SLEPc/MFN.pyx b/src/SLEPc/MFN.pyx
index cabc1b8..7eb5d3e 100644
--- a/src/SLEPc/MFN.pyx
+++ b/src/SLEPc/MFN.pyx
@@ -1,13 +1,24 @@
 # -----------------------------------------------------------------------------
 
 class MFNType(object):
+    """
+    MFN type
+
+    Action of a matrix function on a vector.
+
+    - `KRYLOV`:  Restarted Krylov solver.
+    - `EXPOKIT`: Implementation of the method in Expokit.
+    """
     KRYLOV   = S_(MFNKRYLOV)
+    EXPOKIT  = S_(MFNEXPOKIT)
 
 class MFNConvergedReason(object):
     CONVERGED_TOL       = MFN_CONVERGED_TOL
+    CONVERGED_ITS       = MFN_CONVERGED_ITS
     DIVERGED_ITS        = MFN_DIVERGED_ITS
     DIVERGED_BREAKDOWN  = MFN_DIVERGED_BREAKDOWN
     CONVERGED_ITERATING = MFN_CONVERGED_ITERATING
+    ITERATING           = MFN_CONVERGED_ITERATING
 
 # -----------------------------------------------------------------------------
 
diff --git a/src/SLEPc/NEP.pyx b/src/SLEPc/NEP.pyx
index 55a7474..3b0ddfb 100644
--- a/src/SLEPc/NEP.pyx
+++ b/src/SLEPc/NEP.pyx
@@ -11,12 +11,14 @@ class NEPType(object):
     - `NARNOLDI`: Nonlinear Arnoldi.
     - `CISS`:     Contour integral spectrum slice.
     - `INTERPOL`: Polynomial interpolation.
+    - `NLEIGS`:   Fully rational Krylov method for nonlinear eigenproblems.
     """
     RII      = S_(NEPRII)
     SLP      = S_(NEPSLP)
     NARNOLDI = S_(NEPNARNOLDI)
     CISS     = S_(NEPCISS)
     INTERPOL = S_(NEPINTERPOL)
+    NLEIGS   = S_(NEPNLEIGS)
 
 class NEPErrorType(object):
     """
@@ -24,9 +26,11 @@ class NEPErrorType(object):
 
     - `ABSOLUTE`:  Absolute error.
     - `RELATIVE`:  Relative error.
+    - `BACKWARD`:  Backward error.
     """
     ABSOLUTE = NEP_ERROR_ABSOLUTE
     RELATIVE = NEP_ERROR_RELATIVE
+    BACKWARD = NEP_ERROR_BACKWARD
 
 class NEPWhich(object):
     LARGEST_MAGNITUDE  = NEP_LARGEST_MAGNITUDE
@@ -38,18 +42,41 @@ class NEPWhich(object):
     TARGET_MAGNITUDE   = NEP_TARGET_MAGNITUDE
     TARGET_REAL        = NEP_TARGET_REAL
     TARGET_IMAGINARY   = NEP_TARGET_IMAGINARY
+    ALL                = NEP_ALL
+    USER               = NEP_WHICH_USER
 
 class NEPConvergedReason(object):
-    CONVERGED_FNORM_ABS      = NEP_CONVERGED_FNORM_ABS
-    CONVERGED_FNORM_RELATIVE = NEP_CONVERGED_FNORM_RELATIVE
-    CONVERGED_SNORM_RELATIVE = NEP_CONVERGED_SNORM_RELATIVE
-    DIVERGED_LINEAR_SOLVE    = NEP_DIVERGED_LINEAR_SOLVE
-    DIVERGED_FUNCTION_COUNT  = NEP_DIVERGED_FUNCTION_COUNT
-    DIVERGED_MAX_IT          = NEP_DIVERGED_MAX_IT
-    DIVERGED_BREAKDOWN       = NEP_DIVERGED_BREAKDOWN
-    DIVERGED_FNORM_NAN       = NEP_DIVERGED_FNORM_NAN
-    CONVERGED_ITERATING      = NEP_CONVERGED_ITERATING
-    ITERATING                = NEP_CONVERGED_ITERATING
+    CONVERGED_TOL          = NEP_CONVERGED_TOL
+    CONVERGED_USER         = NEP_CONVERGED_USER
+    DIVERGED_ITS           = NEP_DIVERGED_ITS
+    DIVERGED_BREAKDOWN     = NEP_DIVERGED_BREAKDOWN
+    DIVERGED_LINEAR_SOLVE  = NEP_DIVERGED_LINEAR_SOLVE
+    CONVERGED_ITERATING    = NEP_CONVERGED_ITERATING
+    ITERATING              = NEP_CONVERGED_ITERATING
+
+class NEPRefine(object):
+    """
+    NEP refinement strategy
+
+    - `NONE`:     No refinement.
+    - `SIMPLE`:   Refine eigenpairs one by one.
+    - `MULTIPLE`: Refine all eigenpairs simultaneously (invariant pair).
+    """
+    NONE     = NEP_REFINE_NONE
+    SIMPLE   = NEP_REFINE_SIMPLE
+    MULTIPLE = NEP_REFINE_MULTIPLE
+
+class NEPRefineScheme(object):
+    """
+    Scheme for solving linear systems during iterative refinement
+
+    - `SCHUR`:    Schur complement.
+    - `MBE`:      Mixed block elimination.
+    - `EXPLICIT`: Build the explicit matrix.
+    """
+    SCHUR    = NEP_REFINE_SCHEME_SCHUR
+    MBE      = NEP_REFINE_SCHEME_MBE
+    EXPLICIT = NEP_REFINE_SCHEME_EXPLICIT
 
 # -----------------------------------------------------------------------------
 
@@ -63,6 +90,8 @@ cdef class NEP(Object):
     ErrorType       = NEPErrorType
     Which           = NEPWhich
     ConvergedReason = NEPConvergedReason
+    Refine          = NEPRefine
+    RefineScheme    = NEPRefineScheme
 
     def __cinit__(self):
         self.obj = <PetscObject*> &self.nep
@@ -220,57 +249,34 @@ cdef class NEP(Object):
 
         Returns
         -------
-        abstol: float
-            The absolute convergence tolerance.
-        rtol: float
-            The relative convergence tolerance.
-        stol: float
-            Convergence tolerance in terms of the norm of the change in the
-            solution between steps, || delta x || < stol*|| x ||.
+        tol: float
+            The convergence tolerance.
         maxit: int
             The maximum number of iterations.
-        maxf: int
-            The maximum number of function evaluations.
         """
-        cdef PetscReal rval1 = 0
-        cdef PetscReal rval2 = 0
-        cdef PetscReal rval3 = 0
-        cdef PetscInt  ival1 = 0
-        cdef PetscInt  ival2 = 0
-        CHKERR( NEPGetTolerances(self.nep, &rval1, &rval2, &rval3, &ival1, &ival2) )
-        return (toReal(rval1), toReal(rval2), toReal(rval3), toInt(ival1), toInt(ival2))
+        cdef PetscReal rval = 0
+        cdef PetscInt  ival = 0
+        CHKERR( NEPGetTolerances(self.nep, &rval, &ival) )
+        return (toReal(rval), toInt(ival))
 
-    def setTolerances(self, abstol=None, rtol=None, stol=None, maxit=None, maxf=None):
+    def setTolerances(self, tol=None, maxit=None):
         """
-        Sets various parameters used in convergence tests.
+        Sets the tolerance and maximum iteration count used in convergence tests.
 
         Parameters
         ----------
-        abstol: float, optional
-            The absolute convergence tolerance.
-        rtol: float, optional
-            The relative convergence tolerance.
-        stol: float, optional
-            Convergence tolerance in terms of the norm of the change in the
-            solution between steps, || delta x || < stol*|| x ||.
+        tol: float, optional
+            The convergence tolerance.
         maxit: int, optional
             The maximum number of iterations.
-        maxf: int, optional
-            The maximum number of function evaluations.
-        """
-        cdef PetscReal rval1 = PETSC_DEFAULT
-        cdef PetscReal rval2 = PETSC_DEFAULT
-        cdef PetscReal rval3 = PETSC_DEFAULT
-        cdef PetscInt  ival1 = PETSC_DEFAULT
-        cdef PetscInt  ival2 = PETSC_DEFAULT
-        if abstol is not None: rval1 = asReal(abstol)
-        if rtol   is not None: rval2 = asReal(rtol)
-        if stol   is not None: rval3 = asReal(stol)
-        if maxit  is not None: ival1 = asInt(maxit)
-        if maxf   is not None: ival2 = asInt(maxf)
-        CHKERR( NEPSetTolerances(self.nep, rval1, rval2, rval3, ival1, ival2) )
-
-    def getLagPreconditioner(self):
+        """
+        cdef PetscReal rval = PETSC_DEFAULT
+        cdef PetscInt  ival = PETSC_DEFAULT
+        if tol   is not None: rval = asReal(tol)
+        if maxit is not None: ival = asInt(maxit)
+        CHKERR( NEPSetTolerances(self.nep, rval, ival) )
+
+    def getRIILagPreconditioner(self):
         """
         Indicates how often the preconditioner is rebuilt.
 
@@ -280,10 +286,10 @@ cdef class NEP(Object):
             The lag parameter.
         """
         cdef PetscInt ival = 0
-        CHKERR( NEPGetLagPreconditioner(self.nep, &ival) )
+        CHKERR( NEPRIIGetLagPreconditioner(self.nep, &ival) )
         return ival
 
-    def setLagPreconditioner(self, lag):
+    def setRIILagPreconditioner(self, lag):
         """
         Determines when the preconditioner is rebuilt in the
         nonlinear solve.
@@ -296,7 +302,7 @@ cdef class NEP(Object):
             the Jacobian is built, etc.
         """
         cdef PetscInt ival = lag
-        CHKERR( NEPSetLagPreconditioner(self.nep, ival) )
+        CHKERR( NEPRIISetLagPreconditioner(self.nep, ival) )
 
     def getTrackAll(self):
         """
@@ -393,6 +399,31 @@ cdef class NEP(Object):
         """
         CHKERR( NEPSetBV(self.nep, bv.bv) )
 
+    def getRG(self):
+        """
+        Obtain the region object associated to the eigensolver.
+
+        Returns
+        -------
+        rg: RG
+            The region context.
+        """
+        cdef RG rg = RG()
+        CHKERR( NEPGetRG(self.nep, &rg.rg) )
+        PetscINCREF(rg.obj)
+        return rg
+
+    def setRG(self, RG rg not None):
+        """
+        Associates a region object to the eigensolver.
+
+        Parameters
+        ----------
+        rg: RG
+            The region context.
+        """
+        CHKERR( NEPSetRG(self.nep, rg.rg) )
+
     #
 
     def setInitialSpace(self, space):
@@ -551,6 +582,33 @@ cdef class NEP(Object):
         CHKERR( NEPComputeError(self.nep, i, et, &rval) )
         return toReal(rval)
 
+    def errorView(self, etype=None, Viewer viewer=None):
+        """
+        Displays the errors associated with the computed solution
+        (as well as the eigenvalues).
+
+        Parameters
+        ----------
+        etype: `NEP.ErrorType` enumerate, optional
+           The error type to compute.
+        viewer: Viewer, optional.
+                Visualization context; if not provided, the standard
+                output is used.
+
+        Notes
+        -----
+        By default, this function checks the error of all eigenpairs and prints
+        the eigenvalues if all of them are below the requested tolerance.
+        If the viewer has format ``ASCII_INFO_DETAIL`` then a table with
+        eigenvalues and corresponding errors is printed.
+
+        """
+        cdef SlepcNEPErrorType et = NEP_ERROR_RELATIVE
+        if etype is not None: et = etype
+        cdef PetscViewer vwr = NULL
+        if viewer is not None: vwr = viewer.vwr
+        CHKERR( NEPErrorView(self.nep, et, vwr) )
+
     def setFunction(self, function, Mat F, Mat P=None, args=None, kargs=None):
         """
         Sets the function to compute the nonlinear Function T(lambda)
@@ -624,8 +682,10 @@ cdef class NEP(Object):
 # -----------------------------------------------------------------------------
 
 del NEPType
-del NEPWhich
 del NEPErrorType
+del NEPWhich
 del NEPConvergedReason
+del NEPRefine
+del NEPRefineScheme
 
 # -----------------------------------------------------------------------------
diff --git a/src/SLEPc/PEP.pyx b/src/SLEPc/PEP.pyx
index 2b0ed09..a7cc944 100644
--- a/src/SLEPc/PEP.pyx
+++ b/src/SLEPc/PEP.pyx
@@ -30,18 +30,6 @@ class PEPProblemType(object):
     HERMITIAN  = PEP_HERMITIAN
     GYROSCOPIC = PEP_GYROSCOPIC
 
-class PEPErrorType(object):
-    """
-    PEP error type to assess accuracy of computed solutions
-
-    - `ABSOLUTE`:  Absolute error.
-    - `RELATIVE`:  Relative error.
-    - `BACKWARD`:  Backward error.
-    """
-    ABSOLUTE = PEP_ERROR_ABSOLUTE
-    RELATIVE = PEP_ERROR_RELATIVE
-    BACKWARD = PEP_ERROR_BACKWARD
-
 class PEPWhich(object):
     """
     PEP desired part of spectrum
@@ -55,6 +43,7 @@ class PEPWhich(object):
     - `TARGET_MAGNITUDE`:   Closest to target (in magnitude).
     - `TARGET_REAL`:        Real part closest to target.
     - `TARGET_IMAGINARY`:   Imaginary part closest to target.
+    - `USER`:               User-defined criterion.
     """
     LARGEST_MAGNITUDE  = PEP_LARGEST_MAGNITUDE
     SMALLEST_MAGNITUDE = PEP_SMALLEST_MAGNITUDE
@@ -65,6 +54,7 @@ class PEPWhich(object):
     TARGET_MAGNITUDE   = PEP_TARGET_MAGNITUDE
     TARGET_REAL        = PEP_TARGET_REAL
     TARGET_IMAGINARY   = PEP_TARGET_IMAGINARY
+    USER               = PEP_WHICH_USER
 
 class PEPBasis(object):
     MONOMIAL   = PEP_BASIS_MONOMIAL
@@ -75,51 +65,102 @@ class PEPBasis(object):
     HERMITE    = PEP_BASIS_HERMITE
 
 class PEPScale(object):
+    """
+    PEP scaling strategy
+
+    - `NONE`:     No scaling.
+    - `SCALAR`:   Parameter scaling.
+    - `DIAGONAL`: Diagonal scaling.
+    - `BOTH`:     Both parameter and diagonal scaling.
+    """
     NONE     = PEP_SCALE_NONE
     SCALAR   = PEP_SCALE_SCALAR
     DIAGONAL = PEP_SCALE_DIAGONAL
     BOTH     = PEP_SCALE_BOTH
 
+class PEPRefine(object):
+    """
+    PEP refinement strategy
+
+    - `NONE`:     No refinement.
+    - `SIMPLE`:   Refine eigenpairs one by one.
+    - `MULTIPLE`: Refine all eigenpairs simultaneously (invariant pair).
+    """
+    NONE     = PEP_REFINE_NONE
+    SIMPLE   = PEP_REFINE_SIMPLE
+    MULTIPLE = PEP_REFINE_MULTIPLE
+
+class PEPRefineScheme(object):
+    """
+    Scheme for solving linear systems during iterative refinement
+
+    - `SCHUR`:    Schur complement.
+    - `MBE`:      Mixed block elimination.
+    - `EXPLICIT`: Build the explicit matrix.
+    """
+    SCHUR    = PEP_REFINE_SCHEME_SCHUR
+    MBE      = PEP_REFINE_SCHEME_MBE
+    EXPLICIT = PEP_REFINE_SCHEME_EXPLICIT
+
+class PEPExtract(object):
+    """
+    Extraction strategy used to obtain eigenvectors of the PEP from the
+    eigenvectors of the linearization
+
+    - `NONE`:       Use the first block.
+    - `NORM`:       Use the first or last block depending on norm of H.
+    - `RESIDUAL`:   Use the block with smallest residual.
+    - `STRUCTURED`: Combine all blocks in a certain way.
+    """
+    NONE       = PEP_EXTRACT_NONE
+    NORM       = PEP_EXTRACT_NORM
+    RESIDUAL   = PEP_EXTRACT_RESIDUAL
+    STRUCTURED = PEP_EXTRACT_STRUCTURED
+
+class PEPErrorType(object):
+    """
+    PEP error type to assess accuracy of computed solutions
+
+    - `ABSOLUTE`:  Absolute error.
+    - `RELATIVE`:  Relative error.
+    - `BACKWARD`:  Backward error.
+    """
+    ABSOLUTE = PEP_ERROR_ABSOLUTE
+    RELATIVE = PEP_ERROR_RELATIVE
+    BACKWARD = PEP_ERROR_BACKWARD
+
 class PEPConv(object):
     """
     PEP convergence test
 
     - `ABS`:
-    - `EIG`:
+    - `REL`:
     - `NORM`:
     - `USER`:
     """
-    ABS  = EPS_CONV_ABS
-    EIG  = EPS_CONV_EIG
-    NORM = EPS_CONV_NORM
-    USER = EPS_CONV_USER
-
-class PEPRefine(object):
-    """
-    PEP refinement strategy
-
-    - `NONE`:
-    - `SIMPLE`:
-    - `MULTIPLE`:
-    """
-    NONE  = PEP_REFINE_NONE
-    SIMPLE  = PEP_REFINE_SIMPLE
-    MULTIPLE = PEP_REFINE_MULTIPLE
+    ABS  = PEP_CONV_ABS
+    REL  = PEP_CONV_REL
+    NORM = PEP_CONV_NORM
+    USER = PEP_CONV_USER
 
 class PEPConvergedReason(object):
     """
     PEP convergence reasons
 
     - `CONVERGED_TOL`:
+    - `CONVERGED_USER`:
     - `DIVERGED_ITS`:
     - `DIVERGED_BREAKDOWN`:
+    - `DIVERGED_SYMMETRY_LOST`:
     - `CONVERGED_ITERATING`:
     """
-    CONVERGED_TOL       = PEP_CONVERGED_TOL
-    DIVERGED_ITS        = PEP_DIVERGED_ITS
-    DIVERGED_BREAKDOWN  = PEP_DIVERGED_BREAKDOWN
-    CONVERGED_ITERATING = PEP_CONVERGED_ITERATING
-    ITERATING           = PEP_CONVERGED_ITERATING
+    CONVERGED_TOL          = PEP_CONVERGED_TOL
+    CONVERGED_USER         = PEP_CONVERGED_USER
+    DIVERGED_ITS           = PEP_DIVERGED_ITS
+    DIVERGED_BREAKDOWN     = PEP_DIVERGED_BREAKDOWN
+    DIVERGED_SYMMETRY_LOST = PEP_DIVERGED_SYMMETRY_LOST
+    CONVERGED_ITERATING    = PEP_CONVERGED_ITERATING
+    ITERATING              = PEP_CONVERGED_ITERATING
 
 # -----------------------------------------------------------------------------
 
@@ -135,6 +176,8 @@ cdef class PEP(Object):
     Basis           = PEPBasis
     Scale           = PEPScale
     Refine          = PEPRefine
+    RefineScheme    = PEPRefineScheme
+    Extract         = PEPExtract
     ErrorType       = PEPErrorType
     Conv            = PEPConv
     ConvergedReason = PEPConvergedReason
@@ -386,7 +429,7 @@ cdef class PEP(Object):
             The method used to compute the error estimate 
             used in the convergence test. 
         """
-        cdef SlepcPEPConv conv = PEP_CONV_EIG
+        cdef SlepcPEPConv conv = PEP_CONV_REL
         CHKERR( PEPGetConvergenceTest(self.pep, &conv) )
         return conv
 
@@ -419,18 +462,18 @@ cdef class PEP(Object):
             The convergence tolerance.
         its: int
             The maximum number of refinement iterations.
-        schur: bool
-            Whether the Schur complement approach is being used
+        scheme: PEP.RefineScheme
+            Scheme for solving linear systems
         """
         cdef SlepcPEPRefine ref = PEP_REFINE_NONE
         cdef PetscInt npart = 1
         cdef PetscReal tol = PETSC_DEFAULT
         cdef PetscInt its = PETSC_DEFAULT
-        cdef PetscBool schur = PETSC_FALSE
-        CHKERR( PEPGetRefine(self.pep, &ref, &npart, &tol, &its, &schur) )
-        return (ref, toInt(npart), toReal(tol), toInt(its), <bint>schur)
+        cdef SlepcPEPRefineScheme scheme = PEP_REFINE_SCHEME_MBE
+        CHKERR( PEPGetRefine(self.pep, &ref, &npart, &tol, &its, &scheme) )
+        return (ref, toInt(npart), toReal(tol), toInt(its), scheme)
 
-    def setRefine(self, ref, npart=None, tol=None, its=None, schur=None):
+    def setRefine(self, ref, npart=None, tol=None, its=None, scheme=None):
         """
         Sets the refinement strategy used by the PEP object, 
         and the associated parameters. 
@@ -445,19 +488,19 @@ cdef class PEP(Object):
             The convergence tolerance.
         its: int, optional
             The maximum number of refinement iterations.
-        schur: bool, optional
-            Whether the Schur complement approach is being used
+        scheme: PEP.RefineScheme, optional
+            Scheme for linear system solves
         """
         cdef SlepcPEPRefine tref = ref
         cdef PetscInt tnpart = 1
         cdef PetscReal ttol = PETSC_DEFAULT
         cdef PetscInt tits = PETSC_DEFAULT
-        cdef PetscBool tschur = PETSC_FALSE
+        cdef SlepcPEPRefineScheme tscheme = PEP_REFINE_SCHEME_MBE
         if npart is not None: tnpart = asInt(npart)
         if tol is not None: ttol = asReal(tol)
         if its is not None: tits = asInt(its)
-        if schur is not None: tschur = schur
-        CHKERR( PEPSetRefine(self.pep, tref, tnpart, ttol, tits, tschur) )
+        if scheme is not None: tscheme = scheme
+        CHKERR( PEPSetRefine(self.pep, tref, tnpart, ttol, tits, tscheme) )
 
     def getTrackAll(self):
         """
@@ -657,6 +700,31 @@ cdef class PEP(Object):
         """
         CHKERR( PEPSetBV(self.pep, bv.bv) )
 
+    def getRG(self):
+        """
+        Obtain the region object associated to the eigensolver.
+
+        Returns
+        -------
+        rg: RG
+            The region context.
+        """
+        cdef RG rg = RG()
+        CHKERR( PEPGetRG(self.pep, &rg.rg) )
+        PetscINCREF(rg.obj)
+        return rg
+
+    def setRG(self, RG rg not None):
+        """
+        Associates a region object to the eigensolver.
+
+        Parameters
+        ----------
+        rg: RG
+            The region context.
+        """
+        CHKERR( PEPSetRG(self.pep, rg.rg) )
+
     def getOperators(self):
         """
         Gets the matrices associated with the eigenvalue problem.
@@ -856,6 +924,33 @@ cdef class PEP(Object):
         CHKERR( PEPComputeError(self.pep, i, et, &rval) )
         return toReal(rval)
 
+    def errorView(self, etype=None, Viewer viewer=None):
+        """
+        Displays the errors associated with the computed solution
+        (as well as the eigenvalues).
+
+        Parameters
+        ----------
+        etype: `PEP.ErrorType` enumerate, optional
+           The error type to compute.
+        viewer: Viewer, optional.
+                Visualization context; if not provided, the standard
+                output is used.
+
+        Notes
+        -----
+        By default, this function checks the error of all eigenpairs and prints
+        the eigenvalues if all of them are below the requested tolerance.
+        If the viewer has format ``ASCII_INFO_DETAIL`` then a table with
+        eigenvalues and corresponding errors is printed.
+
+        """
+        cdef SlepcPEPErrorType et = PEP_ERROR_RELATIVE
+        if etype is not None: et = etype
+        cdef PetscViewer vwr = NULL
+        if viewer is not None: vwr = viewer.vwr
+        CHKERR( PEPErrorView(self.pep, et, vwr) )
+
     #
 
     def setLinearEPS(self, EPS eps not None):
@@ -943,6 +1038,9 @@ del PEPProblemType
 del PEPWhich
 del PEPBasis
 del PEPScale
+del PEPRefine
+del PEPRefineScheme
+del PEPExtract
 del PEPErrorType
 del PEPConv
 del PEPConvergedReason
diff --git a/src/SLEPc/SLEPc.pyx b/src/SLEPc/SLEPc.pyx
index 037f1f6..939d293 100644
--- a/src/SLEPc/SLEPc.pyx
+++ b/src/SLEPc/SLEPc.pyx
@@ -8,11 +8,13 @@ from petsc4py.PETSc import COMM_WORLD
 
 from petsc4py.PETSc cimport MPI_Comm
 from petsc4py.PETSc cimport PetscObject, PetscViewer
+from petsc4py.PETSc cimport PetscRandom
 from petsc4py.PETSc cimport PetscVec, PetscMat
 from petsc4py.PETSc cimport PetscKSP, PetscPC
 
 from petsc4py.PETSc cimport Comm
 from petsc4py.PETSc cimport Object, Viewer
+from petsc4py.PETSc cimport Random
 from petsc4py.PETSc cimport Vec, Mat
 from petsc4py.PETSc cimport KSP, PC
 
@@ -172,8 +174,8 @@ cdef int initialize(object args) except -1:
     CHKERR( SlepcInitialize(NULL, NULL, NULL, NULL) )
     # register finalization function
     if Py_AtExit(finalize) < 0:
-        PySys_WriteStderr("warning: could not register"
-                          "SlepcFinalize() with Py_AtExit()", 0)
+        PySys_WriteStderr(b"warning: could not register %s with Py_AtExit()",
+                          b"SlepcFinalize()")
     return 1 # and we are done, enjoy !!
 
 from petsc4py.PETSc cimport PyPetscType_Register
diff --git a/src/SLEPc/ST.pyx b/src/SLEPc/ST.pyx
index ca8dacf..d966cd4 100644
--- a/src/SLEPc/ST.pyx
+++ b/src/SLEPc/ST.pyx
@@ -29,21 +29,6 @@ class STMatMode(object):
     INPLACE = ST_MATMODE_INPLACE
     SHELL   = ST_MATMODE_SHELL
 
-class STMatStructure(object):
-    """
-    - `SAME`: Same non-zero pattern.
-    - `SUBSET`: Subset of non-zero pattern.
-    - `DIFFERENT`: Different non-zero pattern.
-    """
-    # native
-    SAME_NONZERO_PATTERN      = MAT_SAME_NONZERO_PATTERN
-    DIFFERENT_NONZERO_PATTERN = MAT_DIFFERENT_NONZERO_PATTERN
-    SUBSET_NONZERO_PATTERN    = MAT_SUBSET_NONZERO_PATTERN
-    # aliases
-    SAME      = SAME_NZ      = SAME_NONZERO_PATTERN
-    SUBSET    = SUBSET_NZ    = SUBSET_NONZERO_PATTERN
-    DIFFERENT = DIFFERENT_NZ = DIFFERENT_NONZERO_PATTERN
-
 # -----------------------------------------------------------------------------
 
 cdef class ST(Object):
@@ -54,7 +39,6 @@ cdef class ST(Object):
 
     Type         = STType
     MatMode      = STMatMode
-    MatStructure = STMatStructure
 
     def __cinit__(self):
         self.obj = <PetscObject*> &self.st
@@ -344,7 +328,7 @@ cdef class ST(Object):
 
     def setMatStructure(self, structure):
         """
-        Sets an internal MatStructure attribute to indicate which is
+        Sets an internal Mat.Structure attribute to indicate which is
         the relation of the sparsity pattern of the two matrices ``A``
         and ``B`` constituting the generalized eigenvalue
         problem. This function has no effect in the case of standard
@@ -352,7 +336,7 @@ cdef class ST(Object):
 
         Parameters
         ----------
-        structure: `ST.MatStructure` enumerate
+        structure: `PETSc.Mat.Structure` enumerate
                    Either same, different, or a subset of the non-zero
                    sparsity pattern.
 
@@ -363,7 +347,7 @@ cdef class ST(Object):
         recommended to set this attribute for efficiency reasons (in
         particular, for internal *AXPY()* matrix operations).
         """
-        cdef PetscMatStructure val = structure
+        cdef PetscMatStructure val = matstructure(structure)
         CHKERR( STSetMatStructure(self.st, val) )
 
     def setKSP(self, KSP ksp not None):
@@ -484,6 +468,5 @@ cdef class ST(Object):
 
 del STType
 del STMatMode
-del STMatStructure
 
 # -----------------------------------------------------------------------------
diff --git a/src/SLEPc/SVD.pyx b/src/SLEPc/SVD.pyx
index f9f87d2..aec7c0c 100644
--- a/src/SLEPc/SVD.pyx
+++ b/src/SLEPc/SVD.pyx
@@ -41,11 +41,13 @@ class SVDConvergedReason(object):
     SVD convergence reasons
 
     - `CONVERGED_TOL`:
+    - `CONVERGED_USER`:
     - `DIVERGED_ITS`:
     - `DIVERGED_BREAKDOWN`:
     - `CONVERGED_ITERATING`:
     """
     CONVERGED_TOL       = SVD_CONVERGED_TOL
+    CONVERGED_USER      = SVD_CONVERGED_USER
     DIVERGED_ITS        = SVD_DIVERGED_ITS
     DIVERGED_BREAKDOWN  = SVD_DIVERGED_BREAKDOWN
     CONVERGED_ITERATING = SVD_CONVERGED_ITERATING
@@ -653,6 +655,33 @@ cdef class SVD(Object):
         CHKERR( SVDComputeError(self.svd, i, et, &rval) )
         return toReal(rval)
 
+    def errorView(self, etype=None, Viewer viewer=None):
+        """
+        Displays the errors associated with the computed solution
+        (as well as the eigenvalues).
+
+        Parameters
+        ----------
+        etype: `SVD.ErrorType` enumerate, optional
+           The error type to compute.
+        viewer: Viewer, optional.
+                Visualization context; if not provided, the standard
+                output is used.
+
+        Notes
+        -----
+        By default, this function checks the error of all eigenpairs and prints
+        the eigenvalues if all of them are below the requested tolerance.
+        If the viewer has format ``ASCII_INFO_DETAIL`` then a table with
+        eigenvalues and corresponding errors is printed.
+
+        """
+        cdef SlepcSVDErrorType et = SVD_ERROR_RELATIVE
+        if etype is not None: et = etype
+        cdef PetscViewer vwr = NULL
+        if viewer is not None: vwr = viewer.vwr
+        CHKERR( SVDErrorView(self.svd, et, vwr) )
+
     #
 
     def setCrossEPS(self, EPS eps not None):
diff --git a/src/SLEPc/slepcbv.pxi b/src/SLEPc/slepcbv.pxi
index f25dcd2..e63cfd2 100644
--- a/src/SLEPc/slepcbv.pxi
+++ b/src/SLEPc/slepcbv.pxi
@@ -20,6 +20,8 @@ cdef extern from * nogil:
         BV_ORTHOG_BLOCK_CHOL
 
     int BVCreate(MPI_Comm,SlepcBV*)
+    int BVDuplicate(SlepcBV,SlepcBV*)
+    int BVCopy(SlepcBV,SlepcBV)
     int BVView(SlepcBV,PetscViewer)
     int BVDestroy(SlepcBV*)
     int BVSetType(SlepcBV,SlepcBVType)
@@ -36,8 +38,55 @@ cdef extern from * nogil:
     int BVSetOrthogonalization(SlepcBV,SlepcBVOrthogType,SlepcBVOrthogRefineType,PetscReal,SlepcBVOrthogBlockType)
     int BVGetOrthogonalization(SlepcBV,SlepcBVOrthogType*,SlepcBVOrthogRefineType*,PetscReal*,SlepcBVOrthogBlockType*)
 
+    int BVSetRandom(SlepcBV)
+
     int BVSetMatrix(SlepcBV,PetscMat,PetscBool)
     int BVGetMatrix(SlepcBV,PetscMat*,PetscBool*)
     int BVApplyMatrix(SlepcBV,PetscVec,PetscVec)
 
+    int BVSetActiveColumns(SlepcBV,PetscInt,PetscInt)
+    int BVGetActiveColumns(SlepcBV,PetscInt*,PetscInt*)
+
+    int BVInsertVec(SlepcBV,PetscInt,PetscVec)
+    int BVInsertVecs(SlepcBV,PetscInt,PetscInt*,PetscVec*,PetscBool)
+    int BVGetColumn(SlepcBV,PetscInt,PetscVec*)
+    int BVRestoreColumn(SlepcBV,PetscInt,PetscVec*)
+
+    int BVDot(SlepcBV,SlepcBV,PetscMat)
+    int BVDotVec(SlepcBV,PetscVec,PetscScalar*)
+
+    int BVMatProject(SlepcBV,PetscMat,SlepcBV,PetscMat)
+    int BVMatMult(SlepcBV,PetscMat,SlepcBV)
+    int BVMatMultHermitianTranspose(SlepcBV,PetscMat,SlepcBV)
+    int BVMultVec(SlepcBV,PetscScalar,PetscScalar,PetscVec,PetscScalar*)
+
+    int BVScaleColumn(SlepcBV,PetscInt,PetscScalar)
+    int BVScale(SlepcBV,PetscScalar)
+
+    int BVNormColumn(SlepcBV,PetscInt,PetscNormType,PetscReal*)
+    int BVNorm(SlepcBV,PetscNormType,PetscReal*)
+
     int BVOrthogonalizeVec(SlepcBV,PetscVec,PetscScalar*,PetscReal*,PetscBool*)
+    int BVOrthogonalize(SlepcBV,PetscMat)
+
+
+cdef inline int BV_Sizes(
+    object size,
+    PetscInt *_n,
+    PetscInt *_N,
+    ) except -1:
+    # unpack and get local and global sizes
+    cdef PetscInt n=PETSC_DECIDE, N=PETSC_DECIDE
+    cdef object on, oN
+    try:
+        on, oN = size
+    except (TypeError, ValueError):
+        on = None; oN = size
+    if on is not None: n = asInt(on)
+    if oN is not None: N = asInt(oN)
+    if n==PETSC_DECIDE and N==PETSC_DECIDE: raise ValueError(
+        "local and global sizes cannot be both 'DECIDE'")
+    # return result to the caller
+    if _n != NULL: _n[0] = n
+    if _N != NULL: _N[0] = N
+    return 0
diff --git a/src/SLEPc/slepceps.pxi b/src/SLEPc/slepceps.pxi
index 3ba05dd..296f2d4 100644
--- a/src/SLEPc/slepceps.pxi
+++ b/src/SLEPc/slepceps.pxi
@@ -62,15 +62,17 @@ cdef extern from * nogil:
 
     ctypedef enum SlepcEPSConv "EPSConv":
         EPS_CONV_ABS
-        EPS_CONV_EIG
+        EPS_CONV_REL
         EPS_CONV_NORM
         EPS_CONV_USER
 
     ctypedef enum SlepcEPSConvergedReason "EPSConvergedReason":
-        EPS_CONVERGED_ITERATING
         EPS_CONVERGED_TOL
+        EPS_CONVERGED_USER
         EPS_DIVERGED_ITS
         EPS_DIVERGED_BREAKDOWN
+        EPS_DIVERGED_SYMMETRY_LOST
+        EPS_CONVERGED_ITERATING
 
     int EPSView(SlepcEPS,PetscViewer)
     int EPSDestroy(SlepcEPS*)
@@ -109,6 +111,8 @@ cdef extern from * nogil:
     int EPSGetDS(SlepcEPS,SlepcDS*)
     int EPSSetST(SlepcEPS,SlepcST)
     int EPSGetST(SlepcEPS,SlepcST*)
+    int EPSSetRG(SlepcEPS,SlepcRG)
+    int EPSGetRG(SlepcEPS,SlepcRG*)
 
     int EPSSetOperators(SlepcEPS,PetscMat,PetscMat)
     int EPSGetOperators(SlepcEPS,PetscMat*,PetscMat*)
@@ -140,6 +144,7 @@ cdef extern from * nogil:
 
     int EPSGetErrorEstimate(SlepcEPS,PetscInt,PetscReal*)
     int EPSComputeError(SlepcEPS,PetscInt,SlepcEPSErrorType,PetscReal*)
+    int EPSErrorView(SlepcEPS,SlepcEPSErrorType,PetscViewer)
 
     ctypedef enum SlepcEPSPowerShiftType "EPSPowerShiftType":
         EPS_POWER_SHIFT_CONSTANT
@@ -163,6 +168,9 @@ cdef extern from * nogil:
     int EPSKrylovSchurGetDimensions(SlepcEPS,PetscInt*,PetscInt*,PetscInt*);
     int EPSKrylovSchurGetSubcommInfo(SlepcEPS,PetscInt*,PetscInt*,PetscVec*);
     int EPSKrylovSchurGetSubcommPairs(SlepcEPS,PetscInt,PetscScalar*,PetscVec);
+    int EPSKrylovSchurGetSubcommMats(SlepcEPS,PetscMat*,PetscMat*);
+    int EPSKrylovSchurUpdateSubcommMats(SlepcEPS,PetscScalar,PetscScalar,PetscMat,PetscScalar,PetscScalar,PetscMat,PetscMatStructure,PetscBool);
+    int EPSKrylovSchurSetSubintervals(SlepcEPS,PetscReal*);
 
     ctypedef enum SlepcEPSLanczosReorthogType "EPSLanczosReorthogType":
         EPS_LANCZOS_REORTHOG_LOCAL
diff --git a/src/SLEPc/slepcfn.pxi b/src/SLEPc/slepcfn.pxi
index e009ef4..d4413a2 100644
--- a/src/SLEPc/slepcfn.pxi
+++ b/src/SLEPc/slepcfn.pxi
@@ -7,6 +7,7 @@ cdef extern from * nogil:
     SlepcFNType FNLOG
     SlepcFNType FNPHI
     SlepcFNType FNSQRT
+    SlepcFNType FNINVSQRT
 
     ctypedef enum SlepcFNCombineType "FNCombineType":
         FN_COMBINE_ADD
diff --git a/src/SLEPc/slepcmfn.pxi b/src/SLEPc/slepcmfn.pxi
index 876cabf..0391786 100644
--- a/src/SLEPc/slepcmfn.pxi
+++ b/src/SLEPc/slepcmfn.pxi
@@ -2,9 +2,11 @@ cdef extern from * nogil:
 
     ctypedef char* SlepcMFNType "const char*"
     SlepcMFNType MFNKRYLOV
+    SlepcMFNType MFNEXPOKIT
 
     ctypedef enum SlepcMFNConvergedReason "MFNConvergedReason":
         MFN_CONVERGED_TOL
+        MFN_CONVERGED_ITS
         MFN_DIVERGED_ITS
         MFN_DIVERGED_BREAKDOWN
         MFN_CONVERGED_ITERATING
diff --git a/src/SLEPc/slepcnep.pxi b/src/SLEPc/slepcnep.pxi
index 4becf2a..064e080 100644
--- a/src/SLEPc/slepcnep.pxi
+++ b/src/SLEPc/slepcnep.pxi
@@ -6,6 +6,7 @@ cdef extern from * nogil:
     SlepcNEPType NEPNARNOLDI
     SlepcNEPType NEPCISS
     SlepcNEPType NEPINTERPOL
+    SlepcNEPType NEPNLEIGS
 
     ctypedef enum SlepcNEPWhich "NEPWhich":
         NEP_LARGEST_MAGNITUDE
@@ -17,20 +18,30 @@ cdef extern from * nogil:
         NEP_TARGET_MAGNITUDE
         NEP_TARGET_REAL
         NEP_TARGET_IMAGINARY
+        NEP_ALL
+        NEP_WHICH_USER
 
     ctypedef enum SlepcNEPErrorType "NEPErrorType":
         NEP_ERROR_ABSOLUTE
         NEP_ERROR_RELATIVE
+        NEP_ERROR_BACKWARD
+
+    ctypedef enum SlepcNEPRefine "NEPRefine":
+        NEP_REFINE_NONE
+        NEP_REFINE_SIMPLE
+        NEP_REFINE_MULTIPLE
+
+    ctypedef enum SlepcNEPRefineScheme "NEPRefineScheme":
+        NEP_REFINE_SCHEME_SCHUR
+        NEP_REFINE_SCHEME_MBE
+        NEP_REFINE_SCHEME_EXPLICIT
 
     ctypedef enum SlepcNEPConvergedReason "NEPConvergedReason":
-        NEP_CONVERGED_FNORM_ABS
-        NEP_CONVERGED_FNORM_RELATIVE
-        NEP_CONVERGED_SNORM_RELATIVE
-        NEP_DIVERGED_LINEAR_SOLVE
-        NEP_DIVERGED_FUNCTION_COUNT
-        NEP_DIVERGED_MAX_IT
+        NEP_CONVERGED_TOL
+        NEP_CONVERGED_USER
+        NEP_DIVERGED_ITS
         NEP_DIVERGED_BREAKDOWN
-        NEP_DIVERGED_FNORM_NAN
+        NEP_DIVERGED_LINEAR_SOLVE
         NEP_CONVERGED_ITERATING
 
     ctypedef int (*SlepcNEPFunction)(SlepcNEP,
@@ -70,22 +81,25 @@ cdef extern from * nogil:
 
     int NEPSetBV(SlepcNEP,SlepcBV)
     int NEPGetBV(SlepcNEP,SlepcBV*)
-    int NEPSetTolerances(SlepcNEP,PetscReal,PetscReal,PetscReal,PetscInt,PetscInt)
-    int NEPGetTolerances(SlepcNEP,PetscReal*,PetscReal*,PetscReal*,PetscInt*,PetscInt*)
+    int NEPSetRG(SlepcNEP,SlepcRG)
+    int NEPGetRG(SlepcNEP,SlepcRG*)
+    int NEPSetTolerances(SlepcNEP,PetscReal,PetscInt)
+    int NEPGetTolerances(SlepcNEP,PetscReal*,PetscInt*)
 
     int NEPSetTrackAll(SlepcNEP,PetscBool)
     int NEPGetTrackAll(SlepcNEP,PetscBool*)
 
     int NEPSetDimensions(SlepcNEP,PetscInt,PetscInt,PetscInt)
     int NEPGetDimensions(SlepcNEP,PetscInt*,PetscInt*,PetscInt*)
-    int NEPSetLagPreconditioner(SlepcNEP,PetscInt)
-    int NEPGetLagPreconditioner(SlepcNEP,PetscInt*)
-    int NEPSetConstCorrectionTol(SlepcNEP,PetscBool)
-    int NEPGetConstCorrectionTol(SlepcNEP,PetscBool*)
+    int NEPRIISetLagPreconditioner(SlepcNEP,PetscInt)
+    int NEPRIIGetLagPreconditioner(SlepcNEP,PetscInt*)
+    int NEPRIISetConstCorrectionTol(SlepcNEP,PetscBool)
+    int NEPRIIGetConstCorrectionTol(SlepcNEP,PetscBool*)
 
     int NEPGetConverged(SlepcNEP,PetscInt*)
     int NEPGetEigenpair(SlepcNEP,PetscInt,PetscScalar*,PetscScalar*,PetscVec,PetscVec)
     int NEPComputeError(SlepcNEP,PetscInt,SlepcNEPErrorType,PetscReal*)
+    int NEPErrorView(SlepcNEP,SlepcNEPErrorType,PetscViewer)
     int NEPGetErrorEstimate(SlepcNEP,PetscInt,PetscReal*)
 
     int NEPMonitorCancel(SlepcNEP)
@@ -99,13 +113,6 @@ cdef extern from * nogil:
 
 # -----------------------------------------------------------------------------
 
-cdef inline PetscMatStructure matstructure(object structure) \
-    except <PetscMatStructure>(-1):
-    if   structure is None:  return MAT_DIFFERENT_NONZERO_PATTERN
-    elif structure is False: return MAT_DIFFERENT_NONZERO_PATTERN
-    elif structure is True:  return MAT_SAME_NONZERO_PATTERN
-    else:                    return structure
-
 cdef inline Mat ref_Mat(PetscMat mat):
     cdef Mat ob = <Mat> Mat()
     ob.mat = mat
diff --git a/src/SLEPc/slepcpep.pxi b/src/SLEPc/slepcpep.pxi
index 6697027..cb8d44a 100644
--- a/src/SLEPc/slepcpep.pxi
+++ b/src/SLEPc/slepcpep.pxi
@@ -17,6 +17,17 @@ cdef extern from * nogil:
         PEP_REFINE_SIMPLE
         PEP_REFINE_MULTIPLE
 
+    ctypedef enum SlepcPEPExtract "PEPExtract":
+        PEP_EXTRACT_NONE
+        PEP_EXTRACT_NORM
+        PEP_EXTRACT_RESIDUAL
+        PEP_EXTRACT_STRUCTURED
+
+    ctypedef enum SlepcPEPRefineScheme "PEPRefineScheme":
+        PEP_REFINE_SCHEME_EXPLICIT
+        PEP_REFINE_SCHEME_MBE
+        PEP_REFINE_SCHEME_SCHUR
+
     ctypedef enum SlepcPEPErrorType "PEPErrorType":
         PEP_ERROR_ABSOLUTE
         PEP_ERROR_RELATIVE
@@ -32,6 +43,7 @@ cdef extern from * nogil:
         PEP_TARGET_MAGNITUDE
         PEP_TARGET_REAL
         PEP_TARGET_IMAGINARY
+        PEP_WHICH_USER
 
     ctypedef enum SlepcPEPBasis "PEPBasis":
         PEP_BASIS_MONOMIAL
@@ -49,14 +61,16 @@ cdef extern from * nogil:
 
     ctypedef enum SlepcPEPConv "PEPConv":
         PEP_CONV_ABS
-        PEP_CONV_EIG
+        PEP_CONV_REL
         PEP_CONV_NORM
         PEP_CONV_USER
 
     ctypedef enum SlepcPEPConvergedReason "PEPConvergedReason":
         PEP_CONVERGED_TOL
+        PEP_CONVERGED_USER
         PEP_DIVERGED_ITS
         PEP_DIVERGED_BREAKDOWN
+        PEP_DIVERGED_SYMMETRY_LOST
         PEP_CONVERGED_ITERATING
 
     int PEPCreate(MPI_Comm,SlepcPEP*)
@@ -86,6 +100,8 @@ cdef extern from * nogil:
     int PEPGetTolerances(SlepcPEP,PetscReal*,PetscInt*)
     int PEPSetST(SlepcPEP,SlepcST)
     int PEPGetST(SlepcPEP,SlepcST*)
+    int PEPSetRG(SlepcPEP,SlepcRG)
+    int PEPGetRG(SlepcPEP,SlepcRG*)
 
     int PEPSetTrackAll(SlepcPEP,PetscBool)
     int PEPGetTrackAll(SlepcPEP,PetscBool*)
@@ -98,12 +114,13 @@ cdef extern from * nogil:
     int PEPGetConverged(SlepcPEP,PetscInt*)
     int PEPGetEigenpair(SlepcPEP,PetscInt,PetscScalar*,PetscScalar*,PetscVec,PetscVec)
     int PEPComputeError(SlepcPEP,PetscInt,SlepcPEPErrorType,PetscReal*)
+    int PEPErrorView(SlepcPEP,SlepcPEPErrorType,PetscViewer)
     int PEPGetErrorEstimate(SlepcPEP,PetscInt,PetscReal*)
 
     int PEPSetConvergenceTest(SlepcPEP,SlepcPEPConv)
     int PEPGetConvergenceTest(SlepcPEP,SlepcPEPConv*)
-    int PEPSetRefine(SlepcPEP,SlepcPEPRefine,PetscInt,PetscReal,PetscInt,PetscBool)
-    int PEPGetRefine(SlepcPEP,SlepcPEPRefine*,PetscInt*,PetscReal*,PetscInt*,PetscBool*)
+    int PEPSetRefine(SlepcPEP,SlepcPEPRefine,PetscInt,PetscReal,PetscInt,SlepcPEPRefineScheme)
+    int PEPGetRefine(SlepcPEP,SlepcPEPRefine*,PetscInt*,PetscReal*,PetscInt*,SlepcPEPRefineScheme*)
 
     int PEPMonitorCancel(SlepcPEP)
     int PEPGetIterationNumber(SlepcPEP,PetscInt*)
diff --git a/src/SLEPc/slepcst.pxi b/src/SLEPc/slepcst.pxi
index b0646b6..9bc7120 100644
--- a/src/SLEPc/slepcst.pxi
+++ b/src/SLEPc/slepcst.pxi
@@ -12,12 +12,6 @@ cdef extern from * nogil:
         ST_MATMODE_INPLACE
         ST_MATMODE_SHELL
 
-    ctypedef enum  PetscMatStructure "MatStructure":
-        MAT_SAME_NONZERO_PATTERN      "SAME_NONZERO_PATTERN"
-        MAT_DIFFERENT_NONZERO_PATTERN "DIFFERENT_NONZERO_PATTERN"
-        MAT_SUBSET_NONZERO_PATTERN    "SUBSET_NONZERO_PATTERN"
-        MAT_SAME_PRECONDITIONER       "SAME_PRECONDITIONER"
-
     int STView(SlepcST,PetscViewer)
     int STDestroy(SlepcST*)
     int STReset(SlepcST)
diff --git a/src/SLEPc/slepcsvd.pxi b/src/SLEPc/slepcsvd.pxi
index 67f6ac0..268865b 100644
--- a/src/SLEPc/slepcsvd.pxi
+++ b/src/SLEPc/slepcsvd.pxi
@@ -16,10 +16,11 @@ cdef extern from * nogil:
         SVD_ERROR_RELATIVE
 
     ctypedef enum SlepcSVDConvergedReason "SVDConvergedReason":
-        SVD_CONVERGED_ITERATING
         SVD_CONVERGED_TOL
+        SVD_CONVERGED_USER
         SVD_DIVERGED_ITS
         SVD_DIVERGED_BREAKDOWN
+        SVD_CONVERGED_ITERATING
 
     int SVDCreate(MPI_Comm,SlepcSVD*)
     int SVDView(SlepcSVD,PetscViewer)
@@ -58,6 +59,7 @@ cdef extern from * nogil:
     int SVDGetConverged(SlepcSVD,PetscInt*)
     int SVDGetSingularTriplet(SlepcSVD,PetscInt,PetscReal*,PetscVec,PetscVec)
     int SVDComputeError(SlepcSVD,PetscInt,SlepcSVDErrorType,PetscReal*)
+    int SVDErrorView(SlepcSVD,SlepcSVDErrorType,PetscViewer)
 
     int SVDCrossSetEPS(SlepcSVD,SlepcEPS)
     int SVDCrossGetEPS(SlepcSVD,SlepcEPS*)
diff --git a/src/SLEPc/slepcsys.pxi b/src/SLEPc/slepcsys.pxi
index 0071e46..f3857bc 100644
--- a/src/SLEPc/slepcsys.pxi
+++ b/src/SLEPc/slepcsys.pxi
@@ -7,6 +7,19 @@ cdef extern from * :
         PETSC_TRUE,  PETSC_YES,
         PETSC_FALSE, PETSC_NO,
 
+    ctypedef enum  PetscNormType "NormType":
+        PETSC_NORM_1          "NORM_1"
+        PETSC_NORM_2          "NORM_2"
+        PETSC_NORM_1_AND_2    "NORM_1_AND_2"
+        PETSC_NORM_FROBENIUS  "NORM_FROBENIUS"
+        PETSC_NORM_INFINITY   "NORM_INFINITY"
+        PETSC_NORM_MAX        "NORM_MAX"
+
+    ctypedef enum  PetscMatStructure "MatStructure":
+        MAT_SAME_NONZERO_PATTERN      "SAME_NONZERO_PATTERN"
+        MAT_DIFFERENT_NONZERO_PATTERN "DIFFERENT_NONZERO_PATTERN"
+        MAT_SUBSET_NONZERO_PATTERN    "SUBSET_NONZERO_PATTERN"
+
 cdef extern from * nogil:
     int PetscMalloc(size_t,void*)
     int PetscFree(void*)
@@ -14,6 +27,16 @@ cdef extern from * nogil:
     int PetscMemzero(void*,size_t)
 
 cdef extern from * nogil:
+    MPI_Comm PetscObjectComm(PetscObject)
+    int PetscObjectReference(PetscObject)
+    int PetscObjectDestroy(PetscObject*)
+    int PetscObjectTypeCompare(PetscObject,char[],PetscBool*)
+
+cdef extern from * nogil:
+    int MatGetSize(PetscMat,PetscInt*,PetscInt*)
+    int MatGetLocalSize(PetscMat,PetscInt*,PetscInt*)
+
+cdef extern from * nogil:
     enum: SLEPC_VERSION_MAJOR
     enum: SLEPC_VERSION_MINOR
     enum: SLEPC_VERSION_SUBMINOR
@@ -25,9 +48,12 @@ cdef extern from * nogil:
     int SlepcFinalize()
     int SlepcInitializeCalled
 
-cdef extern from * nogil:
-    int PetscObjectReference(PetscObject)
-    int PetscObjectDestroy(PetscObject*)
+cdef inline PetscMatStructure matstructure(object structure) \
+    except <PetscMatStructure>(-1):
+    if   structure is None:  return MAT_DIFFERENT_NONZERO_PATTERN
+    elif structure is False: return MAT_DIFFERENT_NONZERO_PATTERN
+    elif structure is True:  return MAT_SAME_NONZERO_PATTERN
+    else:                    return structure
 
 cdef inline int PetscINCREF(PetscObject *obj):
     if obj    == NULL: return 0
diff --git a/src/__init__.py b/src/__init__.py
index 773ad84..6c9f295 100644
--- a/src/__init__.py
+++ b/src/__init__.py
@@ -21,7 +21,7 @@ a large, sparse, rectangular matrix.
 """
 
 __author__    = 'Lisandro Dalcin'
-__version__   = '3.6.0'
+__version__   = '3.7.0'
 __credits__   = 'SLEPc Team <slepc-maint at upv.es>'
 
 # -----------------------------------------------------------------------------
diff --git a/src/include/slepc4py/slepc4py.SLEPc.h b/src/include/slepc4py/slepc4py.SLEPc.h
index c59b3f2..798e594 100644
--- a/src/include/slepc4py/slepc4py.SLEPc.h
+++ b/src/include/slepc4py/slepc4py.SLEPc.h
@@ -1,3 +1,5 @@
+/* Generated by Cython 0.24 */
+
 #ifndef __PYX_HAVE__slepc4py__SLEPc
 #define __PYX_HAVE__slepc4py__SLEPc
 
diff --git a/src/include/slepc4py/slepc4py.SLEPc_api.h b/src/include/slepc4py/slepc4py.SLEPc_api.h
index 09542be..5d593b9 100644
--- a/src/include/slepc4py/slepc4py.SLEPc_api.h
+++ b/src/include/slepc4py/slepc4py.SLEPc_api.h
@@ -1,3 +1,5 @@
+/* Generated by Cython 0.24 */
+
 #ifndef __PYX_HAVE_API__slepc4py__SLEPc
 #define __PYX_HAVE_API__slepc4py__SLEPc
 #include "Python.h"
@@ -24,46 +26,46 @@ static PyTypeObject *__pyx_ptype_8slepc4py_5SLEPc_NEP = 0;
 static PyTypeObject *__pyx_ptype_8slepc4py_5SLEPc_MFN = 0;
 #define PySlepcMFN_Type (*__pyx_ptype_8slepc4py_5SLEPc_MFN)
 
-static PyObject *(*__pyx_f_8slepc4py_5SLEPc_PySlepcST_New)(ST) = 0;
-#define PySlepcST_New __pyx_f_8slepc4py_5SLEPc_PySlepcST_New
-static ST (*__pyx_f_8slepc4py_5SLEPc_PySlepcST_Get)(PyObject *) = 0;
-#define PySlepcST_Get __pyx_f_8slepc4py_5SLEPc_PySlepcST_Get
-static PyObject *(*__pyx_f_8slepc4py_5SLEPc_PySlepcBV_New)(BV) = 0;
-#define PySlepcBV_New __pyx_f_8slepc4py_5SLEPc_PySlepcBV_New
-static BV (*__pyx_f_8slepc4py_5SLEPc_PySlepcBV_Get)(PyObject *) = 0;
-#define PySlepcBV_Get __pyx_f_8slepc4py_5SLEPc_PySlepcBV_Get
-static PyObject *(*__pyx_f_8slepc4py_5SLEPc_PySlepcDS_New)(DS) = 0;
-#define PySlepcDS_New __pyx_f_8slepc4py_5SLEPc_PySlepcDS_New
-static DS (*__pyx_f_8slepc4py_5SLEPc_PySlepcDS_Get)(PyObject *) = 0;
-#define PySlepcDS_Get __pyx_f_8slepc4py_5SLEPc_PySlepcDS_Get
-static PyObject *(*__pyx_f_8slepc4py_5SLEPc_PySlepcFN_New)(FN) = 0;
-#define PySlepcFN_New __pyx_f_8slepc4py_5SLEPc_PySlepcFN_New
-static FN (*__pyx_f_8slepc4py_5SLEPc_PySlepcFN_Get)(PyObject *) = 0;
-#define PySlepcFN_Get __pyx_f_8slepc4py_5SLEPc_PySlepcFN_Get
-static PyObject *(*__pyx_f_8slepc4py_5SLEPc_PySlepcRG_New)(RG) = 0;
-#define PySlepcRG_New __pyx_f_8slepc4py_5SLEPc_PySlepcRG_New
-static RG (*__pyx_f_8slepc4py_5SLEPc_PySlepcRG_Get)(PyObject *) = 0;
-#define PySlepcRG_Get __pyx_f_8slepc4py_5SLEPc_PySlepcRG_Get
-static PyObject *(*__pyx_f_8slepc4py_5SLEPc_PySlepcEPS_New)(EPS) = 0;
-#define PySlepcEPS_New __pyx_f_8slepc4py_5SLEPc_PySlepcEPS_New
-static EPS (*__pyx_f_8slepc4py_5SLEPc_PySlepcEPS_Get)(PyObject *) = 0;
-#define PySlepcEPS_Get __pyx_f_8slepc4py_5SLEPc_PySlepcEPS_Get
-static PyObject *(*__pyx_f_8slepc4py_5SLEPc_PySlepcSVD_New)(SVD) = 0;
-#define PySlepcSVD_New __pyx_f_8slepc4py_5SLEPc_PySlepcSVD_New
-static SVD (*__pyx_f_8slepc4py_5SLEPc_PySlepcSVD_Get)(PyObject *) = 0;
-#define PySlepcSVD_Get __pyx_f_8slepc4py_5SLEPc_PySlepcSVD_Get
-static PyObject *(*__pyx_f_8slepc4py_5SLEPc_PySlepcPEP_New)(PEP) = 0;
-#define PySlepcPEP_New __pyx_f_8slepc4py_5SLEPc_PySlepcPEP_New
-static PEP (*__pyx_f_8slepc4py_5SLEPc_PySlepcPEP_Get)(PyObject *) = 0;
-#define PySlepcPEP_Get __pyx_f_8slepc4py_5SLEPc_PySlepcPEP_Get
-static PyObject *(*__pyx_f_8slepc4py_5SLEPc_PySlepcNEP_New)(NEP) = 0;
-#define PySlepcNEP_New __pyx_f_8slepc4py_5SLEPc_PySlepcNEP_New
-static NEP (*__pyx_f_8slepc4py_5SLEPc_PySlepcNEP_Get)(PyObject *) = 0;
-#define PySlepcNEP_Get __pyx_f_8slepc4py_5SLEPc_PySlepcNEP_Get
-static PyObject *(*__pyx_f_8slepc4py_5SLEPc_PySlepcMFN_New)(MFN) = 0;
-#define PySlepcMFN_New __pyx_f_8slepc4py_5SLEPc_PySlepcMFN_New
-static MFN (*__pyx_f_8slepc4py_5SLEPc_PySlepcMFN_Get)(PyObject *) = 0;
-#define PySlepcMFN_Get __pyx_f_8slepc4py_5SLEPc_PySlepcMFN_Get
+static PyObject *(*__pyx_api_f_8slepc4py_5SLEPc_PySlepcST_New)(ST) = 0;
+#define PySlepcST_New __pyx_api_f_8slepc4py_5SLEPc_PySlepcST_New
+static ST (*__pyx_api_f_8slepc4py_5SLEPc_PySlepcST_Get)(PyObject *) = 0;
+#define PySlepcST_Get __pyx_api_f_8slepc4py_5SLEPc_PySlepcST_Get
+static PyObject *(*__pyx_api_f_8slepc4py_5SLEPc_PySlepcBV_New)(BV) = 0;
+#define PySlepcBV_New __pyx_api_f_8slepc4py_5SLEPc_PySlepcBV_New
+static BV (*__pyx_api_f_8slepc4py_5SLEPc_PySlepcBV_Get)(PyObject *) = 0;
+#define PySlepcBV_Get __pyx_api_f_8slepc4py_5SLEPc_PySlepcBV_Get
+static PyObject *(*__pyx_api_f_8slepc4py_5SLEPc_PySlepcDS_New)(DS) = 0;
+#define PySlepcDS_New __pyx_api_f_8slepc4py_5SLEPc_PySlepcDS_New
+static DS (*__pyx_api_f_8slepc4py_5SLEPc_PySlepcDS_Get)(PyObject *) = 0;
+#define PySlepcDS_Get __pyx_api_f_8slepc4py_5SLEPc_PySlepcDS_Get
+static PyObject *(*__pyx_api_f_8slepc4py_5SLEPc_PySlepcFN_New)(FN) = 0;
+#define PySlepcFN_New __pyx_api_f_8slepc4py_5SLEPc_PySlepcFN_New
+static FN (*__pyx_api_f_8slepc4py_5SLEPc_PySlepcFN_Get)(PyObject *) = 0;
+#define PySlepcFN_Get __pyx_api_f_8slepc4py_5SLEPc_PySlepcFN_Get
+static PyObject *(*__pyx_api_f_8slepc4py_5SLEPc_PySlepcRG_New)(RG) = 0;
+#define PySlepcRG_New __pyx_api_f_8slepc4py_5SLEPc_PySlepcRG_New
+static RG (*__pyx_api_f_8slepc4py_5SLEPc_PySlepcRG_Get)(PyObject *) = 0;
+#define PySlepcRG_Get __pyx_api_f_8slepc4py_5SLEPc_PySlepcRG_Get
+static PyObject *(*__pyx_api_f_8slepc4py_5SLEPc_PySlepcEPS_New)(EPS) = 0;
+#define PySlepcEPS_New __pyx_api_f_8slepc4py_5SLEPc_PySlepcEPS_New
+static EPS (*__pyx_api_f_8slepc4py_5SLEPc_PySlepcEPS_Get)(PyObject *) = 0;
+#define PySlepcEPS_Get __pyx_api_f_8slepc4py_5SLEPc_PySlepcEPS_Get
+static PyObject *(*__pyx_api_f_8slepc4py_5SLEPc_PySlepcSVD_New)(SVD) = 0;
+#define PySlepcSVD_New __pyx_api_f_8slepc4py_5SLEPc_PySlepcSVD_New
+static SVD (*__pyx_api_f_8slepc4py_5SLEPc_PySlepcSVD_Get)(PyObject *) = 0;
+#define PySlepcSVD_Get __pyx_api_f_8slepc4py_5SLEPc_PySlepcSVD_Get
+static PyObject *(*__pyx_api_f_8slepc4py_5SLEPc_PySlepcPEP_New)(PEP) = 0;
+#define PySlepcPEP_New __pyx_api_f_8slepc4py_5SLEPc_PySlepcPEP_New
+static PEP (*__pyx_api_f_8slepc4py_5SLEPc_PySlepcPEP_Get)(PyObject *) = 0;
+#define PySlepcPEP_Get __pyx_api_f_8slepc4py_5SLEPc_PySlepcPEP_Get
+static PyObject *(*__pyx_api_f_8slepc4py_5SLEPc_PySlepcNEP_New)(NEP) = 0;
+#define PySlepcNEP_New __pyx_api_f_8slepc4py_5SLEPc_PySlepcNEP_New
+static NEP (*__pyx_api_f_8slepc4py_5SLEPc_PySlepcNEP_Get)(PyObject *) = 0;
+#define PySlepcNEP_Get __pyx_api_f_8slepc4py_5SLEPc_PySlepcNEP_Get
+static PyObject *(*__pyx_api_f_8slepc4py_5SLEPc_PySlepcMFN_New)(MFN) = 0;
+#define PySlepcMFN_New __pyx_api_f_8slepc4py_5SLEPc_PySlepcMFN_New
+static MFN (*__pyx_api_f_8slepc4py_5SLEPc_PySlepcMFN_Get)(PyObject *) = 0;
+#define PySlepcMFN_Get __pyx_api_f_8slepc4py_5SLEPc_PySlepcMFN_Get
 #if !defined(__Pyx_PyIdentifier_FromString)
 #if PY_MAJOR_VERSION < 3
   #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s)
@@ -188,14 +190,14 @@ static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class
 #endif
     if (!strict && (size_t)basicsize > size) {
         PyOS_snprintf(warning, sizeof(warning),
-            "%s.%s size changed, may indicate binary incompatibility",
-            module_name, class_name);
+            "%s.%s size changed, may indicate binary incompatibility. Expected %zd, got %zd",
+            module_name, class_name, basicsize, size);
         if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad;
     }
     else if ((size_t)basicsize != size) {
         PyErr_Format(PyExc_ValueError,
-            "%.200s.%.200s has the wrong size, try recompiling",
-            module_name, class_name);
+            "%.200s.%.200s has the wrong size, try recompiling. Expected %zd, got %zd",
+            module_name, class_name, basicsize, size);
         goto bad;
     }
     return (PyTypeObject *)result;
@@ -211,26 +213,26 @@ static int import_slepc4py__SLEPc(void) {
   PyObject *module = 0;
   module = __Pyx_ImportModule("slepc4py.SLEPc");
   if (!module) goto bad;
-  if (__Pyx_ImportFunction(module, "PySlepcST_New", (void (**)(void))&__pyx_f_8slepc4py_5SLEPc_PySlepcST_New, "PyObject *(ST)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PySlepcST_Get", (void (**)(void))&__pyx_f_8slepc4py_5SLEPc_PySlepcST_Get, "ST (PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PySlepcBV_New", (void (**)(void))&__pyx_f_8slepc4py_5SLEPc_PySlepcBV_New, "PyObject *(BV)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PySlepcBV_Get", (void (**)(void))&__pyx_f_8slepc4py_5SLEPc_PySlepcBV_Get, "BV (PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PySlepcDS_New", (void (**)(void))&__pyx_f_8slepc4py_5SLEPc_PySlepcDS_New, "PyObject *(DS)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PySlepcDS_Get", (void (**)(void))&__pyx_f_8slepc4py_5SLEPc_PySlepcDS_Get, "DS (PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PySlepcFN_New", (void (**)(void))&__pyx_f_8slepc4py_5SLEPc_PySlepcFN_New, "PyObject *(FN)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PySlepcFN_Get", (void (**)(void))&__pyx_f_8slepc4py_5SLEPc_PySlepcFN_Get, "FN (PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PySlepcRG_New", (void (**)(void))&__pyx_f_8slepc4py_5SLEPc_PySlepcRG_New, "PyObject *(RG)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PySlepcRG_Get", (void (**)(void))&__pyx_f_8slepc4py_5SLEPc_PySlepcRG_Get, "RG (PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PySlepcEPS_New", (void (**)(void))&__pyx_f_8slepc4py_5SLEPc_PySlepcEPS_New, "PyObject *(EPS)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PySlepcEPS_Get", (void (**)(void))&__pyx_f_8slepc4py_5SLEPc_PySlepcEPS_Get, "EPS (PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PySlepcSVD_New", (void (**)(void))&__pyx_f_8slepc4py_5SLEPc_PySlepcSVD_New, "PyObject *(SVD)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PySlepcSVD_Get", (void (**)(void))&__pyx_f_8slepc4py_5SLEPc_PySlepcSVD_Get, "SVD (PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PySlepcPEP_New", (void (**)(void))&__pyx_f_8slepc4py_5SLEPc_PySlepcPEP_New, "PyObject *(PEP)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PySlepcPEP_Get", (void (**)(void))&__pyx_f_8slepc4py_5SLEPc_PySlepcPEP_Get, "PEP (PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PySlepcNEP_New", (void (**)(void))&__pyx_f_8slepc4py_5SLEPc_PySlepcNEP_New, "PyObject *(NEP)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PySlepcNEP_Get", (void (**)(void))&__pyx_f_8slepc4py_5SLEPc_PySlepcNEP_Get, "NEP (PyObject *)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PySlepcMFN_New", (void (**)(void))&__pyx_f_8slepc4py_5SLEPc_PySlepcMFN_New, "PyObject *(MFN)") < 0) goto bad;
-  if (__Pyx_ImportFunction(module, "PySlepcMFN_Get", (void (**)(void))&__pyx_f_8slepc4py_5SLEPc_PySlepcMFN_Get, "MFN (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PySlepcST_New", (void (**)(void))&__pyx_api_f_8slepc4py_5SLEPc_PySlepcST_New, "PyObject *(ST)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PySlepcST_Get", (void (**)(void))&__pyx_api_f_8slepc4py_5SLEPc_PySlepcST_Get, "ST (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PySlepcBV_New", (void (**)(void))&__pyx_api_f_8slepc4py_5SLEPc_PySlepcBV_New, "PyObject *(BV)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PySlepcBV_Get", (void (**)(void))&__pyx_api_f_8slepc4py_5SLEPc_PySlepcBV_Get, "BV (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PySlepcDS_New", (void (**)(void))&__pyx_api_f_8slepc4py_5SLEPc_PySlepcDS_New, "PyObject *(DS)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PySlepcDS_Get", (void (**)(void))&__pyx_api_f_8slepc4py_5SLEPc_PySlepcDS_Get, "DS (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PySlepcFN_New", (void (**)(void))&__pyx_api_f_8slepc4py_5SLEPc_PySlepcFN_New, "PyObject *(FN)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PySlepcFN_Get", (void (**)(void))&__pyx_api_f_8slepc4py_5SLEPc_PySlepcFN_Get, "FN (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PySlepcRG_New", (void (**)(void))&__pyx_api_f_8slepc4py_5SLEPc_PySlepcRG_New, "PyObject *(RG)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PySlepcRG_Get", (void (**)(void))&__pyx_api_f_8slepc4py_5SLEPc_PySlepcRG_Get, "RG (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PySlepcEPS_New", (void (**)(void))&__pyx_api_f_8slepc4py_5SLEPc_PySlepcEPS_New, "PyObject *(EPS)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PySlepcEPS_Get", (void (**)(void))&__pyx_api_f_8slepc4py_5SLEPc_PySlepcEPS_Get, "EPS (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PySlepcSVD_New", (void (**)(void))&__pyx_api_f_8slepc4py_5SLEPc_PySlepcSVD_New, "PyObject *(SVD)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PySlepcSVD_Get", (void (**)(void))&__pyx_api_f_8slepc4py_5SLEPc_PySlepcSVD_Get, "SVD (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PySlepcPEP_New", (void (**)(void))&__pyx_api_f_8slepc4py_5SLEPc_PySlepcPEP_New, "PyObject *(PEP)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PySlepcPEP_Get", (void (**)(void))&__pyx_api_f_8slepc4py_5SLEPc_PySlepcPEP_Get, "PEP (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PySlepcNEP_New", (void (**)(void))&__pyx_api_f_8slepc4py_5SLEPc_PySlepcNEP_New, "PyObject *(NEP)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PySlepcNEP_Get", (void (**)(void))&__pyx_api_f_8slepc4py_5SLEPc_PySlepcNEP_Get, "NEP (PyObject *)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PySlepcMFN_New", (void (**)(void))&__pyx_api_f_8slepc4py_5SLEPc_PySlepcMFN_New, "PyObject *(MFN)") < 0) goto bad;
+  if (__Pyx_ImportFunction(module, "PySlepcMFN_Get", (void (**)(void))&__pyx_api_f_8slepc4py_5SLEPc_PySlepcMFN_Get, "MFN (PyObject *)") < 0) goto bad;
   Py_DECREF(module); module = 0;
   __pyx_ptype_8slepc4py_5SLEPc_ST = __Pyx_ImportType("slepc4py.SLEPc", "ST", sizeof(struct PySlepcSTObject), 1); if (!__pyx_ptype_8slepc4py_5SLEPc_ST) goto bad;
   __pyx_ptype_8slepc4py_5SLEPc_BV = __Pyx_ImportType("slepc4py.SLEPc", "BV", sizeof(struct PySlepcBVObject), 1); if (!__pyx_ptype_8slepc4py_5SLEPc_BV) goto bad;
diff --git a/src/slepc4py.SLEPc.c b/src/slepc4py.SLEPc.c
index a7f989b..ac87256 100644
--- a/src/slepc4py.SLEPc.c
+++ b/src/slepc4py.SLEPc.c
@@ -1,28 +1,16 @@
-/* Generated by Cython 0.22.1 */
+/* Generated by Cython 0.24 */
 
 #define PY_SSIZE_T_CLEAN
-#ifndef CYTHON_USE_PYLONG_INTERNALS
-#ifdef PYLONG_BITS_IN_DIGIT
-#define CYTHON_USE_PYLONG_INTERNALS 0
-#else
-#include "pyconfig.h"
-#ifdef PYLONG_BITS_IN_DIGIT
-#define CYTHON_USE_PYLONG_INTERNALS 1
-#else
-#define CYTHON_USE_PYLONG_INTERNALS 0
-#endif
-#endif
-#endif
 #include "Python.h"
 #ifndef Py_PYTHON_H
     #error Python headers needed to compile C extensions, please install development version of Python.
 #elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03020000)
     #error Cython requires Python 2.6+ or Python 3.2+.
 #else
-#define CYTHON_ABI "0_22_1"
+#define CYTHON_ABI "0_24"
 #include <stddef.h>
 #ifndef offsetof
-#define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
+  #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
 #endif
 #if !defined(WIN32) && !defined(MS_WINDOWS)
   #ifndef __stdcall
@@ -48,25 +36,34 @@
   #define Py_HUGE_VAL HUGE_VAL
 #endif
 #ifdef PYPY_VERSION
-#define CYTHON_COMPILING_IN_PYPY 1
-#define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_PYPY 1
+  #define CYTHON_COMPILING_IN_CPYTHON 0
 #else
-#define CYTHON_COMPILING_IN_PYPY 0
-#define CYTHON_COMPILING_IN_CPYTHON 1
+  #define CYTHON_COMPILING_IN_PYPY 0
+  #define CYTHON_COMPILING_IN_CPYTHON 1
+#endif
+#if !defined(CYTHON_USE_PYLONG_INTERNALS) && CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x02070000
+  #define CYTHON_USE_PYLONG_INTERNALS 1
+#endif
+#if CYTHON_USE_PYLONG_INTERNALS
+  #include "longintrepr.h"
+  #undef SHIFT
+  #undef BASE
+  #undef MASK
 #endif
 #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)
-#define Py_OptimizeFlag 0
+  #define Py_OptimizeFlag 0
 #endif
 #define __PYX_BUILD_PY_SSIZE_T "n"
 #define CYTHON_FORMAT_SSIZE_T "z"
 #if PY_MAJOR_VERSION < 3
   #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
-  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
+  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
           PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
   #define __Pyx_DefaultClassType PyClass_Type
 #else
   #define __Pyx_BUILTIN_MODULE_NAME "builtins"
-  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
+  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
           PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
   #define __Pyx_DefaultClassType PyType_Type
 #endif
@@ -84,13 +81,14 @@
 #endif
 #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
   #define CYTHON_PEP393_ENABLED 1
-  #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ? \
+  #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
                                               0 : _PyUnicode_Ready((PyObject *)(op)))
   #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
   #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
   #define __Pyx_PyUnicode_KIND(u)         PyUnicode_KIND(u)
   #define __Pyx_PyUnicode_DATA(u)         PyUnicode_DATA(u)
   #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
+  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
 #else
   #define CYTHON_PEP393_ENABLED 0
   #define __Pyx_PyUnicode_READY(op)       (0)
@@ -99,20 +97,27 @@
   #define __Pyx_PyUnicode_KIND(u)         (sizeof(Py_UNICODE))
   #define __Pyx_PyUnicode_DATA(u)         ((void*)PyUnicode_AS_UNICODE(u))
   #define __Pyx_PyUnicode_READ(k, d, i)   ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
+  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_SIZE(u))
 #endif
 #if CYTHON_COMPILING_IN_PYPY
   #define __Pyx_PyUnicode_Concat(a, b)      PyNumber_Add(a, b)
   #define __Pyx_PyUnicode_ConcatSafe(a, b)  PyNumber_Add(a, b)
-  #define __Pyx_PyFrozenSet_Size(s)         PyObject_Size(s)
 #else
   #define __Pyx_PyUnicode_Concat(a, b)      PyUnicode_Concat(a, b)
-  #define __Pyx_PyUnicode_ConcatSafe(a, b)  ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ? \
+  #define __Pyx_PyUnicode_ConcatSafe(a, b)  ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\
       PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b))
-  #define __Pyx_PyFrozenSet_Size(s)         PySet_Size(s)
 #endif
 #if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains)
   #define PyUnicode_Contains(u, s)  PySequence_Contains(u, s)
 #endif
+#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format)
+  #define PyObject_Format(obj, fmt)  PyObject_CallMethod(obj, "__format__", "O", fmt)
+#endif
+#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc)
+  #define PyObject_Malloc(s)   PyMem_Malloc(s)
+  #define PyObject_Free(p)     PyMem_Free(p)
+  #define PyObject_Realloc(p)  PyMem_Realloc(p)
+#endif
 #define __Pyx_PyString_FormatSafe(a, b)   ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
 #define __Pyx_PyUnicode_FormatSafe(a, b)  ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
 #if PY_MAJOR_VERSION >= 3
@@ -120,6 +125,9 @@
 #else
   #define __Pyx_PyString_Format(a, b)  PyString_Format(a, b)
 #endif
+#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII)
+  #define PyObject_ASCII(o)            PyObject_Repr(o)
+#endif
 #if PY_MAJOR_VERSION >= 3
   #define PyBaseString_Type            PyUnicode_Type
   #define PyStringObject               PyUnicodeObject
@@ -176,16 +184,18 @@
 #else
   #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass)
 #endif
-#ifndef CYTHON_INLINE
-  #if defined(__GNUC__)
-    #define CYTHON_INLINE __inline__
-  #elif defined(_MSC_VER)
-    #define CYTHON_INLINE __inline
-  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-    #define CYTHON_INLINE inline
-  #else
-    #define CYTHON_INLINE
-  #endif
+#if PY_VERSION_HEX >= 0x030500B1
+#define __Pyx_PyAsyncMethodsStruct PyAsyncMethods
+#define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async)
+#elif CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+typedef struct {
+    unaryfunc am_await;
+    unaryfunc am_aiter;
+    unaryfunc am_anext;
+} __Pyx_PyAsyncMethodsStruct;
+#define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved))
+#else
+#define __Pyx_PyType_AsAsync(obj) NULL
 #endif
 #ifndef CYTHON_RESTRICT
   #if defined(__GNUC__)
@@ -198,37 +208,40 @@
     #define CYTHON_RESTRICT
   #endif
 #endif
+#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None)
+
+#ifndef CYTHON_INLINE
+  #if defined(__GNUC__)
+    #define CYTHON_INLINE __inline__
+  #elif defined(_MSC_VER)
+    #define CYTHON_INLINE __inline
+  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+    #define CYTHON_INLINE inline
+  #else
+    #define CYTHON_INLINE
+  #endif
+#endif
+
+#if defined(WIN32) || defined(MS_WINDOWS)
+  #define _USE_MATH_DEFINES
+#endif
+#include <math.h>
 #ifdef NAN
 #define __PYX_NAN() ((float) NAN)
 #else
 static CYTHON_INLINE float __PYX_NAN() {
-  /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and
-   a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is
-   a quiet NaN. */
   float value;
   memset(&value, 0xFF, sizeof(value));
   return value;
 }
 #endif
-#define __Pyx_void_to_None(void_result) (void_result, Py_INCREF(Py_None), Py_None)
-#ifdef __cplusplus
-template<typename T>
-void __Pyx_call_destructor(T* x) {
-    x->~T();
-}
-template<typename T>
-class __Pyx_FakeReference {
-  public:
-    __Pyx_FakeReference() : ptr(NULL) { }
-    __Pyx_FakeReference(T& ref) : ptr(&ref) { }
-    T *operator->() { return ptr; }
-    operator T&() { return *ptr; }
-  private:
-    T *ptr;
-};
-#endif
 
 
+#define __PYX_ERR(f_index, lineno, Ln_error) \
+{ \
+  __pyx_filename = __pyx_f[f_index]; __pyx_lineno = lineno; __pyx_clineno = __LINE__; goto Ln_error; \
+}
+
 #if PY_MAJOR_VERSION >= 3
   #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
   #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
@@ -245,10 +258,6 @@ class __Pyx_FakeReference {
   #endif
 #endif
 
-#if defined(WIN32) || defined(MS_WINDOWS)
-#define _USE_MATH_DEFINES
-#endif
-#include <math.h>
 #define __PYX_HAVE__slepc4py__SLEPc
 #define __PYX_HAVE_API__slepc4py__SLEPc
 #include "slepc.h"
@@ -285,7 +294,7 @@ class __Pyx_FakeReference {
 #  define CYTHON_NCP_UNUSED CYTHON_UNUSED
 # endif
 #endif
-typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding;
+typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding;
                 const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry;
 
 #define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0
@@ -293,16 +302,34 @@ typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding;
 #define __PYX_DEFAULT_STRING_ENCODING ""
 #define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString
 #define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
-#define __Pyx_fits_Py_ssize_t(v, type, is_signed)  (    \
-    (sizeof(type) < sizeof(Py_ssize_t))  ||             \
-    (sizeof(type) > sizeof(Py_ssize_t) &&               \
-          likely(v < (type)PY_SSIZE_T_MAX ||            \
-                 v == (type)PY_SSIZE_T_MAX)  &&         \
-          (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||       \
-                                v == (type)PY_SSIZE_T_MIN)))  ||  \
-    (sizeof(type) == sizeof(Py_ssize_t) &&              \
-          (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||        \
+#define __Pyx_uchar_cast(c) ((unsigned char)c)
+#define __Pyx_long_cast(x) ((long)x)
+#define __Pyx_fits_Py_ssize_t(v, type, is_signed)  (\
+    (sizeof(type) < sizeof(Py_ssize_t))  ||\
+    (sizeof(type) > sizeof(Py_ssize_t) &&\
+          likely(v < (type)PY_SSIZE_T_MAX ||\
+                 v == (type)PY_SSIZE_T_MAX)  &&\
+          (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\
+                                v == (type)PY_SSIZE_T_MIN)))  ||\
+    (sizeof(type) == sizeof(Py_ssize_t) &&\
+          (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\
                                v == (type)PY_SSIZE_T_MAX)))  )
+#if defined (__cplusplus) && __cplusplus >= 201103L
+    #include <cstdlib>
+    #define __Pyx_sst_abs(value) std::abs(value)
+#elif SIZEOF_INT >= SIZEOF_SIZE_T
+    #define __Pyx_sst_abs(value) abs(value)
+#elif SIZEOF_LONG >= SIZEOF_SIZE_T
+    #define __Pyx_sst_abs(value) labs(value)
+#elif defined (_MSC_VER) && defined (_M_X64)
+    #define __Pyx_sst_abs(value) _abs64(value)
+#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+    #define __Pyx_sst_abs(value) llabs(value)
+#elif defined (__GNUC__)
+    #define __Pyx_sst_abs(value) __builtin_llabs(value)
+#else
+    #define __Pyx_sst_abs(value) ((value<0) ? -value : value)
+#endif
 static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*);
 static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length);
 #define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s))
@@ -337,10 +364,11 @@ static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u)
 #define __Pyx_PyUnicode_FromUnicode(u)       PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u))
 #define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode
 #define __Pyx_PyUnicode_AsUnicode            PyUnicode_AsUnicode
-#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None)
-#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False))
+#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj)
+#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None)
+#define __Pyx_PyBool_FromLong(b) ((b) ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False))
 static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
-static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x);
+static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x);
 static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
 static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
 #if CYTHON_COMPILING_IN_CPYTHON
@@ -349,6 +377,12 @@ static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
 #define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
 #endif
 #define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
+#if PY_MAJOR_VERSION >= 3
+#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x))
+#else
+#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x))
+#endif
+#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x))
 #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
 static int __Pyx_sys_getdefaultencoding_not_ascii;
 static int __Pyx_init_sys_getdefaultencoding_params(void) {
@@ -439,6 +473,7 @@ static PyObject *__pyx_d;
 static PyObject *__pyx_b;
 static PyObject *__pyx_empty_tuple;
 static PyObject *__pyx_empty_bytes;
+static PyObject *__pyx_empty_unicode;
 static int __pyx_lineno;
 static int __pyx_clineno = 0;
 static const char * __pyx_cfilenm= __FILE__;
@@ -448,16 +483,18 @@ static const char *__pyx_filename;
 static const char *__pyx_f[] = {
   "SLEPc/ST.pyx",
   "SLEPc/allocate.pxi",
-  "SLEPc/EPS.pyx",
+  "SLEPc/slepcbv.pxi",
+  "SLEPc/BV.pyx",
   "SLEPc/SLEPc.pyx",
   "SLEPc/slepcmpi.pxi",
+  "SLEPc/slepcsys.pxi",
   "SLEPc/slepcfn.pxi",
   "SLEPc/slepcnep.pxi",
   "SLEPc/Sys.pyx",
-  "SLEPc/BV.pyx",
   "SLEPc/DS.pyx",
   "SLEPc/FN.pyx",
   "SLEPc/RG.pyx",
+  "SLEPc/EPS.pyx",
   "SLEPc/SVD.pyx",
   "SLEPc/PEP.pyx",
   "SLEPc/NEP.pyx",
@@ -1271,7 +1308,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_Partitioner *__pyx_vtabptr_8pets
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PySlepcST_Type;
 
-/* "SLEPc/ST.pyx":49
+/* "SLEPc/ST.pyx":34
  * # -----------------------------------------------------------------------------
  * 
  * cdef class ST(Object):             # <<<<<<<<<<<<<<
@@ -1316,7 +1353,7 @@ static struct __pyx_vtabstruct_8slepc4py_5SLEPc_DS *__pyx_vtabptr_8slepc4py_5SLE
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PySlepcFN_Type;
 
-/* "SLEPc/FN.pyx":30
+/* "SLEPc/FN.pyx":31
  * # -----------------------------------------------------------------------------
  * 
  * cdef class FN(Object):             # <<<<<<<<<<<<<<
@@ -1346,7 +1383,7 @@ static struct __pyx_vtabstruct_8slepc4py_5SLEPc_RG *__pyx_vtabptr_8slepc4py_5SLE
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PySlepcEPS_Type;
 
-/* "SLEPc/EPS.pyx":205
+/* "SLEPc/EPS.pyx":209
  * # -----------------------------------------------------------------------------
  * 
  * cdef class EPS(Object):             # <<<<<<<<<<<<<<
@@ -1361,7 +1398,7 @@ static struct __pyx_vtabstruct_8slepc4py_5SLEPc_EPS *__pyx_vtabptr_8slepc4py_5SL
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PySlepcSVD_Type;
 
-/* "SLEPc/SVD.pyx":56
+/* "SLEPc/SVD.pyx":58
  * # -----------------------------------------------------------------------------
  * 
  * cdef class SVD(Object):             # <<<<<<<<<<<<<<
@@ -1376,7 +1413,7 @@ static struct __pyx_vtabstruct_8slepc4py_5SLEPc_SVD *__pyx_vtabptr_8slepc4py_5SL
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PySlepcPEP_Type;
 
-/* "SLEPc/PEP.pyx":126
+/* "SLEPc/PEP.pyx":167
  * # -----------------------------------------------------------------------------
  * 
  * cdef class PEP(Object):             # <<<<<<<<<<<<<<
@@ -1391,7 +1428,7 @@ static struct __pyx_vtabstruct_8slepc4py_5SLEPc_PEP *__pyx_vtabptr_8slepc4py_5SL
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PySlepcNEP_Type;
 
-/* "SLEPc/NEP.pyx":56
+/* "SLEPc/NEP.pyx":83
  * # -----------------------------------------------------------------------------
  * 
  * cdef class NEP(Object):             # <<<<<<<<<<<<<<
@@ -1406,7 +1443,7 @@ static struct __pyx_vtabstruct_8slepc4py_5SLEPc_NEP *__pyx_vtabptr_8slepc4py_5SL
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PySlepcMFN_Type;
 
-/* "SLEPc/MFN.pyx":14
+/* "SLEPc/MFN.pyx":25
  * # -----------------------------------------------------------------------------
  * 
  * cdef class MFN(Object):             # <<<<<<<<<<<<<<
@@ -1420,6 +1457,7 @@ struct __pyx_vtabstruct_8slepc4py_5SLEPc_MFN {
 static struct __pyx_vtabstruct_8slepc4py_5SLEPc_MFN *__pyx_vtabptr_8slepc4py_5SLEPc_MFN;
 
 /* --- Runtime support code (head) --- */
+/* Refnanny.proto */
 #ifndef CYTHON_REFNANNY
   #define CYTHON_REFNANNY 0
 #endif
@@ -1436,19 +1474,19 @@ static struct __pyx_vtabstruct_8slepc4py_5SLEPc_MFN *__pyx_vtabptr_8slepc4py_5SL
   static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname);
   #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
 #ifdef WITH_THREAD
-  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
-          if (acquire_gil) { \
-              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \
-              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
-              PyGILState_Release(__pyx_gilstate_save); \
-          } else { \
-              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
+  #define __Pyx_RefNannySetupContext(name, acquire_gil)\
+          if (acquire_gil) {\
+              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
+              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\
+              PyGILState_Release(__pyx_gilstate_save);\
+          } else {\
+              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\
           }
 #else
-  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
+  #define __Pyx_RefNannySetupContext(name, acquire_gil)\
           __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
 #endif
-  #define __Pyx_RefNannyFinishContext() \
+  #define __Pyx_RefNannyFinishContext()\
           __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
   #define __Pyx_INCREF(r)  __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
   #define __Pyx_DECREF(r)  __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
@@ -1471,17 +1509,18 @@ static struct __pyx_vtabstruct_8slepc4py_5SLEPc_MFN *__pyx_vtabptr_8slepc4py_5SL
   #define __Pyx_XGOTREF(r)
   #define __Pyx_XGIVEREF(r)
 #endif
-#define __Pyx_XDECREF_SET(r, v) do {                            \
-        PyObject *tmp = (PyObject *) r;                         \
-        r = v; __Pyx_XDECREF(tmp);                              \
+#define __Pyx_XDECREF_SET(r, v) do {\
+        PyObject *tmp = (PyObject *) r;\
+        r = v; __Pyx_XDECREF(tmp);\
     } while (0)
-#define __Pyx_DECREF_SET(r, v) do {                             \
-        PyObject *tmp = (PyObject *) r;                         \
-        r = v; __Pyx_DECREF(tmp);                               \
+#define __Pyx_DECREF_SET(r, v) do {\
+        PyObject *tmp = (PyObject *) r;\
+        r = v; __Pyx_DECREF(tmp);\
     } while (0)
 #define __Pyx_CLEAR(r)    do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
 #define __Pyx_XCLEAR(r)   do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
 
+/* PyObjectGetAttrStr.proto */
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) {
     PyTypeObject* tp = Py_TYPE(obj);
@@ -1497,13 +1536,16 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject
 #define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n)
 #endif
 
+/* GetBuiltinName.proto */
 static PyObject *__Pyx_GetBuiltinName(PyObject *name);
 
+/* decode_c_bytes.proto */
 static CYTHON_INLINE PyObject* __Pyx_decode_c_bytes(
          const char* cstring, Py_ssize_t length, Py_ssize_t start, Py_ssize_t stop,
          const char* encoding, const char* errors,
          PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors));
 
+/* decode_bytes.proto */
 static CYTHON_INLINE PyObject* __Pyx_decode_bytes(
          PyObject* string, Py_ssize_t start, Py_ssize_t stop,
          const char* encoding, const char* errors,
@@ -1513,54 +1555,126 @@ static CYTHON_INLINE PyObject* __Pyx_decode_bytes(
         start, stop, encoding, errors, decode_func);
 }
 
+/* PyObjectCall.proto */
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw);
 #else
 #define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)
 #endif
 
+/* PyObjectCallMethO.proto */
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg);
 #endif
 
+/* PyObjectCallOneArg.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg);
 
+/* PyObjectCallNoArg.proto */
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);
 #else
 #define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL)
 #endif
 
+/* RaiseArgTupleInvalid.proto */
 static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
     Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found);
 
+/* KeywordStringCheck.proto */
 static CYTHON_INLINE int __Pyx_CheckKeywordStrings(PyObject *kwdict, const char* function_name, int kw_allowed);
 
+/* ForceInitThreads.proto */
 #ifndef __PYX_FORCE_INIT_THREADS
   #define __PYX_FORCE_INIT_THREADS 0
 #endif
 
-static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb);
-static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb);
+/* PyThreadStateGet.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __Pyx_PyThreadState_declare  PyThreadState *__pyx_tstate;
+#define __Pyx_PyThreadState_assign  __pyx_tstate = PyThreadState_GET();
+#else
+#define __Pyx_PyThreadState_declare
+#define __Pyx_PyThreadState_assign
+#endif
 
+/* PyErrFetchRestore.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __Pyx_ErrRestoreWithState(type, value, tb)  __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb)
+#define __Pyx_ErrFetchWithState(type, value, tb)    __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb)
+#define __Pyx_ErrRestore(type, value, tb)  __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb)
+#define __Pyx_ErrFetch(type, value, tb)    __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
+static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#else
+#define __Pyx_ErrRestoreWithState(type, value, tb)  PyErr_Restore(type, value, tb)
+#define __Pyx_ErrFetchWithState(type, value, tb)  PyErr_Fetch(type, value, tb)
+#define __Pyx_ErrRestore(type, value, tb)  PyErr_Restore(type, value, tb)
+#define __Pyx_ErrFetch(type, value, tb)  PyErr_Fetch(type, value, tb)
+#endif
+
+/* WriteUnraisableException.proto */
 static void __Pyx_WriteUnraisable(const char *name, int clineno,
                                   int lineno, const char *filename,
                                   int full_traceback, int nogil);
 
-#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
-    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
-    __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) : \
-    (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) : \
+/* RaiseTooManyValuesToUnpack.proto */
+static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
+
+/* RaiseNeedMoreValuesToUnpack.proto */
+static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
+
+/* IterFinish.proto */
+static CYTHON_INLINE int __Pyx_IterFinish(void);
+
+/* UnpackItemEndCheck.proto */
+static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected);
+
+/* SaveResetException.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __Pyx_ExceptionSave(type, value, tb)  __Pyx__ExceptionSave(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#define __Pyx_ExceptionReset(type, value, tb)  __Pyx__ExceptionReset(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
+#else
+#define __Pyx_ExceptionSave(type, value, tb)   PyErr_GetExcInfo(type, value, tb)
+#define __Pyx_ExceptionReset(type, value, tb)  PyErr_SetExcInfo(type, value, tb)
+#endif
+
+/* PyErrExceptionMatches.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err)
+static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err);
+#else
+#define __Pyx_PyErr_ExceptionMatches(err)  PyErr_ExceptionMatches(err)
+#endif
+
+/* GetException.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __Pyx_GetException(type, value, tb)  __Pyx__GetException(__pyx_tstate, type, value, tb)
+static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#else
+static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb);
+#endif
+
+/* RaiseException.proto */
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause);
+
+/* GetItemInt.proto */
+#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
+    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
+    __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\
+    (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\
                __Pyx_GetItemInt_Generic(o, to_py_func(i))))
-#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
-    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
-    __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \
+#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
+    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
+    __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
     (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL))
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
                                                               int wraparound, int boundscheck);
-#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
-    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
-    __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \
+#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
+    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
+    __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
     (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL))
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
                                                               int wraparound, int boundscheck);
@@ -1568,20 +1682,15 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
                                                      int is_list, int wraparound, int boundscheck);
 
-static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
-
-static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
-
-static CYTHON_INLINE int __Pyx_IterFinish(void);
-
-static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected);
-
+/* RaiseDoubleKeywords.proto */
 static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name);
 
-static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \
-    PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \
+/* ParseKeywords.proto */
+static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\
+    PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\
     const char* function_name);
 
+/* ListAppend.proto */
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
     PyListObject* L = (PyListObject*) list;
@@ -1598,10 +1707,13 @@ static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
 #define __Pyx_PyList_Append(L,x) PyList_Append(L,x)
 #endif
 
+/* PyObjectCallMethod1.proto */
 static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg);
 
+/* append.proto */
 static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x);
 
+/* ListCompAppend.proto */
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) {
     PyListObject* L = (PyListObject*) list;
@@ -1618,34 +1730,50 @@ static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) {
 #define __Pyx_ListComp_Append(L,x) PyList_Append(L,x)
 #endif
 
+/* ArgTypeTest.proto */
 static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
     const char *name, int exact);
 
+/* ExtTypeTest.proto */
 static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type);
 
+/* GetModuleGlobalName.proto */
+static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name);
+
+/* CallNextTpDealloc.proto */
 static void __Pyx_call_next_tp_dealloc(PyObject* obj, destructor current_tp_dealloc);
 
+/* CallNextTpTraverse.proto */
 static int __Pyx_call_next_tp_traverse(PyObject* obj, visitproc v, void *a, traverseproc current_tp_traverse);
 
+/* CallNextTpClear.proto */
 static void __Pyx_call_next_tp_clear(PyObject* obj, inquiry current_tp_dealloc);
 
+/* GetVTable.proto */
 static void* __Pyx_GetVtable(PyObject *dict);
 
+/* SetVTable.proto */
 static int __Pyx_SetVtable(PyObject *dict, void *vtable);
 
-static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
+/* Import.proto */
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);
 
-static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name);
+/* ImportFrom.proto */
+static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
 
+/* GetNameInClass.proto */
 static PyObject *__Pyx_GetNameInClass(PyObject *nmspace, PyObject *name);
 
+/* CalculateMetaclass.proto */
 static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases);
 
+/* Py3ClassCreate.proto */
 static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname,
                                            PyObject *mkw, PyObject *modname, PyObject *doc);
 static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict,
                                       PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass);
 
+/* PyObjectSetAttrStr.proto */
 #if CYTHON_COMPILING_IN_CPYTHON
 #define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o,n,NULL)
 static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) {
@@ -1663,6 +1791,7 @@ static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr
 #define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v)
 #endif
 
+/* PyIdentifierFromString.proto */
 #if !defined(__Pyx_PyIdentifier_FromString)
 #if PY_MAJOR_VERSION < 3
   #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s)
@@ -1671,14 +1800,17 @@ static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr
 #endif
 #endif
 
+/* ModuleImport.proto */
 static PyObject *__Pyx_ImportModule(const char *name);
 
+/* RegisterModuleCleanup.proto */
 static void __pyx_module_cleanup(PyObject *self);
 static int __Pyx_RegisterCleanup(void);
 
+/* CodeObjectCache.proto */
 typedef struct {
-    int code_line;
     PyCodeObject* code_object;
+    int code_line;
 } __Pyx_CodeObjectCacheEntry;
 struct __Pyx_CodeObjectCache {
     int count;
@@ -1690,34 +1822,240 @@ static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int co
 static PyCodeObject *__pyx_find_code_object(int code_line);
 static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);
 
+/* AddTraceback.proto */
 static void __Pyx_AddTraceback(const char *funcname, int c_line,
                                int py_line, const char *filename);
 
-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);
-
+/* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
 
-static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_STMatMode(STMatMode value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_BVOrthogType(BVOrthogType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_BVOrthogRefineType(BVOrthogRefineType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_BVOrthogBlockType(BVOrthogBlockType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_DSStateType(DSStateType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_DSMatType(DSMatType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_FNCombineType(FNCombineType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_EPSProblemType(EPSProblemType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_EPSExtraction(EPSExtraction value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_EPSBalance(EPSBalance value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_EPSErrorType(EPSErrorType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_EPSWhich(EPSWhich value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_EPSConv(EPSConv value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_EPSConvergedReason(EPSConvergedReason value);
 
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_EPSPowerShiftType(EPSPowerShiftType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_EPSLanczosReorthogType(EPSLanczosReorthogType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_SVDErrorType(SVDErrorType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_SVDWhich(SVDWhich value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_SVDConvergedReason(SVDConvergedReason value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PEPProblemType(PEPProblemType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PEPWhich(PEPWhich value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PEPBasis(PEPBasis value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PEPScale(PEPScale value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PEPRefine(PEPRefine value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PEPRefineScheme(PEPRefineScheme value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PEPExtract(PEPExtract value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PEPErrorType(PEPErrorType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PEPConv(PEPConv value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PEPConvergedReason(PEPConvergedReason value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_NEPErrorType(NEPErrorType value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_NEPWhich(NEPWhich value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_NEPConvergedReason(NEPConvergedReason value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_NEPRefine(NEPRefine value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_NEPRefineScheme(NEPRefineScheme value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MFNConvergedReason(MFNConvergedReason value);
+
+/* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);
 
+/* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscInt(PetscInt value);
 
-static CYTHON_INLINE PetscInt __Pyx_PyInt_As_PetscInt(PyObject *);
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscBool(PetscBool value);
 
+/* ClassMethod.proto */
 #include "descrobject.h"
 static PyObject* __Pyx_Method_ClassMethod(PyObject *method);
 
+/* CIntFromPy.proto */
+static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE PetscInt __Pyx_PyInt_As_PetscInt(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE MatStructure __Pyx_PyInt_As_MatStructure(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE PetscBool __Pyx_PyInt_As_PetscBool(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE STMatMode __Pyx_PyInt_As_STMatMode(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE BVOrthogType __Pyx_PyInt_As_BVOrthogType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE BVOrthogRefineType __Pyx_PyInt_As_BVOrthogRefineType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE BVOrthogBlockType __Pyx_PyInt_As_BVOrthogBlockType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE NormType __Pyx_PyInt_As_NormType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE DSStateType __Pyx_PyInt_As_DSStateType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE EPSProblemType __Pyx_PyInt_As_EPSProblemType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE EPSBalance __Pyx_PyInt_As_EPSBalance(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE EPSExtraction __Pyx_PyInt_As_EPSExtraction(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE EPSWhich __Pyx_PyInt_As_EPSWhich(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE EPSConv __Pyx_PyInt_As_EPSConv(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE EPSErrorType __Pyx_PyInt_As_EPSErrorType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE EPSPowerShiftType __Pyx_PyInt_As_EPSPowerShiftType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE EPSLanczosReorthogType __Pyx_PyInt_As_EPSLanczosReorthogType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE SVDWhich __Pyx_PyInt_As_SVDWhich(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE SVDErrorType __Pyx_PyInt_As_SVDErrorType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE PEPBasis __Pyx_PyInt_As_PEPBasis(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE PEPProblemType __Pyx_PyInt_As_PEPProblemType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE PEPWhich __Pyx_PyInt_As_PEPWhich(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE PEPConv __Pyx_PyInt_As_PEPConv(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE PEPRefine __Pyx_PyInt_As_PEPRefine(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE PEPRefineScheme __Pyx_PyInt_As_PEPRefineScheme(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE PEPScale __Pyx_PyInt_As_PEPScale(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE PEPErrorType __Pyx_PyInt_As_PEPErrorType(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE NEPWhich __Pyx_PyInt_As_NEPWhich(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE NEPErrorType __Pyx_PyInt_As_NEPErrorType(PyObject *);
+
+/* CIntFromPy.proto */
 static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);
 
+/* CheckBinaryVersion.proto */
 static int __Pyx_check_binary_version(void);
 
+/* FunctionExport.proto */
 static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig);
 
+/* TypeImport.proto */
 static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict);
 
+/* FunctionImport.proto */
 static int __Pyx_ImportFunction(PyObject *module, const char *funcname, void (**f)(void), const char *sig);
 
+/* InitStrings.proto */
 static int __Pyx_InitStrings(__Pyx_StringTabEntry *t);
 
 
@@ -1744,7 +2082,7 @@ static PyTypeObject *__pyx_ptype_8petsc4py_5PETSc_DM = 0;
 static PyTypeObject *__pyx_ptype_8petsc4py_5PETSc_Partitioner = 0;
 static MPI_Comm (*__pyx_f_8petsc4py_5PETSc_GetComm)(PyObject *, MPI_Comm); /*proto*/
 static MPI_Comm (*__pyx_f_8petsc4py_5PETSc_GetCommDefault)(void); /*proto*/
-static int (*__pyx_f_8petsc4py_5PETSc_PyPetscType_Register)(int, PyObject *); /*proto*/
+static int (*__pyx_f_8petsc4py_5PETSc_PyPetscType_Register)(int, PyTypeObject *); /*proto*/
 
 /* Module declarations from 'slepc4py.SLEPc' */
 static PyTypeObject *__pyx_ptype_8slepc4py_5SLEPc_ST = 0;
@@ -1774,10 +2112,11 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_toScalar(PetscScalar); /
 static CYTHON_INLINE PetscScalar __pyx_f_8slepc4py_5SLEPc_asScalar(PyObject *); /*proto*/
 static CYTHON_INLINE MPI_Comm __pyx_f_8slepc4py_5SLEPc_def_Comm(PyObject *, MPI_Comm); /*proto*/
 static CYTHON_INLINE MPI_Comm __pyx_f_8slepc4py_5SLEPc_SLEPC_COMM_DEFAULT(void); /*proto*/
+static CYTHON_INLINE MatStructure __pyx_f_8slepc4py_5SLEPc_matstructure(PyObject *); /*proto*/
 static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_PetscINCREF(PetscObject *); /*proto*/
 static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_SlepcCLEAR(PetscObject *); /*proto*/
+static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_BV_Sizes(PyObject *, PetscInt *, PetscInt *); /*proto*/
 static PyObject *__pyx_f_8slepc4py_5SLEPc_iarray_s(PyObject *, PetscInt *, PetscScalar **); /*proto*/
-static CYTHON_INLINE MatStructure __pyx_f_8slepc4py_5SLEPc_matstructure(PyObject *); /*proto*/
 static CYTHON_INLINE struct PyPetscMatObject *__pyx_f_8slepc4py_5SLEPc_ref_Mat(Mat); /*proto*/
 static CYTHON_INLINE struct PySlepcNEPObject *__pyx_f_8slepc4py_5SLEPc_ref_NEP(NEP); /*proto*/
 static int __pyx_f_8slepc4py_5SLEPc_NEP_Function(NEP, PetscScalar, Mat, Mat, void *); /*proto*/
@@ -1812,823 +2151,469 @@ int __pyx_module_is_main_slepc4py__SLEPc = 0;
 /* Implementation of 'slepc4py.SLEPc' */
 static PyObject *__pyx_builtin_object;
 static PyObject *__pyx_builtin_MemoryError;
+static PyObject *__pyx_builtin_TypeError;
+static PyObject *__pyx_builtin_ValueError;
 static PyObject *__pyx_builtin_range;
-static int __pyx_pf_8slepc4py_5SLEPc_6_p_mem___cinit__(struct __pyx_obj_8slepc4py_5SLEPc__p_mem *__pyx_v_self); /* proto */
-static void __pyx_pf_8slepc4py_5SLEPc_6_p_mem_2__dealloc__(struct __pyx_obj_8slepc4py_5SLEPc__p_mem *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_getVersion(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_patch, PyObject *__pyx_v_devel, PyObject *__pyx_v_date, PyObject *__pyx_v_author); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_2getVersionInfo(CYTHON_UNUSED PyObject *__pyx_v_cls); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_2ST___cinit__(struct PySlepcSTObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_2view(struct PySlepcSTObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_4destroy(struct PySlepcSTObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_6reset(struct PySlepcSTObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_8create(struct PySlepcSTObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_10setType(struct PySlepcSTObject *__pyx_v_self, PyObject *__pyx_v_st_type); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_12getType(struct PySlepcSTObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_14setOptionsPrefix(struct PySlepcSTObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_16getOptionsPrefix(struct PySlepcSTObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_18setFromOptions(struct PySlepcSTObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_20setShift(struct PySlepcSTObject *__pyx_v_self, PyObject *__pyx_v_shift); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_22getShift(struct PySlepcSTObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_24setTransform(struct PySlepcSTObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_26getTransform(struct PySlepcSTObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_28setMatMode(struct PySlepcSTObject *__pyx_v_self, PyObject *__pyx_v_mode); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_30getMatMode(struct PySlepcSTObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_32setOperators(struct PySlepcSTObject *__pyx_v_self, PyObject *__pyx_v_operators); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_34getOperators(struct PySlepcSTObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_36setMatStructure(struct PySlepcSTObject *__pyx_v_self, PyObject *__pyx_v_structure); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_38setKSP(struct PySlepcSTObject *__pyx_v_self, struct PyPetscKSPObject *__pyx_v_ksp); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_40getKSP(struct PySlepcSTObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_42setUp(struct PySlepcSTObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_44apply(struct PySlepcSTObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_46applyTranspose(struct PySlepcSTObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_48setCayleyAntishift(struct PySlepcSTObject *__pyx_v_self, PyObject *__pyx_v_tau); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_5shift___get__(struct PySlepcSTObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_2ST_5shift_2__set__(struct PySlepcSTObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_8mat_mode___get__(struct PySlepcSTObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_2ST_8mat_mode_2__set__(struct PySlepcSTObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_3ksp___get__(struct PySlepcSTObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_2ST_3ksp_2__set__(struct PySlepcSTObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_2BV___cinit__(struct PySlepcBVObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_2view(struct PySlepcBVObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_4destroy(struct PySlepcBVObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_6create(struct PySlepcBVObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_8setType(struct PySlepcBVObject *__pyx_v_self, PyObject *__pyx_v_bv_type); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_10getType(struct PySlepcBVObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_12setOptionsPrefix(struct PySlepcBVObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_14getOptionsPrefix(struct PySlepcBVObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_16setFromOptions(struct PySlepcBVObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_18getOrthogonalization(struct PySlepcBVObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_20setOrthogonalization(struct PySlepcBVObject *__pyx_v_self, PyObject *__pyx_v_type, PyObject *__pyx_v_refine, PyObject *__pyx_v_eta, PyObject *__pyx_v_block); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_22getMatrix(struct PySlepcBVObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_24setMatrix(struct PySlepcBVObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, int __pyx_v_indef); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_26applyMatrix(struct PySlepcBVObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_28orthogonalizeVec(struct PySlepcBVObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_v); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_2DS___cinit__(struct PySlepcDSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_2view(struct PySlepcDSObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_4destroy(struct PySlepcDSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_6reset(struct PySlepcDSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_8create(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_10setType(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_ds_type); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_12getType(struct PySlepcDSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_14setOptionsPrefix(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_16getOptionsPrefix(struct PySlepcDSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_18setFromOptions(struct PySlepcDSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_20allocate(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_ld); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_22getLeadingDimension(struct PySlepcDSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_24setState(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_state); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_26getState(struct PySlepcDSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_28setDimensions(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_n, PyObject *__pyx_v_m, PyObject *__pyx_v_l, PyObject *__pyx_v_k); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_30getDimensions(struct PySlepcDSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_32setMethod(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_meth); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_34getMethod(struct PySlepcDSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_36setCompact(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_comp); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_38getCompact(struct PySlepcDSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_40setExtraRow(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_ext); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_42getExtraRow(struct PySlepcDSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_44setRefined(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_ref); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_46getRefined(struct PySlepcDSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_48truncate(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_n); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_50updateExtraRow(struct PySlepcDSObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_2FN___cinit__(struct PySlepcFNObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_2view(struct PySlepcFNObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_4destroy(struct PySlepcFNObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_6create(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_8setType(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_fn_type); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_10getType(struct PySlepcFNObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_12setOptionsPrefix(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_14getOptionsPrefix(struct PySlepcFNObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_16setFromOptions(struct PySlepcFNObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_18evaluateFunction(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_x); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_20evaluateDerivative(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_x); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_22setScale(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_alpha, PyObject *__pyx_v_beta); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_24getScale(struct PySlepcFNObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_26setRationalNumerator(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_alpha); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_28setRationalDenominator(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_alpha); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_2RG___cinit__(struct PySlepcRGObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_2view(struct PySlepcRGObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_4destroy(struct PySlepcRGObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_6create(struct PySlepcRGObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_8setType(struct PySlepcRGObject *__pyx_v_self, PyObject *__pyx_v_rg_type); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_10getType(struct PySlepcRGObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_12setOptionsPrefix(struct PySlepcRGObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_14getOptionsPrefix(struct PySlepcRGObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_16setFromOptions(struct PySlepcRGObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_18isTrivial(struct PySlepcRGObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_20getComplement(struct PySlepcRGObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_22setComplement(struct PySlepcRGObject *__pyx_v_self, PyObject *__pyx_v_comp); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_24setEllipseParameters(struct PySlepcRGObject *__pyx_v_self, PyObject *__pyx_v_center, PyObject *__pyx_v_radius, PyObject *__pyx_v_vscale); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_26getEllipseParameters(struct PySlepcRGObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_28setIntervalEndpoints(struct PySlepcRGObject *__pyx_v_self, PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_30getIntervalEndpoints(struct PySlepcRGObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_3EPS___cinit__(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_2view(struct PySlepcEPSObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_4destroy(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_6reset(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_8create(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_10setType(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_eps_type); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_12getType(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_14getOptionsPrefix(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_16setOptionsPrefix(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_18appendOptionsPrefix(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_20setFromOptions(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_22getProblemType(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_24setProblemType(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_problem_type); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_26isGeneralized(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_28isHermitian(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_30isPositive(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_32getBalance(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_34setBalance(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_balance, PyObject *__pyx_v_iterations, PyObject *__pyx_v_cutoff); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_36getExtraction(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_38setExtraction(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_extraction); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_40getWhichEigenpairs(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_42setWhichEigenpairs(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_which); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_44getTarget(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_46setTarget(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_target); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_48getInterval(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_50setInterval(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_inta, PyObject *__pyx_v_intb); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_52getTolerances(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_54setTolerances(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_tol, PyObject *__pyx_v_max_it); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_56getConvergenceTest(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_58setConvergenceTest(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_conv); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_60getTrueResidual(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_62setTrueResidual(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_trueres); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_64getTrackAll(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_66setTrackAll(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_trackall); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_68getDimensions(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_70setDimensions(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_nev, PyObject *__pyx_v_ncv, PyObject *__pyx_v_mpd); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_72getST(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_74setST(struct PySlepcEPSObject *__pyx_v_self, struct PySlepcSTObject *__pyx_v_st); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_76getBV(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_78setBV(struct PySlepcEPSObject *__pyx_v_self, struct PySlepcBVObject *__pyx_v_bv); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_80getDS(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_82setDS(struct PySlepcEPSObject *__pyx_v_self, struct PySlepcDSObject *__pyx_v_ds); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_84getOperators(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_86setOperators(struct PySlepcEPSObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A, struct PyPetscMatObject *__pyx_v_B); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_88setDeflationSpace(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_space); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_90setInitialSpace(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_space); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_92cancelMonitor(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_94setUp(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_96solve(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_98getIterationNumber(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_100getConvergedReason(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_102getConverged(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_104getEigenvalue(struct PySlepcEPSObject *__pyx_v_self, int __pyx_v_i); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_106getEigenvector(struct PySlepcEPSObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_Vr, struct PyPetscVecObject *__pyx_v_Vi); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_108getEigenpair(struct PySlepcEPSObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_Vr, struct PyPetscVecObject *__pyx_v_Vi); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_110getInvariantSubspace(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_112getErrorEstimate(struct PySlepcEPSObject *__pyx_v_self, int __pyx_v_i); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_114computeError(struct PySlepcEPSObject *__pyx_v_self, int __pyx_v_i, PyObject *__pyx_v_etype); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_116setPowerShiftType(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_shift); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_118getPowerShiftType(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_120setArnoldiDelayed(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_delayed); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_122getArnoldiDelayed(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_124setLanczosReorthogType(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_reorthog); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_126getLanczosReorthogType(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_128setKrylovSchurRestart(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_keep); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_130getKrylovSchurRestart(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_132setKrylovSchurLocking(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_lock); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_134getKrylovSchurLocking(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_136setKrylovSchurPartitions(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_npart); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_138getKrylovSchurPartitions(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_140setKrylovSchurDetectZeros(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_detect); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_142getKrylovSchurDetectZeros(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_144setKrylovSchurDimensions(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_nev, PyObject *__pyx_v_ncv, PyObject *__pyx_v_mpd); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_146getKrylovSchurDimensions(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_148getKrylovSchurSubcommInfo(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_150getKrylovSchurSubcommPairs(struct PySlepcEPSObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_V); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_152setRQCGReset(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_nrest); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_154getRQCGReset(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_12problem_type___get__(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_3EPS_12problem_type_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_10extraction___get__(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_3EPS_10extraction_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_5which___get__(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_3EPS_5which_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_6target___get__(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_3EPS_6target_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_3tol___get__(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_3EPS_3tol_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_6max_it___get__(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_3EPS_6max_it_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_2st___get__(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_3EPS_2st_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_2bv___get__(struct PySlepcEPSObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_3EPS_2bv_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_3SVD___cinit__(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_2view(struct PySlepcSVDObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_4destroy(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_6reset(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_8create(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_10setType(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_svd_type); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_12getType(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_14getOptionsPrefix(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_16setOptionsPrefix(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_18appendOptionsPrefix(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_20setFromOptions(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_22getImplicitTranspose(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_24setImplicitTranspose(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_mode); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_26getWhichSingularTriplets(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_28setWhichSingularTriplets(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_which); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_30getTolerances(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_32setTolerances(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_tol, PyObject *__pyx_v_max_it); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_34getDimensions(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_36setDimensions(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_nsv, PyObject *__pyx_v_ncv, PyObject *__pyx_v_mpd); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_38getBV(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_40setBV(struct PySlepcSVDObject *__pyx_v_self, struct PySlepcBVObject *__pyx_v_V, struct PySlepcBVObject *__pyx_v_U); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_42getOperator(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_44setOperator(struct PySlepcSVDObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_46setInitialSpace(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_space); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_48cancelMonitor(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_50setUp(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_52solve(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_54getIterationNumber(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_56getConvergedReason(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_58getConverged(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_60getValue(struct PySlepcSVDObject *__pyx_v_self, int __pyx_v_i); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_62getVectors(struct PySlepcSVDObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_U, struct PyPetscVecObject *__pyx_v_V); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_64getSingularTriplet(struct PySlepcSVDObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_U, struct PyPetscVecObject *__pyx_v_V); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_66computeError(struct PySlepcSVDObject *__pyx_v_self, int __pyx_v_i, PyObject *__pyx_v_etype); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_68setCrossEPS(struct PySlepcSVDObject *__pyx_v_self, struct PySlepcEPSObject *__pyx_v_eps); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_70getCrossEPS(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_72setCyclicEPS(struct PySlepcSVDObject *__pyx_v_self, struct PySlepcEPSObject *__pyx_v_eps); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_74getCyclicEPS(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_76setCyclicExplicitMatrix(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_78getCyclicExplicitMatrix(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_80setLanczosOneSide(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_82setTRLanczosOneSide(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_14transpose_mode___get__(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_3SVD_14transpose_mode_2__set__(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_5which___get__(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_3SVD_5which_2__set__(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_3tol___get__(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_3SVD_3tol_2__set__(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_6max_it___get__(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_3SVD_6max_it_2__set__(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_2bv___get__(struct PySlepcSVDObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_3SVD_2bv_2__set__(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_3PEP___cinit__(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_2view(struct PySlepcPEPObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_4destroy(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_6reset(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_8create(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_10setType(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_pep_type); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_12getType(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_14getOptionsPrefix(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_16setOptionsPrefix(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_18appendOptionsPrefix(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_20setFromOptions(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_22getBasis(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_24setBasis(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_basis); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_26getProblemType(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_28setProblemType(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_problem_type); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_30getWhichEigenpairs(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_32setWhichEigenpairs(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_which); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_34getTolerances(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_36setTolerances(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_tol, PyObject *__pyx_v_max_it); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_38getConvergenceTest(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_40setConvergenceTest(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_conv); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_42getRefine(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_44setRefine(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_ref, PyObject *__pyx_v_npart, PyObject *__pyx_v_tol, PyObject *__pyx_v_its, PyObject *__pyx_v_schur); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_46getTrackAll(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_48setTrackAll(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_trackall); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_50getDimensions(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_52setDimensions(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_nev, PyObject *__pyx_v_ncv, PyObject *__pyx_v_mpd); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_54getST(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_56setST(struct PySlepcPEPObject *__pyx_v_self, struct PySlepcSTObject *__pyx_v_st); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_58getScale(struct PySlepcPEPObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_Dl, struct PyPetscVecObject *__pyx_v_Dr); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_60setScale(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_scale, PyObject *__pyx_v_alpha, struct PyPetscVecObject *__pyx_v_Dl, struct PyPetscVecObject *__pyx_v_Dr, PyObject *__pyx_v_its, PyObject *__pyx_v_lbda); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_62getBV(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_64setBV(struct PySlepcPEPObject *__pyx_v_self, struct PySlepcBVObject *__pyx_v_bv); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_66getOperators(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_68setOperators(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_operators); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_70setInitialSpace(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_space); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_72cancelMonitor(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_74setUp(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_76solve(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_78getIterationNumber(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_80getConvergedReason(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_82getConverged(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_84getEigenpair(struct PySlepcPEPObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_Vr, struct PyPetscVecObject *__pyx_v_Vi); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_86getErrorEstimate(struct PySlepcPEPObject *__pyx_v_self, int __pyx_v_i); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_88computeError(struct PySlepcPEPObject *__pyx_v_self, int __pyx_v_i, PyObject *__pyx_v_etype); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_90setLinearEPS(struct PySlepcPEPObject *__pyx_v_self, struct PySlepcEPSObject *__pyx_v_eps); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_92getLinearEPS(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_94setLinearCompanionForm(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_cform); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_96getLinearCompanionForm(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_98setLinearExplicitMatrix(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_100getLinearExplicitMatrix(struct PySlepcPEPObject *__pyx_v_self); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_3NEP___cinit__(struct PySlepcNEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_2view(struct PySlepcNEPObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_4destroy(struct PySlepcNEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_6reset(struct PySlepcNEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_8create(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_10setType(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_nep_type); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_12getType(struct PySlepcNEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_14getOptionsPrefix(struct PySlepcNEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_16setOptionsPrefix(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_18appendOptionsPrefix(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_20setFromOptions(struct PySlepcNEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_22getWhichEigenpairs(struct PySlepcNEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_24setWhichEigenpairs(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_which); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_26getTolerances(struct PySlepcNEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_28setTolerances(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_abstol, PyObject *__pyx_v_rtol, PyObject *__pyx_v_stol, PyObject *__pyx_v_maxit, PyObject *__pyx_v_maxf); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_30getLagPreconditioner(struct PySlepcNEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_32setLagPreconditioner(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_lag); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_34getTrackAll(struct PySlepcNEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_36setTrackAll(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_trackall); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_38getDimensions(struct PySlepcNEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_40setDimensions(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_nev, PyObject *__pyx_v_ncv, PyObject *__pyx_v_mpd); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_42getBV(struct PySlepcNEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_44setBV(struct PySlepcNEPObject *__pyx_v_self, struct PySlepcBVObject *__pyx_v_bv); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_46setInitialSpace(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_space); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_48cancelMonitor(struct PySlepcNEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_50setUp(struct PySlepcNEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_52solve(struct PySlepcNEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_54getIterationNumber(struct PySlepcNEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_56getConvergedReason(struct PySlepcNEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_58getConverged(struct PySlepcNEPObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_60getEigenpair(struct PySlepcNEPObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_Vr, struct PyPetscVecObject *__pyx_v_Vi); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_62getErrorEstimate(struct PySlepcNEPObject *__pyx_v_self, int __pyx_v_i); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_64computeError(struct PySlepcNEPObject *__pyx_v_self, int __pyx_v_i, PyObject *__pyx_v_etype); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_66setFunction(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_function, struct PyPetscMatObject *__pyx_v_F, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_68setJacobian(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_jacobian, struct PyPetscMatObject *__pyx_v_J, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_70setSplitOperator(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_A, PyObject *__pyx_v_f, PyObject *__pyx_v_structure); /* proto */
-static int __pyx_pf_8slepc4py_5SLEPc_3MFN___cinit__(struct PySlepcMFNObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_2view(struct PySlepcMFNObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_4destroy(struct PySlepcMFNObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_6reset(struct PySlepcMFNObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_8create(struct PySlepcMFNObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_10setType(struct PySlepcMFNObject *__pyx_v_self, PyObject *__pyx_v_mfn_type); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_12getType(struct PySlepcMFNObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_14getOptionsPrefix(struct PySlepcMFNObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_16setOptionsPrefix(struct PySlepcMFNObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_18appendOptionsPrefix(struct PySlepcMFNObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_20setFromOptions(struct PySlepcMFNObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_22getTolerances(struct PySlepcMFNObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_24setTolerances(struct PySlepcMFNObject *__pyx_v_self, PyObject *__pyx_v_tol, PyObject *__pyx_v_max_it); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_26getDimensions(struct PySlepcMFNObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_28setDimensions(struct PySlepcMFNObject *__pyx_v_self, PyObject *__pyx_v_ncv); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_30getFN(struct PySlepcMFNObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_32setFN(struct PySlepcMFNObject *__pyx_v_self, struct PySlepcFNObject *__pyx_v_fn); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_34getBV(struct PySlepcMFNObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_36setBV(struct PySlepcMFNObject *__pyx_v_self, struct PySlepcBVObject *__pyx_v_bv); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_38getOperator(struct PySlepcMFNObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_40setOperator(struct PySlepcMFNObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_42cancelMonitor(struct PySlepcMFNObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_44setUp(struct PySlepcMFNObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_46solve(struct PySlepcMFNObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_48getIterationNumber(struct PySlepcMFNObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_50getConvergedReason(struct PySlepcMFNObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc__initialize(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_args); /* proto */
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2_finalize(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_ST(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_BV(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_DS(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_FN(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_RG(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_EPS(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_SVD(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_PEP(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_NEP(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_MFN(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8slepc4py_5SLEPc__p_mem(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_Sys(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static char __pyx_k_[] = "\n";
-static char __pyx_k_A[] = "A";
-static char __pyx_k_B[] = "B";
-static char __pyx_k_C[] = "C";
-static char __pyx_k_D[] = "D";
-static char __pyx_k_F[] = "F";
-static char __pyx_k_J[] = "J";
-static char __pyx_k_P[] = "P";
-static char __pyx_k_Q[] = "Q";
-static char __pyx_k_T[] = "T";
-static char __pyx_k_U[] = "U";
-static char __pyx_k_V[] = "V";
-static char __pyx_k_W[] = "W";
-static char __pyx_k_X[] = "X";
-static char __pyx_k_Y[] = "Y";
-static char __pyx_k_Z[] = "Z";
-static char __pyx_k_a[] = "a";
-static char __pyx_k_b[] = "b";
-static char __pyx_k_c[] = "c";
-static char __pyx_k_d[] = "d";
-static char __pyx_k_f[] = "f";
-static char __pyx_k_i[] = "i";
-static char __pyx_k_k[] = "k";
-static char __pyx_k_l[] = "l";
-static char __pyx_k_m[] = "m";
-static char __pyx_k_n[] = "n";
-static char __pyx_k_v[] = "v";
-static char __pyx_k_x[] = "x";
-static char __pyx_k_y[] = "y";
-static char __pyx_k_Dl[] = "Dl";
-static char __pyx_k_Dr[] = "Dr";
-static char __pyx_k_GD[] = "GD";
-static char __pyx_k_GS[] = "GS";
-static char __pyx_k_JD[] = "JD";
-static char __pyx_k_VT[] = "VT";
-static char __pyx_k_Vi[] = "Vi";
-static char __pyx_k_Vr[] = "Vr";
-static char __pyx_k_bv[] = "bv";
-static char __pyx_k_ds[] = "ds";
-static char __pyx_k_fn[] = "fn";
-static char __pyx_k_ld[] = "ld";
-static char __pyx_k_st[] = "st";
-static char __pyx_k_ABS[] = "ABS";
-static char __pyx_k_ADD[] = "ADD";
-static char __pyx_k_ALL[] = "ALL";
-static char __pyx_k_CGS[] = "CGS";
-static char __pyx_k_EIG[] = "EIG";
-static char __pyx_k_EXP[] = "EXP";
-static char __pyx_k_HEP[] = "HEP";
-static char __pyx_k_LOG[] = "LOG";
-static char __pyx_k_MAT[] = "MAT";
-static char __pyx_k_MGS[] = "MGS";
-static char __pyx_k_NEP[] = "NEP";
-static char __pyx_k_PEP[] = "PEP";
-static char __pyx_k_PHI[] = "PHI";
-static char __pyx_k_RAW[] = "RAW";
-static char __pyx_k_RII[] = "RII";
-static char __pyx_k_SLP[] = "SLP";
-static char __pyx_k_SVD[] = "SVD";
-static char __pyx_k_doc[] = "__doc__";
-static char __pyx_k_eps[] = "eps";
-static char __pyx_k_eta[] = "eta";
-static char __pyx_k_ext[] = "ext";
-static char __pyx_k_its[] = "its";
-static char __pyx_k_ksp[] = "ksp";
-static char __pyx_k_lag[] = "lag";
-static char __pyx_k_mat[] = "mat";
-static char __pyx_k_mpd[] = "mpd";
-static char __pyx_k_ncv[] = "ncv";
-static char __pyx_k_nev[] = "nev";
-static char __pyx_k_nsv[] = "nsv";
-static char __pyx_k_ref[] = "ref";
-static char __pyx_k_tau[] = "tau";
-static char __pyx_k_tol[] = "tol";
-static char __pyx_k_BOTH[] = "BOTH";
-static char __pyx_k_CHOL[] = "CHOL";
-static char __pyx_k_CISS[] = "CISS";
-static char __pyx_k_COPY[] = "COPY";
-static char __pyx_k_Conv[] = "Conv";
-static char __pyx_k_FULL[] = "FULL";
-static char __pyx_k_GHEP[] = "GHEP";
-static char __pyx_k_NHEP[] = "NHEP";
-static char __pyx_k_NONE[] = "NONE";
-static char __pyx_k_NORM[] = "NORM";
-static char __pyx_k_RING[] = "RING";
-static char __pyx_k_RITZ[] = "RITZ";
-static char __pyx_k_RQCG[] = "RQCG";
-static char __pyx_k_SAME[] = "SAME";
-static char __pyx_k_SQRT[] = "SQRT";
-static char __pyx_k_SVEC[] = "SVEC";
-static char __pyx_k_TOAR[] = "TOAR";
-static char __pyx_k_Type[] = "Type";
-static char __pyx_k_USER[] = "USER";
-static char __pyx_k_VECS[] = "VECS";
-static char __pyx_k_args[] = "args";
-static char __pyx_k_beta[] = "beta";
-static char __pyx_k_comm[] = "comm";
-static char __pyx_k_comp[] = "comp";
-static char __pyx_k_conv[] = "conv";
-static char __pyx_k_date[] = "date";
-static char __pyx_k_flag[] = "flag";
-static char __pyx_k_inta[] = "inta";
-static char __pyx_k_intb[] = "intb";
-static char __pyx_k_keep[] = "keep";
-static char __pyx_k_lbda[] = "lbda";
-static char __pyx_k_lock[] = "lock";
-static char __pyx_k_main[] = "__main__";
-static char __pyx_k_maxf[] = "maxf";
-static char __pyx_k_meth[] = "meth";
-static char __pyx_k_mode[] = "mode";
-static char __pyx_k_rtol[] = "rtol";
-static char __pyx_k_stol[] = "stol";
-static char __pyx_k_type[] = "type";
-static char __pyx_k_Basis[] = "Basis";
-static char __pyx_k_CROSS[] = "CROSS";
-static char __pyx_k_Error[] = "Error";
-static char __pyx_k_FEAST[] = "FEAST";
-static char __pyx_k_GHIEP[] = "GHIEP";
-static char __pyx_k_GNHEP[] = "GNHEP";
-static char __pyx_k_LOCAL[] = "LOCAL";
-static char __pyx_k_NEVER[] = "NEVER";
-static char __pyx_k_POWER[] = "POWER";
-static char __pyx_k_SHELL[] = "SHELL";
-static char __pyx_k_SHIFT[] = "SHIFT";
-static char __pyx_k_STOAR[] = "STOAR";
-static char __pyx_k_Scale[] = "Scale";
-static char __pyx_k_TRLAN[] = "TRLAN";
-static char __pyx_k_Which[] = "Which";
-static char __pyx_k_alpha[] = "alpha";
-static char __pyx_k_basis[] = "basis";
-static char __pyx_k_block[] = "block";
-static char __pyx_k_cform[] = "cform";
-static char __pyx_k_devel[] = "devel";
-static char __pyx_k_etype[] = "etype";
-static char __pyx_k_getBV[] = "getBV";
-static char __pyx_k_getST[] = "getST";
-static char __pyx_k_indef[] = "indef";
-static char __pyx_k_kargs[] = "kargs";
-static char __pyx_k_major[] = "major";
-static char __pyx_k_maxit[] = "maxit";
-static char __pyx_k_minor[] = "minor";
-static char __pyx_k_npart[] = "npart";
-static char __pyx_k_nrest[] = "nrest";
-static char __pyx_k_patch[] = "patch";
-static char __pyx_k_range[] = "range";
-static char __pyx_k_ready[] = "ready";
-static char __pyx_k_scale[] = "scale";
-static char __pyx_k_schur[] = "schur";
-static char __pyx_k_setBV[] = "setBV";
-static char __pyx_k_setST[] = "setST";
-static char __pyx_k_shift[] = "shift";
-static char __pyx_k_space[] = "space";
-static char __pyx_k_split[] = "split";
-static char __pyx_k_state[] = "state";
-static char __pyx_k_strip[] = "strip";
-static char __pyx_k_which[] = "which";
-static char __pyx_k_ALWAYS[] = "ALWAYS";
-static char __pyx_k_ARPACK[] = "ARPACK";
-static char __pyx_k_BLOPEX[] = "BLOPEX";
-static char __pyx_k_BVType[] = "BVType";
-static char __pyx_k_CAYLEY[] = "CAYLEY";
-static char __pyx_k_CYCLIC[] = "CYCLIC";
-static char __pyx_k_DECIDE[] = "DECIDE";
-static char __pyx_k_DIVIDE[] = "DIVIDE";
-static char __pyx_k_DSType[] = "DSType";
-static char __pyx_k_FNType[] = "FNType";
-static char __pyx_k_KRYLOV[] = "KRYLOV";
-static char __pyx_k_LAPACK[] = "LAPACK";
-static char __pyx_k_LINEAR[] = "LINEAR";
-static char __pyx_k_LOBPCG[] = "LOBPCG";
-static char __pyx_k_PGNHEP[] = "PGNHEP";
-static char __pyx_k_PRIMME[] = "PRIMME";
-static char __pyx_k_RGType[] = "RGType";
-static char __pyx_k_Refine[] = "Refine";
-static char __pyx_k_SCALAR[] = "SCALAR";
-static char __pyx_k_SIMPLE[] = "SIMPLE";
-static char __pyx_k_STType[] = "STType";
-static char __pyx_k_SUBSET[] = "SUBSET";
-static char __pyx_k_abstol[] = "abstol";
-static char __pyx_k_append[] = "append";
-static char __pyx_k_author[] = "author";
-static char __pyx_k_center[] = "center";
-static char __pyx_k_cutoff[] = "cutoff";
-static char __pyx_k_decode[] = "decode";
-static char __pyx_k_detect[] = "detect";
-static char __pyx_k_encode[] = "encode";
-static char __pyx_k_getKSP[] = "getKSP";
-static char __pyx_k_import[] = "__import__";
-static char __pyx_k_max_it[] = "max_it";
-static char __pyx_k_module[] = "__module__";
-static char __pyx_k_object[] = "object";
-static char __pyx_k_prefix[] = "prefix";
-static char __pyx_k_radius[] = "radius";
-static char __pyx_k_refine[] = "refine";
-static char __pyx_k_setKSP[] = "setKSP";
-static char __pyx_k_target[] = "target";
-static char __pyx_k_viewer[] = "viewer";
-static char __pyx_k_vscale[] = "vscale";
-static char __pyx_k_ARNOLDI[] = "ARNOLDI";
-static char __pyx_k_BLZPACK[] = "BLZPACK";
-static char __pyx_k_BV_type[] = "\n    BV type\n    ";
-static char __pyx_k_Balance[] = "Balance";
-static char __pyx_k_COMBINE[] = "COMBINE";
-static char __pyx_k_COMPOSE[] = "COMPOSE";
-static char __pyx_k_DEFAULT[] = "DEFAULT";
-static char __pyx_k_DELAYED[] = "DELAYED";
-static char __pyx_k_DS_type[] = "\n    DS type\n    ";
-static char __pyx_k_ELLIPSE[] = "ELLIPSE";
-static char __pyx_k_EPSConv[] = "EPSConv";
-static char __pyx_k_EPSType[] = "EPSType";
-static char __pyx_k_FN_type[] = "\n    FN type\n    ";
-static char __pyx_k_GENERAL[] = "GENERAL";
-static char __pyx_k_HERMITE[] = "HERMITE";
-static char __pyx_k_INPLACE[] = "INPLACE";
-static char __pyx_k_LANCZOS[] = "LANCZOS";
-static char __pyx_k_LARGEST[] = "LARGEST";
-static char __pyx_k_MFNType[] = "MFNType";
-static char __pyx_k_MatMode[] = "MatMode";
-static char __pyx_k_MatType[] = "MatType";
-static char __pyx_k_NEPType[] = "NEPType";
-static char __pyx_k_ONESIDE[] = "ONESIDE";
-static char __pyx_k_PARTIAL[] = "PARTIAL";
-static char __pyx_k_PEPConv[] = "PEPConv";
-static char __pyx_k_PEPType[] = "PEPType";
-static char __pyx_k_POLYGON[] = "POLYGON";
-static char __pyx_k_PRECOND[] = "PRECOND";
-static char __pyx_k_REFINED[] = "REFINED";
-static char __pyx_k_RG_type[] = "\n    RG type\n    ";
-static char __pyx_k_SAME_NZ[] = "SAME_NZ";
-static char __pyx_k_SINVERT[] = "SINVERT";
-static char __pyx_k_SVDType[] = "SVDType";
-static char __pyx_k_TWOSIDE[] = "TWOSIDE";
-static char __pyx_k_balance[] = "balance";
-static char __pyx_k_bv_type[] = "bv_type";
-static char __pyx_k_delayed[] = "delayed";
-static char __pyx_k_ds_type[] = "ds_type";
-static char __pyx_k_fn_type[] = "fn_type";
-static char __pyx_k_prepare[] = "__prepare__";
-static char __pyx_k_release[] = "release";
-static char __pyx_k_rg_type[] = "rg_type";
-static char __pyx_k_st_type[] = "st_type";
-static char __pyx_k_trueres[] = "trueres";
-static char __pyx_k_ABSOLUTE[] = "ABSOLUTE";
-static char __pyx_k_BACKWARD[] = "BACKWARD";
-static char __pyx_k_CONSTANT[] = "CONSTANT";
-static char __pyx_k_DIAGONAL[] = "DIAGONAL";
-static char __pyx_k_EPSWhich[] = "EPSWhich";
-static char __pyx_k_HARMONIC[] = "HARMONIC";
-static char __pyx_k_IFNEEDED[] = "IFNEEDED";
-static char __pyx_k_INTERPOL[] = "INTERPOL";
-static char __pyx_k_INTERVAL[] = "INTERVAL";
-static char __pyx_k_LAGUERRE[] = "LAGUERRE";
-static char __pyx_k_LEGENDRE[] = "LEGENDRE";
-static char __pyx_k_MONOMIAL[] = "MONOMIAL";
-static char __pyx_k_MULTIPLE[] = "MULTIPLE";
-static char __pyx_k_MULTIPLY[] = "MULTIPLY";
-static char __pyx_k_NARNOLDI[] = "NARNOLDI";
-static char __pyx_k_NEPWhich[] = "NEPWhich";
-static char __pyx_k_PEPBasis[] = "PEPBasis";
-static char __pyx_k_PEPScale[] = "PEPScale";
-static char __pyx_k_PEPWhich[] = "PEPWhich";
-static char __pyx_k_PERIODIC[] = "PERIODIC";
-static char __pyx_k_QARNOLDI[] = "QARNOLDI";
-static char __pyx_k_RATIONAL[] = "RATIONAL";
-static char __pyx_k_RAYLEIGH[] = "RAYLEIGH";
-static char __pyx_k_RELATIVE[] = "RELATIVE";
-static char __pyx_k_SMALLEST[] = "SMALLEST";
-static char __pyx_k_SUBSPACE[] = "SUBSPACE";
-static char __pyx_k_SVDWhich[] = "SVDWhich";
-static char __pyx_k_eps_type[] = "eps_type";
-static char __pyx_k_finalize[] = "_finalize";
-static char __pyx_k_function[] = "__function__";
-static char __pyx_k_getShift[] = "getShift";
-static char __pyx_k_jacobian[] = "__jacobian__";
-static char __pyx_k_mfn_type[] = "mfn_type";
-static char __pyx_k_nep_type[] = "nep_type";
-static char __pyx_k_pep_type[] = "pep_type";
-static char __pyx_k_qualname[] = "__qualname__";
-static char __pyx_k_reorthog[] = "reorthog";
-static char __pyx_k_setShift[] = "setShift";
-static char __pyx_k_subminor[] = "subminor";
-static char __pyx_k_svd_type[] = "svd_type";
-static char __pyx_k_trackall[] = "trackall";
-static char __pyx_k_BlockType[] = "BlockType";
-static char __pyx_k_COMM_NULL[] = "COMM_NULL";
-static char __pyx_k_COMM_SELF[] = "COMM_SELF";
-static char __pyx_k_CONDENSED[] = "CONDENSED";
-static char __pyx_k_DETERMINE[] = "DETERMINE";
-static char __pyx_k_DIFFERENT[] = "DIFFERENT";
-static char __pyx_k_DSMatType[] = "DSMatType";
-static char __pyx_k_ErrorType[] = "ErrorType";
-static char __pyx_k_HERMITIAN[] = "HERMITIAN";
-static char __pyx_k_ITERATING[] = "ITERATING";
-static char __pyx_k_PEPRefine[] = "PEPRefine";
-static char __pyx_k_SELECTIVE[] = "SELECTIVE";
-static char __pyx_k_STMatMode[] = "STMatMode";
-static char __pyx_k_SUBSET_NZ[] = "SUBSET_NZ";
-static char __pyx_k_StateType[] = "StateType";
-static char __pyx_k_TRLANCZOS[] = "TRLANCZOS";
-static char __pyx_k_TRUNCATED[] = "TRUNCATED";
-static char __pyx_k_WILKINSON[] = "WILKINSON";
-static char __pyx_k_getTarget[] = "getTarget";
-static char __pyx_k_metaclass[] = "__metaclass__";
-static char __pyx_k_operators[] = "operators";
-static char __pyx_k_setTarget[] = "setTarget";
-static char __pyx_k_structure[] = "structure";
-static char __pyx_k_CHEBYSHEV1[] = "CHEBYSHEV1";
-static char __pyx_k_CHEBYSHEV2[] = "CHEBYSHEV2";
-static char __pyx_k_COMM_WORLD[] = "COMM_WORLD";
-static char __pyx_k_CONTIGUOUS[] = "CONTIGUOUS";
-static char __pyx_k_EPSBalance[] = "EPSBalance";
-static char __pyx_k_Extraction[] = "Extraction";
-static char __pyx_k_GYROSCOPIC[] = "GYROSCOPIC";
-static char __pyx_k_OrthogType[] = "OrthogType";
-static char __pyx_k_RefineType[] = "RefineType";
-static char __pyx_k_authorinfo[] = "authorinfo";
-static char __pyx_k_extraction[] = "extraction";
-static char __pyx_k_function_2[] = "function";
-static char __pyx_k_getMatMode[] = "getMatMode";
-static char __pyx_k_getVersion[] = "getVersion";
-static char __pyx_k_initialize[] = "_initialize";
-static char __pyx_k_iterations[] = "iterations";
-static char __pyx_k_jacobian_2[] = "jacobian";
-static char __pyx_k_pyx_vtable[] = "__pyx_vtable__";
-static char __pyx_k_setMatMode[] = "setMatMode";
-static char __pyx_k_DSStateType[] = "DSStateType";
-static char __pyx_k_KRYLOVSCHUR[] = "KRYLOVSCHUR";
-static char __pyx_k_MemoryError[] = "MemoryError";
-static char __pyx_k_ProblemType[] = "ProblemType";
-static char __pyx_k_TARGET_REAL[] = "TARGET_REAL";
-static char __pyx_k_BVOrthogType[] = "BVOrthogType";
-static char __pyx_k_DIFFERENT_NZ[] = "DIFFERENT_NZ";
-static char __pyx_k_DIVERGED_ITS[] = "DIVERGED_ITS";
-static char __pyx_k_EPSErrorType[] = "EPSErrorType";
-static char __pyx_k_INTERMEDIATE[] = "INTERMEDIATE";
-static char __pyx_k_LARGEST_REAL[] = "LARGEST_REAL";
-static char __pyx_k_MatStructure[] = "MatStructure";
-static char __pyx_k_NEPErrorType[] = "NEPErrorType";
-static char __pyx_k_PEPErrorType[] = "PEPErrorType";
-static char __pyx_k_SVDErrorType[] = "SVDErrorType";
-static char __pyx_k_problem_type[] = "problem_type";
-static char __pyx_k_CONVERGED_TOL[] = "CONVERGED_TOL";
-static char __pyx_k_EPSExtraction[] = "EPSExtraction";
-static char __pyx_k_FNCombineType[] = "FNCombineType";
-static char __pyx_k_SMALLEST_REAL[] = "SMALLEST_REAL";
-static char __pyx_k_getExtraction[] = "getExtraction";
-static char __pyx_k_getTolerances[] = "getTolerances";
-static char __pyx_k_setExtraction[] = "setExtraction";
-static char __pyx_k_setTolerances[] = "setTolerances";
-static char __pyx_k_EPSProblemType[] = "EPSProblemType";
-static char __pyx_k_HARMONIC_RIGHT[] = "HARMONIC_RIGHT";
-static char __pyx_k_PEPProblemType[] = "PEPProblemType";
-static char __pyx_k_PowerShiftType[] = "PowerShiftType";
-static char __pyx_k_STMatStructure[] = "STMatStructure";
-static char __pyx_k_getProblemType[] = "getProblemType";
-static char __pyx_k_getVersionInfo[] = "getVersionInfo";
-static char __pyx_k_petsc4py_PETSc[] = "petsc4py.PETSc";
-static char __pyx_k_setProblemType[] = "setProblemType";
-static char __pyx_k_slepc4py_SLEPc[] = "slepc4py.SLEPc";
-static char __pyx_k_ConvergedReason[] = "ConvergedReason";
-static char __pyx_k_DIVERGED_MAX_IT[] = "DIVERGED_MAX_IT";
-static char __pyx_k_OrthogBlockType[] = "OrthogBlockType";
-static char __pyx_k_HARMONIC_LARGEST[] = "HARMONIC_LARGEST";
-static char __pyx_k_OrthogRefineType[] = "OrthogRefineType";
-static char __pyx_k_REFINED_HARMONIC[] = "REFINED_HARMONIC";
-static char __pyx_k_TARGET_IMAGINARY[] = "TARGET_IMAGINARY";
-static char __pyx_k_TARGET_MAGNITUDE[] = "TARGET_MAGNITUDE";
-static char __pyx_k_getTransposeMode[] = "getTransposeMode";
-static char __pyx_k_setTransposeMode[] = "setTransposeMode";
-static char __pyx_k_BVOrthogBlockType[] = "BVOrthogBlockType";
-static char __pyx_k_EPSPowerShiftType[] = "EPSPowerShiftType";
-static char __pyx_k_HARMONIC_RELATIVE[] = "HARMONIC_RELATIVE";
-static char __pyx_k_LARGEST_IMAGINARY[] = "LARGEST_IMAGINARY";
-static char __pyx_k_LARGEST_MAGNITUDE[] = "LARGEST_MAGNITUDE";
-static char __pyx_k_BVOrthogRefineType[] = "BVOrthogRefineType";
-static char __pyx_k_DIVERGED_BREAKDOWN[] = "DIVERGED_BREAKDOWN";
-static char __pyx_k_DIVERGED_FNORM_NAN[] = "DIVERGED_FNORM_NAN";
-static char __pyx_k_EPSConvergedReason[] = "EPSConvergedReason";
-static char __pyx_k_MFNConvergedReason[] = "MFNConvergedReason";
-static char __pyx_k_NEPConvergedReason[] = "NEPConvergedReason";
-static char __pyx_k_PEPConvergedReason[] = "PEPConvergedReason";
-static char __pyx_k_SMALLEST_IMAGINARY[] = "SMALLEST_IMAGINARY";
-static char __pyx_k_SMALLEST_MAGNITUDE[] = "SMALLEST_MAGNITUDE";
-static char __pyx_k_SVDConvergedReason[] = "SVDConvergedReason";
-static char __pyx_k_getWhichEigenpairs[] = "getWhichEigenpairs";
-static char __pyx_k_setWhichEigenpairs[] = "setWhichEigenpairs";
-static char __pyx_k_CONVERGED_FNORM_ABS[] = "CONVERGED_FNORM_ABS";
-static char __pyx_k_CONVERGED_ITERATING[] = "CONVERGED_ITERATING";
-static char __pyx_k_LanczosReorthogType[] = "LanczosReorthogType";
-static char __pyx_k_SAME_NONZERO_PATTERN[] = "SAME_NONZERO_PATTERN";
-static char __pyx_k_DIVERGED_LINEAR_SOLVE[] = "DIVERGED_LINEAR_SOLVE";
-static char __pyx_k_EPSLanczosReorthogType[] = "EPSLanczosReorthogType";
-static char __pyx_k_SUBSET_NONZERO_PATTERN[] = "SUBSET_NONZERO_PATTERN";
-static char __pyx_k_DIVERGED_FUNCTION_COUNT[] = "DIVERGED_FUNCTION_COUNT";
-static char __pyx_k_CONVERGED_FNORM_RELATIVE[] = "CONVERGED_FNORM_RELATIVE";
-static char __pyx_k_CONVERGED_SNORM_RELATIVE[] = "CONVERGED_SNORM_RELATIVE";
-static char __pyx_k_getWhichSingularTriplets[] = "getWhichSingularTriplets";
-static char __pyx_k_setWhichSingularTriplets[] = "setWhichSingularTriplets";
-static char __pyx_k_DIFFERENT_NONZERO_PATTERN[] = "DIFFERENT_NONZERO_PATTERN";
-static char __pyx_k_BV_orthogonalization_types_CGS[] = "\n    BV orthogonalization types\n\n    - `CGS`: Classical Gram-Schmidt.\n    - `MGS`: Modified Gram-Schmidt.\n    ";
-static char __pyx_k_EPS_problem_type_HEP_Hermitian[] = "\n    EPS problem type\n\n    - `HEP`:    Hermitian eigenproblem.\n    - `NHEP`:   Non-Hermitian eigenproblem.\n    - `GHEP`:   Generalized Hermitian eigenproblem.\n    - `GNHEP`:  Generalized Non-Hermitian eigenproblem.\n    - `PGNHEP`: Generalized Non-Hermitian eigenproblem\n                with positive definite ``B``.\n    - `GHIEP`:  Generalized Hermitian-indefinite eigenproblem.\n    ";
-static char __pyx_k_EPS_type_of_balancing_used_for[] = "\n    EPS type of balancing used for non-Hermitian problems\n\n    - `NONE`:     None.\n    - `ONESIDE`:  One-sided eigensolver, only right eigenvectors.\n    - `TWOSIDE`:  Two-sided eigensolver, right and left eigenvectors.\n    - `USER`:     User-defined.\n    ";
-static char __pyx_k_BV_block_orthogonalization_type[] = "\n    BV block-orthogonalization types\n\n    - `GS`:   Gram-Schmidt.\n    - `CHOL`: Cholesky.\n    ";
-static char __pyx_k_BV_orthogonalization_refinement[] = "\n    BV orthogonalization refinement types\n\n    - `IFNEEDED`: Reorthogonalize if a criterion is satisfied.\n    - `NEVER`:    Never reorthogonalize.\n    - `ALWAYS`:   Always reorthogonalize.\n    ";
-static char __pyx_k_DS_state_types_RAW_Not_processe[] = "\n    DS state types\n\n    - `RAW`: Not processed yet.\n    - `INTERMEDIATE`: Reduced to Hessenberg or tridiagonal form (or equivalent).\n    - `CONDENSED`: Reduced to Schur or diagonal form (or equivalent).\n    - `TRUNCATED`: Condensed form truncated to a smaller size.\n    ";
-static char __pyx_k_EPS_Lanczos_reorthogonalization[] = "\n    EPS Lanczos reorthogonalization type\n\n    - `LOCAL`:\n    - `FULL`:\n    - `SELECTIVE`:\n    - `PERIODIC`:\n    - `PARTIAL`:\n    - `DELAYED`:\n    ";
-static char __pyx_k_EPS_Power_shift_type_CONSTANT_R[] = "\n    EPS Power shift type.\n\n    - `CONSTANT`:\n    - `RAYLEIGH`:\n    - `WILKINSON`:\n    ";
-static char __pyx_k_EPS_convergence_reasons_CONVERG[] = "\n    EPS convergence reasons\n\n    - `CONVERGED_TOL`:\n    - `DIVERGED_ITS`:\n    - `DIVERGED_BREAKDOWN`:\n    - `CONVERGED_ITERATING`:\n    ";
-static char __pyx_k_EPS_convergence_test_ABS_EIG_NO[] = "\n    EPS convergence test\n\n    - `ABS`:\n    - `EIG`:\n    - `NORM`:\n    - `USER`:\n    ";
-static char __pyx_k_EPS_desired_piece_of_spectrum_L[] = "\n    EPS desired piece of spectrum\n\n    - `LARGEST_MAGNITUDE`:  Largest magnitude (default).\n    - `LARGEST_REAL`:       Largest real parts.\n    - `LARGEST_IMAGINARY`:  Largest imaginary parts in magnitude.\n    - `SMALLEST_MAGNITUDE`: Smallest magnitude.\n    - `SMALLEST_REAL`:      Smallest real parts.\n    - `SMALLEST_IMAGINARY`: Smallest imaginary parts in magnitude.\n    - `TARGET_MAGNITUDE`:   Closest to target (in magni [...]
-static char __pyx_k_EPS_error_type_to_assess_accura[] = "\n    EPS error type to assess accuracy of computed solutions\n\n    - `ABSOLUTE`:  Absolute error.\n    - `RELATIVE`:  Relative error.\n    - `BACKWARD`:  Backward error.\n    ";
-static char __pyx_k_EPS_extraction_technique_RITZ_S[] = "\n    EPS extraction technique\n\n    - `RITZ`:              Standard Rayleigh-Ritz extraction.\n    - `HARMONIC`:          Harmonic extraction.\n    - `HARMONIC_RELATIVE`: Harmonic extraction relative to the eigenvalue.\n    - `HARMONIC_RIGHT`:    Harmonic extraction for rightmost eigenvalues.\n    - `HARMONIC_LARGEST`:  Harmonic extraction for largest magnitude (without target).\n    - `REFINED`:           Refined extraction.\n   [...]
-static char __pyx_k_EPS_type_Native_sparse_eigensol[] = "\n    EPS type\n\n    Native sparse eigensolvers.\n\n    - `POWER`:        Power Iteration, Inverse Iteration, RQI.\n    - `SUBSPACE`:     Subspace Iteration.\n    - `ARNOLDI`:      Arnoldi.\n    - `LANCZOS`:      Lanczos.\n    - `KRYLOVSCHUR`:  Krylov-Schur (default).\n    - `GD`:           Generalized Davidson.\n    - `JD`:           Jacobi-Davidson.\n    - `RQCG`:         Rayleigh Quotient Conjugate Gradient.\n    - `LOBPCG`:    [...]
-static char __pyx_k_FN_type_of_combination_of_child[] = "\n    FN type of combination of child functions\n\n    - `ADD`:       Addition         f(x) = f1(x)+f2(x)\n    - `MULTIPLY`:  Multiplication   f(x) = f1(x)*f2(x)\n    - `DIVIDE`:    Division         f(x) = f1(x)/f2(x)\n    - `COMPOSE`:   Composition      f(x) = f2(f1(x))\n    ";
-static char __pyx_k_NEP_error_type_to_assess_accura[] = "\n    NEP error type to assess accuracy of computed solutions\n\n    - `ABSOLUTE`:  Absolute error.\n    - `RELATIVE`:  Relative error.\n    ";
-static char __pyx_k_NEP_type_Nonlinear_eigensolvers[] = "\n    NEP type\n\n    Nonlinear eigensolvers.\n\n    - `RII`:      Residual inverse iteration.\n    - `SLP`:      Successive linear problems.\n    - `NARNOLDI`: Nonlinear Arnoldi.\n    - `CISS`:     Contour integral spectrum slice.\n    - `INTERPOL`: Polynomial interpolation.\n    ";
-static char __pyx_k_PEP_convergence_reasons_CONVERG[] = "\n    PEP convergence reasons\n\n    - `CONVERGED_TOL`:\n    - `DIVERGED_ITS`:\n    - `DIVERGED_BREAKDOWN`:\n    - `CONVERGED_ITERATING`:\n    ";
-static char __pyx_k_PEP_convergence_test_ABS_EIG_NO[] = "\n    PEP convergence test\n\n    - `ABS`:\n    - `EIG`:\n    - `NORM`:\n    - `USER`:\n    ";
-static char __pyx_k_PEP_desired_part_of_spectrum_LA[] = "\n    PEP desired part of spectrum\n\n    - `LARGEST_MAGNITUDE`:  Largest magnitude (default).\n    - `LARGEST_REAL`:       Largest real parts.\n    - `LARGEST_IMAGINARY`:  Largest imaginary parts in magnitude.\n    - `SMALLEST_MAGNITUDE`: Smallest magnitude.\n    - `SMALLEST_REAL`:      Smallest real parts.\n    - `SMALLEST_IMAGINARY`: Smallest imaginary parts in magnitude.\n    - `TARGET_MAGNITUDE`:   Closest to target (in magnit [...]
-static char __pyx_k_PEP_error_type_to_assess_accura[] = "\n    PEP error type to assess accuracy of computed solutions\n\n    - `ABSOLUTE`:  Absolute error.\n    - `RELATIVE`:  Relative error.\n    - `BACKWARD`:  Backward error.\n    ";
-static char __pyx_k_PEP_problem_type_GENERAL_No_str[] = "\n    PEP problem type\n\n    - `GENERAL`:      No structure.\n    - `HERMITIAN`:    Hermitian structure.\n    - `GYROSCOPIC`:   Hamiltonian structure.\n    ";
-static char __pyx_k_PEP_refinement_strategy_NONE_SI[] = "\n    PEP refinement strategy\n\n    - `NONE`:\n    - `SIMPLE`:\n    - `MULTIPLE`:\n    ";
-static char __pyx_k_PEP_type_Polynomial_eigensolver[] = "\n    PEP type\n\n    Polynomial eigensolvers.\n\n    - `LINEAR`:       Linearization via EPS.\n    - `QARNOLDI`:     Q-Arnoldi for quadratic problems.\n    - `TOAR`:         Two-level orthogonal Arnoldi.\n    - `STOAR`:        Symmetric TOAR.\n    - `JD`:           Polynomial Jacobi-Davidson.\n    ";
-static char __pyx_k_SAME_Same_non_zero_pattern_SUBS[] = "\n    - `SAME`: Same non-zero pattern.\n    - `SUBSET`: Subset of non-zero pattern.\n    - `DIFFERENT`: Different non-zero pattern.\n    ";
-static char __pyx_k_ST_matrix_mode_COPY_A_working_c[] = "\n    ST matrix mode\n\n    - `COPY`:    A working copy of the matrix is created.\n    - `INPLACE`: The operation is computed in-place.\n    - `SHELL`:   The matrix ``A-sigma*B`` is handled as an\n      implicit matrix.\n    ";
-static char __pyx_k_ST_types_SHELL_User_defined_SHI[] = "\n    ST types\n\n    - `SHELL`:  User-defined.\n    - `SHIFT`:  Shift from origin.\n    - `SINVERT`: Shift-and-invert.\n    - `CAYLEY`: Cayley transform.\n    - `PRECOND`: Preconditioner.\n    ";
-static char __pyx_k_SVD_convergence_reasons_CONVERG[] = "\n    SVD convergence reasons\n\n    - `CONVERGED_TOL`:\n    - `DIVERGED_ITS`:\n    - `DIVERGED_BREAKDOWN`:\n    - `CONVERGED_ITERATING`:\n    ";
-static char __pyx_k_SVD_desired_piece_of_spectrum_L[] = "\n    SVD desired piece of spectrum\n\n    - `LARGEST`:  largest singular values.\n    - `SMALLEST`: smallest singular values.\n    ";
-static char __pyx_k_SVD_error_type_to_assess_accura[] = "\n    SVD error type to assess accuracy of computed solutions\n\n    - `ABSOLUTE`:  Absolute error.\n    - `RELATIVE`:  Relative error.\n    ";
-static char __pyx_k_SVD_types_CROSS_Eigenproblem_wi[] = "\n    SVD types\n\n    - `CROSS`:     Eigenproblem with the cross-product matrix.\n    - `CYCLIC`:    Eigenproblem with the cyclic matrix.\n    - `LAPACK`:    Wrappers to dense SVD solvers in Lapack.\n    - `LANCZOS`:   Lanczos.\n    - `TRLANCZOS`: Thick-restart Lanczos.\n    ";
-static char __pyx_k_Scalable_Library_for_Eigenvalue[] = "\nScalable Library for Eigenvalue Problem Computations.\n";
-static char __pyx_k_SlepcFinalize_failed_error_code[] = "SlepcFinalize() failed [error code: %d]\n";
-static char __pyx_k_To_refer_to_one_of_the_matrices[] = "\n    To refer to one of the matrices stored internally in DS\n\n    - `A`:  first matrix of eigenproblem/singular value problem.\n    - `B`:  second matrix of a generalized eigenproblem.\n    - `C`:  third matrix of a quadratic eigenproblem.\n    - `T`:  tridiagonal matrix.\n    - `D`:  diagonal matrix.\n    - `Q`:  orthogonal matrix of (right) Schur vectors.\n    - `Z`:  orthogonal matrix of left Schur vectors.\n    - `X`:  right [...]
-static char __pyx_k_home_devel_slepc4py_3_6_0_src_S[] = "/home/devel/slepc4py-3.6.0/src/SLEPc/SLEPc.pyx";
-static char __pyx_k_warning_could_not_registerSlepcF[] = "warning: could not registerSlepcFinalize() with Py_AtExit()";
-static PyObject *__pyx_kp_s_;
+static const char __pyx_k_A[] = "A";
+static const char __pyx_k_B[] = "B";
+static const char __pyx_k_C[] = "C";
+static const char __pyx_k_D[] = "D";
+static const char __pyx_k_F[] = "F";
+static const char __pyx_k_J[] = "J";
+static const char __pyx_k_P[] = "P";
+static const char __pyx_k_Q[] = "Q";
+static const char __pyx_k_R[] = "R";
+static const char __pyx_k_T[] = "T";
+static const char __pyx_k_U[] = "U";
+static const char __pyx_k_V[] = "V";
+static const char __pyx_k_W[] = "W";
+static const char __pyx_k_X[] = "X";
+static const char __pyx_k_Y[] = "Y";
+static const char __pyx_k_Z[] = "Z";
+static const char __pyx_k_a[] = "a";
+static const char __pyx_k_b[] = "b";
+static const char __pyx_k_c[] = "c";
+static const char __pyx_k_d[] = "d";
+static const char __pyx_k_f[] = "f";
+static const char __pyx_k_i[] = "i";
+static const char __pyx_k_j[] = "j";
+static const char __pyx_k_k[] = "k";
+static const char __pyx_k_l[] = "l";
+static const char __pyx_k_m[] = "m";
+static const char __pyx_k_n[] = "n";
+static const char __pyx_k_q[] = "q";
+static const char __pyx_k_s[] = "s";
+static const char __pyx_k_t[] = "t";
+static const char __pyx_k_v[] = "v";
+static const char __pyx_k_w[] = "w";
+static const char __pyx_k_x[] = "x";
+static const char __pyx_k_y[] = "y";
+static const char __pyx_k_Au[] = "Au";
+static const char __pyx_k_Bu[] = "Bu";
+static const char __pyx_k_Dl[] = "Dl";
+static const char __pyx_k_Dr[] = "Dr";
+static const char __pyx_k_GD[] = "GD";
+static const char __pyx_k_GS[] = "GS";
+static const char __pyx_k_JD[] = "JD";
+static const char __pyx_k_VT[] = "VT";
+static const char __pyx_k_Vi[] = "Vi";
+static const char __pyx_k_Vr[] = "Vr";
+static const char __pyx_k__2[] = "\n";
+static const char __pyx_k_bv[] = "bv";
+static const char __pyx_k_ds[] = "ds";
+static const char __pyx_k_fn[] = "fn";
+static const char __pyx_k_ld[] = "ld";
+static const char __pyx_k_rg[] = "rg";
+static const char __pyx_k_st[] = "st";
+static const char __pyx_k_ABS[] = "ABS";
+static const char __pyx_k_ADD[] = "ADD";
+static const char __pyx_k_ALL[] = "ALL";
+static const char __pyx_k_CGS[] = "CGS";
+static const char __pyx_k_EXP[] = "EXP";
+static const char __pyx_k_HEP[] = "HEP";
+static const char __pyx_k_LOG[] = "LOG";
+static const char __pyx_k_MAT[] = "MAT";
+static const char __pyx_k_MBE[] = "MBE";
+static const char __pyx_k_MGS[] = "MGS";
+static const char __pyx_k_NEP[] = "NEP";
+static const char __pyx_k_PEP[] = "PEP";
+static const char __pyx_k_PHI[] = "PHI";
+static const char __pyx_k_RAW[] = "RAW";
+static const char __pyx_k_REL[] = "REL";
+static const char __pyx_k_RII[] = "RII";
+static const char __pyx_k_SLP[] = "SLP";
+static const char __pyx_k_SVD[] = "SVD";
+static const char __pyx_k_doc[] = "__doc__";
+static const char __pyx_k_eps[] = "eps";
+static const char __pyx_k_eta[] = "eta";
+static const char __pyx_k_ext[] = "ext";
+static const char __pyx_k_its[] = "its";
+static const char __pyx_k_ksp[] = "ksp";
+static const char __pyx_k_lag[] = "lag";
+static const char __pyx_k_mat[] = "mat";
+static const char __pyx_k_mpd[] = "mpd";
+static const char __pyx_k_ncv[] = "ncv";
+static const char __pyx_k_nev[] = "nev";
+static const char __pyx_k_nsv[] = "nsv";
+static const char __pyx_k_ref[] = "ref";
+static const char __pyx_k_seq[] = "seq";
+static const char __pyx_k_tau[] = "tau";
+static const char __pyx_k_tol[] = "tol";
+static const char __pyx_k_BOTH[] = "BOTH";
+static const char __pyx_k_CHOL[] = "CHOL";
+static const char __pyx_k_CISS[] = "CISS";
+static const char __pyx_k_COPY[] = "COPY";
+static const char __pyx_k_Conv[] = "Conv";
+static const char __pyx_k_FULL[] = "FULL";
+static const char __pyx_k_GHEP[] = "GHEP";
+static const char __pyx_k_NHEP[] = "NHEP";
+static const char __pyx_k_NONE[] = "NONE";
+static const char __pyx_k_NORM[] = "NORM";
+static const char __pyx_k_RING[] = "RING";
+static const char __pyx_k_RITZ[] = "RITZ";
+static const char __pyx_k_RQCG[] = "RQCG";
+static const char __pyx_k_SQRT[] = "SQRT";
+static const char __pyx_k_SVEC[] = "SVEC";
+static const char __pyx_k_TOAR[] = "TOAR";
+static const char __pyx_k_Type[] = "Type";
+static const char __pyx_k_USER[] = "USER";
+static const char __pyx_k_VECS[] = "VECS";
+static const char __pyx_k_args[] = "args";
+static const char __pyx_k_beta[] = "beta";
+static const char __pyx_k_comm[] = "comm";
+static const char __pyx_k_comp[] = "comp";
+static const char __pyx_k_conv[] = "conv";
+static const char __pyx_k_date[] = "date";
+static const char __pyx_k_flag[] = "flag";
+static const char __pyx_k_inta[] = "inta";
+static const char __pyx_k_intb[] = "intb";
+static const char __pyx_k_keep[] = "keep";
+static const char __pyx_k_lbda[] = "lbda";
+static const char __pyx_k_lock[] = "lock";
+static const char __pyx_k_main[] = "__main__";
+static const char __pyx_k_meth[] = "meth";
+static const char __pyx_k_mode[] = "mode";
+static const char __pyx_k_orth[] = "orth";
+static const char __pyx_k_type[] = "type";
+static const char __pyx_k_Basis[] = "Basis";
+static const char __pyx_k_CROSS[] = "CROSS";
+static const char __pyx_k_Error[] = "Error";
+static const char __pyx_k_FEAST[] = "FEAST";
+static const char __pyx_k_GHIEP[] = "GHIEP";
+static const char __pyx_k_GNHEP[] = "GNHEP";
+static const char __pyx_k_LOCAL[] = "LOCAL";
+static const char __pyx_k_NEVER[] = "NEVER";
+static const char __pyx_k_POWER[] = "POWER";
+static const char __pyx_k_SCHUR[] = "SCHUR";
+static const char __pyx_k_SHELL[] = "SHELL";
+static const char __pyx_k_SHIFT[] = "SHIFT";
+static const char __pyx_k_STOAR[] = "STOAR";
+static const char __pyx_k_Scale[] = "Scale";
+static const char __pyx_k_TRLAN[] = "TRLAN";
+static const char __pyx_k_Which[] = "Which";
+static const char __pyx_k_alpha[] = "alpha";
+static const char __pyx_k_basis[] = "basis";
+static const char __pyx_k_block[] = "block";
+static const char __pyx_k_cform[] = "cform";
+static const char __pyx_k_devel[] = "devel";
+static const char __pyx_k_etype[] = "etype";
+static const char __pyx_k_getBV[] = "getBV";
+static const char __pyx_k_getST[] = "getST";
+static const char __pyx_k_indef[] = "indef";
+static const char __pyx_k_kargs[] = "kargs";
+static const char __pyx_k_major[] = "major";
+static const char __pyx_k_maxit[] = "maxit";
+static const char __pyx_k_minor[] = "minor";
+static const char __pyx_k_npart[] = "npart";
+static const char __pyx_k_nrest[] = "nrest";
+static const char __pyx_k_patch[] = "patch";
+static const char __pyx_k_range[] = "range";
+static const char __pyx_k_ready[] = "ready";
+static const char __pyx_k_scale[] = "scale";
+static const char __pyx_k_setBV[] = "setBV";
+static const char __pyx_k_setST[] = "setST";
+static const char __pyx_k_setUp[] = "setUp";
+static const char __pyx_k_shift[] = "shift";
+static const char __pyx_k_sizes[] = "sizes";
+static const char __pyx_k_space[] = "space";
+static const char __pyx_k_split[] = "split";
+static const char __pyx_k_state[] = "state";
+static const char __pyx_k_strip[] = "strip";
+static const char __pyx_k_which[] = "which";
+static const char __pyx_k_ALWAYS[] = "ALWAYS";
+static const char __pyx_k_ARPACK[] = "ARPACK";
+static const char __pyx_k_BLOPEX[] = "BLOPEX";
+static const char __pyx_k_BVType[] = "BVType";
+static const char __pyx_k_CAYLEY[] = "CAYLEY";
+static const char __pyx_k_CYCLIC[] = "CYCLIC";
+static const char __pyx_k_DECIDE[] = "DECIDE";
+static const char __pyx_k_DIVIDE[] = "DIVIDE";
+static const char __pyx_k_DSType[] = "DSType";
+static const char __pyx_k_FNType[] = "FNType";
+static const char __pyx_k_KRYLOV[] = "KRYLOV";
+static const char __pyx_k_LAPACK[] = "LAPACK";
+static const char __pyx_k_LINEAR[] = "LINEAR";
+static const char __pyx_k_LOBPCG[] = "LOBPCG";
+static const char __pyx_k_NLEIGS[] = "NLEIGS";
+static const char __pyx_k_PGNHEP[] = "PGNHEP";
+static const char __pyx_k_PRIMME[] = "PRIMME";
+static const char __pyx_k_RGType[] = "RGType";
+static const char __pyx_k_Refine[] = "Refine";
+static const char __pyx_k_SCALAR[] = "SCALAR";
+static const char __pyx_k_SIMPLE[] = "SIMPLE";
+static const char __pyx_k_STType[] = "STType";
+static const char __pyx_k_append[] = "append";
+static const char __pyx_k_author[] = "author";
+static const char __pyx_k_center[] = "center";
+static const char __pyx_k_create[] = "create";
+static const char __pyx_k_cutoff[] = "cutoff";
+static const char __pyx_k_decode[] = "decode";
+static const char __pyx_k_detect[] = "detect";
+static const char __pyx_k_encode[] = "encode";
+static const char __pyx_k_getKSP[] = "getKSP";
+static const char __pyx_k_import[] = "__import__";
+static const char __pyx_k_max_it[] = "max_it";
+static const char __pyx_k_module[] = "__module__";
+static const char __pyx_k_object[] = "object";
+static const char __pyx_k_prefix[] = "prefix";
+static const char __pyx_k_radius[] = "radius";
+static const char __pyx_k_refine[] = "refine";
+static const char __pyx_k_result[] = "result";
+static const char __pyx_k_scheme[] = "scheme";
+static const char __pyx_k_setKSP[] = "setKSP";
+static const char __pyx_k_subint[] = "subint";
+static const char __pyx_k_target[] = "target";
+static const char __pyx_k_viewer[] = "viewer";
+static const char __pyx_k_vscale[] = "vscale";
+static const char __pyx_k_ARNOLDI[] = "ARNOLDI";
+static const char __pyx_k_BLZPACK[] = "BLZPACK";
+static const char __pyx_k_BV_type[] = "\n    BV type\n    ";
+static const char __pyx_k_Balance[] = "Balance";
+static const char __pyx_k_COMBINE[] = "COMBINE";
+static const char __pyx_k_COMPOSE[] = "COMPOSE";
+static const char __pyx_k_DEFAULT[] = "DEFAULT";
+static const char __pyx_k_DELAYED[] = "DELAYED";
+static const char __pyx_k_DS_type[] = "\n    DS type\n    ";
+static const char __pyx_k_ELLIPSE[] = "ELLIPSE";
+static const char __pyx_k_EPSConv[] = "EPSConv";
+static const char __pyx_k_EPSType[] = "EPSType";
+static const char __pyx_k_EXPOKIT[] = "EXPOKIT";
+static const char __pyx_k_Extract[] = "Extract";
+static const char __pyx_k_FN_type[] = "\n    FN type\n    ";
+static const char __pyx_k_GENERAL[] = "GENERAL";
+static const char __pyx_k_HERMITE[] = "HERMITE";
+static const char __pyx_k_INPLACE[] = "INPLACE";
+static const char __pyx_k_INVSQRT[] = "INVSQRT";
+static const char __pyx_k_LANCZOS[] = "LANCZOS";
+static const char __pyx_k_LARGEST[] = "LARGEST";
+static const char __pyx_k_MFNType[] = "MFNType";
+static const char __pyx_k_MatMode[] = "MatMode";
+static const char __pyx_k_MatType[] = "MatType";
+static const char __pyx_k_NEPType[] = "NEPType";
+static const char __pyx_k_ONESIDE[] = "ONESIDE";
+static const char __pyx_k_PARTIAL[] = "PARTIAL";
+static const char __pyx_k_PEPConv[] = "PEPConv";
+static const char __pyx_k_PEPType[] = "PEPType";
+static const char __pyx_k_POLYGON[] = "POLYGON";
+static const char __pyx_k_PRECOND[] = "PRECOND";
+static const char __pyx_k_REFINED[] = "REFINED";
+static const char __pyx_k_RG_type[] = "\n    RG type\n    ";
+static const char __pyx_k_SINVERT[] = "SINVERT";
+static const char __pyx_k_SVDType[] = "SVDType";
+static const char __pyx_k_TWOSIDE[] = "TWOSIDE";
+static const char __pyx_k_balance[] = "balance";
+static const char __pyx_k_bv_type[] = "bv_type";
+static const char __pyx_k_delayed[] = "delayed";
+static const char __pyx_k_ds_type[] = "ds_type";
+static const char __pyx_k_fn_type[] = "fn_type";
+static const char __pyx_k_prepare[] = "__prepare__";
+static const char __pyx_k_release[] = "release";
+static const char __pyx_k_rg_type[] = "rg_type";
+static const char __pyx_k_setType[] = "setType";
+static const char __pyx_k_st_type[] = "st_type";
+static const char __pyx_k_trueres[] = "trueres";
+static const char __pyx_k_ABSOLUTE[] = "ABSOLUTE";
+static const char __pyx_k_BACKWARD[] = "BACKWARD";
+static const char __pyx_k_CONSTANT[] = "CONSTANT";
+static const char __pyx_k_DIAGONAL[] = "DIAGONAL";
+static const char __pyx_k_EPSWhich[] = "EPSWhich";
+static const char __pyx_k_EXPLICIT[] = "EXPLICIT";
+static const char __pyx_k_HARMONIC[] = "HARMONIC";
+static const char __pyx_k_IFNEEDED[] = "IFNEEDED";
+static const char __pyx_k_INTERPOL[] = "INTERPOL";
+static const char __pyx_k_INTERVAL[] = "INTERVAL";
+static const char __pyx_k_LAGUERRE[] = "LAGUERRE";
+static const char __pyx_k_LEGENDRE[] = "LEGENDRE";
+static const char __pyx_k_MONOMIAL[] = "MONOMIAL";
+static const char __pyx_k_MULTIPLE[] = "MULTIPLE";
+static const char __pyx_k_MULTIPLY[] = "MULTIPLY";
+static const char __pyx_k_NARNOLDI[] = "NARNOLDI";
+static const char __pyx_k_NEPWhich[] = "NEPWhich";
+static const char __pyx_k_PEPBasis[] = "PEPBasis";
+static const char __pyx_k_PEPScale[] = "PEPScale";
+static const char __pyx_k_PEPWhich[] = "PEPWhich";
+static const char __pyx_k_PERIODIC[] = "PERIODIC";
+static const char __pyx_k_QARNOLDI[] = "QARNOLDI";
+static const char __pyx_k_RATIONAL[] = "RATIONAL";
+static const char __pyx_k_RAYLEIGH[] = "RAYLEIGH";
+static const char __pyx_k_RELATIVE[] = "RELATIVE";
+static const char __pyx_k_RESIDUAL[] = "RESIDUAL";
+static const char __pyx_k_SMALLEST[] = "SMALLEST";
+static const char __pyx_k_SUBSPACE[] = "SUBSPACE";
+static const char __pyx_k_SVDWhich[] = "SVDWhich";
+static const char __pyx_k_eps_type[] = "eps_type";
+static const char __pyx_k_finalize[] = "_finalize";
+static const char __pyx_k_function[] = "function";
+static const char __pyx_k_getShift[] = "getShift";
+static const char __pyx_k_globalup[] = "globalup";
+static const char __pyx_k_jacobian[] = "jacobian";
+static const char __pyx_k_mfn_type[] = "mfn_type";
+static const char __pyx_k_nep_type[] = "nep_type";
+static const char __pyx_k_pep_type[] = "pep_type";
+static const char __pyx_k_qualname[] = "__qualname__";
+static const char __pyx_k_reorthog[] = "reorthog";
+static const char __pyx_k_setArray[] = "setArray";
+static const char __pyx_k_setShift[] = "setShift";
+static const char __pyx_k_setSizes[] = "setSizes";
+static const char __pyx_k_subminor[] = "subminor";
+static const char __pyx_k_svd_type[] = "svd_type";
+static const char __pyx_k_trackall[] = "trackall";
+static const char __pyx_k_BlockType[] = "BlockType";
+static const char __pyx_k_COMM_NULL[] = "COMM_NULL";
+static const char __pyx_k_COMM_SELF[] = "COMM_SELF";
+static const char __pyx_k_CONDENSED[] = "CONDENSED";
+static const char __pyx_k_DETERMINE[] = "DETERMINE";
+static const char __pyx_k_DSMatType[] = "DSMatType";
+static const char __pyx_k_ErrorType[] = "ErrorType";
+static const char __pyx_k_HERMITIAN[] = "HERMITIAN";
+static const char __pyx_k_ITERATING[] = "ITERATING";
+static const char __pyx_k_NEPRefine[] = "NEPRefine";
+static const char __pyx_k_PEPRefine[] = "PEPRefine";
+static const char __pyx_k_SELECTIVE[] = "SELECTIVE";
+static const char __pyx_k_STMatMode[] = "STMatMode";
+static const char __pyx_k_StateType[] = "StateType";
+static const char __pyx_k_TRLANCZOS[] = "TRLANCZOS";
+static const char __pyx_k_TRUNCATED[] = "TRUNCATED";
+static const char __pyx_k_TypeError[] = "TypeError";
+static const char __pyx_k_WILKINSON[] = "WILKINSON";
+static const char __pyx_k_getTarget[] = "getTarget";
+static const char __pyx_k_metaclass[] = "__metaclass__";
+static const char __pyx_k_norm_type[] = "norm_type";
+static const char __pyx_k_operators[] = "operators";
+static const char __pyx_k_setTarget[] = "setTarget";
+static const char __pyx_k_structure[] = "structure";
+static const char __pyx_k_CHEBYSHEV1[] = "CHEBYSHEV1";
+static const char __pyx_k_CHEBYSHEV2[] = "CHEBYSHEV2";
+static const char __pyx_k_COMM_WORLD[] = "COMM_WORLD";
+static const char __pyx_k_CONTIGUOUS[] = "CONTIGUOUS";
+static const char __pyx_k_EPSBalance[] = "EPSBalance";
+static const char __pyx_k_Extraction[] = "Extraction";
+static const char __pyx_k_GYROSCOPIC[] = "GYROSCOPIC";
+static const char __pyx_k_OrthogType[] = "OrthogType";
+static const char __pyx_k_PEPExtract[] = "PEPExtract";
+static const char __pyx_k_RefineType[] = "RefineType";
+static const char __pyx_k_STRUCTURED[] = "STRUCTURED";
+static const char __pyx_k_ValueError[] = "ValueError";
+static const char __pyx_k_authorinfo[] = "authorinfo";
+static const char __pyx_k_extraction[] = "extraction";
+static const char __pyx_k_getMatMode[] = "getMatMode";
+static const char __pyx_k_getVersion[] = "getVersion";
+static const char __pyx_k_initialize[] = "_initialize";
+static const char __pyx_k_iterations[] = "iterations";
+static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__";
+static const char __pyx_k_setMatMode[] = "setMatMode";
+static const char __pyx_k_CombineType[] = "CombineType";
+static const char __pyx_k_DSStateType[] = "DSStateType";
+static const char __pyx_k_KRYLOVSCHUR[] = "KRYLOVSCHUR";
+static const char __pyx_k_MemoryError[] = "MemoryError";
+static const char __pyx_k_ProblemType[] = "ProblemType";
+static const char __pyx_k_TARGET_REAL[] = "TARGET_REAL";
+static const char __pyx_k_createDense[] = "createDense";
+static const char __pyx_k_ghostUpdate[] = "ghostUpdate";
+static const char __pyx_k_BVOrthogType[] = "BVOrthogType";
+static const char __pyx_k_DIVERGED_ITS[] = "DIVERGED_ITS";
+static const char __pyx_k_EPSErrorType[] = "EPSErrorType";
+static const char __pyx_k_INTERMEDIATE[] = "INTERMEDIATE";
+static const char __pyx_k_LARGEST_REAL[] = "LARGEST_REAL";
+static const char __pyx_k_NEPErrorType[] = "NEPErrorType";
+static const char __pyx_k_PEPErrorType[] = "PEPErrorType";
+static const char __pyx_k_RefineScheme[] = "RefineScheme";
+static const char __pyx_k_SVDErrorType[] = "SVDErrorType";
+static const char __pyx_k_problem_type[] = "problem_type";
+static const char __pyx_k_CONVERGED_ITS[] = "CONVERGED_ITS";
+static const char __pyx_k_CONVERGED_TOL[] = "CONVERGED_TOL";
+static const char __pyx_k_EPSExtraction[] = "EPSExtraction";
+static const char __pyx_k_FNCombineType[] = "FNCombineType";
+static const char __pyx_k_SMALLEST_REAL[] = "SMALLEST_REAL";
+static const char __pyx_k_getExtraction[] = "getExtraction";
+static const char __pyx_k_getTolerances[] = "getTolerances";
+static const char __pyx_k_setExtraction[] = "setExtraction";
+static const char __pyx_k_setTolerances[] = "setTolerances";
+static const char __pyx_k_CONVERGED_USER[] = "CONVERGED_USER";
+static const char __pyx_k_EPSProblemType[] = "EPSProblemType";
+static const char __pyx_k_HARMONIC_RIGHT[] = "HARMONIC_RIGHT";
+static const char __pyx_k_PEPProblemType[] = "PEPProblemType";
+static const char __pyx_k_PowerShiftType[] = "PowerShiftType";
+static const char __pyx_k_getProblemType[] = "getProblemType";
+static const char __pyx_k_getVersionInfo[] = "getVersionInfo";
+static const char __pyx_k_petsc4py_PETSc[] = "petsc4py.PETSc";
+static const char __pyx_k_setProblemType[] = "setProblemType";
+static const char __pyx_k_slepc4py_SLEPc[] = "slepc4py.SLEPc";
+static const char __pyx_k_ConvergedReason[] = "ConvergedReason";
+static const char __pyx_k_NEPRefineScheme[] = "NEPRefineScheme";
+static const char __pyx_k_OrthogBlockType[] = "OrthogBlockType";
+static const char __pyx_k_PEPRefineScheme[] = "PEPRefineScheme";
+static const char __pyx_k_HARMONIC_LARGEST[] = "HARMONIC_LARGEST";
+static const char __pyx_k_OrthogRefineType[] = "OrthogRefineType";
+static const char __pyx_k_REFINED_HARMONIC[] = "REFINED_HARMONIC";
+static const char __pyx_k_TARGET_IMAGINARY[] = "TARGET_IMAGINARY";
+static const char __pyx_k_TARGET_MAGNITUDE[] = "TARGET_MAGNITUDE";
+static const char __pyx_k_getActiveColumns[] = "getActiveColumns";
+static const char __pyx_k_getTransposeMode[] = "getTransposeMode";
+static const char __pyx_k_setTransposeMode[] = "setTransposeMode";
+static const char __pyx_k_BVOrthogBlockType[] = "BVOrthogBlockType";
+static const char __pyx_k_EPSPowerShiftType[] = "EPSPowerShiftType";
+static const char __pyx_k_HARMONIC_RELATIVE[] = "HARMONIC_RELATIVE";
+static const char __pyx_k_LARGEST_IMAGINARY[] = "LARGEST_IMAGINARY";
+static const char __pyx_k_LARGEST_MAGNITUDE[] = "LARGEST_MAGNITUDE";
+static const char __pyx_k_BVOrthogRefineType[] = "BVOrthogRefineType";
+static const char __pyx_k_DIVERGED_BREAKDOWN[] = "DIVERGED_BREAKDOWN";
+static const char __pyx_k_EPSConvergedReason[] = "EPSConvergedReason";
+static const char __pyx_k_MFNConvergedReason[] = "MFNConvergedReason";
+static const char __pyx_k_NEPConvergedReason[] = "NEPConvergedReason";
+static const char __pyx_k_PEPConvergedReason[] = "PEPConvergedReason";
+static const char __pyx_k_SMALLEST_IMAGINARY[] = "SMALLEST_IMAGINARY";
+static const char __pyx_k_SMALLEST_MAGNITUDE[] = "SMALLEST_MAGNITUDE";
+static const char __pyx_k_SVDConvergedReason[] = "SVDConvergedReason";
+static const char __pyx_k_getWhichEigenpairs[] = "getWhichEigenpairs";
+static const char __pyx_k_setWhichEigenpairs[] = "setWhichEigenpairs";
+static const char __pyx_k_CONVERGED_ITERATING[] = "CONVERGED_ITERATING";
+static const char __pyx_k_LanczosReorthogType[] = "LanczosReorthogType";
+static const char __pyx_k_setOrthogonalization[] = "setOrthogonalization";
+static const char __pyx_k_DIVERGED_LINEAR_SOLVE[] = "DIVERGED_LINEAR_SOLVE";
+static const char __pyx_k_DIVERGED_SYMMETRY_LOST[] = "DIVERGED_SYMMETRY_LOST";
+static const char __pyx_k_EPSLanczosReorthogType[] = "EPSLanczosReorthogType";
+static const char __pyx_k_getWhichSingularTriplets[] = "getWhichSingularTriplets";
+static const char __pyx_k_setWhichSingularTriplets[] = "setWhichSingularTriplets";
+static const char __pyx_k_BV_orthogonalization_types_CGS[] = "\n    BV orthogonalization types\n\n    - `CGS`: Classical Gram-Schmidt.\n    - `MGS`: Modified Gram-Schmidt.\n    ";
+static const char __pyx_k_EPS_problem_type_HEP_Hermitian[] = "\n    EPS problem type\n\n    - `HEP`:    Hermitian eigenproblem.\n    - `NHEP`:   Non-Hermitian eigenproblem.\n    - `GHEP`:   Generalized Hermitian eigenproblem.\n    - `GNHEP`:  Generalized Non-Hermitian eigenproblem.\n    - `PGNHEP`: Generalized Non-Hermitian eigenproblem\n                with positive definite ``B``.\n    - `GHIEP`:  Generalized Hermitian-indefinite eigenproblem.\n    ";
+static const char __pyx_k_EPS_type_of_balancing_used_for[] = "\n    EPS type of balancing used for non-Hermitian problems\n\n    - `NONE`:     None.\n    - `ONESIDE`:  One-sided eigensolver, only right eigenvectors.\n    - `TWOSIDE`:  Two-sided eigensolver, right and left eigenvectors.\n    - `USER`:     User-defined.\n    ";
+static const char __pyx_k_BV_block_orthogonalization_type[] = "\n    BV block-orthogonalization types\n\n    - `GS`:   Gram-Schmidt.\n    - `CHOL`: Cholesky.\n    ";
+static const char __pyx_k_BV_orthogonalization_refinement[] = "\n    BV orthogonalization refinement types\n\n    - `IFNEEDED`: Reorthogonalize if a criterion is satisfied.\n    - `NEVER`:    Never reorthogonalize.\n    - `ALWAYS`:   Always reorthogonalize.\n    ";
+static const char __pyx_k_DS_state_types_RAW_Not_processe[] = "\n    DS state types\n\n    - `RAW`: Not processed yet.\n    - `INTERMEDIATE`: Reduced to Hessenberg or tridiagonal form (or equivalent).\n    - `CONDENSED`: Reduced to Schur or diagonal form (or equivalent).\n    - `TRUNCATED`: Condensed form truncated to a smaller size.\n    ";
+static const char __pyx_k_EPS_Lanczos_reorthogonalization[] = "\n    EPS Lanczos reorthogonalization type\n\n    - `LOCAL`:\n    - `FULL`:\n    - `SELECTIVE`:\n    - `PERIODIC`:\n    - `PARTIAL`:\n    - `DELAYED`:\n    ";
+static const char __pyx_k_EPS_Power_shift_type_CONSTANT_R[] = "\n    EPS Power shift type.\n\n    - `CONSTANT`:\n    - `RAYLEIGH`:\n    - `WILKINSON`:\n    ";
+static const char __pyx_k_EPS_convergence_reasons_CONVERG[] = "\n    EPS convergence reasons\n\n    - `CONVERGED_TOL`:\n    - `CONVERGED_USER`:\n    - `DIVERGED_ITS`:\n    - `DIVERGED_BREAKDOWN`:\n    - `DIVERGED_SYMMETRY_LOST`:\n    - `CONVERGED_ITERATING`:\n    ";
+static const char __pyx_k_EPS_convergence_test_ABS_REL_NO[] = "\n    EPS convergence test\n\n    - `ABS`:\n    - `REL`:\n    - `NORM`:\n    - `USER`:\n    ";
+static const char __pyx_k_EPS_desired_piece_of_spectrum_L[] = "\n    EPS desired piece of spectrum\n\n    - `LARGEST_MAGNITUDE`:  Largest magnitude (default).\n    - `LARGEST_REAL`:       Largest real parts.\n    - `LARGEST_IMAGINARY`:  Largest imaginary parts in magnitude.\n    - `SMALLEST_MAGNITUDE`: Smallest magnitude.\n    - `SMALLEST_REAL`:      Smallest real parts.\n    - `SMALLEST_IMAGINARY`: Smallest imaginary parts in magnitude.\n    - `TARGET_MAGNITUDE`:   Closest to target (in [...]
+static const char __pyx_k_EPS_error_type_to_assess_accura[] = "\n    EPS error type to assess accuracy of computed solutions\n\n    - `ABSOLUTE`:  Absolute error.\n    - `RELATIVE`:  Relative error.\n    - `BACKWARD`:  Backward error.\n    ";
+static const char __pyx_k_EPS_extraction_technique_RITZ_S[] = "\n    EPS extraction technique\n\n    - `RITZ`:              Standard Rayleigh-Ritz extraction.\n    - `HARMONIC`:          Harmonic extraction.\n    - `HARMONIC_RELATIVE`: Harmonic extraction relative to the eigenvalue.\n    - `HARMONIC_RIGHT`:    Harmonic extraction for rightmost eigenvalues.\n    - `HARMONIC_LARGEST`:  Harmonic extraction for largest magnitude (without target).\n    - `REFINED`:           Refined extractio [...]
+static const char __pyx_k_EPS_type_Native_sparse_eigensol[] = "\n    EPS type\n\n    Native sparse eigensolvers.\n\n    - `POWER`:        Power Iteration, Inverse Iteration, RQI.\n    - `SUBSPACE`:     Subspace Iteration.\n    - `ARNOLDI`:      Arnoldi.\n    - `LANCZOS`:      Lanczos.\n    - `KRYLOVSCHUR`:  Krylov-Schur (default).\n    - `GD`:           Generalized Davidson.\n    - `JD`:           Jacobi-Davidson.\n    - `RQCG`:         Rayleigh Quotient Conjugate Gradient.\n    - `LOBPC [...]
+static const char __pyx_k_Extraction_strategy_used_to_obt[] = "\n    Extraction strategy used to obtain eigenvectors of the PEP from the\n    eigenvectors of the linearization\n\n    - `NONE`:       Use the first block.\n    - `NORM`:       Use the first or last block depending on norm of H.\n    - `RESIDUAL`:   Use the block with smallest residual.\n    - `STRUCTURED`: Combine all blocks in a certain way.\n    ";
+static const char __pyx_k_FN_type_of_combination_of_child[] = "\n    FN type of combination of child functions\n\n    - `ADD`:       Addition         f(x) = f1(x)+f2(x)\n    - `MULTIPLY`:  Multiplication   f(x) = f1(x)*f2(x)\n    - `DIVIDE`:    Division         f(x) = f1(x)/f2(x)\n    - `COMPOSE`:   Composition      f(x) = f2(f1(x))\n    ";
+static const char __pyx_k_MFN_type_Action_of_a_matrix_fun[] = "\n    MFN type\n\n    Action of a matrix function on a vector.\n\n    - `KRYLOV`:  Restarted Krylov solver.\n    - `EXPOKIT`: Implementation of the method in Expokit.\n    ";
+static const char __pyx_k_NEP_error_type_to_assess_accura[] = "\n    NEP error type to assess accuracy of computed solutions\n\n    - `ABSOLUTE`:  Absolute error.\n    - `RELATIVE`:  Relative error.\n    - `BACKWARD`:  Backward error.\n    ";
+static const char __pyx_k_NEP_refinement_strategy_NONE_No[] = "\n    NEP refinement strategy\n\n    - `NONE`:     No refinement.\n    - `SIMPLE`:   Refine eigenpairs one by one.\n    - `MULTIPLE`: Refine all eigenpairs simultaneously (invariant pair).\n    ";
+static const char __pyx_k_NEP_type_Nonlinear_eigensolvers[] = "\n    NEP type\n\n    Nonlinear eigensolvers.\n\n    - `RII`:      Residual inverse iteration.\n    - `SLP`:      Successive linear problems.\n    - `NARNOLDI`: Nonlinear Arnoldi.\n    - `CISS`:     Contour integral spectrum slice.\n    - `INTERPOL`: Polynomial interpolation.\n    - `NLEIGS`:   Fully rational Krylov method for nonlinear eigenproblems.\n    ";
+static const char __pyx_k_PEP_convergence_reasons_CONVERG[] = "\n    PEP convergence reasons\n\n    - `CONVERGED_TOL`:\n    - `CONVERGED_USER`:\n    - `DIVERGED_ITS`:\n    - `DIVERGED_BREAKDOWN`:\n    - `DIVERGED_SYMMETRY_LOST`:\n    - `CONVERGED_ITERATING`:\n    ";
+static const char __pyx_k_PEP_convergence_test_ABS_REL_NO[] = "\n    PEP convergence test\n\n    - `ABS`:\n    - `REL`:\n    - `NORM`:\n    - `USER`:\n    ";
+static const char __pyx_k_PEP_desired_part_of_spectrum_LA[] = "\n    PEP desired part of spectrum\n\n    - `LARGEST_MAGNITUDE`:  Largest magnitude (default).\n    - `LARGEST_REAL`:       Largest real parts.\n    - `LARGEST_IMAGINARY`:  Largest imaginary parts in magnitude.\n    - `SMALLEST_MAGNITUDE`: Smallest magnitude.\n    - `SMALLEST_REAL`:      Smallest real parts.\n    - `SMALLEST_IMAGINARY`: Smallest imaginary parts in magnitude.\n    - `TARGET_MAGNITUDE`:   Closest to target (in  [...]
+static const char __pyx_k_PEP_error_type_to_assess_accura[] = "\n    PEP error type to assess accuracy of computed solutions\n\n    - `ABSOLUTE`:  Absolute error.\n    - `RELATIVE`:  Relative error.\n    - `BACKWARD`:  Backward error.\n    ";
+static const char __pyx_k_PEP_problem_type_GENERAL_No_str[] = "\n    PEP problem type\n\n    - `GENERAL`:      No structure.\n    - `HERMITIAN`:    Hermitian structure.\n    - `GYROSCOPIC`:   Hamiltonian structure.\n    ";
+static const char __pyx_k_PEP_refinement_strategy_NONE_No[] = "\n    PEP refinement strategy\n\n    - `NONE`:     No refinement.\n    - `SIMPLE`:   Refine eigenpairs one by one.\n    - `MULTIPLE`: Refine all eigenpairs simultaneously (invariant pair).\n    ";
+static const char __pyx_k_PEP_scaling_strategy_NONE_No_sc[] = "\n    PEP scaling strategy\n\n    - `NONE`:     No scaling.\n    - `SCALAR`:   Parameter scaling.\n    - `DIAGONAL`: Diagonal scaling.\n    - `BOTH`:     Both parameter and diagonal scaling.\n    ";
+static const char __pyx_k_PEP_type_Polynomial_eigensolver[] = "\n    PEP type\n\n    Polynomial eigensolvers.\n\n    - `LINEAR`:       Linearization via EPS.\n    - `QARNOLDI`:     Q-Arnoldi for quadratic problems.\n    - `TOAR`:         Two-level orthogonal Arnoldi.\n    - `STOAR`:        Symmetric TOAR.\n    - `JD`:           Polynomial Jacobi-Davidson.\n    ";
+static const char __pyx_k_ST_matrix_mode_COPY_A_working_c[] = "\n    ST matrix mode\n\n    - `COPY`:    A working copy of the matrix is created.\n    - `INPLACE`: The operation is computed in-place.\n    - `SHELL`:   The matrix ``A-sigma*B`` is handled as an\n      implicit matrix.\n    ";
+static const char __pyx_k_ST_types_SHELL_User_defined_SHI[] = "\n    ST types\n\n    - `SHELL`:  User-defined.\n    - `SHIFT`:  Shift from origin.\n    - `SINVERT`: Shift-and-invert.\n    - `CAYLEY`: Cayley transform.\n    - `PRECOND`: Preconditioner.\n    ";
+static const char __pyx_k_SVD_convergence_reasons_CONVERG[] = "\n    SVD convergence reasons\n\n    - `CONVERGED_TOL`:\n    - `CONVERGED_USER`:\n    - `DIVERGED_ITS`:\n    - `DIVERGED_BREAKDOWN`:\n    - `CONVERGED_ITERATING`:\n    ";
+static const char __pyx_k_SVD_desired_piece_of_spectrum_L[] = "\n    SVD desired piece of spectrum\n\n    - `LARGEST`:  largest singular values.\n    - `SMALLEST`: smallest singular values.\n    ";
+static const char __pyx_k_SVD_error_type_to_assess_accura[] = "\n    SVD error type to assess accuracy of computed solutions\n\n    - `ABSOLUTE`:  Absolute error.\n    - `RELATIVE`:  Relative error.\n    ";
+static const char __pyx_k_SVD_types_CROSS_Eigenproblem_wi[] = "\n    SVD types\n\n    - `CROSS`:     Eigenproblem with the cross-product matrix.\n    - `CYCLIC`:    Eigenproblem with the cyclic matrix.\n    - `LAPACK`:    Wrappers to dense SVD solvers in Lapack.\n    - `LANCZOS`:   Lanczos.\n    - `TRLANCZOS`: Thick-restart Lanczos.\n    ";
+static const char __pyx_k_Scalable_Library_for_Eigenvalue[] = "\nScalable Library for Eigenvalue Problem Computations.\n";
+static const char __pyx_k_Scheme_for_solving_linear_syste[] = "\n    Scheme for solving linear systems during iterative refinement\n\n    - `SCHUR`:    Schur complement.\n    - `MBE`:      Mixed block elimination.\n    - `EXPLICIT`: Build the explicit matrix.\n    ";
+static const char __pyx_k_To_refer_to_one_of_the_matrices[] = "\n    To refer to one of the matrices stored internally in DS\n\n    - `A`:  first matrix of eigenproblem/singular value problem.\n    - `B`:  second matrix of a generalized eigenproblem.\n    - `C`:  third matrix of a quadratic eigenproblem.\n    - `T`:  tridiagonal matrix.\n    - `D`:  diagonal matrix.\n    - `Q`:  orthogonal matrix of (right) Schur vectors.\n    - `Z`:  orthogonal matrix of left Schur vectors.\n    - `X`:  [...]
+static const char __pyx_k_home_dalcinl_Devel_slepc4py_dev[] = "/home/dalcinl/Devel/slepc4py-dev/src/SLEPc/SLEPc.pyx";
+static const char __pyx_k_local_and_global_sizes_cannot_be[] = "local and global sizes cannot be both 'DECIDE'";
 static PyObject *__pyx_n_s_A;
 static PyObject *__pyx_n_s_ABS;
 static PyObject *__pyx_n_s_ABSOLUTE;
@@ -2637,6 +2622,7 @@ static PyObject *__pyx_n_s_ALL;
 static PyObject *__pyx_n_s_ALWAYS;
 static PyObject *__pyx_n_s_ARNOLDI;
 static PyObject *__pyx_n_s_ARPACK;
+static PyObject *__pyx_n_s_Au;
 static PyObject *__pyx_n_s_B;
 static PyObject *__pyx_n_s_BACKWARD;
 static PyObject *__pyx_n_s_BLOPEX;
@@ -2653,6 +2639,7 @@ static PyObject *__pyx_kp_s_BV_type;
 static PyObject *__pyx_n_s_Balance;
 static PyObject *__pyx_n_s_Basis;
 static PyObject *__pyx_n_s_BlockType;
+static PyObject *__pyx_n_s_Bu;
 static PyObject *__pyx_n_s_C;
 static PyObject *__pyx_n_s_CAYLEY;
 static PyObject *__pyx_n_s_CGS;
@@ -2668,14 +2655,14 @@ static PyObject *__pyx_n_s_COMPOSE;
 static PyObject *__pyx_n_s_CONDENSED;
 static PyObject *__pyx_n_s_CONSTANT;
 static PyObject *__pyx_n_s_CONTIGUOUS;
-static PyObject *__pyx_n_s_CONVERGED_FNORM_ABS;
-static PyObject *__pyx_n_s_CONVERGED_FNORM_RELATIVE;
 static PyObject *__pyx_n_s_CONVERGED_ITERATING;
-static PyObject *__pyx_n_s_CONVERGED_SNORM_RELATIVE;
+static PyObject *__pyx_n_s_CONVERGED_ITS;
 static PyObject *__pyx_n_s_CONVERGED_TOL;
+static PyObject *__pyx_n_s_CONVERGED_USER;
 static PyObject *__pyx_n_s_COPY;
 static PyObject *__pyx_n_s_CROSS;
 static PyObject *__pyx_n_s_CYCLIC;
+static PyObject *__pyx_n_s_CombineType;
 static PyObject *__pyx_n_s_Conv;
 static PyObject *__pyx_n_s_ConvergedReason;
 static PyObject *__pyx_n_s_D;
@@ -2684,15 +2671,10 @@ static PyObject *__pyx_n_s_DEFAULT;
 static PyObject *__pyx_n_s_DELAYED;
 static PyObject *__pyx_n_s_DETERMINE;
 static PyObject *__pyx_n_s_DIAGONAL;
-static PyObject *__pyx_n_s_DIFFERENT;
-static PyObject *__pyx_n_s_DIFFERENT_NONZERO_PATTERN;
-static PyObject *__pyx_n_s_DIFFERENT_NZ;
 static PyObject *__pyx_n_s_DIVERGED_BREAKDOWN;
-static PyObject *__pyx_n_s_DIVERGED_FNORM_NAN;
-static PyObject *__pyx_n_s_DIVERGED_FUNCTION_COUNT;
 static PyObject *__pyx_n_s_DIVERGED_ITS;
 static PyObject *__pyx_n_s_DIVERGED_LINEAR_SOLVE;
-static PyObject *__pyx_n_s_DIVERGED_MAX_IT;
+static PyObject *__pyx_n_s_DIVERGED_SYMMETRY_LOST;
 static PyObject *__pyx_n_s_DIVIDE;
 static PyObject *__pyx_n_s_DSMatType;
 static PyObject *__pyx_n_s_DSStateType;
@@ -2701,7 +2683,6 @@ static PyObject *__pyx_kp_s_DS_state_types_RAW_Not_processe;
 static PyObject *__pyx_kp_s_DS_type;
 static PyObject *__pyx_n_s_Dl;
 static PyObject *__pyx_n_s_Dr;
-static PyObject *__pyx_n_s_EIG;
 static PyObject *__pyx_n_s_ELLIPSE;
 static PyObject *__pyx_n_s_EPSBalance;
 static PyObject *__pyx_n_s_EPSConv;
@@ -2716,7 +2697,7 @@ static PyObject *__pyx_n_s_EPSWhich;
 static PyObject *__pyx_kp_s_EPS_Lanczos_reorthogonalization;
 static PyObject *__pyx_kp_s_EPS_Power_shift_type_CONSTANT_R;
 static PyObject *__pyx_kp_s_EPS_convergence_reasons_CONVERG;
-static PyObject *__pyx_kp_s_EPS_convergence_test_ABS_EIG_NO;
+static PyObject *__pyx_kp_s_EPS_convergence_test_ABS_REL_NO;
 static PyObject *__pyx_kp_s_EPS_desired_piece_of_spectrum_L;
 static PyObject *__pyx_kp_s_EPS_error_type_to_assess_accura;
 static PyObject *__pyx_kp_s_EPS_extraction_technique_RITZ_S;
@@ -2724,9 +2705,13 @@ static PyObject *__pyx_kp_s_EPS_problem_type_HEP_Hermitian;
 static PyObject *__pyx_kp_s_EPS_type_Native_sparse_eigensol;
 static PyObject *__pyx_kp_s_EPS_type_of_balancing_used_for;
 static PyObject *__pyx_n_s_EXP;
+static PyObject *__pyx_n_s_EXPLICIT;
+static PyObject *__pyx_n_s_EXPOKIT;
 static PyObject *__pyx_n_s_Error;
 static PyObject *__pyx_n_s_ErrorType;
+static PyObject *__pyx_n_s_Extract;
 static PyObject *__pyx_n_s_Extraction;
+static PyObject *__pyx_kp_s_Extraction_strategy_used_to_obt;
 static PyObject *__pyx_n_s_F;
 static PyObject *__pyx_n_s_FEAST;
 static PyObject *__pyx_n_s_FNCombineType;
@@ -2753,6 +2738,7 @@ static PyObject *__pyx_n_s_INPLACE;
 static PyObject *__pyx_n_s_INTERMEDIATE;
 static PyObject *__pyx_n_s_INTERPOL;
 static PyObject *__pyx_n_s_INTERVAL;
+static PyObject *__pyx_n_s_INVSQRT;
 static PyObject *__pyx_n_s_ITERATING;
 static PyObject *__pyx_n_s_J;
 static PyObject *__pyx_n_s_JD;
@@ -2772,26 +2758,31 @@ static PyObject *__pyx_n_s_LOCAL;
 static PyObject *__pyx_n_s_LOG;
 static PyObject *__pyx_n_s_LanczosReorthogType;
 static PyObject *__pyx_n_s_MAT;
+static PyObject *__pyx_n_s_MBE;
 static PyObject *__pyx_n_s_MFNConvergedReason;
 static PyObject *__pyx_n_s_MFNType;
+static PyObject *__pyx_kp_s_MFN_type_Action_of_a_matrix_fun;
 static PyObject *__pyx_n_s_MGS;
 static PyObject *__pyx_n_s_MONOMIAL;
 static PyObject *__pyx_n_s_MULTIPLE;
 static PyObject *__pyx_n_s_MULTIPLY;
 static PyObject *__pyx_n_s_MatMode;
-static PyObject *__pyx_n_s_MatStructure;
 static PyObject *__pyx_n_s_MatType;
 static PyObject *__pyx_n_s_MemoryError;
 static PyObject *__pyx_n_s_NARNOLDI;
 static PyObject *__pyx_n_s_NEP;
 static PyObject *__pyx_n_s_NEPConvergedReason;
 static PyObject *__pyx_n_s_NEPErrorType;
+static PyObject *__pyx_n_s_NEPRefine;
+static PyObject *__pyx_n_s_NEPRefineScheme;
 static PyObject *__pyx_n_s_NEPType;
 static PyObject *__pyx_n_s_NEPWhich;
 static PyObject *__pyx_kp_s_NEP_error_type_to_assess_accura;
+static PyObject *__pyx_kp_s_NEP_refinement_strategy_NONE_No;
 static PyObject *__pyx_kp_s_NEP_type_Nonlinear_eigensolvers;
 static PyObject *__pyx_n_s_NEVER;
 static PyObject *__pyx_n_s_NHEP;
+static PyObject *__pyx_n_s_NLEIGS;
 static PyObject *__pyx_n_s_NONE;
 static PyObject *__pyx_n_s_NORM;
 static PyObject *__pyx_n_s_ONESIDE;
@@ -2805,17 +2796,20 @@ static PyObject *__pyx_n_s_PEPBasis;
 static PyObject *__pyx_n_s_PEPConv;
 static PyObject *__pyx_n_s_PEPConvergedReason;
 static PyObject *__pyx_n_s_PEPErrorType;
+static PyObject *__pyx_n_s_PEPExtract;
 static PyObject *__pyx_n_s_PEPProblemType;
 static PyObject *__pyx_n_s_PEPRefine;
+static PyObject *__pyx_n_s_PEPRefineScheme;
 static PyObject *__pyx_n_s_PEPScale;
 static PyObject *__pyx_n_s_PEPType;
 static PyObject *__pyx_n_s_PEPWhich;
 static PyObject *__pyx_kp_s_PEP_convergence_reasons_CONVERG;
-static PyObject *__pyx_kp_s_PEP_convergence_test_ABS_EIG_NO;
+static PyObject *__pyx_kp_s_PEP_convergence_test_ABS_REL_NO;
 static PyObject *__pyx_kp_s_PEP_desired_part_of_spectrum_LA;
 static PyObject *__pyx_kp_s_PEP_error_type_to_assess_accura;
 static PyObject *__pyx_kp_s_PEP_problem_type_GENERAL_No_str;
-static PyObject *__pyx_kp_s_PEP_refinement_strategy_NONE_SI;
+static PyObject *__pyx_kp_s_PEP_refinement_strategy_NONE_No;
+static PyObject *__pyx_kp_s_PEP_scaling_strategy_NONE_No_sc;
 static PyObject *__pyx_kp_s_PEP_type_Polynomial_eigensolver;
 static PyObject *__pyx_n_s_PERIODIC;
 static PyObject *__pyx_n_s_PGNHEP;
@@ -2828,12 +2822,15 @@ static PyObject *__pyx_n_s_PowerShiftType;
 static PyObject *__pyx_n_s_ProblemType;
 static PyObject *__pyx_n_s_Q;
 static PyObject *__pyx_n_s_QARNOLDI;
+static PyObject *__pyx_n_s_R;
 static PyObject *__pyx_n_s_RATIONAL;
 static PyObject *__pyx_n_s_RAW;
 static PyObject *__pyx_n_s_RAYLEIGH;
 static PyObject *__pyx_n_s_REFINED;
 static PyObject *__pyx_n_s_REFINED_HARMONIC;
+static PyObject *__pyx_n_s_REL;
 static PyObject *__pyx_n_s_RELATIVE;
+static PyObject *__pyx_n_s_RESIDUAL;
 static PyObject *__pyx_n_s_RGType;
 static PyObject *__pyx_kp_s_RG_type;
 static PyObject *__pyx_n_s_RII;
@@ -2841,12 +2838,10 @@ static PyObject *__pyx_n_s_RING;
 static PyObject *__pyx_n_s_RITZ;
 static PyObject *__pyx_n_s_RQCG;
 static PyObject *__pyx_n_s_Refine;
+static PyObject *__pyx_n_s_RefineScheme;
 static PyObject *__pyx_n_s_RefineType;
-static PyObject *__pyx_n_s_SAME;
-static PyObject *__pyx_n_s_SAME_NONZERO_PATTERN;
-static PyObject *__pyx_n_s_SAME_NZ;
-static PyObject *__pyx_kp_s_SAME_Same_non_zero_pattern_SUBS;
 static PyObject *__pyx_n_s_SCALAR;
+static PyObject *__pyx_n_s_SCHUR;
 static PyObject *__pyx_n_s_SELECTIVE;
 static PyObject *__pyx_n_s_SHELL;
 static PyObject *__pyx_n_s_SHIFT;
@@ -2859,14 +2854,11 @@ static PyObject *__pyx_n_s_SMALLEST_MAGNITUDE;
 static PyObject *__pyx_n_s_SMALLEST_REAL;
 static PyObject *__pyx_n_s_SQRT;
 static PyObject *__pyx_n_s_STMatMode;
-static PyObject *__pyx_n_s_STMatStructure;
 static PyObject *__pyx_n_s_STOAR;
+static PyObject *__pyx_n_s_STRUCTURED;
 static PyObject *__pyx_n_s_STType;
 static PyObject *__pyx_kp_s_ST_matrix_mode_COPY_A_working_c;
 static PyObject *__pyx_kp_s_ST_types_SHELL_User_defined_SHI;
-static PyObject *__pyx_n_s_SUBSET;
-static PyObject *__pyx_n_s_SUBSET_NONZERO_PATTERN;
-static PyObject *__pyx_n_s_SUBSET_NZ;
 static PyObject *__pyx_n_s_SUBSPACE;
 static PyObject *__pyx_n_s_SVD;
 static PyObject *__pyx_n_s_SVDConvergedReason;
@@ -2880,6 +2872,7 @@ static PyObject *__pyx_kp_s_SVD_types_CROSS_Eigenproblem_wi;
 static PyObject *__pyx_n_s_SVEC;
 static PyObject *__pyx_kp_s_Scalable_Library_for_Eigenvalue;
 static PyObject *__pyx_n_s_Scale;
+static PyObject *__pyx_kp_s_Scheme_for_solving_linear_syste;
 static PyObject *__pyx_n_s_StateType;
 static PyObject *__pyx_n_s_T;
 static PyObject *__pyx_n_s_TARGET_IMAGINARY;
@@ -2892,11 +2885,13 @@ static PyObject *__pyx_n_s_TRUNCATED;
 static PyObject *__pyx_n_s_TWOSIDE;
 static PyObject *__pyx_kp_s_To_refer_to_one_of_the_matrices;
 static PyObject *__pyx_n_s_Type;
+static PyObject *__pyx_n_s_TypeError;
 static PyObject *__pyx_n_s_U;
 static PyObject *__pyx_n_s_USER;
 static PyObject *__pyx_n_s_V;
 static PyObject *__pyx_n_s_VECS;
 static PyObject *__pyx_n_s_VT;
+static PyObject *__pyx_n_s_ValueError;
 static PyObject *__pyx_n_s_Vi;
 static PyObject *__pyx_n_s_Vr;
 static PyObject *__pyx_n_s_W;
@@ -2905,8 +2900,8 @@ static PyObject *__pyx_n_s_Which;
 static PyObject *__pyx_n_s_X;
 static PyObject *__pyx_n_s_Y;
 static PyObject *__pyx_n_s_Z;
+static PyObject *__pyx_kp_s__2;
 static PyObject *__pyx_n_s_a;
-static PyObject *__pyx_n_s_abstol;
 static PyObject *__pyx_n_s_alpha;
 static PyObject *__pyx_n_s_append;
 static PyObject *__pyx_n_s_args;
@@ -2925,6 +2920,8 @@ static PyObject *__pyx_n_s_cform;
 static PyObject *__pyx_n_s_comm;
 static PyObject *__pyx_n_s_comp;
 static PyObject *__pyx_n_s_conv;
+static PyObject *__pyx_n_s_create;
+static PyObject *__pyx_n_s_createDense;
 static PyObject *__pyx_n_s_cutoff;
 static PyObject *__pyx_n_s_d;
 static PyObject *__pyx_n_s_date;
@@ -2947,7 +2944,8 @@ static PyObject *__pyx_n_s_finalize;
 static PyObject *__pyx_n_s_flag;
 static PyObject *__pyx_n_s_fn;
 static PyObject *__pyx_n_s_fn_type;
-static PyObject *__pyx_n_s_function_2;
+static PyObject *__pyx_n_s_function;
+static PyObject *__pyx_n_s_getActiveColumns;
 static PyObject *__pyx_n_s_getBV;
 static PyObject *__pyx_n_s_getExtraction;
 static PyObject *__pyx_n_s_getKSP;
@@ -2962,7 +2960,9 @@ static PyObject *__pyx_n_s_getVersion;
 static PyObject *__pyx_n_s_getVersionInfo;
 static PyObject *__pyx_n_s_getWhichEigenpairs;
 static PyObject *__pyx_n_s_getWhichSingularTriplets;
-static PyObject *__pyx_kp_s_home_devel_slepc4py_3_6_0_src_S;
+static PyObject *__pyx_n_s_ghostUpdate;
+static PyObject *__pyx_n_s_globalup;
+static PyObject *__pyx_kp_s_home_dalcinl_Devel_slepc4py_dev;
 static PyObject *__pyx_n_s_i;
 static PyObject *__pyx_n_s_import;
 static PyObject *__pyx_n_s_indef;
@@ -2971,7 +2971,8 @@ static PyObject *__pyx_n_s_inta;
 static PyObject *__pyx_n_s_intb;
 static PyObject *__pyx_n_s_iterations;
 static PyObject *__pyx_n_s_its;
-static PyObject *__pyx_n_s_jacobian_2;
+static PyObject *__pyx_n_s_j;
+static PyObject *__pyx_n_s_jacobian;
 static PyObject *__pyx_n_s_k;
 static PyObject *__pyx_n_s_kargs;
 static PyObject *__pyx_n_s_keep;
@@ -2980,13 +2981,13 @@ static PyObject *__pyx_n_s_l;
 static PyObject *__pyx_n_s_lag;
 static PyObject *__pyx_n_s_lbda;
 static PyObject *__pyx_n_s_ld;
+static PyObject *__pyx_kp_s_local_and_global_sizes_cannot_be;
 static PyObject *__pyx_n_s_lock;
 static PyObject *__pyx_n_s_m;
 static PyObject *__pyx_n_s_main;
 static PyObject *__pyx_n_s_major;
 static PyObject *__pyx_n_s_mat;
 static PyObject *__pyx_n_s_max_it;
-static PyObject *__pyx_n_s_maxf;
 static PyObject *__pyx_n_s_maxit;
 static PyObject *__pyx_n_s_metaclass;
 static PyObject *__pyx_n_s_meth;
@@ -2999,11 +3000,13 @@ static PyObject *__pyx_n_s_n;
 static PyObject *__pyx_n_s_ncv;
 static PyObject *__pyx_n_s_nep_type;
 static PyObject *__pyx_n_s_nev;
+static PyObject *__pyx_n_s_norm_type;
 static PyObject *__pyx_n_s_npart;
 static PyObject *__pyx_n_s_nrest;
 static PyObject *__pyx_n_s_nsv;
 static PyObject *__pyx_n_s_object;
 static PyObject *__pyx_n_s_operators;
+static PyObject *__pyx_n_s_orth;
 static PyObject *__pyx_n_s_patch;
 static PyObject *__pyx_n_s_pep_type;
 static PyObject *__pyx_n_s_petsc4py_PETSc;
@@ -3011,6 +3014,7 @@ static PyObject *__pyx_n_s_prefix;
 static PyObject *__pyx_n_s_prepare;
 static PyObject *__pyx_n_s_problem_type;
 static PyObject *__pyx_n_s_pyx_vtable;
+static PyObject *__pyx_n_s_q;
 static PyObject *__pyx_n_s_qualname;
 static PyObject *__pyx_n_s_radius;
 static PyObject *__pyx_n_s_range;
@@ -3019,34 +3023,44 @@ static PyObject *__pyx_n_s_ref;
 static PyObject *__pyx_n_s_refine;
 static PyObject *__pyx_n_s_release;
 static PyObject *__pyx_n_s_reorthog;
+static PyObject *__pyx_n_s_result;
+static PyObject *__pyx_n_s_rg;
 static PyObject *__pyx_n_s_rg_type;
-static PyObject *__pyx_n_s_rtol;
+static PyObject *__pyx_n_s_s;
 static PyObject *__pyx_n_s_scale;
-static PyObject *__pyx_n_s_schur;
+static PyObject *__pyx_n_s_scheme;
+static PyObject *__pyx_n_s_seq;
+static PyObject *__pyx_n_s_setArray;
 static PyObject *__pyx_n_s_setBV;
 static PyObject *__pyx_n_s_setExtraction;
 static PyObject *__pyx_n_s_setKSP;
 static PyObject *__pyx_n_s_setMatMode;
+static PyObject *__pyx_n_s_setOrthogonalization;
 static PyObject *__pyx_n_s_setProblemType;
 static PyObject *__pyx_n_s_setST;
 static PyObject *__pyx_n_s_setShift;
+static PyObject *__pyx_n_s_setSizes;
 static PyObject *__pyx_n_s_setTarget;
 static PyObject *__pyx_n_s_setTolerances;
 static PyObject *__pyx_n_s_setTransposeMode;
+static PyObject *__pyx_n_s_setType;
+static PyObject *__pyx_n_s_setUp;
 static PyObject *__pyx_n_s_setWhichEigenpairs;
 static PyObject *__pyx_n_s_setWhichSingularTriplets;
 static PyObject *__pyx_n_s_shift;
+static PyObject *__pyx_n_s_sizes;
 static PyObject *__pyx_n_s_slepc4py_SLEPc;
 static PyObject *__pyx_n_s_space;
 static PyObject *__pyx_n_s_split;
 static PyObject *__pyx_n_s_st;
 static PyObject *__pyx_n_s_st_type;
 static PyObject *__pyx_n_s_state;
-static PyObject *__pyx_n_s_stol;
 static PyObject *__pyx_n_s_strip;
 static PyObject *__pyx_n_s_structure;
+static PyObject *__pyx_n_s_subint;
 static PyObject *__pyx_n_s_subminor;
 static PyObject *__pyx_n_s_svd_type;
+static PyObject *__pyx_n_s_t;
 static PyObject *__pyx_n_s_target;
 static PyObject *__pyx_n_s_tau;
 static PyObject *__pyx_n_s_tol;
@@ -3056,16 +3070,437 @@ static PyObject *__pyx_n_s_type;
 static PyObject *__pyx_n_s_v;
 static PyObject *__pyx_n_s_viewer;
 static PyObject *__pyx_n_s_vscale;
+static PyObject *__pyx_n_s_w;
 static PyObject *__pyx_n_s_which;
 static PyObject *__pyx_n_s_x;
 static PyObject *__pyx_n_s_y;
-static PyObject *__pyx_tuple__2;
+static int __pyx_pf_8slepc4py_5SLEPc_6_p_mem___cinit__(struct __pyx_obj_8slepc4py_5SLEPc__p_mem *__pyx_v_self); /* proto */
+static void __pyx_pf_8slepc4py_5SLEPc_6_p_mem_2__dealloc__(struct __pyx_obj_8slepc4py_5SLEPc__p_mem *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_getVersion(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_patch, PyObject *__pyx_v_devel, PyObject *__pyx_v_date, PyObject *__pyx_v_author); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_2getVersionInfo(CYTHON_UNUSED PyTypeObject *__pyx_v_cls); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_2ST___cinit__(struct PySlepcSTObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_2view(struct PySlepcSTObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_4destroy(struct PySlepcSTObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_6reset(struct PySlepcSTObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_8create(struct PySlepcSTObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_10setType(struct PySlepcSTObject *__pyx_v_self, PyObject *__pyx_v_st_type); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_12getType(struct PySlepcSTObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_14setOptionsPrefix(struct PySlepcSTObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_16getOptionsPrefix(struct PySlepcSTObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_18setFromOptions(struct PySlepcSTObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_20setShift(struct PySlepcSTObject *__pyx_v_self, PyObject *__pyx_v_shift); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_22getShift(struct PySlepcSTObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_24setTransform(struct PySlepcSTObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_26getTransform(struct PySlepcSTObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_28setMatMode(struct PySlepcSTObject *__pyx_v_self, PyObject *__pyx_v_mode); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_30getMatMode(struct PySlepcSTObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_32setOperators(struct PySlepcSTObject *__pyx_v_self, PyObject *__pyx_v_operators); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_34getOperators(struct PySlepcSTObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_36setMatStructure(struct PySlepcSTObject *__pyx_v_self, PyObject *__pyx_v_structure); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_38setKSP(struct PySlepcSTObject *__pyx_v_self, struct PyPetscKSPObject *__pyx_v_ksp); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_40getKSP(struct PySlepcSTObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_42setUp(struct PySlepcSTObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_44apply(struct PySlepcSTObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_46applyTranspose(struct PySlepcSTObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_48setCayleyAntishift(struct PySlepcSTObject *__pyx_v_self, PyObject *__pyx_v_tau); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_5shift___get__(struct PySlepcSTObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_2ST_5shift_2__set__(struct PySlepcSTObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_8mat_mode___get__(struct PySlepcSTObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_2ST_8mat_mode_2__set__(struct PySlepcSTObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_3ksp___get__(struct PySlepcSTObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_2ST_3ksp_2__set__(struct PySlepcSTObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_2BV___cinit__(struct PySlepcBVObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_2view(struct PySlepcBVObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_4destroy(struct PySlepcBVObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_6create(struct PySlepcBVObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_8duplicate(struct PySlepcBVObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_10copy(struct PySlepcBVObject *__pyx_v_self, struct PySlepcBVObject *__pyx_v_result); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_12setType(struct PySlepcBVObject *__pyx_v_self, PyObject *__pyx_v_bv_type); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_14getType(struct PySlepcBVObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_16setSizes(struct PySlepcBVObject *__pyx_v_self, PyObject *__pyx_v_sizes, PyObject *__pyx_v_m); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_18setSizesFromVec(struct PySlepcBVObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_w, PyObject *__pyx_v_m); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_20getSizes(struct PySlepcBVObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_22setOptionsPrefix(struct PySlepcBVObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_24getOptionsPrefix(struct PySlepcBVObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_26setFromOptions(struct PySlepcBVObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_28getOrthogonalization(struct PySlepcBVObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_30setOrthogonalization(struct PySlepcBVObject *__pyx_v_self, PyObject *__pyx_v_type, PyObject *__pyx_v_refine, PyObject *__pyx_v_eta, PyObject *__pyx_v_block); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_32getMatrix(struct PySlepcBVObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_34setMatrix(struct PySlepcBVObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, int __pyx_v_indef); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_36applyMatrix(struct PySlepcBVObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_38setActiveColumns(struct PySlepcBVObject *__pyx_v_self, int __pyx_v_l, int __pyx_v_k); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_40getActiveColumns(struct PySlepcBVObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_42scaleColumn(struct PySlepcBVObject *__pyx_v_self, int __pyx_v_j, PyObject *__pyx_v_alpha); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_44scale(struct PySlepcBVObject *__pyx_v_self, PyObject *__pyx_v_alpha); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_46insertVec(struct PySlepcBVObject *__pyx_v_self, int __pyx_v_j, struct PyPetscVecObject *__pyx_v_w); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_48insertVecs(struct PySlepcBVObject *__pyx_v_self, int __pyx_v_s, PyObject *__pyx_v_W, int __pyx_v_orth); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_50dotVec(struct PySlepcBVObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_v); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_52getColumn(struct PySlepcBVObject *__pyx_v_self, int __pyx_v_j); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_54restoreColumn(struct PySlepcBVObject *__pyx_v_self, int __pyx_v_j, struct PyPetscVecObject *__pyx_v_v); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_56dot(struct PySlepcBVObject *__pyx_v_self, struct PySlepcBVObject *__pyx_v_Y); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_58matProject(struct PySlepcBVObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A, struct PySlepcBVObject *__pyx_v_Y); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_60matMult(struct PySlepcBVObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A, struct PySlepcBVObject *__pyx_v_Y); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_62matMultHermitianTranspose(struct PySlepcBVObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A, struct PySlepcBVObject *__pyx_v_Y); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_64multVec(struct PySlepcBVObject *__pyx_v_self, PyObject *__pyx_v_alpha, PyObject *__pyx_v_beta, struct PyPetscVecObject *__pyx_v_y, PyObject *__pyx_v_q); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_66normColumn(struct PySlepcBVObject *__pyx_v_self, int __pyx_v_j, PyObject *__pyx_v_norm_type); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_68norm(struct PySlepcBVObject *__pyx_v_self, PyObject *__pyx_v_norm_type); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_70setRandom(struct PySlepcBVObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_72orthogonalizeVec(struct PySlepcBVObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_v); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_74orthogonalize(struct PySlepcBVObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_R, PyObject *__pyx_v_kargs); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_2DS___cinit__(struct PySlepcDSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_2view(struct PySlepcDSObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_4destroy(struct PySlepcDSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_6reset(struct PySlepcDSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_8create(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_10setType(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_ds_type); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_12getType(struct PySlepcDSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_14setOptionsPrefix(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_16getOptionsPrefix(struct PySlepcDSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_18setFromOptions(struct PySlepcDSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_20allocate(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_ld); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_22getLeadingDimension(struct PySlepcDSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_24setState(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_state); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_26getState(struct PySlepcDSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_28setDimensions(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_n, PyObject *__pyx_v_m, PyObject *__pyx_v_l, PyObject *__pyx_v_k); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_30getDimensions(struct PySlepcDSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_32setMethod(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_meth); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_34getMethod(struct PySlepcDSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_36setCompact(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_comp); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_38getCompact(struct PySlepcDSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_40setExtraRow(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_ext); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_42getExtraRow(struct PySlepcDSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_44setRefined(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_ref); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_46getRefined(struct PySlepcDSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_48truncate(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_n); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_50updateExtraRow(struct PySlepcDSObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_2FN___cinit__(struct PySlepcFNObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_2view(struct PySlepcFNObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_4destroy(struct PySlepcFNObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_6create(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_8setType(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_fn_type); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_10getType(struct PySlepcFNObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_12setOptionsPrefix(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_14getOptionsPrefix(struct PySlepcFNObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_16setFromOptions(struct PySlepcFNObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_18evaluateFunction(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_20evaluateDerivative(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_22setScale(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_alpha, PyObject *__pyx_v_beta); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_24getScale(struct PySlepcFNObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_26setRationalNumerator(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_alpha); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_28setRationalDenominator(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_alpha); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_2RG___cinit__(struct PySlepcRGObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_2view(struct PySlepcRGObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_4destroy(struct PySlepcRGObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_6create(struct PySlepcRGObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_8setType(struct PySlepcRGObject *__pyx_v_self, PyObject *__pyx_v_rg_type); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_10getType(struct PySlepcRGObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_12setOptionsPrefix(struct PySlepcRGObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_14getOptionsPrefix(struct PySlepcRGObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_16setFromOptions(struct PySlepcRGObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_18isTrivial(struct PySlepcRGObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_20getComplement(struct PySlepcRGObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_22setComplement(struct PySlepcRGObject *__pyx_v_self, PyObject *__pyx_v_comp); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_24setEllipseParameters(struct PySlepcRGObject *__pyx_v_self, PyObject *__pyx_v_center, PyObject *__pyx_v_radius, PyObject *__pyx_v_vscale); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_26getEllipseParameters(struct PySlepcRGObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_28setIntervalEndpoints(struct PySlepcRGObject *__pyx_v_self, PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_30getIntervalEndpoints(struct PySlepcRGObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_3EPS___cinit__(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_2view(struct PySlepcEPSObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_4destroy(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_6reset(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_8create(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_10setType(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_eps_type); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_12getType(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_14getOptionsPrefix(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_16setOptionsPrefix(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_18appendOptionsPrefix(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_20setFromOptions(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_22getProblemType(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_24setProblemType(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_problem_type); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_26isGeneralized(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_28isHermitian(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_30isPositive(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_32getBalance(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_34setBalance(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_balance, PyObject *__pyx_v_iterations, PyObject *__pyx_v_cutoff); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_36getExtraction(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_38setExtraction(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_extraction); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_40getWhichEigenpairs(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_42setWhichEigenpairs(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_which); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_44getTarget(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_46setTarget(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_target); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_48getInterval(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_50setInterval(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_inta, PyObject *__pyx_v_intb); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_52getTolerances(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_54setTolerances(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_tol, PyObject *__pyx_v_max_it); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_56getConvergenceTest(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_58setConvergenceTest(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_conv); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_60getTrueResidual(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_62setTrueResidual(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_trueres); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_64getTrackAll(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_66setTrackAll(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_trackall); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_68getDimensions(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_70setDimensions(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_nev, PyObject *__pyx_v_ncv, PyObject *__pyx_v_mpd); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_72getST(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_74setST(struct PySlepcEPSObject *__pyx_v_self, struct PySlepcSTObject *__pyx_v_st); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_76getBV(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_78setBV(struct PySlepcEPSObject *__pyx_v_self, struct PySlepcBVObject *__pyx_v_bv); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_80getDS(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_82setDS(struct PySlepcEPSObject *__pyx_v_self, struct PySlepcDSObject *__pyx_v_ds); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_84getRG(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_86setRG(struct PySlepcEPSObject *__pyx_v_self, struct PySlepcRGObject *__pyx_v_rg); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_88getOperators(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_90setOperators(struct PySlepcEPSObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A, struct PyPetscMatObject *__pyx_v_B); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_92setDeflationSpace(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_space); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_94setInitialSpace(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_space); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_96cancelMonitor(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_98setUp(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_100solve(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_102getIterationNumber(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_104getConvergedReason(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_106getConverged(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_108getEigenvalue(struct PySlepcEPSObject *__pyx_v_self, int __pyx_v_i); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_110getEigenvector(struct PySlepcEPSObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_Vr, struct PyPetscVecObject *__pyx_v_Vi); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_112getEigenpair(struct PySlepcEPSObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_Vr, struct PyPetscVecObject *__pyx_v_Vi); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_114getInvariantSubspace(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_116getErrorEstimate(struct PySlepcEPSObject *__pyx_v_self, int __pyx_v_i); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_118computeError(struct PySlepcEPSObject *__pyx_v_self, int __pyx_v_i, PyObject *__pyx_v_etype); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_120errorView(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_etype, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_122setPowerShiftType(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_shift); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_124getPowerShiftType(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_126setArnoldiDelayed(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_delayed); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_128getArnoldiDelayed(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_130setLanczosReorthogType(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_reorthog); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_132getLanczosReorthogType(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_134setKrylovSchurRestart(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_keep); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_136getKrylovSchurRestart(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_138setKrylovSchurLocking(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_lock); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_140getKrylovSchurLocking(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_142setKrylovSchurPartitions(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_npart); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_144getKrylovSchurPartitions(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_146setKrylovSchurDetectZeros(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_detect); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_148getKrylovSchurDetectZeros(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_150setKrylovSchurDimensions(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_nev, PyObject *__pyx_v_ncv, PyObject *__pyx_v_mpd); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_152getKrylovSchurDimensions(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_154getKrylovSchurSubcommInfo(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_156getKrylovSchurSubcommPairs(struct PySlepcEPSObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_V); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_158getKrylovSchurSubcommMats(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_160updateKrylovSchurSubcommMats(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_s, PyObject *__pyx_v_a, struct PyPetscMatObject *__pyx_v_Au, PyObject *__pyx_v_t, PyObject *__pyx_v_b, struct PyPetscMatObject *__pyx_v_Bu, PyObject *__pyx_v_structure, PyObject *__pyx_v_globalup); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_162setKrylovSchurSubintervals(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_subint); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_164setRQCGReset(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_nrest); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_166getRQCGReset(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_12problem_type___get__(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_3EPS_12problem_type_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_10extraction___get__(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_3EPS_10extraction_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_5which___get__(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_3EPS_5which_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_6target___get__(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_3EPS_6target_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_3tol___get__(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_3EPS_3tol_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_6max_it___get__(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_3EPS_6max_it_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_2st___get__(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_3EPS_2st_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_2bv___get__(struct PySlepcEPSObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_3EPS_2bv_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_3SVD___cinit__(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_2view(struct PySlepcSVDObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_4destroy(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_6reset(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_8create(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_10setType(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_svd_type); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_12getType(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_14getOptionsPrefix(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_16setOptionsPrefix(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_18appendOptionsPrefix(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_20setFromOptions(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_22getImplicitTranspose(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_24setImplicitTranspose(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_mode); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_26getWhichSingularTriplets(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_28setWhichSingularTriplets(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_which); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_30getTolerances(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_32setTolerances(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_tol, PyObject *__pyx_v_max_it); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_34getDimensions(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_36setDimensions(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_nsv, PyObject *__pyx_v_ncv, PyObject *__pyx_v_mpd); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_38getBV(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_40setBV(struct PySlepcSVDObject *__pyx_v_self, struct PySlepcBVObject *__pyx_v_V, struct PySlepcBVObject *__pyx_v_U); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_42getOperator(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_44setOperator(struct PySlepcSVDObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_46setInitialSpace(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_space); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_48cancelMonitor(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_50setUp(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_52solve(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_54getIterationNumber(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_56getConvergedReason(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_58getConverged(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_60getValue(struct PySlepcSVDObject *__pyx_v_self, int __pyx_v_i); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_62getVectors(struct PySlepcSVDObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_U, struct PyPetscVecObject *__pyx_v_V); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_64getSingularTriplet(struct PySlepcSVDObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_U, struct PyPetscVecObject *__pyx_v_V); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_66computeError(struct PySlepcSVDObject *__pyx_v_self, int __pyx_v_i, PyObject *__pyx_v_etype); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_68errorView(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_etype, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_70setCrossEPS(struct PySlepcSVDObject *__pyx_v_self, struct PySlepcEPSObject *__pyx_v_eps); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_72getCrossEPS(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_74setCyclicEPS(struct PySlepcSVDObject *__pyx_v_self, struct PySlepcEPSObject *__pyx_v_eps); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_76getCyclicEPS(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_78setCyclicExplicitMatrix(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_80getCyclicExplicitMatrix(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_82setLanczosOneSide(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_84setTRLanczosOneSide(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_14transpose_mode___get__(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_3SVD_14transpose_mode_2__set__(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_5which___get__(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_3SVD_5which_2__set__(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_3tol___get__(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_3SVD_3tol_2__set__(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_6max_it___get__(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_3SVD_6max_it_2__set__(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_2bv___get__(struct PySlepcSVDObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_3SVD_2bv_2__set__(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_3PEP___cinit__(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_2view(struct PySlepcPEPObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_4destroy(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_6reset(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_8create(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_10setType(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_pep_type); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_12getType(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_14getOptionsPrefix(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_16setOptionsPrefix(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_18appendOptionsPrefix(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_20setFromOptions(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_22getBasis(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_24setBasis(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_basis); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_26getProblemType(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_28setProblemType(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_problem_type); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_30getWhichEigenpairs(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_32setWhichEigenpairs(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_which); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_34getTolerances(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_36setTolerances(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_tol, PyObject *__pyx_v_max_it); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_38getConvergenceTest(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_40setConvergenceTest(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_conv); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_42getRefine(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_44setRefine(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_ref, PyObject *__pyx_v_npart, PyObject *__pyx_v_tol, PyObject *__pyx_v_its, PyObject *__pyx_v_scheme); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_46getTrackAll(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_48setTrackAll(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_trackall); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_50getDimensions(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_52setDimensions(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_nev, PyObject *__pyx_v_ncv, PyObject *__pyx_v_mpd); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_54getST(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_56setST(struct PySlepcPEPObject *__pyx_v_self, struct PySlepcSTObject *__pyx_v_st); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_58getScale(struct PySlepcPEPObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_Dl, struct PyPetscVecObject *__pyx_v_Dr); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_60setScale(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_scale, PyObject *__pyx_v_alpha, struct PyPetscVecObject *__pyx_v_Dl, struct PyPetscVecObject *__pyx_v_Dr, PyObject *__pyx_v_its, PyObject *__pyx_v_lbda); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_62getBV(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_64setBV(struct PySlepcPEPObject *__pyx_v_self, struct PySlepcBVObject *__pyx_v_bv); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_66getRG(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_68setRG(struct PySlepcPEPObject *__pyx_v_self, struct PySlepcRGObject *__pyx_v_rg); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_70getOperators(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_72setOperators(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_operators); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_74setInitialSpace(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_space); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_76cancelMonitor(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_78setUp(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_80solve(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_82getIterationNumber(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_84getConvergedReason(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_86getConverged(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_88getEigenpair(struct PySlepcPEPObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_Vr, struct PyPetscVecObject *__pyx_v_Vi); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_90getErrorEstimate(struct PySlepcPEPObject *__pyx_v_self, int __pyx_v_i); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_92computeError(struct PySlepcPEPObject *__pyx_v_self, int __pyx_v_i, PyObject *__pyx_v_etype); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_94errorView(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_etype, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_96setLinearEPS(struct PySlepcPEPObject *__pyx_v_self, struct PySlepcEPSObject *__pyx_v_eps); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_98getLinearEPS(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_100setLinearCompanionForm(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_cform); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_102getLinearCompanionForm(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_104setLinearExplicitMatrix(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_106getLinearExplicitMatrix(struct PySlepcPEPObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_3NEP___cinit__(struct PySlepcNEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_2view(struct PySlepcNEPObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_4destroy(struct PySlepcNEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_6reset(struct PySlepcNEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_8create(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_10setType(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_nep_type); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_12getType(struct PySlepcNEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_14getOptionsPrefix(struct PySlepcNEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_16setOptionsPrefix(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_18appendOptionsPrefix(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_20setFromOptions(struct PySlepcNEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_22getWhichEigenpairs(struct PySlepcNEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_24setWhichEigenpairs(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_which); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_26getTolerances(struct PySlepcNEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_28setTolerances(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_tol, PyObject *__pyx_v_maxit); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_30getRIILagPreconditioner(struct PySlepcNEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_32setRIILagPreconditioner(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_lag); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_34getTrackAll(struct PySlepcNEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_36setTrackAll(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_trackall); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_38getDimensions(struct PySlepcNEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_40setDimensions(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_nev, PyObject *__pyx_v_ncv, PyObject *__pyx_v_mpd); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_42getBV(struct PySlepcNEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_44setBV(struct PySlepcNEPObject *__pyx_v_self, struct PySlepcBVObject *__pyx_v_bv); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_46getRG(struct PySlepcNEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_48setRG(struct PySlepcNEPObject *__pyx_v_self, struct PySlepcRGObject *__pyx_v_rg); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_50setInitialSpace(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_space); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_52cancelMonitor(struct PySlepcNEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_54setUp(struct PySlepcNEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_56solve(struct PySlepcNEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_58getIterationNumber(struct PySlepcNEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_60getConvergedReason(struct PySlepcNEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_62getConverged(struct PySlepcNEPObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_64getEigenpair(struct PySlepcNEPObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_Vr, struct PyPetscVecObject *__pyx_v_Vi); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_66getErrorEstimate(struct PySlepcNEPObject *__pyx_v_self, int __pyx_v_i); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_68computeError(struct PySlepcNEPObject *__pyx_v_self, int __pyx_v_i, PyObject *__pyx_v_etype); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_70errorView(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_etype, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_72setFunction(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_function, struct PyPetscMatObject *__pyx_v_F, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_74setJacobian(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_jacobian, struct PyPetscMatObject *__pyx_v_J, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_76setSplitOperator(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_A, PyObject *__pyx_v_f, PyObject *__pyx_v_structure); /* proto */
+static int __pyx_pf_8slepc4py_5SLEPc_3MFN___cinit__(struct PySlepcMFNObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_2view(struct PySlepcMFNObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_4destroy(struct PySlepcMFNObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_6reset(struct PySlepcMFNObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_8create(struct PySlepcMFNObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_10setType(struct PySlepcMFNObject *__pyx_v_self, PyObject *__pyx_v_mfn_type); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_12getType(struct PySlepcMFNObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_14getOptionsPrefix(struct PySlepcMFNObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_16setOptionsPrefix(struct PySlepcMFNObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_18appendOptionsPrefix(struct PySlepcMFNObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_20setFromOptions(struct PySlepcMFNObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_22getTolerances(struct PySlepcMFNObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_24setTolerances(struct PySlepcMFNObject *__pyx_v_self, PyObject *__pyx_v_tol, PyObject *__pyx_v_max_it); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_26getDimensions(struct PySlepcMFNObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_28setDimensions(struct PySlepcMFNObject *__pyx_v_self, PyObject *__pyx_v_ncv); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_30getFN(struct PySlepcMFNObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_32setFN(struct PySlepcMFNObject *__pyx_v_self, struct PySlepcFNObject *__pyx_v_fn); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_34getBV(struct PySlepcMFNObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_36setBV(struct PySlepcMFNObject *__pyx_v_self, struct PySlepcBVObject *__pyx_v_bv); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_38getOperator(struct PySlepcMFNObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_40setOperator(struct PySlepcMFNObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_42cancelMonitor(struct PySlepcMFNObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_44setUp(struct PySlepcMFNObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_46solve(struct PySlepcMFNObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_48getIterationNumber(struct PySlepcMFNObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_50getConvergedReason(struct PySlepcMFNObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc__initialize(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_args); /* proto */
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2_finalize(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_ST(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_BV(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_DS(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_FN(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_RG(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_EPS(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_SVD(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_PEP(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_NEP(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_MFN(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8slepc4py_5SLEPc__p_mem(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_Sys(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_float_1_0;
+static PyObject *__pyx_int_0;
+static PyObject *__pyx_tuple_;
 static PyObject *__pyx_tuple__3;
 static PyObject *__pyx_tuple__4;
-static PyObject *__pyx_codeobj__5;
-static PyObject *__pyx_codeobj__6;
+static PyObject *__pyx_tuple__5;
+static PyObject *__pyx_tuple__6;
+static PyObject *__pyx_codeobj__7;
+static PyObject *__pyx_codeobj__8;
 
-/* "SLEPc/SLEPc.pyx":24
+/* "SLEPc/SLEPc.pyx":26
  *     ctypedef char const_char "const char"
  * 
  * cdef inline object bytes2str(const_char p[]):             # <<<<<<<<<<<<<<
@@ -3080,12 +3515,9 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_bytes2str(const char *__
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("bytes2str", 0);
 
-  /* "SLEPc/SLEPc.pyx":25
+  /* "SLEPc/SLEPc.pyx":27
  * 
  * cdef inline object bytes2str(const_char p[]):
  *      if p == NULL:             # <<<<<<<<<<<<<<
@@ -3095,7 +3527,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_bytes2str(const char *__
   __pyx_t_1 = ((__pyx_v_p == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "SLEPc/SLEPc.pyx":26
+    /* "SLEPc/SLEPc.pyx":28
  * cdef inline object bytes2str(const_char p[]):
  *      if p == NULL:
  *          return None             # <<<<<<<<<<<<<<
@@ -3106,21 +3538,29 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_bytes2str(const char *__
     __Pyx_INCREF(Py_None);
     __pyx_r = Py_None;
     goto __pyx_L0;
+
+    /* "SLEPc/SLEPc.pyx":27
+ * 
+ * cdef inline object bytes2str(const_char p[]):
+ *      if p == NULL:             # <<<<<<<<<<<<<<
+ *          return None
+ *      cdef bytes s = <char*>p
+ */
   }
 
-  /* "SLEPc/SLEPc.pyx":27
+  /* "SLEPc/SLEPc.pyx":29
  *      if p == NULL:
  *          return None
  *      cdef bytes s = <char*>p             # <<<<<<<<<<<<<<
  *      if isinstance(s, str):
  *          return s
  */
-  __pyx_t_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_p)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_p)); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 29, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_s = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "SLEPc/SLEPc.pyx":28
+  /* "SLEPc/SLEPc.pyx":30
  *          return None
  *      cdef bytes s = <char*>p
  *      if isinstance(s, str):             # <<<<<<<<<<<<<<
@@ -3131,7 +3571,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_bytes2str(const char *__
   __pyx_t_3 = (__pyx_t_1 != 0);
   if (__pyx_t_3) {
 
-    /* "SLEPc/SLEPc.pyx":29
+    /* "SLEPc/SLEPc.pyx":31
  *      cdef bytes s = <char*>p
  *      if isinstance(s, str):
  *          return s             # <<<<<<<<<<<<<<
@@ -3142,25 +3582,33 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_bytes2str(const char *__
     __Pyx_INCREF(__pyx_v_s);
     __pyx_r = __pyx_v_s;
     goto __pyx_L0;
+
+    /* "SLEPc/SLEPc.pyx":30
+ *          return None
+ *      cdef bytes s = <char*>p
+ *      if isinstance(s, str):             # <<<<<<<<<<<<<<
+ *          return s
+ *      else:
+ */
   }
-  /*else*/ {
 
-    /* "SLEPc/SLEPc.pyx":31
+  /* "SLEPc/SLEPc.pyx":33
  *          return s
  *      else:
  *          return s.decode()             # <<<<<<<<<<<<<<
  * 
  * cdef inline object str2bytes(object s, const_char *p[]):
  */
+  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_2 = __Pyx_decode_bytes(__pyx_v_s, 0, PY_SSIZE_T_MAX, NULL, NULL, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_decode_bytes(__pyx_v_s, 0, PY_SSIZE_T_MAX, NULL, NULL, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 33, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_r = __pyx_t_2;
     __pyx_t_2 = 0;
     goto __pyx_L0;
   }
 
-  /* "SLEPc/SLEPc.pyx":24
+  /* "SLEPc/SLEPc.pyx":26
  *     ctypedef char const_char "const char"
  * 
  * cdef inline object bytes2str(const_char p[]):             # <<<<<<<<<<<<<<
@@ -3180,7 +3628,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_bytes2str(const char *__
   return __pyx_r;
 }
 
-/* "SLEPc/SLEPc.pyx":33
+/* "SLEPc/SLEPc.pyx":35
  *          return s.decode()
  * 
  * cdef inline object str2bytes(object s, const_char *p[]):             # <<<<<<<<<<<<<<
@@ -3197,13 +3645,10 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_str2bytes(PyObject *__py
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   char *__pyx_t_6;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("str2bytes", 0);
   __Pyx_INCREF(__pyx_v_s);
 
-  /* "SLEPc/SLEPc.pyx":34
+  /* "SLEPc/SLEPc.pyx":36
  * 
  * cdef inline object str2bytes(object s, const_char *p[]):
  *     if s is None:             # <<<<<<<<<<<<<<
@@ -3214,7 +3659,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_str2bytes(PyObject *__py
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "SLEPc/SLEPc.pyx":35
+    /* "SLEPc/SLEPc.pyx":37
  * cdef inline object str2bytes(object s, const_char *p[]):
  *     if s is None:
  *         p[0] = NULL             # <<<<<<<<<<<<<<
@@ -3223,7 +3668,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_str2bytes(PyObject *__py
  */
     (__pyx_v_p[0]) = NULL;
 
-    /* "SLEPc/SLEPc.pyx":36
+    /* "SLEPc/SLEPc.pyx":38
  *     if s is None:
  *         p[0] = NULL
  *         return None             # <<<<<<<<<<<<<<
@@ -3234,9 +3679,17 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_str2bytes(PyObject *__py
     __Pyx_INCREF(Py_None);
     __pyx_r = Py_None;
     goto __pyx_L0;
+
+    /* "SLEPc/SLEPc.pyx":36
+ * 
+ * cdef inline object str2bytes(object s, const_char *p[]):
+ *     if s is None:             # <<<<<<<<<<<<<<
+ *         p[0] = NULL
+ *         return None
+ */
   }
 
-  /* "SLEPc/SLEPc.pyx":37
+  /* "SLEPc/SLEPc.pyx":39
  *         p[0] = NULL
  *         return None
  *     if not isinstance(s, bytes):             # <<<<<<<<<<<<<<
@@ -3247,14 +3700,14 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_str2bytes(PyObject *__py
   __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "SLEPc/SLEPc.pyx":38
+    /* "SLEPc/SLEPc.pyx":40
  *         return None
  *     if not isinstance(s, bytes):
  *         s = s.encode()             # <<<<<<<<<<<<<<
  *     p[0] = <const_char*>(<char*>s)
  *     return s
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_s, __pyx_n_s_encode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_s, __pyx_n_s_encode); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 40, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -3267,30 +3720,36 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_str2bytes(PyObject *__py
       }
     }
     if (__pyx_t_5) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 40, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     } else {
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 40, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF_SET(__pyx_v_s, __pyx_t_3);
     __pyx_t_3 = 0;
-    goto __pyx_L4;
+
+    /* "SLEPc/SLEPc.pyx":39
+ *         p[0] = NULL
+ *         return None
+ *     if not isinstance(s, bytes):             # <<<<<<<<<<<<<<
+ *         s = s.encode()
+ *     p[0] = <const_char*>(<char*>s)
+ */
   }
-  __pyx_L4:;
 
-  /* "SLEPc/SLEPc.pyx":39
+  /* "SLEPc/SLEPc.pyx":41
  *     if not isinstance(s, bytes):
  *         s = s.encode()
  *     p[0] = <const_char*>(<char*>s)             # <<<<<<<<<<<<<<
  *     return s
  * 
  */
-  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_s); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_s); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(4, 41, __pyx_L1_error)
   (__pyx_v_p[0]) = ((const char *)((char *)__pyx_t_6));
 
-  /* "SLEPc/SLEPc.pyx":40
+  /* "SLEPc/SLEPc.pyx":42
  *         s = s.encode()
  *     p[0] = <const_char*>(<char*>s)
  *     return s             # <<<<<<<<<<<<<<
@@ -3302,7 +3761,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_str2bytes(PyObject *__py
   __pyx_r = __pyx_v_s;
   goto __pyx_L0;
 
-  /* "SLEPc/SLEPc.pyx":33
+  /* "SLEPc/SLEPc.pyx":35
  *          return s.decode()
  * 
  * cdef inline object str2bytes(object s, const_char *p[]):             # <<<<<<<<<<<<<<
@@ -3324,7 +3783,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_str2bytes(PyObject *__py
   return __pyx_r;
 }
 
-/* "SLEPc/SLEPc.pyx":42
+/* "SLEPc/SLEPc.pyx":44
  *     return s
  * 
  * cdef inline object S_(const_char p[]):             # <<<<<<<<<<<<<<
@@ -3341,12 +3800,9 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_S_(const char *__pyx_v_p
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("S_", 0);
 
-  /* "SLEPc/SLEPc.pyx":43
+  /* "SLEPc/SLEPc.pyx":45
  * 
  * cdef inline object S_(const_char p[]):
  *      if p == NULL: return None             # <<<<<<<<<<<<<<
@@ -3361,19 +3817,19 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_S_(const char *__pyx_v_p
     goto __pyx_L0;
   }
 
-  /* "SLEPc/SLEPc.pyx":44
+  /* "SLEPc/SLEPc.pyx":46
  * cdef inline object S_(const_char p[]):
  *      if p == NULL: return None
  *      cdef object s = <char*>p             # <<<<<<<<<<<<<<
  *      return s if isinstance(s, str) else s.decode()
  * 
  */
-  __pyx_t_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_p)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_p)); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 46, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_s = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "SLEPc/SLEPc.pyx":45
+  /* "SLEPc/SLEPc.pyx":47
  *      if p == NULL: return None
  *      cdef object s = <char*>p
  *      return s if isinstance(s, str) else s.decode()             # <<<<<<<<<<<<<<
@@ -3386,7 +3842,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_S_(const char *__pyx_v_p
     __Pyx_INCREF(__pyx_v_s);
     __pyx_t_2 = __pyx_v_s;
   } else {
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_s, __pyx_n_s_decode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_s, __pyx_n_s_decode); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 47, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -3399,10 +3855,10 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_S_(const char *__pyx_v_p
       }
     }
     if (__pyx_t_5) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 47, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     } else {
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 47, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -3413,7 +3869,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_S_(const char *__pyx_v_p
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/SLEPc.pyx":42
+  /* "SLEPc/SLEPc.pyx":44
  *     return s
  * 
  * cdef inline object S_(const_char p[]):             # <<<<<<<<<<<<<<
@@ -3548,9 +4004,6 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_allocate(size_t __pyx_v_
   PyObject *__pyx_t_2 = NULL;
   int __pyx_t_3;
   void *__pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("allocate", 0);
 
   /* "SLEPc/allocate.pxi":19
@@ -3560,7 +4013,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_allocate(size_t __pyx_v_
  *     ob.buf = PyMem_Malloc(<size_t>n)
  *     if ob.buf == NULL: raise MemoryError
  */
-  __pyx_t_1 = __pyx_tp_new_8slepc4py_5SLEPc__p_mem(((PyTypeObject *)((PyObject*)__pyx_ptype_8slepc4py_5SLEPc__p_mem)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_tp_new_8slepc4py_5SLEPc__p_mem(((PyTypeObject *)__pyx_ptype_8slepc4py_5SLEPc__p_mem), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 19, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -3586,7 +4039,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_allocate(size_t __pyx_v_
  */
   __pyx_t_3 = ((__pyx_v_ob->buf == NULL) != 0);
   if (__pyx_t_3) {
-    PyErr_NoMemory(); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyErr_NoMemory(); __PYX_ERR(1, 21, __pyx_L1_error)
   }
 
   /* "SLEPc/allocate.pxi":22
@@ -3600,9 +4053,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_allocate(size_t __pyx_v_
   if (__pyx_t_3) {
     __pyx_t_4 = __pyx_v_ob->buf;
     (__pyx_v_buf[0]) = __pyx_t_4;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
   /* "SLEPc/allocate.pxi":23
  *     if ob.buf == NULL: raise MemoryError
@@ -3637,7 +4088,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_allocate(size_t __pyx_v_
   return __pyx_r;
 }
 
-/* "SLEPc/SLEPc.pyx":63
+/* "SLEPc/SLEPc.pyx":65
  * from petsc4py.PETSc import Error as PetscError
  * 
  * cdef inline int SETERR(int ierr) with gil:             # <<<<<<<<<<<<<<
@@ -3651,15 +4102,12 @@ static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_SETERR(int __pyx_v_ierr) {
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SETERR", 0);
 
-  /* "SLEPc/SLEPc.pyx":64
+  /* "SLEPc/SLEPc.pyx":66
  * 
  * cdef inline int SETERR(int ierr) with gil:
  *     if (<void*>PetscError) != NULL:             # <<<<<<<<<<<<<<
@@ -3669,7 +4117,7 @@ static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_SETERR(int __pyx_v_ierr) {
   __pyx_t_1 = ((((void *)__pyx_v_8slepc4py_5SLEPc_PetscError) != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "SLEPc/SLEPc.pyx":65
+    /* "SLEPc/SLEPc.pyx":67
  * cdef inline int SETERR(int ierr) with gil:
  *     if (<void*>PetscError) != NULL:
  *         PyErr_SetObject(PetscError, <long>ierr)             # <<<<<<<<<<<<<<
@@ -3678,25 +4126,33 @@ static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_SETERR(int __pyx_v_ierr) {
  */
     __pyx_t_2 = __pyx_v_8slepc4py_5SLEPc_PetscError;
     __Pyx_INCREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyInt_From_long(((long)__pyx_v_ierr)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyInt_From_long(((long)__pyx_v_ierr)); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 67, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     PyErr_SetObject(__pyx_t_2, __pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+    /* "SLEPc/SLEPc.pyx":66
+ * 
+ * cdef inline int SETERR(int ierr) with gil:
+ *     if (<void*>PetscError) != NULL:             # <<<<<<<<<<<<<<
+ *         PyErr_SetObject(PetscError, <long>ierr)
+ *     else:
+ */
     goto __pyx_L3;
   }
-  /*else*/ {
 
-    /* "SLEPc/SLEPc.pyx":67
+  /* "SLEPc/SLEPc.pyx":69
  *         PyErr_SetObject(PetscError, <long>ierr)
  *     else:
  *         PyErr_SetObject(<object>PyExc_RuntimeError, <long>ierr)             # <<<<<<<<<<<<<<
  *     return ierr
  * 
  */
+  /*else*/ {
     __pyx_t_3 = ((PyObject *)PyExc_RuntimeError);
     __Pyx_INCREF(__pyx_t_3);
-    __pyx_t_2 = __Pyx_PyInt_From_long(((long)__pyx_v_ierr)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyInt_From_long(((long)__pyx_v_ierr)); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 69, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     PyErr_SetObject(__pyx_t_3, __pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -3704,7 +4160,7 @@ static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_SETERR(int __pyx_v_ierr) {
   }
   __pyx_L3:;
 
-  /* "SLEPc/SLEPc.pyx":68
+  /* "SLEPc/SLEPc.pyx":70
  *     else:
  *         PyErr_SetObject(<object>PyExc_RuntimeError, <long>ierr)
  *     return ierr             # <<<<<<<<<<<<<<
@@ -3714,7 +4170,7 @@ static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_SETERR(int __pyx_v_ierr) {
   __pyx_r = __pyx_v_ierr;
   goto __pyx_L0;
 
-  /* "SLEPc/SLEPc.pyx":63
+  /* "SLEPc/SLEPc.pyx":65
  * from petsc4py.PETSc import Error as PetscError
  * 
  * cdef inline int SETERR(int ierr) with gil:             # <<<<<<<<<<<<<<
@@ -3736,7 +4192,7 @@ static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_SETERR(int __pyx_v_ierr) {
   return __pyx_r;
 }
 
-/* "SLEPc/SLEPc.pyx":70
+/* "SLEPc/SLEPc.pyx":72
  *     return ierr
  * 
  * cdef inline int CHKERR(int ierr) nogil except -1:             # <<<<<<<<<<<<<<
@@ -3748,7 +4204,7 @@ static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_CHKERR(int __pyx_v_ierr) {
   int __pyx_r;
   int __pyx_t_1;
 
-  /* "SLEPc/SLEPc.pyx":71
+  /* "SLEPc/SLEPc.pyx":73
  * 
  * cdef inline int CHKERR(int ierr) nogil except -1:
  *     if ierr == 0:             # <<<<<<<<<<<<<<
@@ -3758,7 +4214,7 @@ static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_CHKERR(int __pyx_v_ierr) {
   __pyx_t_1 = ((__pyx_v_ierr == 0) != 0);
   if (__pyx_t_1) {
 
-    /* "SLEPc/SLEPc.pyx":72
+    /* "SLEPc/SLEPc.pyx":74
  * cdef inline int CHKERR(int ierr) nogil except -1:
  *     if ierr == 0:
  *         return 0  # no error             # <<<<<<<<<<<<<<
@@ -3767,9 +4223,17 @@ static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_CHKERR(int __pyx_v_ierr) {
  */
     __pyx_r = 0;
     goto __pyx_L0;
+
+    /* "SLEPc/SLEPc.pyx":73
+ * 
+ * cdef inline int CHKERR(int ierr) nogil except -1:
+ *     if ierr == 0:             # <<<<<<<<<<<<<<
+ *         return 0  # no error
+ *     if ierr == PETSC_ERR_PYTHON:
+ */
   }
 
-  /* "SLEPc/SLEPc.pyx":73
+  /* "SLEPc/SLEPc.pyx":75
  *     if ierr == 0:
  *         return 0  # no error
  *     if ierr == PETSC_ERR_PYTHON:             # <<<<<<<<<<<<<<
@@ -3779,7 +4243,7 @@ static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_CHKERR(int __pyx_v_ierr) {
   __pyx_t_1 = ((__pyx_v_ierr == (-1)) != 0);
   if (__pyx_t_1) {
 
-    /* "SLEPc/SLEPc.pyx":74
+    /* "SLEPc/SLEPc.pyx":76
  *         return 0  # no error
  *     if ierr == PETSC_ERR_PYTHON:
  *         return -1 # Python error             # <<<<<<<<<<<<<<
@@ -3788,9 +4252,17 @@ static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_CHKERR(int __pyx_v_ierr) {
  */
     __pyx_r = -1;
     goto __pyx_L0;
+
+    /* "SLEPc/SLEPc.pyx":75
+ *     if ierr == 0:
+ *         return 0  # no error
+ *     if ierr == PETSC_ERR_PYTHON:             # <<<<<<<<<<<<<<
+ *         return -1 # Python error
+ *     SETERR(ierr)
+ */
   }
 
-  /* "SLEPc/SLEPc.pyx":75
+  /* "SLEPc/SLEPc.pyx":77
  *     if ierr == PETSC_ERR_PYTHON:
  *         return -1 # Python error
  *     SETERR(ierr)             # <<<<<<<<<<<<<<
@@ -3799,7 +4271,7 @@ static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_CHKERR(int __pyx_v_ierr) {
  */
   __pyx_f_8slepc4py_5SLEPc_SETERR(__pyx_v_ierr);
 
-  /* "SLEPc/SLEPc.pyx":76
+  /* "SLEPc/SLEPc.pyx":78
  *         return -1 # Python error
  *     SETERR(ierr)
  *     return -1             # <<<<<<<<<<<<<<
@@ -3809,7 +4281,7 @@ static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_CHKERR(int __pyx_v_ierr) {
   __pyx_r = -1;
   goto __pyx_L0;
 
-  /* "SLEPc/SLEPc.pyx":70
+  /* "SLEPc/SLEPc.pyx":72
  *     return ierr
  * 
  * cdef inline int CHKERR(int ierr) nogil except -1:             # <<<<<<<<<<<<<<
@@ -3822,7 +4294,7 @@ static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_CHKERR(int __pyx_v_ierr) {
   return __pyx_r;
 }
 
-/* "SLEPc/SLEPc.pyx":94
+/* "SLEPc/SLEPc.pyx":96
  *     PetscScalar PyPetscScalar_AsPetscScalar(object) except*
  * 
  * cdef inline object toInt(PetscInt value):             # <<<<<<<<<<<<<<
@@ -3834,12 +4306,9 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_toInt(PetscInt __pyx_v_v
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("toInt", 0);
 
-  /* "SLEPc/SLEPc.pyx":95
+  /* "SLEPc/SLEPc.pyx":97
  * 
  * cdef inline object toInt(PetscInt value):
  *     return value             # <<<<<<<<<<<<<<
@@ -3847,13 +4316,13 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_toInt(PetscInt __pyx_v_v
  *     return value
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_PetscInt(__pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_PetscInt(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 97, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/SLEPc.pyx":94
+  /* "SLEPc/SLEPc.pyx":96
  *     PetscScalar PyPetscScalar_AsPetscScalar(object) except*
  * 
  * cdef inline object toInt(PetscInt value):             # <<<<<<<<<<<<<<
@@ -3872,7 +4341,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_toInt(PetscInt __pyx_v_v
   return __pyx_r;
 }
 
-/* "SLEPc/SLEPc.pyx":96
+/* "SLEPc/SLEPc.pyx":98
  * cdef inline object toInt(PetscInt value):
  *     return value
  * cdef inline PetscInt asInt(object value) except? -1:             # <<<<<<<<<<<<<<
@@ -3884,23 +4353,20 @@ static CYTHON_INLINE PetscInt __pyx_f_8slepc4py_5SLEPc_asInt(PyObject *__pyx_v_v
   PetscInt __pyx_r;
   __Pyx_RefNannyDeclarations
   PetscInt __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("asInt", 0);
 
-  /* "SLEPc/SLEPc.pyx":97
+  /* "SLEPc/SLEPc.pyx":99
  *     return value
  * cdef inline PetscInt asInt(object value) except? -1:
  *     return value             # <<<<<<<<<<<<<<
  * 
  * cdef inline object toReal(PetscReal value):
  */
-  __pyx_t_1 = __Pyx_PyInt_As_PetscInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (PetscInt)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_PetscInt(__pyx_v_value); if (unlikely((__pyx_t_1 == (PetscInt)-1) && PyErr_Occurred())) __PYX_ERR(4, 99, __pyx_L1_error)
   __pyx_r = __pyx_t_1;
   goto __pyx_L0;
 
-  /* "SLEPc/SLEPc.pyx":96
+  /* "SLEPc/SLEPc.pyx":98
  * cdef inline object toInt(PetscInt value):
  *     return value
  * cdef inline PetscInt asInt(object value) except? -1:             # <<<<<<<<<<<<<<
@@ -3911,13 +4377,13 @@ static CYTHON_INLINE PetscInt __pyx_f_8slepc4py_5SLEPc_asInt(PyObject *__pyx_v_v
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_AddTraceback("slepc4py.SLEPc.asInt", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __pyx_r = -1L;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SLEPc.pyx":99
+/* "SLEPc/SLEPc.pyx":101
  *     return value
  * 
  * cdef inline object toReal(PetscReal value):             # <<<<<<<<<<<<<<
@@ -3929,12 +4395,9 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_toReal(PetscReal __pyx_v
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("toReal", 0);
 
-  /* "SLEPc/SLEPc.pyx":100
+  /* "SLEPc/SLEPc.pyx":102
  * 
  * cdef inline object toReal(PetscReal value):
  *     return value             # <<<<<<<<<<<<<<
@@ -3942,13 +4405,13 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_toReal(PetscReal __pyx_v
  *     return value
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 102, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/SLEPc.pyx":99
+  /* "SLEPc/SLEPc.pyx":101
  *     return value
  * 
  * cdef inline object toReal(PetscReal value):             # <<<<<<<<<<<<<<
@@ -3967,7 +4430,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_toReal(PetscReal __pyx_v
   return __pyx_r;
 }
 
-/* "SLEPc/SLEPc.pyx":101
+/* "SLEPc/SLEPc.pyx":103
  * cdef inline object toReal(PetscReal value):
  *     return value
  * cdef inline PetscReal asReal(object value) except? -1:             # <<<<<<<<<<<<<<
@@ -3979,23 +4442,20 @@ static CYTHON_INLINE PetscReal __pyx_f_8slepc4py_5SLEPc_asReal(PyObject *__pyx_v
   PetscReal __pyx_r;
   __Pyx_RefNannyDeclarations
   PetscReal __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("asReal", 0);
 
-  /* "SLEPc/SLEPc.pyx":102
+  /* "SLEPc/SLEPc.pyx":104
  *     return value
  * cdef inline PetscReal asReal(object value) except? -1:
  *     return value             # <<<<<<<<<<<<<<
  * 
  * cdef inline object toScalar(PetscScalar value):
  */
-  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == (PetscReal)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == (PetscReal)-1) && PyErr_Occurred())) __PYX_ERR(4, 104, __pyx_L1_error)
   __pyx_r = __pyx_t_1;
   goto __pyx_L0;
 
-  /* "SLEPc/SLEPc.pyx":101
+  /* "SLEPc/SLEPc.pyx":103
  * cdef inline object toReal(PetscReal value):
  *     return value
  * cdef inline PetscReal asReal(object value) except? -1:             # <<<<<<<<<<<<<<
@@ -4012,7 +4472,7 @@ static CYTHON_INLINE PetscReal __pyx_f_8slepc4py_5SLEPc_asReal(PyObject *__pyx_v
   return __pyx_r;
 }
 
-/* "SLEPc/SLEPc.pyx":104
+/* "SLEPc/SLEPc.pyx":106
  *     return value
  * 
  * cdef inline object toScalar(PetscScalar value):             # <<<<<<<<<<<<<<
@@ -4024,12 +4484,9 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_toScalar(PetscScalar __p
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("toScalar", 0);
 
-  /* "SLEPc/SLEPc.pyx":105
+  /* "SLEPc/SLEPc.pyx":107
  * 
  * cdef inline object toScalar(PetscScalar value):
  *     return PyPetscScalar_FromPetscScalar(value)             # <<<<<<<<<<<<<<
@@ -4037,13 +4494,13 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_toScalar(PetscScalar __p
  *     return PyPetscScalar_AsPetscScalar(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyPetscScalar_FromPetscScalar(__pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyPetscScalar_FromPetscScalar(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 107, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/SLEPc.pyx":104
+  /* "SLEPc/SLEPc.pyx":106
  *     return value
  * 
  * cdef inline object toScalar(PetscScalar value):             # <<<<<<<<<<<<<<
@@ -4062,7 +4519,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8slepc4py_5SLEPc_toScalar(PetscScalar __p
   return __pyx_r;
 }
 
-/* "SLEPc/SLEPc.pyx":106
+/* "SLEPc/SLEPc.pyx":108
  * cdef inline object toScalar(PetscScalar value):
  *     return PyPetscScalar_FromPetscScalar(value)
  * cdef inline PetscScalar asScalar(object value) except*:             # <<<<<<<<<<<<<<
@@ -4074,23 +4531,20 @@ static CYTHON_INLINE PetscScalar __pyx_f_8slepc4py_5SLEPc_asScalar(PyObject *__p
   PetscScalar __pyx_r;
   __Pyx_RefNannyDeclarations
   PetscScalar __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("asScalar", 0);
 
-  /* "SLEPc/SLEPc.pyx":107
+  /* "SLEPc/SLEPc.pyx":109
  *     return PyPetscScalar_FromPetscScalar(value)
  * cdef inline PetscScalar asScalar(object value) except*:
  *     return PyPetscScalar_AsPetscScalar(value)             # <<<<<<<<<<<<<<
  * 
  * # -----------------------------------------------------------------------------
  */
-  __pyx_t_1 = PyPetscScalar_AsPetscScalar(__pyx_v_value); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyPetscScalar_AsPetscScalar(__pyx_v_value); if (unlikely(PyErr_Occurred())) __PYX_ERR(4, 109, __pyx_L1_error)
   __pyx_r = __pyx_t_1;
   goto __pyx_L0;
 
-  /* "SLEPc/SLEPc.pyx":106
+  /* "SLEPc/SLEPc.pyx":108
  * cdef inline object toScalar(PetscScalar value):
  *     return PyPetscScalar_FromPetscScalar(value)
  * cdef inline PetscScalar asScalar(object value) except*:             # <<<<<<<<<<<<<<
@@ -4119,9 +4573,6 @@ static CYTHON_INLINE MPI_Comm __pyx_f_8slepc4py_5SLEPc_def_Comm(PyObject *__pyx_
   MPI_Comm __pyx_r;
   __Pyx_RefNannyDeclarations
   MPI_Comm __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("def_Comm", 0);
 
   /* "SLEPc/slepcmpi.pxi":16
@@ -4131,7 +4582,7 @@ static CYTHON_INLINE MPI_Comm __pyx_f_8slepc4py_5SLEPc_def_Comm(PyObject *__pyx_
  * 
  * from petsc4py.PETSc cimport GetCommDefault
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_GetComm(__pyx_v_comm, __pyx_v_defv); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_GetComm(__pyx_v_comm, __pyx_v_defv); if (unlikely(PyErr_Occurred())) __PYX_ERR(5, 16, __pyx_L1_error)
   __pyx_r = __pyx_t_1;
   goto __pyx_L0;
 
@@ -4189,8 +4640,96 @@ static CYTHON_INLINE MPI_Comm __pyx_f_8slepc4py_5SLEPc_SLEPC_COMM_DEFAULT(void)
   return __pyx_r;
 }
 
-/* "SLEPc/slepcsys.pxi":32
- *     int PetscObjectDestroy(PetscObject*)
+/* "SLEPc/slepcsys.pxi":51
+ *     int SlepcInitializeCalled
+ * 
+ * cdef inline PetscMatStructure matstructure(object structure) \             # <<<<<<<<<<<<<<
+ *     except <PetscMatStructure>(-1):
+ *     if   structure is None:  return MAT_DIFFERENT_NONZERO_PATTERN
+ */
+
+static CYTHON_INLINE MatStructure __pyx_f_8slepc4py_5SLEPc_matstructure(PyObject *__pyx_v_structure) {
+  MatStructure __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  MatStructure __pyx_t_3;
+  __Pyx_RefNannySetupContext("matstructure", 0);
+
+  /* "SLEPc/slepcsys.pxi":53
+ * cdef inline PetscMatStructure matstructure(object structure) \
+ *     except <PetscMatStructure>(-1):
+ *     if   structure is None:  return MAT_DIFFERENT_NONZERO_PATTERN             # <<<<<<<<<<<<<<
+ *     elif structure is False: return MAT_DIFFERENT_NONZERO_PATTERN
+ *     elif structure is True:  return MAT_SAME_NONZERO_PATTERN
+ */
+  __pyx_t_1 = (__pyx_v_structure == Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_r = DIFFERENT_NONZERO_PATTERN;
+    goto __pyx_L0;
+  }
+
+  /* "SLEPc/slepcsys.pxi":54
+ *     except <PetscMatStructure>(-1):
+ *     if   structure is None:  return MAT_DIFFERENT_NONZERO_PATTERN
+ *     elif structure is False: return MAT_DIFFERENT_NONZERO_PATTERN             # <<<<<<<<<<<<<<
+ *     elif structure is True:  return MAT_SAME_NONZERO_PATTERN
+ *     else:                    return structure
+ */
+  __pyx_t_2 = (__pyx_v_structure == Py_False);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_r = DIFFERENT_NONZERO_PATTERN;
+    goto __pyx_L0;
+  }
+
+  /* "SLEPc/slepcsys.pxi":55
+ *     if   structure is None:  return MAT_DIFFERENT_NONZERO_PATTERN
+ *     elif structure is False: return MAT_DIFFERENT_NONZERO_PATTERN
+ *     elif structure is True:  return MAT_SAME_NONZERO_PATTERN             # <<<<<<<<<<<<<<
+ *     else:                    return structure
+ * 
+ */
+  __pyx_t_1 = (__pyx_v_structure == Py_True);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_r = SAME_NONZERO_PATTERN;
+    goto __pyx_L0;
+  }
+
+  /* "SLEPc/slepcsys.pxi":56
+ *     elif structure is False: return MAT_DIFFERENT_NONZERO_PATTERN
+ *     elif structure is True:  return MAT_SAME_NONZERO_PATTERN
+ *     else:                    return structure             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline int PetscINCREF(PetscObject *obj):
+ */
+  /*else*/ {
+    __pyx_t_3 = ((MatStructure)__Pyx_PyInt_As_MatStructure(__pyx_v_structure)); if (unlikely(PyErr_Occurred())) __PYX_ERR(6, 56, __pyx_L1_error)
+    __pyx_r = __pyx_t_3;
+    goto __pyx_L0;
+  }
+
+  /* "SLEPc/slepcsys.pxi":51
+ *     int SlepcInitializeCalled
+ * 
+ * cdef inline PetscMatStructure matstructure(object structure) \             # <<<<<<<<<<<<<<
+ *     except <PetscMatStructure>(-1):
+ *     if   structure is None:  return MAT_DIFFERENT_NONZERO_PATTERN
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.matstructure", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = ((MatStructure)-1L);
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/slepcsys.pxi":58
+ *     else:                    return structure
  * 
  * cdef inline int PetscINCREF(PetscObject *obj):             # <<<<<<<<<<<<<<
  *     if obj    == NULL: return 0
@@ -4203,7 +4742,7 @@ static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_PetscINCREF(PetscObject *__pyx
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("PetscINCREF", 0);
 
-  /* "SLEPc/slepcsys.pxi":33
+  /* "SLEPc/slepcsys.pxi":59
  * 
  * cdef inline int PetscINCREF(PetscObject *obj):
  *     if obj    == NULL: return 0             # <<<<<<<<<<<<<<
@@ -4216,7 +4755,7 @@ static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_PetscINCREF(PetscObject *__pyx
     goto __pyx_L0;
   }
 
-  /* "SLEPc/slepcsys.pxi":34
+  /* "SLEPc/slepcsys.pxi":60
  * cdef inline int PetscINCREF(PetscObject *obj):
  *     if obj    == NULL: return 0
  *     if obj[0] == NULL: return 0             # <<<<<<<<<<<<<<
@@ -4229,7 +4768,7 @@ static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_PetscINCREF(PetscObject *__pyx
     goto __pyx_L0;
   }
 
-  /* "SLEPc/slepcsys.pxi":35
+  /* "SLEPc/slepcsys.pxi":61
  *     if obj    == NULL: return 0
  *     if obj[0] == NULL: return 0
  *     return PetscObjectReference(obj[0])             # <<<<<<<<<<<<<<
@@ -4239,8 +4778,8 @@ static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_PetscINCREF(PetscObject *__pyx
   __pyx_r = PetscObjectReference((__pyx_v_obj[0]));
   goto __pyx_L0;
 
-  /* "SLEPc/slepcsys.pxi":32
- *     int PetscObjectDestroy(PetscObject*)
+  /* "SLEPc/slepcsys.pxi":58
+ *     else:                    return structure
  * 
  * cdef inline int PetscINCREF(PetscObject *obj):             # <<<<<<<<<<<<<<
  *     if obj    == NULL: return 0
@@ -4253,7 +4792,7 @@ static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_PetscINCREF(PetscObject *__pyx
   return __pyx_r;
 }
 
-/* "SLEPc/slepcsys.pxi":37
+/* "SLEPc/slepcsys.pxi":63
  *     return PetscObjectReference(obj[0])
  * 
  * cdef inline int SlepcCLEAR(PetscObject* obj):             # <<<<<<<<<<<<<<
@@ -4268,7 +4807,7 @@ static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_SlepcCLEAR(PetscObject *__pyx_
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("SlepcCLEAR", 0);
 
-  /* "SLEPc/slepcsys.pxi":38
+  /* "SLEPc/slepcsys.pxi":64
  * 
  * cdef inline int SlepcCLEAR(PetscObject* obj):
  *     if obj    == NULL: return 0             # <<<<<<<<<<<<<<
@@ -4281,7 +4820,7 @@ static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_SlepcCLEAR(PetscObject *__pyx_
     goto __pyx_L0;
   }
 
-  /* "SLEPc/slepcsys.pxi":39
+  /* "SLEPc/slepcsys.pxi":65
  * cdef inline int SlepcCLEAR(PetscObject* obj):
  *     if obj    == NULL: return 0
  *     if obj[0] == NULL: return 0             # <<<<<<<<<<<<<<
@@ -4294,7 +4833,7 @@ static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_SlepcCLEAR(PetscObject *__pyx_
     goto __pyx_L0;
   }
 
-  /* "SLEPc/slepcsys.pxi":41
+  /* "SLEPc/slepcsys.pxi":67
  *     if obj[0] == NULL: return 0
  *     cdef PetscObject tmp
  *     tmp = obj[0]; obj[0] = NULL             # <<<<<<<<<<<<<<
@@ -4304,7 +4843,7 @@ static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_SlepcCLEAR(PetscObject *__pyx_
   __pyx_v_tmp = (__pyx_v_obj[0]);
   (__pyx_v_obj[0]) = NULL;
 
-  /* "SLEPc/slepcsys.pxi":42
+  /* "SLEPc/slepcsys.pxi":68
  *     cdef PetscObject tmp
  *     tmp = obj[0]; obj[0] = NULL
  *     return PetscObjectDestroy(&tmp)             # <<<<<<<<<<<<<<
@@ -4314,7 +4853,7 @@ static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_SlepcCLEAR(PetscObject *__pyx_
   __pyx_r = PetscObjectDestroy((&__pyx_v_tmp));
   goto __pyx_L0;
 
-  /* "SLEPc/slepcsys.pxi":37
+  /* "SLEPc/slepcsys.pxi":63
  *     return PetscObjectReference(obj[0])
  * 
  * cdef inline int SlepcCLEAR(PetscObject* obj):             # <<<<<<<<<<<<<<
@@ -4328,7 +4867,300 @@ static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_SlepcCLEAR(PetscObject *__pyx_
   return __pyx_r;
 }
 
-/* "SLEPc/slepcfn.pxi":46
+/* "SLEPc/slepcbv.pxi":73
+ * 
+ * 
+ * cdef inline int BV_Sizes(             # <<<<<<<<<<<<<<
+ *     object size,
+ *     PetscInt *_n,
+ */
+
+static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_BV_Sizes(PyObject *__pyx_v_size, PetscInt *__pyx_v__n, PetscInt *__pyx_v__N) {
+  PetscInt __pyx_v_n;
+  PetscInt __pyx_v_N;
+  PyObject *__pyx_v_on = 0;
+  PyObject *__pyx_v_oN = 0;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *(*__pyx_t_7)(PyObject *);
+  int __pyx_t_8;
+  int __pyx_t_9;
+  int __pyx_t_10;
+  PetscInt __pyx_t_11;
+  __Pyx_RefNannySetupContext("BV_Sizes", 0);
+
+  /* "SLEPc/slepcbv.pxi":79
+ *     ) except -1:
+ *     # unpack and get local and global sizes
+ *     cdef PetscInt n=PETSC_DECIDE, N=PETSC_DECIDE             # <<<<<<<<<<<<<<
+ *     cdef object on, oN
+ *     try:
+ */
+  __pyx_v_n = PETSC_DECIDE;
+  __pyx_v_N = PETSC_DECIDE;
+
+  /* "SLEPc/slepcbv.pxi":81
+ *     cdef PetscInt n=PETSC_DECIDE, N=PETSC_DECIDE
+ *     cdef object on, oN
+ *     try:             # <<<<<<<<<<<<<<
+ *         on, oN = size
+ *     except (TypeError, ValueError):
+ */
+  {
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
+    __Pyx_XGOTREF(__pyx_t_1);
+    __Pyx_XGOTREF(__pyx_t_2);
+    __Pyx_XGOTREF(__pyx_t_3);
+    /*try:*/ {
+
+      /* "SLEPc/slepcbv.pxi":82
+ *     cdef object on, oN
+ *     try:
+ *         on, oN = size             # <<<<<<<<<<<<<<
+ *     except (TypeError, ValueError):
+ *         on = None; oN = size
+ */
+      if ((likely(PyTuple_CheckExact(__pyx_v_size))) || (PyList_CheckExact(__pyx_v_size))) {
+        PyObject* sequence = __pyx_v_size;
+        #if CYTHON_COMPILING_IN_CPYTHON
+        Py_ssize_t size = Py_SIZE(sequence);
+        #else
+        Py_ssize_t size = PySequence_Size(sequence);
+        #endif
+        if (unlikely(size != 2)) {
+          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+          __PYX_ERR(2, 82, __pyx_L3_error)
+        }
+        #if CYTHON_COMPILING_IN_CPYTHON
+        if (likely(PyTuple_CheckExact(sequence))) {
+          __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
+          __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
+        } else {
+          __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
+          __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
+        }
+        __Pyx_INCREF(__pyx_t_4);
+        __Pyx_INCREF(__pyx_t_5);
+        #else
+        __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 82, __pyx_L3_error)
+        __Pyx_GOTREF(__pyx_t_4);
+        __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 82, __pyx_L3_error)
+        __Pyx_GOTREF(__pyx_t_5);
+        #endif
+      } else {
+        Py_ssize_t index = -1;
+        __pyx_t_6 = PyObject_GetIter(__pyx_v_size); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 82, __pyx_L3_error)
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
+        index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L11_unpacking_failed;
+        __Pyx_GOTREF(__pyx_t_4);
+        index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L11_unpacking_failed;
+        __Pyx_GOTREF(__pyx_t_5);
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(2, 82, __pyx_L3_error)
+        __pyx_t_7 = NULL;
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+        goto __pyx_L12_unpacking_done;
+        __pyx_L11_unpacking_failed:;
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __pyx_t_7 = NULL;
+        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+        __PYX_ERR(2, 82, __pyx_L3_error)
+        __pyx_L12_unpacking_done:;
+      }
+      __pyx_v_on = __pyx_t_4;
+      __pyx_t_4 = 0;
+      __pyx_v_oN = __pyx_t_5;
+      __pyx_t_5 = 0;
+
+      /* "SLEPc/slepcbv.pxi":81
+ *     cdef PetscInt n=PETSC_DECIDE, N=PETSC_DECIDE
+ *     cdef object on, oN
+ *     try:             # <<<<<<<<<<<<<<
+ *         on, oN = size
+ *     except (TypeError, ValueError):
+ */
+    }
+    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+    goto __pyx_L10_try_end;
+    __pyx_L3_error:;
+    __Pyx_PyThreadState_assign
+    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+    /* "SLEPc/slepcbv.pxi":83
+ *     try:
+ *         on, oN = size
+ *     except (TypeError, ValueError):             # <<<<<<<<<<<<<<
+ *         on = None; oN = size
+ *     if on is not None: n = asInt(on)
+ */
+    __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError) || __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
+    if (__pyx_t_8) {
+      __Pyx_AddTraceback("slepc4py.SLEPc.BV_Sizes", __pyx_clineno, __pyx_lineno, __pyx_filename);
+      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_6) < 0) __PYX_ERR(2, 83, __pyx_L5_except_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GOTREF(__pyx_t_6);
+
+      /* "SLEPc/slepcbv.pxi":84
+ *         on, oN = size
+ *     except (TypeError, ValueError):
+ *         on = None; oN = size             # <<<<<<<<<<<<<<
+ *     if on is not None: n = asInt(on)
+ *     if oN is not None: N = asInt(oN)
+ */
+      __Pyx_INCREF(Py_None);
+      __Pyx_XDECREF_SET(__pyx_v_on, Py_None);
+      __Pyx_INCREF(__pyx_v_size);
+      __Pyx_XDECREF_SET(__pyx_v_oN, __pyx_v_size);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      goto __pyx_L4_exception_handled;
+    }
+    goto __pyx_L5_except_error;
+    __pyx_L5_except_error:;
+
+    /* "SLEPc/slepcbv.pxi":81
+ *     cdef PetscInt n=PETSC_DECIDE, N=PETSC_DECIDE
+ *     cdef object on, oN
+ *     try:             # <<<<<<<<<<<<<<
+ *         on, oN = size
+ *     except (TypeError, ValueError):
+ */
+    __Pyx_PyThreadState_assign
+    __Pyx_XGIVEREF(__pyx_t_1);
+    __Pyx_XGIVEREF(__pyx_t_2);
+    __Pyx_XGIVEREF(__pyx_t_3);
+    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
+    goto __pyx_L1_error;
+    __pyx_L4_exception_handled:;
+    __Pyx_PyThreadState_assign
+    __Pyx_XGIVEREF(__pyx_t_1);
+    __Pyx_XGIVEREF(__pyx_t_2);
+    __Pyx_XGIVEREF(__pyx_t_3);
+    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
+    __pyx_L10_try_end:;
+  }
+
+  /* "SLEPc/slepcbv.pxi":85
+ *     except (TypeError, ValueError):
+ *         on = None; oN = size
+ *     if on is not None: n = asInt(on)             # <<<<<<<<<<<<<<
+ *     if oN is not None: N = asInt(oN)
+ *     if n==PETSC_DECIDE and N==PETSC_DECIDE: raise ValueError(
+ */
+  __pyx_t_9 = (__pyx_v_on != Py_None);
+  __pyx_t_10 = (__pyx_t_9 != 0);
+  if (__pyx_t_10) {
+    __pyx_t_11 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_on); if (unlikely(__pyx_t_11 == -1L && PyErr_Occurred())) __PYX_ERR(2, 85, __pyx_L1_error)
+    __pyx_v_n = __pyx_t_11;
+  }
+
+  /* "SLEPc/slepcbv.pxi":86
+ *         on = None; oN = size
+ *     if on is not None: n = asInt(on)
+ *     if oN is not None: N = asInt(oN)             # <<<<<<<<<<<<<<
+ *     if n==PETSC_DECIDE and N==PETSC_DECIDE: raise ValueError(
+ *         "local and global sizes cannot be both 'DECIDE'")
+ */
+  __pyx_t_10 = (__pyx_v_oN != Py_None);
+  __pyx_t_9 = (__pyx_t_10 != 0);
+  if (__pyx_t_9) {
+    __pyx_t_11 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_oN); if (unlikely(__pyx_t_11 == -1L && PyErr_Occurred())) __PYX_ERR(2, 86, __pyx_L1_error)
+    __pyx_v_N = __pyx_t_11;
+  }
+
+  /* "SLEPc/slepcbv.pxi":87
+ *     if on is not None: n = asInt(on)
+ *     if oN is not None: N = asInt(oN)
+ *     if n==PETSC_DECIDE and N==PETSC_DECIDE: raise ValueError(             # <<<<<<<<<<<<<<
+ *         "local and global sizes cannot be both 'DECIDE'")
+ *     # return result to the caller
+ */
+  __pyx_t_10 = ((__pyx_v_n == PETSC_DECIDE) != 0);
+  if (__pyx_t_10) {
+  } else {
+    __pyx_t_9 = __pyx_t_10;
+    goto __pyx_L18_bool_binop_done;
+  }
+  __pyx_t_10 = ((__pyx_v_N == PETSC_DECIDE) != 0);
+  __pyx_t_9 = __pyx_t_10;
+  __pyx_L18_bool_binop_done:;
+  if (__pyx_t_9) {
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 87, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __PYX_ERR(2, 87, __pyx_L1_error)
+  }
+
+  /* "SLEPc/slepcbv.pxi":90
+ *         "local and global sizes cannot be both 'DECIDE'")
+ *     # return result to the caller
+ *     if _n != NULL: _n[0] = n             # <<<<<<<<<<<<<<
+ *     if _N != NULL: _N[0] = N
+ *     return 0
+ */
+  __pyx_t_9 = ((__pyx_v__n != NULL) != 0);
+  if (__pyx_t_9) {
+    (__pyx_v__n[0]) = __pyx_v_n;
+  }
+
+  /* "SLEPc/slepcbv.pxi":91
+ *     # return result to the caller
+ *     if _n != NULL: _n[0] = n
+ *     if _N != NULL: _N[0] = N             # <<<<<<<<<<<<<<
+ *     return 0
+ */
+  __pyx_t_9 = ((__pyx_v__N != NULL) != 0);
+  if (__pyx_t_9) {
+    (__pyx_v__N[0]) = __pyx_v_N;
+  }
+
+  /* "SLEPc/slepcbv.pxi":92
+ *     if _n != NULL: _n[0] = n
+ *     if _N != NULL: _N[0] = N
+ *     return 0             # <<<<<<<<<<<<<<
+ */
+  __pyx_r = 0;
+  goto __pyx_L0;
+
+  /* "SLEPc/slepcbv.pxi":73
+ * 
+ * 
+ * cdef inline int BV_Sizes(             # <<<<<<<<<<<<<<
+ *     object size,
+ *     PetscInt *_n,
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV_Sizes", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_on);
+  __Pyx_XDECREF(__pyx_v_oN);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/slepcfn.pxi":47
  *     int FNPhiGetIndex(SlepcFN,PetscInt*)
  * 
  * cdef object iarray_s(object array, PetscInt* size, PetscScalar** data):             # <<<<<<<<<<<<<<
@@ -4347,12 +5179,9 @@ static PyObject *__pyx_f_8slepc4py_5SLEPc_iarray_s(PyObject *__pyx_v_array, Pets
   PyObject *__pyx_t_2 = NULL;
   PetscScalar __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("iarray_s", 0);
 
-  /* "SLEPc/slepcfn.pxi":47
+  /* "SLEPc/slepcfn.pxi":48
  * 
  * cdef object iarray_s(object array, PetscInt* size, PetscScalar** data):
  *     cdef Py_ssize_t i = 0, n = len(array)             # <<<<<<<<<<<<<<
@@ -4360,10 +5189,10 @@ static PyObject *__pyx_f_8slepc4py_5SLEPc_iarray_s(PyObject *__pyx_v_array, Pets
  *     cdef object mem = allocate(n*sizeof(PetscScalar),<void**>&a)
  */
   __pyx_v_i = 0;
-  __pyx_t_1 = PyObject_Length(__pyx_v_array); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_Length(__pyx_v_array); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(7, 48, __pyx_L1_error)
   __pyx_v_n = __pyx_t_1;
 
-  /* "SLEPc/slepcfn.pxi":48
+  /* "SLEPc/slepcfn.pxi":49
  * cdef object iarray_s(object array, PetscInt* size, PetscScalar** data):
  *     cdef Py_ssize_t i = 0, n = len(array)
  *     cdef PetscScalar *a = NULL             # <<<<<<<<<<<<<<
@@ -4372,19 +5201,19 @@ static PyObject *__pyx_f_8slepc4py_5SLEPc_iarray_s(PyObject *__pyx_v_array, Pets
  */
   __pyx_v_a = NULL;
 
-  /* "SLEPc/slepcfn.pxi":49
+  /* "SLEPc/slepcfn.pxi":50
  *     cdef Py_ssize_t i = 0, n = len(array)
  *     cdef PetscScalar *a = NULL
  *     cdef object mem = allocate(n*sizeof(PetscScalar),<void**>&a)             # <<<<<<<<<<<<<<
  *     for i from 0 <= i < n: a[i] = asScalar(array[i])
  *     if size != NULL: size[0] = <PetscInt> n
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_allocate((__pyx_v_n * (sizeof(PetscScalar))), ((void **)(&__pyx_v_a))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_allocate((__pyx_v_n * (sizeof(PetscScalar))), ((void **)(&__pyx_v_a))); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 50, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_mem = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "SLEPc/slepcfn.pxi":50
+  /* "SLEPc/slepcfn.pxi":51
  *     cdef PetscScalar *a = NULL
  *     cdef object mem = allocate(n*sizeof(PetscScalar),<void**>&a)
  *     for i from 0 <= i < n: a[i] = asScalar(array[i])             # <<<<<<<<<<<<<<
@@ -4393,14 +5222,14 @@ static PyObject *__pyx_f_8slepc4py_5SLEPc_iarray_s(PyObject *__pyx_v_array, Pets
  */
   __pyx_t_1 = __pyx_v_n;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
-    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_array, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_array, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 51, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asScalar(__pyx_t_2); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asScalar(__pyx_t_2); if (unlikely(PyErr_Occurred())) __PYX_ERR(7, 51, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     (__pyx_v_a[__pyx_v_i]) = __pyx_t_3;
   }
 
-  /* "SLEPc/slepcfn.pxi":51
+  /* "SLEPc/slepcfn.pxi":52
  *     cdef object mem = allocate(n*sizeof(PetscScalar),<void**>&a)
  *     for i from 0 <= i < n: a[i] = asScalar(array[i])
  *     if size != NULL: size[0] = <PetscInt> n             # <<<<<<<<<<<<<<
@@ -4410,11 +5239,9 @@ static PyObject *__pyx_f_8slepc4py_5SLEPc_iarray_s(PyObject *__pyx_v_array, Pets
   __pyx_t_4 = ((__pyx_v_size != NULL) != 0);
   if (__pyx_t_4) {
     (__pyx_v_size[0]) = ((PetscInt)__pyx_v_n);
-    goto __pyx_L5;
   }
-  __pyx_L5:;
 
-  /* "SLEPc/slepcfn.pxi":52
+  /* "SLEPc/slepcfn.pxi":53
  *     for i from 0 <= i < n: a[i] = asScalar(array[i])
  *     if size != NULL: size[0] = <PetscInt> n
  *     if data != NULL: data[0] = a             # <<<<<<<<<<<<<<
@@ -4423,11 +5250,9 @@ static PyObject *__pyx_f_8slepc4py_5SLEPc_iarray_s(PyObject *__pyx_v_array, Pets
   __pyx_t_4 = ((__pyx_v_data != NULL) != 0);
   if (__pyx_t_4) {
     (__pyx_v_data[0]) = __pyx_v_a;
-    goto __pyx_L6;
   }
-  __pyx_L6:;
 
-  /* "SLEPc/slepcfn.pxi":53
+  /* "SLEPc/slepcfn.pxi":54
  *     if size != NULL: size[0] = <PetscInt> n
  *     if data != NULL: data[0] = a
  *     return mem             # <<<<<<<<<<<<<<
@@ -4437,7 +5262,7 @@ static PyObject *__pyx_f_8slepc4py_5SLEPc_iarray_s(PyObject *__pyx_v_array, Pets
   __pyx_r = __pyx_v_mem;
   goto __pyx_L0;
 
-  /* "SLEPc/slepcfn.pxi":46
+  /* "SLEPc/slepcfn.pxi":47
  *     int FNPhiGetIndex(SlepcFN,PetscInt*)
  * 
  * cdef object iarray_s(object array, PetscInt* size, PetscScalar** data):             # <<<<<<<<<<<<<<
@@ -4457,100 +5282,9 @@ static PyObject *__pyx_f_8slepc4py_5SLEPc_iarray_s(PyObject *__pyx_v_array, Pets
   return __pyx_r;
 }
 
-/* "SLEPc/slepcnep.pxi":102
- * # -----------------------------------------------------------------------------
- * 
- * cdef inline PetscMatStructure matstructure(object structure) \             # <<<<<<<<<<<<<<
- *     except <PetscMatStructure>(-1):
- *     if   structure is None:  return MAT_DIFFERENT_NONZERO_PATTERN
- */
-
-static CYTHON_INLINE MatStructure __pyx_f_8slepc4py_5SLEPc_matstructure(PyObject *__pyx_v_structure) {
-  MatStructure __pyx_r;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_t_2;
-  MatStructure __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("matstructure", 0);
-
-  /* "SLEPc/slepcnep.pxi":104
- * cdef inline PetscMatStructure matstructure(object structure) \
- *     except <PetscMatStructure>(-1):
- *     if   structure is None:  return MAT_DIFFERENT_NONZERO_PATTERN             # <<<<<<<<<<<<<<
- *     elif structure is False: return MAT_DIFFERENT_NONZERO_PATTERN
- *     elif structure is True:  return MAT_SAME_NONZERO_PATTERN
- */
-  __pyx_t_1 = (__pyx_v_structure == Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_r = DIFFERENT_NONZERO_PATTERN;
-    goto __pyx_L0;
-  }
-
-  /* "SLEPc/slepcnep.pxi":105
- *     except <PetscMatStructure>(-1):
- *     if   structure is None:  return MAT_DIFFERENT_NONZERO_PATTERN
- *     elif structure is False: return MAT_DIFFERENT_NONZERO_PATTERN             # <<<<<<<<<<<<<<
- *     elif structure is True:  return MAT_SAME_NONZERO_PATTERN
- *     else:                    return structure
- */
-  __pyx_t_2 = (__pyx_v_structure == Py_False);
-  __pyx_t_1 = (__pyx_t_2 != 0);
-  if (__pyx_t_1) {
-    __pyx_r = DIFFERENT_NONZERO_PATTERN;
-    goto __pyx_L0;
-  }
-
-  /* "SLEPc/slepcnep.pxi":106
- *     if   structure is None:  return MAT_DIFFERENT_NONZERO_PATTERN
- *     elif structure is False: return MAT_DIFFERENT_NONZERO_PATTERN
- *     elif structure is True:  return MAT_SAME_NONZERO_PATTERN             # <<<<<<<<<<<<<<
- *     else:                    return structure
- * 
- */
-  __pyx_t_1 = (__pyx_v_structure == Py_True);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_r = SAME_NONZERO_PATTERN;
-    goto __pyx_L0;
-  }
-  /*else*/ {
-
-    /* "SLEPc/slepcnep.pxi":107
- *     elif structure is False: return MAT_DIFFERENT_NONZERO_PATTERN
- *     elif structure is True:  return MAT_SAME_NONZERO_PATTERN
- *     else:                    return structure             # <<<<<<<<<<<<<<
- * 
- * cdef inline Mat ref_Mat(PetscMat mat):
- */
-    __pyx_t_3 = ((MatStructure)PyInt_AsLong(__pyx_v_structure)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_r = __pyx_t_3;
-    goto __pyx_L0;
-  }
-
-  /* "SLEPc/slepcnep.pxi":102
+/* "SLEPc/slepcnep.pxi":116
  * # -----------------------------------------------------------------------------
  * 
- * cdef inline PetscMatStructure matstructure(object structure) \             # <<<<<<<<<<<<<<
- *     except <PetscMatStructure>(-1):
- *     if   structure is None:  return MAT_DIFFERENT_NONZERO_PATTERN
- */
-
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.matstructure", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = ((MatStructure)-1);
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "SLEPc/slepcnep.pxi":109
- *     else:                    return structure
- * 
  * cdef inline Mat ref_Mat(PetscMat mat):             # <<<<<<<<<<<<<<
  *     cdef Mat ob = <Mat> Mat()
  *     ob.mat = mat
@@ -4562,19 +5296,16 @@ static CYTHON_INLINE struct PyPetscMatObject *__pyx_f_8slepc4py_5SLEPc_ref_Mat(M
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("ref_Mat", 0);
 
-  /* "SLEPc/slepcnep.pxi":110
+  /* "SLEPc/slepcnep.pxi":117
  * 
  * cdef inline Mat ref_Mat(PetscMat mat):
  *     cdef Mat ob = <Mat> Mat()             # <<<<<<<<<<<<<<
  *     ob.mat = mat
  *     PetscINCREF(ob.obj)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Mat)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 117, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -4582,7 +5313,7 @@ static CYTHON_INLINE struct PyPetscMatObject *__pyx_f_8slepc4py_5SLEPc_ref_Mat(M
   __pyx_v_ob = ((struct PyPetscMatObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "SLEPc/slepcnep.pxi":111
+  /* "SLEPc/slepcnep.pxi":118
  * cdef inline Mat ref_Mat(PetscMat mat):
  *     cdef Mat ob = <Mat> Mat()
  *     ob.mat = mat             # <<<<<<<<<<<<<<
@@ -4591,7 +5322,7 @@ static CYTHON_INLINE struct PyPetscMatObject *__pyx_f_8slepc4py_5SLEPc_ref_Mat(M
  */
   __pyx_v_ob->mat = __pyx_v_mat;
 
-  /* "SLEPc/slepcnep.pxi":112
+  /* "SLEPc/slepcnep.pxi":119
  *     cdef Mat ob = <Mat> Mat()
  *     ob.mat = mat
  *     PetscINCREF(ob.obj)             # <<<<<<<<<<<<<<
@@ -4600,7 +5331,7 @@ static CYTHON_INLINE struct PyPetscMatObject *__pyx_f_8slepc4py_5SLEPc_ref_Mat(M
  */
   __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_ob->__pyx_base.obj);
 
-  /* "SLEPc/slepcnep.pxi":113
+  /* "SLEPc/slepcnep.pxi":120
  *     ob.mat = mat
  *     PetscINCREF(ob.obj)
  *     return ob             # <<<<<<<<<<<<<<
@@ -4612,8 +5343,8 @@ static CYTHON_INLINE struct PyPetscMatObject *__pyx_f_8slepc4py_5SLEPc_ref_Mat(M
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "SLEPc/slepcnep.pxi":109
- *     else:                    return structure
+  /* "SLEPc/slepcnep.pxi":116
+ * # -----------------------------------------------------------------------------
  * 
  * cdef inline Mat ref_Mat(PetscMat mat):             # <<<<<<<<<<<<<<
  *     cdef Mat ob = <Mat> Mat()
@@ -4633,7 +5364,7 @@ static CYTHON_INLINE struct PyPetscMatObject *__pyx_f_8slepc4py_5SLEPc_ref_Mat(M
   return __pyx_r;
 }
 
-/* "SLEPc/slepcnep.pxi":117
+/* "SLEPc/slepcnep.pxi":124
  * # -----------------------------------------------------------------------------
  * 
  * cdef inline NEP ref_NEP(SlepcNEP nep):             # <<<<<<<<<<<<<<
@@ -4647,19 +5378,16 @@ static CYTHON_INLINE struct PySlepcNEPObject *__pyx_f_8slepc4py_5SLEPc_ref_NEP(N
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("ref_NEP", 0);
 
-  /* "SLEPc/slepcnep.pxi":118
+  /* "SLEPc/slepcnep.pxi":125
  * 
  * cdef inline NEP ref_NEP(SlepcNEP nep):
  *     cdef NEP ob = <NEP> NEP()             # <<<<<<<<<<<<<<
  *     ob.nep = nep
  *     PetscINCREF(ob.obj)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_NEP)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_NEP), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 125, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -4667,7 +5395,7 @@ static CYTHON_INLINE struct PySlepcNEPObject *__pyx_f_8slepc4py_5SLEPc_ref_NEP(N
   __pyx_v_ob = ((struct PySlepcNEPObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "SLEPc/slepcnep.pxi":119
+  /* "SLEPc/slepcnep.pxi":126
  * cdef inline NEP ref_NEP(SlepcNEP nep):
  *     cdef NEP ob = <NEP> NEP()
  *     ob.nep = nep             # <<<<<<<<<<<<<<
@@ -4676,7 +5404,7 @@ static CYTHON_INLINE struct PySlepcNEPObject *__pyx_f_8slepc4py_5SLEPc_ref_NEP(N
  */
   __pyx_v_ob->nep = __pyx_v_nep;
 
-  /* "SLEPc/slepcnep.pxi":120
+  /* "SLEPc/slepcnep.pxi":127
  *     cdef NEP ob = <NEP> NEP()
  *     ob.nep = nep
  *     PetscINCREF(ob.obj)             # <<<<<<<<<<<<<<
@@ -4685,7 +5413,7 @@ static CYTHON_INLINE struct PySlepcNEPObject *__pyx_f_8slepc4py_5SLEPc_ref_NEP(N
  */
   __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_ob->__pyx_base.obj);
 
-  /* "SLEPc/slepcnep.pxi":121
+  /* "SLEPc/slepcnep.pxi":128
  *     ob.nep = nep
  *     PetscINCREF(ob.obj)
  *     return ob             # <<<<<<<<<<<<<<
@@ -4697,7 +5425,7 @@ static CYTHON_INLINE struct PySlepcNEPObject *__pyx_f_8slepc4py_5SLEPc_ref_NEP(N
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "SLEPc/slepcnep.pxi":117
+  /* "SLEPc/slepcnep.pxi":124
  * # -----------------------------------------------------------------------------
  * 
  * cdef inline NEP ref_NEP(SlepcNEP nep):             # <<<<<<<<<<<<<<
@@ -4718,7 +5446,7 @@ static CYTHON_INLINE struct PySlepcNEPObject *__pyx_f_8slepc4py_5SLEPc_ref_NEP(N
   return __pyx_r;
 }
 
-/* "SLEPc/slepcnep.pxi":125
+/* "SLEPc/slepcnep.pxi":132
  * # -----------------------------------------------------------------------------
  * 
  * cdef int NEP_Function(             # <<<<<<<<<<<<<<
@@ -4745,58 +5473,55 @@ static int __pyx_f_8slepc4py_5SLEPc_NEP_Function(NEP __pyx_v_nep, PetscScalar __
   PyObject *__pyx_t_5 = NULL;
   PyObject *(*__pyx_t_6)(PyObject *);
   Mat __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("NEP_Function", 0);
 
-  /* "SLEPc/slepcnep.pxi":132
+  /* "SLEPc/slepcnep.pxi":139
  *     void*       ctx,
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef NEP Nep  = ref_NEP(nep)             # <<<<<<<<<<<<<<
  *     cdef Mat Amat = ref_Mat(A)
  *     cdef Mat Bmat = ref_Mat(B)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8slepc4py_5SLEPc_ref_NEP(__pyx_v_nep)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8slepc4py_5SLEPc_ref_NEP(__pyx_v_nep)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 139, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Nep = ((struct PySlepcNEPObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "SLEPc/slepcnep.pxi":133
+  /* "SLEPc/slepcnep.pxi":140
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef NEP Nep  = ref_NEP(nep)
  *     cdef Mat Amat = ref_Mat(A)             # <<<<<<<<<<<<<<
  *     cdef Mat Bmat = ref_Mat(B)
  *     (function, args, kargs) = Nep.get_attr('__function__')
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8slepc4py_5SLEPc_ref_Mat(__pyx_v_A)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8slepc4py_5SLEPc_ref_Mat(__pyx_v_A)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 140, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Amat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "SLEPc/slepcnep.pxi":134
+  /* "SLEPc/slepcnep.pxi":141
  *     cdef NEP Nep  = ref_NEP(nep)
  *     cdef Mat Amat = ref_Mat(A)
  *     cdef Mat Bmat = ref_Mat(B)             # <<<<<<<<<<<<<<
  *     (function, args, kargs) = Nep.get_attr('__function__')
  *     retv = function(Nep, toScalar(mu), Amat, Bmat, *args, **kargs)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8slepc4py_5SLEPc_ref_Mat(__pyx_v_B)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8slepc4py_5SLEPc_ref_Mat(__pyx_v_B)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 141, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Bmat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "SLEPc/slepcnep.pxi":135
+  /* "SLEPc/slepcnep.pxi":142
  *     cdef Mat Amat = ref_Mat(A)
  *     cdef Mat Bmat = ref_Mat(B)
  *     (function, args, kargs) = Nep.get_attr('__function__')             # <<<<<<<<<<<<<<
  *     retv = function(Nep, toScalar(mu), Amat, Bmat, *args, **kargs)
  *     cdef PetscMat Atmp = NULL, Btmp = NULL
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8slepc4py_5SLEPc_NEP *)__pyx_v_Nep->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Nep), __pyx_k_function); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8slepc4py_5SLEPc_NEP *)__pyx_v_Nep->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Nep), ((char *)"__function__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 142, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
     PyObject* sequence = __pyx_t_1;
@@ -4808,7 +5533,7 @@ static int __pyx_f_8slepc4py_5SLEPc_NEP_Function(NEP __pyx_v_nep, PetscScalar __
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 142, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -4824,17 +5549,17 @@ static int __pyx_f_8slepc4py_5SLEPc_NEP_Function(NEP __pyx_v_nep, PetscScalar __
     __Pyx_INCREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_t_4);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 142, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 142, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 142, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     #endif
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(8, 142, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
@@ -4844,7 +5569,7 @@ static int __pyx_f_8slepc4py_5SLEPc_NEP_Function(NEP __pyx_v_nep, PetscScalar __
     __Pyx_GOTREF(__pyx_t_3);
     index = 2; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_4);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(8, 142, __pyx_L1_error)
     __pyx_t_6 = NULL;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L4_unpacking_done;
@@ -4852,7 +5577,7 @@ static int __pyx_f_8slepc4py_5SLEPc_NEP_Function(NEP __pyx_v_nep, PetscScalar __
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_6 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 142, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_function = __pyx_t_2;
@@ -4862,16 +5587,16 @@ static int __pyx_f_8slepc4py_5SLEPc_NEP_Function(NEP __pyx_v_nep, PetscScalar __
   __pyx_v_kargs = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "SLEPc/slepcnep.pxi":136
+  /* "SLEPc/slepcnep.pxi":143
  *     cdef Mat Bmat = ref_Mat(B)
  *     (function, args, kargs) = Nep.get_attr('__function__')
  *     retv = function(Nep, toScalar(mu), Amat, Bmat, *args, **kargs)             # <<<<<<<<<<<<<<
  *     cdef PetscMat Atmp = NULL, Btmp = NULL
  *     Atmp = A; A = Amat.mat; Amat.mat = Atmp
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_mu); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_mu); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(((PyObject *)__pyx_v_Nep));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Nep));
@@ -4885,31 +5610,31 @@ static int __pyx_f_8slepc4py_5SLEPc_NEP_Function(NEP __pyx_v_nep, PetscScalar __
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Bmat));
   PyTuple_SET_ITEM(__pyx_t_4, 3, ((PyObject *)__pyx_v_Bmat));
   __pyx_t_1 = 0;
-  __pyx_t_1 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyNumber_Add(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyNumber_Add(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 143, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_1 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_1);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_1 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 143, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_1 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 143, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   }
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_function, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_function, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_retv = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "SLEPc/slepcnep.pxi":137
+  /* "SLEPc/slepcnep.pxi":144
  *     (function, args, kargs) = Nep.get_attr('__function__')
  *     retv = function(Nep, toScalar(mu), Amat, Bmat, *args, **kargs)
  *     cdef PetscMat Atmp = NULL, Btmp = NULL             # <<<<<<<<<<<<<<
@@ -4919,7 +5644,7 @@ static int __pyx_f_8slepc4py_5SLEPc_NEP_Function(NEP __pyx_v_nep, PetscScalar __
   __pyx_v_Atmp = NULL;
   __pyx_v_Btmp = NULL;
 
-  /* "SLEPc/slepcnep.pxi":138
+  /* "SLEPc/slepcnep.pxi":145
  *     retv = function(Nep, toScalar(mu), Amat, Bmat, *args, **kargs)
  *     cdef PetscMat Atmp = NULL, Btmp = NULL
  *     Atmp = A; A = Amat.mat; Amat.mat = Atmp             # <<<<<<<<<<<<<<
@@ -4931,7 +5656,7 @@ static int __pyx_f_8slepc4py_5SLEPc_NEP_Function(NEP __pyx_v_nep, PetscScalar __
   __pyx_v_A = __pyx_t_7;
   __pyx_v_Amat->mat = __pyx_v_Atmp;
 
-  /* "SLEPc/slepcnep.pxi":139
+  /* "SLEPc/slepcnep.pxi":146
  *     cdef PetscMat Atmp = NULL, Btmp = NULL
  *     Atmp = A; A = Amat.mat; Amat.mat = Atmp
  *     Btmp = B; B = Bmat.mat; Bmat.mat = Btmp             # <<<<<<<<<<<<<<
@@ -4943,7 +5668,7 @@ static int __pyx_f_8slepc4py_5SLEPc_NEP_Function(NEP __pyx_v_nep, PetscScalar __
   __pyx_v_B = __pyx_t_7;
   __pyx_v_Bmat->mat = __pyx_v_Btmp;
 
-  /* "SLEPc/slepcnep.pxi":140
+  /* "SLEPc/slepcnep.pxi":147
  *     Atmp = A; A = Amat.mat; Amat.mat = Atmp
  *     Btmp = B; B = Bmat.mat; Bmat.mat = Btmp
  *     return 0             # <<<<<<<<<<<<<<
@@ -4953,7 +5678,7 @@ static int __pyx_f_8slepc4py_5SLEPc_NEP_Function(NEP __pyx_v_nep, PetscScalar __
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/slepcnep.pxi":125
+  /* "SLEPc/slepcnep.pxi":132
  * # -----------------------------------------------------------------------------
  * 
  * cdef int NEP_Function(             # <<<<<<<<<<<<<<
@@ -4985,7 +5710,7 @@ static int __pyx_f_8slepc4py_5SLEPc_NEP_Function(NEP __pyx_v_nep, PetscScalar __
   return __pyx_r;
 }
 
-/* "SLEPc/slepcnep.pxi":144
+/* "SLEPc/slepcnep.pxi":151
  * # -----------------------------------------------------------------------------
  * 
  * cdef int NEP_Jacobian(             # <<<<<<<<<<<<<<
@@ -5010,46 +5735,43 @@ static int __pyx_f_8slepc4py_5SLEPc_NEP_Jacobian(NEP __pyx_v_nep, PetscScalar __
   PyObject *__pyx_t_5 = NULL;
   PyObject *(*__pyx_t_6)(PyObject *);
   Mat __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("NEP_Jacobian", 0);
 
-  /* "SLEPc/slepcnep.pxi":150
+  /* "SLEPc/slepcnep.pxi":157
  *     void*       ctx,
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef NEP Nep  = ref_NEP(nep)             # <<<<<<<<<<<<<<
  *     cdef Mat Jmat = ref_Mat(J)
  *     (jacobian, args, kargs) = Nep.get_attr('__jacobian__')
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8slepc4py_5SLEPc_ref_NEP(__pyx_v_nep)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8slepc4py_5SLEPc_ref_NEP(__pyx_v_nep)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 157, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Nep = ((struct PySlepcNEPObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "SLEPc/slepcnep.pxi":151
+  /* "SLEPc/slepcnep.pxi":158
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef NEP Nep  = ref_NEP(nep)
  *     cdef Mat Jmat = ref_Mat(J)             # <<<<<<<<<<<<<<
  *     (jacobian, args, kargs) = Nep.get_attr('__jacobian__')
  *     retv = jacobian(Nep, toScalar(mu), Jmat, *args, **kargs)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_8slepc4py_5SLEPc_ref_Mat(__pyx_v_J)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_8slepc4py_5SLEPc_ref_Mat(__pyx_v_J)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 158, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Jmat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "SLEPc/slepcnep.pxi":152
+  /* "SLEPc/slepcnep.pxi":159
  *     cdef NEP Nep  = ref_NEP(nep)
  *     cdef Mat Jmat = ref_Mat(J)
  *     (jacobian, args, kargs) = Nep.get_attr('__jacobian__')             # <<<<<<<<<<<<<<
  *     retv = jacobian(Nep, toScalar(mu), Jmat, *args, **kargs)
  *     cdef PetscMat Jtmp = NULL
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_8slepc4py_5SLEPc_NEP *)__pyx_v_Nep->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Nep), __pyx_k_jacobian); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8slepc4py_5SLEPc_NEP *)__pyx_v_Nep->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Nep), ((char *)"__jacobian__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 159, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
     PyObject* sequence = __pyx_t_1;
@@ -5061,7 +5783,7 @@ static int __pyx_f_8slepc4py_5SLEPc_NEP_Jacobian(NEP __pyx_v_nep, PetscScalar __
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(8, 159, __pyx_L1_error)
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -5077,17 +5799,17 @@ static int __pyx_f_8slepc4py_5SLEPc_NEP_Jacobian(NEP __pyx_v_nep, PetscScalar __
     __Pyx_INCREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_t_4);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 159, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 159, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 159, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     #endif
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(8, 159, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
@@ -5097,7 +5819,7 @@ static int __pyx_f_8slepc4py_5SLEPc_NEP_Jacobian(NEP __pyx_v_nep, PetscScalar __
     __Pyx_GOTREF(__pyx_t_3);
     index = 2; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_4);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(8, 159, __pyx_L1_error)
     __pyx_t_6 = NULL;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L4_unpacking_done;
@@ -5105,7 +5827,7 @@ static int __pyx_f_8slepc4py_5SLEPc_NEP_Jacobian(NEP __pyx_v_nep, PetscScalar __
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_6 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 159, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_jacobian = __pyx_t_2;
@@ -5115,16 +5837,16 @@ static int __pyx_f_8slepc4py_5SLEPc_NEP_Jacobian(NEP __pyx_v_nep, PetscScalar __
   __pyx_v_kargs = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "SLEPc/slepcnep.pxi":153
+  /* "SLEPc/slepcnep.pxi":160
  *     cdef Mat Jmat = ref_Mat(J)
  *     (jacobian, args, kargs) = Nep.get_attr('__jacobian__')
  *     retv = jacobian(Nep, toScalar(mu), Jmat, *args, **kargs)             # <<<<<<<<<<<<<<
  *     cdef PetscMat Jtmp = NULL
  *     Jtmp = J; J = Jmat.mat; Jmat.mat = Jtmp
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_mu); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_mu); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 160, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 160, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(((PyObject *)__pyx_v_Nep));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Nep));
@@ -5135,31 +5857,31 @@ static int __pyx_f_8slepc4py_5SLEPc_NEP_Jacobian(NEP __pyx_v_nep, PetscScalar __
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Jmat));
   PyTuple_SET_ITEM(__pyx_t_4, 2, ((PyObject *)__pyx_v_Jmat));
   __pyx_t_1 = 0;
-  __pyx_t_1 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 160, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyNumber_Add(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyNumber_Add(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 160, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (unlikely(__pyx_v_kargs == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(8, 160, __pyx_L1_error)
   }
-  if (likely(PyDict_Check(__pyx_v_kargs))) {
-    __pyx_t_1 = __pyx_v_kargs;
-    __Pyx_INCREF(__pyx_t_1);
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_1 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 160, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_1 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 160, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   }
-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_jacobian, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_jacobian, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 160, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_retv = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "SLEPc/slepcnep.pxi":154
+  /* "SLEPc/slepcnep.pxi":161
  *     (jacobian, args, kargs) = Nep.get_attr('__jacobian__')
  *     retv = jacobian(Nep, toScalar(mu), Jmat, *args, **kargs)
  *     cdef PetscMat Jtmp = NULL             # <<<<<<<<<<<<<<
@@ -5168,7 +5890,7 @@ static int __pyx_f_8slepc4py_5SLEPc_NEP_Jacobian(NEP __pyx_v_nep, PetscScalar __
  */
   __pyx_v_Jtmp = NULL;
 
-  /* "SLEPc/slepcnep.pxi":155
+  /* "SLEPc/slepcnep.pxi":162
  *     retv = jacobian(Nep, toScalar(mu), Jmat, *args, **kargs)
  *     cdef PetscMat Jtmp = NULL
  *     Jtmp = J; J = Jmat.mat; Jmat.mat = Jtmp             # <<<<<<<<<<<<<<
@@ -5180,7 +5902,7 @@ static int __pyx_f_8slepc4py_5SLEPc_NEP_Jacobian(NEP __pyx_v_nep, PetscScalar __
   __pyx_v_J = __pyx_t_7;
   __pyx_v_Jmat->mat = __pyx_v_Jtmp;
 
-  /* "SLEPc/slepcnep.pxi":156
+  /* "SLEPc/slepcnep.pxi":163
  *     cdef PetscMat Jtmp = NULL
  *     Jtmp = J; J = Jmat.mat; Jmat.mat = Jtmp
  *     return 0             # <<<<<<<<<<<<<<
@@ -5189,7 +5911,7 @@ static int __pyx_f_8slepc4py_5SLEPc_NEP_Jacobian(NEP __pyx_v_nep, PetscScalar __
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/slepcnep.pxi":144
+  /* "SLEPc/slepcnep.pxi":151
  * # -----------------------------------------------------------------------------
  * 
  * cdef int NEP_Jacobian(             # <<<<<<<<<<<<<<
@@ -5236,9 +5958,6 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3Sys_1getVersion(PyObject *__pyx_v_cl
   PyObject *__pyx_v_devel = 0;
   PyObject *__pyx_v_date = 0;
   PyObject *__pyx_v_author = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getVersion (wrapper)", 0);
@@ -5292,7 +6011,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3Sys_1getVersion(PyObject *__pyx_v_cl
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getVersion") < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getVersion") < 0)) __PYX_ERR(9, 6, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -5311,13 +6030,13 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3Sys_1getVersion(PyObject *__pyx_v_cl
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getVersion", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[7]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getVersion", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 6, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("slepc4py.SLEPc.Sys.getVersion", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3Sys_getVersion(((PyObject*)__pyx_v_cls), __pyx_v_patch, __pyx_v_devel, __pyx_v_date, __pyx_v_author);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3Sys_getVersion(((PyTypeObject*)__pyx_v_cls), __pyx_v_patch, __pyx_v_devel, __pyx_v_date, __pyx_v_author);
 
   /* "SLEPc/Sys.pyx":6
  * 
@@ -5332,7 +6051,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3Sys_1getVersion(PyObject *__pyx_v_cl
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_getVersion(CYTHON_UNUSED PyObject *__pyx_v_cls, PyObject *__pyx_v_patch, PyObject *__pyx_v_devel, PyObject *__pyx_v_date, PyObject *__pyx_v_author) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_getVersion(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_patch, PyObject *__pyx_v_devel, PyObject *__pyx_v_date, PyObject *__pyx_v_author) {
   int __pyx_v_cmajor;
   int __pyx_v_cminor;
   int __pyx_v_cmicro;
@@ -5355,9 +6074,6 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_getVersion(CYTHON_UNUSED PyObjec
   Py_ssize_t __pyx_t_8;
   PyObject *(*__pyx_t_9)(PyObject *);
   PyObject *__pyx_t_10 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getVersion", 0);
   __Pyx_INCREF(__pyx_v_author);
 
@@ -5431,13 +6147,13 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_getVersion(CYTHON_UNUSED PyObjec
  *         out = version
  *         if patch or devel or date or author:
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_cmajor); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_cmajor); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 15, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_cminor); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_cminor); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 15, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_cmicro); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_cmicro); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 15, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 15, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
@@ -5468,25 +6184,25 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_getVersion(CYTHON_UNUSED PyObjec
  *             out = [version]
  *             if patch:
  */
-  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_patch); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_patch); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(9, 17, __pyx_L1_error)
   if (!__pyx_t_6) {
   } else {
     __pyx_t_5 = __pyx_t_6;
     goto __pyx_L4_bool_binop_done;
   }
-  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_devel); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_devel); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(9, 17, __pyx_L1_error)
   if (!__pyx_t_6) {
   } else {
     __pyx_t_5 = __pyx_t_6;
     goto __pyx_L4_bool_binop_done;
   }
-  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_date); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_date); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(9, 17, __pyx_L1_error)
   if (!__pyx_t_6) {
   } else {
     __pyx_t_5 = __pyx_t_6;
     goto __pyx_L4_bool_binop_done;
   }
-  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_author); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_author); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(9, 17, __pyx_L1_error)
   __pyx_t_5 = __pyx_t_6;
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_5) {
@@ -5498,7 +6214,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_getVersion(CYTHON_UNUSED PyObjec
  *             if patch:
  *                 out.append(cpatch)
  */
-    __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 18, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_version);
     __Pyx_GIVEREF(__pyx_v_version);
@@ -5513,7 +6229,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_getVersion(CYTHON_UNUSED PyObjec
  *                 out.append(cpatch)
  *             if devel:
  */
-    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_patch); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_patch); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(9, 19, __pyx_L1_error)
     if (__pyx_t_5) {
 
       /* "SLEPc/Sys.pyx":20
@@ -5523,13 +6239,19 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_getVersion(CYTHON_UNUSED PyObjec
  *             if devel:
  *                 out.append(<bint>cdevel)
  */
-      __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_cpatch); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_cpatch); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 20, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_t_4); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_t_4); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(9, 20, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      goto __pyx_L8;
+
+      /* "SLEPc/Sys.pyx":19
+ *         if patch or devel or date or author:
+ *             out = [version]
+ *             if patch:             # <<<<<<<<<<<<<<
+ *                 out.append(cpatch)
+ *             if devel:
+ */
     }
-    __pyx_L8:;
 
     /* "SLEPc/Sys.pyx":21
  *             if patch:
@@ -5538,7 +6260,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_getVersion(CYTHON_UNUSED PyObjec
  *                 out.append(<bint>cdevel)
  *             if date:
  */
-    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_devel); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_devel); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(9, 21, __pyx_L1_error)
     if (__pyx_t_5) {
 
       /* "SLEPc/Sys.pyx":22
@@ -5548,13 +6270,19 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_getVersion(CYTHON_UNUSED PyObjec
  *             if date:
  *                 out.append(bytes2str(cdate))
  */
-      __pyx_t_4 = __Pyx_PyBool_FromLong((__pyx_v_cdevel != 0)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyBool_FromLong((__pyx_v_cdevel != 0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 22, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_t_4); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_t_4); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(9, 22, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      goto __pyx_L9;
+
+      /* "SLEPc/Sys.pyx":21
+ *             if patch:
+ *                 out.append(cpatch)
+ *             if devel:             # <<<<<<<<<<<<<<
+ *                 out.append(<bint>cdevel)
+ *             if date:
+ */
     }
-    __pyx_L9:;
 
     /* "SLEPc/Sys.pyx":23
  *             if devel:
@@ -5563,7 +6291,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_getVersion(CYTHON_UNUSED PyObjec
  *                 out.append(bytes2str(cdate))
  *             if author:
  */
-    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_date); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_date); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(9, 23, __pyx_L1_error)
     if (__pyx_t_5) {
 
       /* "SLEPc/Sys.pyx":24
@@ -5573,13 +6301,19 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_getVersion(CYTHON_UNUSED PyObjec
  *             if author:
  *                 author = bytes2str(cauthorinfo).split('\n')
  */
-      __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_cdate); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_cdate); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 24, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_t_4); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_t_4); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(9, 24, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      goto __pyx_L10;
+
+      /* "SLEPc/Sys.pyx":23
+ *             if devel:
+ *                 out.append(<bint>cdevel)
+ *             if date:             # <<<<<<<<<<<<<<
+ *                 out.append(bytes2str(cdate))
+ *             if author:
+ */
     }
-    __pyx_L10:;
 
     /* "SLEPc/Sys.pyx":25
  *             if date:
@@ -5588,7 +6322,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_getVersion(CYTHON_UNUSED PyObjec
  *                 author = bytes2str(cauthorinfo).split('\n')
  *                 author = [s.strip() for s in author if s]
  */
-    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_author); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_author); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(9, 25, __pyx_L1_error)
     if (__pyx_t_5) {
 
       /* "SLEPc/Sys.pyx":26
@@ -5598,12 +6332,12 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_getVersion(CYTHON_UNUSED PyObjec
  *                 author = [s.strip() for s in author if s]
  *                 out.append(author)
  */
-      __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_cauthorinfo); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_cauthorinfo); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 26, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_split); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_split); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 26, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 26, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_DECREF_SET(__pyx_v_author, __pyx_t_4);
@@ -5616,32 +6350,32 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_getVersion(CYTHON_UNUSED PyObjec
  *                 out.append(author)
  *         return tuple(out)
  */
-      __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 27, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       if (likely(PyList_CheckExact(__pyx_v_author)) || PyTuple_CheckExact(__pyx_v_author)) {
         __pyx_t_3 = __pyx_v_author; __Pyx_INCREF(__pyx_t_3); __pyx_t_8 = 0;
         __pyx_t_9 = NULL;
       } else {
-        __pyx_t_8 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_author); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_8 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_author); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 27, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_3);
-        __pyx_t_9 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_9 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 27, __pyx_L1_error)
       }
       for (;;) {
         if (likely(!__pyx_t_9)) {
           if (likely(PyList_CheckExact(__pyx_t_3))) {
             if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_3)) break;
             #if CYTHON_COMPILING_IN_CPYTHON
-            __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 27, __pyx_L1_error)
             #else
-            __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 27, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_2);
             #endif
           } else {
             if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
             #if CYTHON_COMPILING_IN_CPYTHON
-            __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_8); __Pyx_INCREF(__pyx_t_2); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(9, 27, __pyx_L1_error)
             #else
-            __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 27, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_2);
             #endif
           }
@@ -5651,7 +6385,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_getVersion(CYTHON_UNUSED PyObjec
             PyObject* exc_type = PyErr_Occurred();
             if (exc_type) {
               if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-              else {__pyx_filename = __pyx_f[7]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              else __PYX_ERR(9, 27, __pyx_L1_error)
             }
             break;
           }
@@ -5659,9 +6393,9 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_getVersion(CYTHON_UNUSED PyObjec
         }
         __Pyx_XDECREF_SET(__pyx_v_s, __pyx_t_2);
         __pyx_t_2 = 0;
-        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_s); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_s); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(9, 27, __pyx_L1_error)
         if (__pyx_t_5) {
-          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_s, __pyx_n_s_strip); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_s, __pyx_n_s_strip); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 27, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_1);
           __pyx_t_10 = NULL;
           if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
@@ -5674,18 +6408,16 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_getVersion(CYTHON_UNUSED PyObjec
             }
           }
           if (__pyx_t_10) {
-            __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_10); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 27, __pyx_L1_error)
             __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
           } else {
-            __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 27, __pyx_L1_error)
           }
           __Pyx_GOTREF(__pyx_t_2);
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-          if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_2))) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_2))) __PYX_ERR(9, 27, __pyx_L1_error)
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-          goto __pyx_L14;
         }
-        __pyx_L14:;
       }
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_DECREF_SET(__pyx_v_author, __pyx_t_4);
@@ -5698,13 +6430,25 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_getVersion(CYTHON_UNUSED PyObjec
  *         return tuple(out)
  * 
  */
-      __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_v_author); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      goto __pyx_L11;
+      __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_v_author); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(9, 28, __pyx_L1_error)
+
+      /* "SLEPc/Sys.pyx":25
+ *             if date:
+ *                 out.append(bytes2str(cdate))
+ *             if author:             # <<<<<<<<<<<<<<
+ *                 author = bytes2str(cauthorinfo).split('\n')
+ *                 author = [s.strip() for s in author if s]
+ */
     }
-    __pyx_L11:;
-    goto __pyx_L3;
+
+    /* "SLEPc/Sys.pyx":17
+ *         version = (cmajor, cminor, cmicro)
+ *         out = version
+ *         if patch or devel or date or author:             # <<<<<<<<<<<<<<
+ *             out = [version]
+ *             if patch:
+ */
   }
-  __pyx_L3:;
 
   /* "SLEPc/Sys.pyx":29
  *                 author = [s.strip() for s in author if s]
@@ -5714,7 +6458,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_getVersion(CYTHON_UNUSED PyObjec
  *     @classmethod
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = PySequence_Tuple(__pyx_v_out); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PySequence_Tuple(__pyx_v_out); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 29, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_r = __pyx_t_4;
   __pyx_t_4 = 0;
@@ -5765,14 +6509,14 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3Sys_3getVersionInfo(PyObject *__pyx_
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getVersionInfo", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getVersionInfo", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3Sys_2getVersionInfo(((PyObject*)__pyx_v_cls));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3Sys_2getVersionInfo(((PyTypeObject*)__pyx_v_cls));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_2getVersionInfo(CYTHON_UNUSED PyObject *__pyx_v_cls) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_2getVersionInfo(CYTHON_UNUSED PyTypeObject *__pyx_v_cls) {
   int __pyx_v_cmajor;
   int __pyx_v_cminor;
   int __pyx_v_cmicro;
@@ -5792,9 +6536,6 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_2getVersionInfo(CYTHON_UNUSED Py
   int __pyx_t_6;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getVersionInfo", 0);
 
   /* "SLEPc/Sys.pyx":33
@@ -5867,12 +6608,12 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_2getVersionInfo(CYTHON_UNUSED Py
  *         author = [s.strip() for s in author if s]
  *         return dict(major      = cmajor,
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_cauthorinfo); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_cauthorinfo); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 40, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 40, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 40, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_author = __pyx_t_1;
@@ -5885,32 +6626,32 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_2getVersionInfo(CYTHON_UNUSED Py
  *         return dict(major      = cmajor,
  *                     minor      = cminor,
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 41, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (likely(PyList_CheckExact(__pyx_v_author)) || PyTuple_CheckExact(__pyx_v_author)) {
     __pyx_t_2 = __pyx_v_author; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
     __pyx_t_4 = NULL;
   } else {
-    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_author); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_author); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 41, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 41, __pyx_L1_error)
   }
   for (;;) {
     if (likely(!__pyx_t_4)) {
       if (likely(PyList_CheckExact(__pyx_t_2))) {
         if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(9, 41, __pyx_L1_error)
         #else
-        __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 41, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
         #endif
       } else {
         if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(9, 41, __pyx_L1_error)
         #else
-        __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 41, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
         #endif
       }
@@ -5920,7 +6661,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_2getVersionInfo(CYTHON_UNUSED Py
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else {__pyx_filename = __pyx_f[7]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          else __PYX_ERR(9, 41, __pyx_L1_error)
         }
         break;
       }
@@ -5928,9 +6669,9 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_2getVersionInfo(CYTHON_UNUSED Py
     }
     __Pyx_XDECREF_SET(__pyx_v_s, __pyx_t_5);
     __pyx_t_5 = 0;
-    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_s); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_s); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(9, 41, __pyx_L1_error)
     if (__pyx_t_6) {
-      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_s, __pyx_n_s_strip); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_s, __pyx_n_s_strip); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 41, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __pyx_t_8 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
@@ -5943,18 +6684,16 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_2getVersionInfo(CYTHON_UNUSED Py
         }
       }
       if (__pyx_t_8) {
-        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 41, __pyx_L1_error)
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       } else {
-        __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_7); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 41, __pyx_L1_error)
       }
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(9, 41, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      goto __pyx_L5;
     }
-    __pyx_L5:;
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF_SET(__pyx_v_author, __pyx_t_1);
@@ -5968,11 +6707,11 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_2getVersionInfo(CYTHON_UNUSED Py
  *                     subminor   = cmicro,
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 42, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_cmajor); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_cmajor); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 42, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_major, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_major, __pyx_t_2) < 0) __PYX_ERR(9, 42, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
   /* "SLEPc/Sys.pyx":43
@@ -5982,9 +6721,9 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_2getVersionInfo(CYTHON_UNUSED Py
  *                     subminor   = cmicro,
  *                     patch      = cpatch,
  */
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_cminor); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_cminor); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 43, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_minor, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_minor, __pyx_t_2) < 0) __PYX_ERR(9, 42, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
   /* "SLEPc/Sys.pyx":44
@@ -5994,9 +6733,9 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_2getVersionInfo(CYTHON_UNUSED Py
  *                     patch      = cpatch,
  *                     release    = <bint>crelease,
  */
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_cmicro); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_cmicro); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 44, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_subminor, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_subminor, __pyx_t_2) < 0) __PYX_ERR(9, 42, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
   /* "SLEPc/Sys.pyx":45
@@ -6006,9 +6745,9 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_2getVersionInfo(CYTHON_UNUSED Py
  *                     release    = <bint>crelease,
  *                     date       = bytes2str(cdate),
  */
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_cpatch); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_cpatch); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 45, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_patch, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_patch, __pyx_t_2) < 0) __PYX_ERR(9, 42, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
   /* "SLEPc/Sys.pyx":46
@@ -6018,9 +6757,9 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_2getVersionInfo(CYTHON_UNUSED Py
  *                     date       = bytes2str(cdate),
  *                     authorinfo = author)
  */
-  __pyx_t_2 = __Pyx_PyBool_FromLong((__pyx_v_crelease != 0)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyBool_FromLong((__pyx_v_crelease != 0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 46, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_release, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_release, __pyx_t_2) < 0) __PYX_ERR(9, 42, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
   /* "SLEPc/Sys.pyx":47
@@ -6030,9 +6769,9 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_2getVersionInfo(CYTHON_UNUSED Py
  *                     authorinfo = author)
  * 
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_cdate); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_cdate); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 47, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_date, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_date, __pyx_t_2) < 0) __PYX_ERR(9, 42, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
   /* "SLEPc/Sys.pyx":48
@@ -6042,7 +6781,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_2getVersionInfo(CYTHON_UNUSED Py
  * 
  * # -----------------------------------------------------------------------------
  */
-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_authorinfo, __pyx_v_author) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_authorinfo, __pyx_v_author) < 0) __PYX_ERR(9, 42, __pyx_L1_error)
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
@@ -6072,8 +6811,8 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3Sys_2getVersionInfo(CYTHON_UNUSED Py
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":59
- *     MatStructure = STMatStructure
+/* "SLEPc/ST.pyx":43
+ *     MatMode      = STMatMode
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
  *         self.obj = <PetscObject*> &self.st
@@ -6101,7 +6840,7 @@ static int __pyx_pf_8slepc4py_5SLEPc_2ST___cinit__(struct PySlepcSTObject *__pyx
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "SLEPc/ST.pyx":60
+  /* "SLEPc/ST.pyx":44
  * 
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.st             # <<<<<<<<<<<<<<
@@ -6110,7 +6849,7 @@ static int __pyx_pf_8slepc4py_5SLEPc_2ST___cinit__(struct PySlepcSTObject *__pyx
  */
   __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->st));
 
-  /* "SLEPc/ST.pyx":61
+  /* "SLEPc/ST.pyx":45
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.st
  *         self.st = NULL             # <<<<<<<<<<<<<<
@@ -6119,8 +6858,8 @@ static int __pyx_pf_8slepc4py_5SLEPc_2ST___cinit__(struct PySlepcSTObject *__pyx
  */
   __pyx_v_self->st = NULL;
 
-  /* "SLEPc/ST.pyx":59
- *     MatStructure = STMatStructure
+  /* "SLEPc/ST.pyx":43
+ *     MatMode      = STMatMode
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
  *         self.obj = <PetscObject*> &self.st
@@ -6133,7 +6872,7 @@ static int __pyx_pf_8slepc4py_5SLEPc_2ST___cinit__(struct PySlepcSTObject *__pyx
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":63
+/* "SLEPc/ST.pyx":47
  *         self.st = NULL
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -6146,9 +6885,6 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_3view(PyObject *__pyx_v_self, PyO
 static char __pyx_doc_8slepc4py_5SLEPc_2ST_2view[] = "ST.view(self, Viewer viewer=None)\n\n        Prints the ST data structure.\n\n        Parameters\n        ----------\n        viewer: Viewer, optional\n                Visualization context; if not provided, the standard\n                output is used.\n        ";
 static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscViewerObject *__pyx_v_viewer = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("view (wrapper)", 0);
@@ -6173,7 +6909,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_3view(PyObject *__pyx_v_self, PyO
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(0, 47, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -6186,13 +6922,13 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_3view(PyObject *__pyx_v_self, PyO
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 47, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("slepc4py.SLEPc.ST.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) __PYX_ERR(0, 47, __pyx_L1_error)
   __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2ST_2view(((struct PySlepcSTObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
@@ -6212,12 +6948,9 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_2view(struct PySlepcSTObject *__p
   int __pyx_t_2;
   PetscViewer __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("view", 0);
 
-  /* "SLEPc/ST.pyx":73
+  /* "SLEPc/ST.pyx":57
  *                 output is used.
  *         """
  *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
@@ -6226,7 +6959,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_2view(struct PySlepcSTObject *__p
  */
   __pyx_v_vwr = NULL;
 
-  /* "SLEPc/ST.pyx":74
+  /* "SLEPc/ST.pyx":58
  *         """
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
@@ -6238,20 +6971,18 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_2view(struct PySlepcSTObject *__p
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_viewer->vwr;
     __pyx_v_vwr = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "SLEPc/ST.pyx":75
+  /* "SLEPc/ST.pyx":59
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr
  *         CHKERR( STView(self.st, vwr) )             # <<<<<<<<<<<<<<
  * 
  *     def destroy(self):
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STView(__pyx_v_self->st, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STView(__pyx_v_self->st, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 59, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":63
+  /* "SLEPc/ST.pyx":47
  *         self.st = NULL
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -6271,7 +7002,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_2view(struct PySlepcSTObject *__p
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":77
+/* "SLEPc/ST.pyx":61
  *         CHKERR( STView(self.st, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -6300,21 +7031,18 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_4destroy(struct PySlepcSTObject *
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("destroy", 0);
 
-  /* "SLEPc/ST.pyx":81
+  /* "SLEPc/ST.pyx":65
  *         Destroys the ST object.
  *         """
  *         CHKERR( STDestroy(&self.st) )             # <<<<<<<<<<<<<<
  *         self.st = NULL
  *         return self
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STDestroy((&__pyx_v_self->st))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STDestroy((&__pyx_v_self->st))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 65, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":82
+  /* "SLEPc/ST.pyx":66
  *         """
  *         CHKERR( STDestroy(&self.st) )
  *         self.st = NULL             # <<<<<<<<<<<<<<
@@ -6323,7 +7051,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_4destroy(struct PySlepcSTObject *
  */
   __pyx_v_self->st = NULL;
 
-  /* "SLEPc/ST.pyx":83
+  /* "SLEPc/ST.pyx":67
  *         CHKERR( STDestroy(&self.st) )
  *         self.st = NULL
  *         return self             # <<<<<<<<<<<<<<
@@ -6335,7 +7063,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_4destroy(struct PySlepcSTObject *
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "SLEPc/ST.pyx":77
+  /* "SLEPc/ST.pyx":61
  *         CHKERR( STView(self.st, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -6353,7 +7081,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_4destroy(struct PySlepcSTObject *
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":85
+/* "SLEPc/ST.pyx":69
  *         return self
  * 
  *     def reset(self):             # <<<<<<<<<<<<<<
@@ -6382,21 +7110,18 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_6reset(struct PySlepcSTObject *__
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("reset", 0);
 
-  /* "SLEPc/ST.pyx":89
+  /* "SLEPc/ST.pyx":73
  *         Resets the ST object.
  *         """
  *         CHKERR( STReset(self.st) )             # <<<<<<<<<<<<<<
  * 
  *     def create(self, comm=None):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STReset(__pyx_v_self->st)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STReset(__pyx_v_self->st)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 73, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":85
+  /* "SLEPc/ST.pyx":69
  *         return self
  * 
  *     def reset(self):             # <<<<<<<<<<<<<<
@@ -6416,7 +7141,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_6reset(struct PySlepcSTObject *__
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":91
+/* "SLEPc/ST.pyx":75
  *         CHKERR( STReset(self.st) )
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -6429,9 +7154,6 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_9create(PyObject *__pyx_v_self, P
 static char __pyx_doc_8slepc4py_5SLEPc_2ST_8create[] = "ST.create(self, comm=None)\n\n        Creates the ST object.\n\n        Parameters\n        ----------\n        comm: Comm, optional\n              MPI communicator; if not provided, it defaults to all\n              processes.\n        ";
 static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_comm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("create (wrapper)", 0);
@@ -6456,7 +7178,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_9create(PyObject *__pyx_v_self, P
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(0, 75, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -6469,7 +7191,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_9create(PyObject *__pyx_v_self, P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 75, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("slepc4py.SLEPc.ST.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -6489,22 +7211,19 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_8create(struct PySlepcSTObject *_
   __Pyx_RefNannyDeclarations
   MPI_Comm __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("create", 0);
 
-  /* "SLEPc/ST.pyx":101
+  /* "SLEPc/ST.pyx":85
  *               processes.
  *         """
  *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())             # <<<<<<<<<<<<<<
  *         cdef SlepcST newst = NULL
  *         CHKERR( STCreate(ccomm, &newst) )
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_def_Comm(__pyx_v_comm, __pyx_f_8slepc4py_5SLEPc_SLEPC_COMM_DEFAULT()); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_def_Comm(__pyx_v_comm, __pyx_f_8slepc4py_5SLEPc_SLEPC_COMM_DEFAULT()); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 85, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "SLEPc/ST.pyx":102
+  /* "SLEPc/ST.pyx":86
  *         """
  *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
  *         cdef SlepcST newst = NULL             # <<<<<<<<<<<<<<
@@ -6513,16 +7232,16 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_8create(struct PySlepcSTObject *_
  */
   __pyx_v_newst = NULL;
 
-  /* "SLEPc/ST.pyx":103
+  /* "SLEPc/ST.pyx":87
  *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
  *         cdef SlepcST newst = NULL
  *         CHKERR( STCreate(ccomm, &newst) )             # <<<<<<<<<<<<<<
  *         SlepcCLEAR(self.obj); self.st = newst
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STCreate(__pyx_v_ccomm, (&__pyx_v_newst))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STCreate(__pyx_v_ccomm, (&__pyx_v_newst))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 87, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":104
+  /* "SLEPc/ST.pyx":88
  *         cdef SlepcST newst = NULL
  *         CHKERR( STCreate(ccomm, &newst) )
  *         SlepcCLEAR(self.obj); self.st = newst             # <<<<<<<<<<<<<<
@@ -6532,7 +7251,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_8create(struct PySlepcSTObject *_
   __pyx_f_8slepc4py_5SLEPc_SlepcCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->st = __pyx_v_newst;
 
-  /* "SLEPc/ST.pyx":105
+  /* "SLEPc/ST.pyx":89
  *         CHKERR( STCreate(ccomm, &newst) )
  *         SlepcCLEAR(self.obj); self.st = newst
  *         return self             # <<<<<<<<<<<<<<
@@ -6544,7 +7263,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_8create(struct PySlepcSTObject *_
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "SLEPc/ST.pyx":91
+  /* "SLEPc/ST.pyx":75
  *         CHKERR( STReset(self.st) )
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -6562,7 +7281,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_8create(struct PySlepcSTObject *_
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":107
+/* "SLEPc/ST.pyx":91
  *         return self
  * 
  *     def setType(self, st_type):             # <<<<<<<<<<<<<<
@@ -6575,9 +7294,6 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_11setType(PyObject *__pyx_v_self,
 static char __pyx_doc_8slepc4py_5SLEPc_2ST_10setType[] = "ST.setType(self, st_type)\n\n        Builds ST for a particular spectral transformation.\n\n        Parameters\n        ----------\n        st_type: `ST.Type` enumerate\n                 The spectral transformation to be used.\n\n        Notes\n        -----\n        See `ST.Type` for available methods. The default is\n        `ST.Type.SHIFT` with a zero shift.  Normally, it is best to\n        use `setFromOptions()` and then set  [...]
 static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_st_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setType (wrapper)", 0);
@@ -6599,7 +7315,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_11setType(PyObject *__pyx_v_self,
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(0, 91, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -6610,7 +7326,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_11setType(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 91, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("slepc4py.SLEPc.ST.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -6629,13 +7345,10 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_10setType(struct PySlepcSTObject
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setType", 0);
   __Pyx_INCREF(__pyx_v_st_type);
 
-  /* "SLEPc/ST.pyx":125
+  /* "SLEPc/ST.pyx":109
  *         evaluating the different available methods.
  *         """
  *         cdef SlepcSTType cval = NULL             # <<<<<<<<<<<<<<
@@ -6644,28 +7357,28 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_10setType(struct PySlepcSTObject
  */
   __pyx_v_cval = NULL;
 
-  /* "SLEPc/ST.pyx":126
+  /* "SLEPc/ST.pyx":110
  *         """
  *         cdef SlepcSTType cval = NULL
  *         st_type = str2bytes(st_type, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( STSetType(self.st, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_st_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_st_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 110, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_st_type, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "SLEPc/ST.pyx":127
+  /* "SLEPc/ST.pyx":111
  *         cdef SlepcSTType cval = NULL
  *         st_type = str2bytes(st_type, &cval)
  *         CHKERR( STSetType(self.st, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def getType(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STSetType(__pyx_v_self->st, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STSetType(__pyx_v_self->st, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 111, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":107
+  /* "SLEPc/ST.pyx":91
  *         return self
  * 
  *     def setType(self, st_type):             # <<<<<<<<<<<<<<
@@ -6687,7 +7400,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_10setType(struct PySlepcSTObject
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":129
+/* "SLEPc/ST.pyx":113
  *         CHKERR( STSetType(self.st, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -6718,12 +7431,9 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_12getType(struct PySlepcSTObject
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getType", 0);
 
-  /* "SLEPc/ST.pyx":138
+  /* "SLEPc/ST.pyx":122
  *               The spectral transformation currently being used.
  *         """
  *         cdef SlepcSTType st_type = NULL             # <<<<<<<<<<<<<<
@@ -6732,16 +7442,16 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_12getType(struct PySlepcSTObject
  */
   __pyx_v_st_type = NULL;
 
-  /* "SLEPc/ST.pyx":139
+  /* "SLEPc/ST.pyx":123
  *         """
  *         cdef SlepcSTType st_type = NULL
  *         CHKERR( STGetType(self.st, &st_type) )             # <<<<<<<<<<<<<<
  *         return bytes2str(st_type)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STGetType(__pyx_v_self->st, (&__pyx_v_st_type))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STGetType(__pyx_v_self->st, (&__pyx_v_st_type))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 123, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":140
+  /* "SLEPc/ST.pyx":124
  *         cdef SlepcSTType st_type = NULL
  *         CHKERR( STGetType(self.st, &st_type) )
  *         return bytes2str(st_type)             # <<<<<<<<<<<<<<
@@ -6749,13 +7459,13 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_12getType(struct PySlepcSTObject
  *     def setOptionsPrefix(self, prefix):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_st_type); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_st_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 124, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/ST.pyx":129
+  /* "SLEPc/ST.pyx":113
  *         CHKERR( STSetType(self.st, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -6774,7 +7484,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_12getType(struct PySlepcSTObject
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":142
+/* "SLEPc/ST.pyx":126
  *         return bytes2str(st_type)
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
@@ -6787,9 +7497,6 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_15setOptionsPrefix(PyObject *__py
 static char __pyx_doc_8slepc4py_5SLEPc_2ST_14setOptionsPrefix[] = "ST.setOptionsPrefix(self, prefix)\n\n        Sets the prefix used for searching for all ST options in the\n        database.\n\n        Parameters\n        ----------\n        prefix: string\n                The prefix string to prepend to all ST option\n                requests.\n\n        Notes\n        -----\n        A hyphen (``-``) must NOT be given at the beginning of the\n        prefix name.  The first character o [...]
 static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_15setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_prefix = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setOptionsPrefix (wrapper)", 0);
@@ -6811,7 +7518,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_15setOptionsPrefix(PyObject *__py
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) __PYX_ERR(0, 126, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -6822,7 +7529,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_15setOptionsPrefix(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 126, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("slepc4py.SLEPc.ST.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -6841,13 +7548,10 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_14setOptionsPrefix(struct PySlepc
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setOptionsPrefix", 0);
   __Pyx_INCREF(__pyx_v_prefix);
 
-  /* "SLEPc/ST.pyx":159
+  /* "SLEPc/ST.pyx":143
  *         AUTOMATICALLY the hyphen.
  *         """
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -6856,28 +7560,28 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_14setOptionsPrefix(struct PySlepc
  */
   __pyx_v_cval = NULL;
 
-  /* "SLEPc/ST.pyx":160
+  /* "SLEPc/ST.pyx":144
  *         """
  *         cdef const_char *cval = NULL
  *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( STSetOptionsPrefix(self.st, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 144, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "SLEPc/ST.pyx":161
+  /* "SLEPc/ST.pyx":145
  *         cdef const_char *cval = NULL
  *         prefix = str2bytes(prefix, &cval)
  *         CHKERR( STSetOptionsPrefix(self.st, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def getOptionsPrefix(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STSetOptionsPrefix(__pyx_v_self->st, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STSetOptionsPrefix(__pyx_v_self->st, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 145, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":142
+  /* "SLEPc/ST.pyx":126
  *         return bytes2str(st_type)
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
@@ -6899,7 +7603,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_14setOptionsPrefix(struct PySlepc
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":163
+/* "SLEPc/ST.pyx":147
  *         CHKERR( STSetOptionsPrefix(self.st, cval) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
@@ -6930,12 +7634,9 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_16getOptionsPrefix(struct PySlepc
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getOptionsPrefix", 0);
 
-  /* "SLEPc/ST.pyx":173
+  /* "SLEPc/ST.pyx":157
  *                 The prefix string set for this ST object.
  *         """
  *         cdef const_char *prefix = NULL             # <<<<<<<<<<<<<<
@@ -6944,16 +7645,16 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_16getOptionsPrefix(struct PySlepc
  */
   __pyx_v_prefix = NULL;
 
-  /* "SLEPc/ST.pyx":174
+  /* "SLEPc/ST.pyx":158
  *         """
  *         cdef const_char *prefix = NULL
  *         CHKERR( STGetOptionsPrefix(self.st, &prefix) )             # <<<<<<<<<<<<<<
  *         return bytes2str(prefix)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STGetOptionsPrefix(__pyx_v_self->st, (&__pyx_v_prefix))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STGetOptionsPrefix(__pyx_v_self->st, (&__pyx_v_prefix))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 158, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":175
+  /* "SLEPc/ST.pyx":159
  *         cdef const_char *prefix = NULL
  *         CHKERR( STGetOptionsPrefix(self.st, &prefix) )
  *         return bytes2str(prefix)             # <<<<<<<<<<<<<<
@@ -6961,13 +7662,13 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_16getOptionsPrefix(struct PySlepc
  *     def setFromOptions(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_prefix); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_prefix); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 159, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/ST.pyx":163
+  /* "SLEPc/ST.pyx":147
  *         CHKERR( STSetOptionsPrefix(self.st, cval) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
@@ -6986,7 +7687,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_16getOptionsPrefix(struct PySlepc
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":177
+/* "SLEPc/ST.pyx":161
  *         return bytes2str(prefix)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -7015,21 +7716,18 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_18setFromOptions(struct PySlepcST
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setFromOptions", 0);
 
-  /* "SLEPc/ST.pyx":187
+  /* "SLEPc/ST.pyx":171
  *         To see all options, run your program with the -help option.
  *         """
  *         CHKERR( STSetFromOptions(self.st) )             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STSetFromOptions(__pyx_v_self->st)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STSetFromOptions(__pyx_v_self->st)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 171, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":177
+  /* "SLEPc/ST.pyx":161
  *         return bytes2str(prefix)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -7049,7 +7747,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_18setFromOptions(struct PySlepcST
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":191
+/* "SLEPc/ST.pyx":175
  *     #
  * 
  *     def setShift(self, shift):             # <<<<<<<<<<<<<<
@@ -7062,9 +7760,6 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_21setShift(PyObject *__pyx_v_self
 static char __pyx_doc_8slepc4py_5SLEPc_2ST_20setShift[] = "ST.setShift(self, shift)\n\n        Sets the shift associated with the spectral transformation.\n\n        Parameters\n        ----------\n        shift: scalar (possibly complex)\n               The value of the shift.\n\n        Notes\n        -----\n        In some spectral transformations, changing the shift may have\n        associated a lot of work, for example recomputing a\n        factorization.\n        ";
 static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_21setShift(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_shift = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setShift (wrapper)", 0);
@@ -7086,7 +7781,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_21setShift(PyObject *__pyx_v_self
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setShift") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setShift") < 0)) __PYX_ERR(0, 175, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -7097,7 +7792,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_21setShift(PyObject *__pyx_v_self
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setShift", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setShift", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 175, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("slepc4py.SLEPc.ST.setShift", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -7116,31 +7811,28 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_20setShift(struct PySlepcSTObject
   __Pyx_RefNannyDeclarations
   PetscScalar __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setShift", 0);
 
-  /* "SLEPc/ST.pyx":206
+  /* "SLEPc/ST.pyx":190
  *         factorization.
  *         """
  *         cdef PetscScalar sval = asScalar(shift)             # <<<<<<<<<<<<<<
  *         CHKERR( STSetShift(self.st, sval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_asScalar(__pyx_v_shift); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_asScalar(__pyx_v_shift); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 190, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
-  /* "SLEPc/ST.pyx":207
+  /* "SLEPc/ST.pyx":191
  *         """
  *         cdef PetscScalar sval = asScalar(shift)
  *         CHKERR( STSetShift(self.st, sval) )             # <<<<<<<<<<<<<<
  * 
  *     def getShift(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STSetShift(__pyx_v_self->st, __pyx_v_sval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STSetShift(__pyx_v_self->st, __pyx_v_sval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 191, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":191
+  /* "SLEPc/ST.pyx":175
  *     #
  * 
  *     def setShift(self, shift):             # <<<<<<<<<<<<<<
@@ -7160,7 +7852,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_20setShift(struct PySlepcSTObject
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":209
+/* "SLEPc/ST.pyx":193
  *         CHKERR( STSetShift(self.st, sval) )
  * 
  *     def getShift(self):             # <<<<<<<<<<<<<<
@@ -7191,12 +7883,9 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_22getShift(struct PySlepcSTObject
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getShift", 0);
 
-  /* "SLEPc/ST.pyx":218
+  /* "SLEPc/ST.pyx":202
  *                The value of the shift.
  *         """
  *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
@@ -7205,16 +7894,16 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_22getShift(struct PySlepcSTObject
  */
   __pyx_v_sval = 0.0;
 
-  /* "SLEPc/ST.pyx":219
+  /* "SLEPc/ST.pyx":203
  *         """
  *         cdef PetscScalar sval = 0
  *         CHKERR( STGetShift(self.st, &sval) )             # <<<<<<<<<<<<<<
  *         return toScalar(sval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STGetShift(__pyx_v_self->st, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STGetShift(__pyx_v_self->st, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 203, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":220
+  /* "SLEPc/ST.pyx":204
  *         cdef PetscScalar sval = 0
  *         CHKERR( STGetShift(self.st, &sval) )
  *         return toScalar(sval)             # <<<<<<<<<<<<<<
@@ -7222,13 +7911,13 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_22getShift(struct PySlepcSTObject
  *     def setTransform(self, flag):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 204, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/ST.pyx":209
+  /* "SLEPc/ST.pyx":193
  *         CHKERR( STSetShift(self.st, sval) )
  * 
  *     def getShift(self):             # <<<<<<<<<<<<<<
@@ -7247,7 +7936,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_22getShift(struct PySlepcSTObject
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":222
+/* "SLEPc/ST.pyx":206
  *         return toScalar(sval)
  * 
  *     def setTransform(self, flag):             # <<<<<<<<<<<<<<
@@ -7260,9 +7949,6 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_25setTransform(PyObject *__pyx_v_
 static char __pyx_doc_8slepc4py_5SLEPc_2ST_24setTransform[] = "ST.setTransform(self, flag)\n\n        Sets a flag to indicate whether the transformed matrices\n        are computed or not.\n\n        Parameters\n        ----------\n        flag: boolean\n              This flag is intended for the case of polynomial\n              eigenproblems solved via linearization.\n              If this flag is False (default) the spectral transformation\n              is applied to the linearizati [...]
 static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_25setTransform(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_flag = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setTransform (wrapper)", 0);
@@ -7284,7 +7970,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_25setTransform(PyObject *__pyx_v_
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTransform") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTransform") < 0)) __PYX_ERR(0, 206, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -7295,7 +7981,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_25setTransform(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTransform", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setTransform", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 206, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("slepc4py.SLEPc.ST.setTransform", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -7314,31 +8000,28 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_24setTransform(struct PySlepcSTOb
   __Pyx_RefNannyDeclarations
   PetscBool __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setTransform", 0);
 
-  /* "SLEPc/ST.pyx":236
+  /* "SLEPc/ST.pyx":220
  *               otherwise it is applied to the original problem.
  *         """
  *         cdef PetscBool sval = flag             # <<<<<<<<<<<<<<
  *         CHKERR( STSetTransform(self.st, sval) )
  * 
  */
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 220, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
-  /* "SLEPc/ST.pyx":237
+  /* "SLEPc/ST.pyx":221
  *         """
  *         cdef PetscBool sval = flag
  *         CHKERR( STSetTransform(self.st, sval) )             # <<<<<<<<<<<<<<
  * 
  *     def getTransform(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STSetTransform(__pyx_v_self->st, __pyx_v_sval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STSetTransform(__pyx_v_self->st, __pyx_v_sval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 221, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":222
+  /* "SLEPc/ST.pyx":206
  *         return toScalar(sval)
  * 
  *     def setTransform(self, flag):             # <<<<<<<<<<<<<<
@@ -7358,7 +8041,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_24setTransform(struct PySlepcSTOb
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":239
+/* "SLEPc/ST.pyx":223
  *         CHKERR( STSetTransform(self.st, sval) )
  * 
  *     def getTransform(self):             # <<<<<<<<<<<<<<
@@ -7389,12 +8072,9 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_26getTransform(struct PySlepcSTOb
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getTransform", 0);
 
-  /* "SLEPc/ST.pyx":253
+  /* "SLEPc/ST.pyx":237
  *                otherwise it is applied to the original problem.
  *         """
  *         cdef PetscBool sval = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -7403,16 +8083,16 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_26getTransform(struct PySlepcSTOb
  */
   __pyx_v_sval = PETSC_FALSE;
 
-  /* "SLEPc/ST.pyx":254
+  /* "SLEPc/ST.pyx":238
  *         """
  *         cdef PetscBool sval = PETSC_FALSE
  *         CHKERR( STGetTransform(self.st, &sval) )             # <<<<<<<<<<<<<<
  *         return sval
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STGetTransform(__pyx_v_self->st, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STGetTransform(__pyx_v_self->st, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 238, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":255
+  /* "SLEPc/ST.pyx":239
  *         cdef PetscBool sval = PETSC_FALSE
  *         CHKERR( STGetTransform(self.st, &sval) )
  *         return sval             # <<<<<<<<<<<<<<
@@ -7420,13 +8100,13 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_26getTransform(struct PySlepcSTOb
  *     def setMatMode(self, mode):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_sval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_sval); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 239, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/ST.pyx":239
+  /* "SLEPc/ST.pyx":223
  *         CHKERR( STSetTransform(self.st, sval) )
  * 
  *     def getTransform(self):             # <<<<<<<<<<<<<<
@@ -7445,7 +8125,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_26getTransform(struct PySlepcSTOb
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":257
+/* "SLEPc/ST.pyx":241
  *         return sval
  * 
  *     def setMatMode(self, mode):             # <<<<<<<<<<<<<<
@@ -7458,9 +8138,6 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_29setMatMode(PyObject *__pyx_v_se
 static char __pyx_doc_8slepc4py_5SLEPc_2ST_28setMatMode[] = "ST.setMatMode(self, mode)\n\n        Sets a flag to indicate how the matrix is being shifted in the\n        shift-and-invert and Cayley spectral transformations.\n\n        Parameters\n        ----------\n        mode: `ST.MatMode` enumerate\n              The mode flag.\n\n        Notes\n        -----\n        By default (`ST.MatMode.COPY`), a copy of matrix ``A`` is made\n        and then this copy is shifted explicitly, e.g [...]
 static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_29setMatMode(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_mode = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setMatMode (wrapper)", 0);
@@ -7482,7 +8159,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_29setMatMode(PyObject *__pyx_v_se
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMatMode") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMatMode") < 0)) __PYX_ERR(0, 241, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -7493,7 +8170,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_29setMatMode(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMatMode", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setMatMode", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 241, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("slepc4py.SLEPc.ST.setMatMode", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -7512,31 +8189,28 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_28setMatMode(struct PySlepcSTObje
   __Pyx_RefNannyDeclarations
   STMatMode __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setMatMode", 0);
 
-  /* "SLEPc/ST.pyx":292
+  /* "SLEPc/ST.pyx":276
  *         `setMatStructure()`.
  *         """
  *         cdef SlepcSTMatMode val = mode             # <<<<<<<<<<<<<<
  *         CHKERR( STSetMatMode(self.st, val) )
  * 
  */
-  __pyx_t_1 = ((STMatMode)PyInt_AsLong(__pyx_v_mode)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((STMatMode)__Pyx_PyInt_As_STMatMode(__pyx_v_mode)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 276, __pyx_L1_error)
   __pyx_v_val = __pyx_t_1;
 
-  /* "SLEPc/ST.pyx":293
+  /* "SLEPc/ST.pyx":277
  *         """
  *         cdef SlepcSTMatMode val = mode
  *         CHKERR( STSetMatMode(self.st, val) )             # <<<<<<<<<<<<<<
  * 
  *     def getMatMode(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STSetMatMode(__pyx_v_self->st, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STSetMatMode(__pyx_v_self->st, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 277, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":257
+  /* "SLEPc/ST.pyx":241
  *         return sval
  * 
  *     def setMatMode(self, mode):             # <<<<<<<<<<<<<<
@@ -7556,7 +8230,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_28setMatMode(struct PySlepcSTObje
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":295
+/* "SLEPc/ST.pyx":279
  *         CHKERR( STSetMatMode(self.st, val) )
  * 
  *     def getMatMode(self):             # <<<<<<<<<<<<<<
@@ -7587,12 +8261,9 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_30getMatMode(struct PySlepcSTObje
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getMatMode", 0);
 
-  /* "SLEPc/ST.pyx":305
+  /* "SLEPc/ST.pyx":289
  *               The mode flag.
  *         """
  *         cdef SlepcSTMatMode val = ST_MATMODE_INPLACE             # <<<<<<<<<<<<<<
@@ -7601,16 +8272,16 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_30getMatMode(struct PySlepcSTObje
  */
   __pyx_v_val = ST_MATMODE_INPLACE;
 
-  /* "SLEPc/ST.pyx":306
+  /* "SLEPc/ST.pyx":290
  *         """
  *         cdef SlepcSTMatMode val = ST_MATMODE_INPLACE
  *         CHKERR( STGetMatMode(self.st, &val) )             # <<<<<<<<<<<<<<
  *         return val
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STGetMatMode(__pyx_v_self->st, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STGetMatMode(__pyx_v_self->st, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 290, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":307
+  /* "SLEPc/ST.pyx":291
  *         cdef SlepcSTMatMode val = ST_MATMODE_INPLACE
  *         CHKERR( STGetMatMode(self.st, &val) )
  *         return val             # <<<<<<<<<<<<<<
@@ -7618,13 +8289,13 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_30getMatMode(struct PySlepcSTObje
  *     def setOperators(self, operators):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_STMatMode(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 291, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/ST.pyx":295
+  /* "SLEPc/ST.pyx":279
  *         CHKERR( STSetMatMode(self.st, val) )
  * 
  *     def getMatMode(self):             # <<<<<<<<<<<<<<
@@ -7643,7 +8314,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_30getMatMode(struct PySlepcSTObje
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":309
+/* "SLEPc/ST.pyx":293
  *         return val
  * 
  *     def setOperators(self, operators):             # <<<<<<<<<<<<<<
@@ -7656,9 +8327,6 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_33setOperators(PyObject *__pyx_v_
 static char __pyx_doc_8slepc4py_5SLEPc_2ST_32setOperators[] = "ST.setOperators(self, operators)\n\n        Sets the matrices associated with the eigenvalue problem.\n\n        Parameters\n        ----------\n        operators: sequence of Mat\n           The matrices associated with the eigensystem.\n        ";
 static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_33setOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_operators = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setOperators (wrapper)", 0);
@@ -7680,7 +8348,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_33setOperators(PyObject *__pyx_v_
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOperators") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOperators") < 0)) __PYX_ERR(0, 293, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -7691,7 +8359,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_33setOperators(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setOperators", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setOperators", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 293, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("slepc4py.SLEPc.ST.setOperators", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -7715,25 +8383,22 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_32setOperators(struct PySlepcSTOb
   Py_ssize_t __pyx_t_2;
   Mat __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setOperators", 0);
   __Pyx_INCREF(__pyx_v_operators);
 
-  /* "SLEPc/ST.pyx":318
+  /* "SLEPc/ST.pyx":302
  *            The matrices associated with the eigensystem.
  *         """
  *         operators = tuple(operators)             # <<<<<<<<<<<<<<
  *         cdef PetscMat *mats = NULL
  *         cdef Py_ssize_t k=0, n = len(operators)
  */
-  __pyx_t_1 = PySequence_Tuple(__pyx_v_operators); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PySequence_Tuple(__pyx_v_operators); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 302, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_operators, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "SLEPc/ST.pyx":319
+  /* "SLEPc/ST.pyx":303
  *         """
  *         operators = tuple(operators)
  *         cdef PetscMat *mats = NULL             # <<<<<<<<<<<<<<
@@ -7742,7 +8407,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_32setOperators(struct PySlepcSTOb
  */
   __pyx_v_mats = NULL;
 
-  /* "SLEPc/ST.pyx":320
+  /* "SLEPc/ST.pyx":304
  *         operators = tuple(operators)
  *         cdef PetscMat *mats = NULL
  *         cdef Py_ssize_t k=0, n = len(operators)             # <<<<<<<<<<<<<<
@@ -7750,22 +8415,22 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_32setOperators(struct PySlepcSTOb
  *         for k from 0 <= k < n: mats[k] = (<Mat?>operators[k]).mat
  */
   __pyx_v_k = 0;
-  __pyx_t_2 = PyObject_Length(__pyx_v_operators); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_Length(__pyx_v_operators); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 304, __pyx_L1_error)
   __pyx_v_n = __pyx_t_2;
 
-  /* "SLEPc/ST.pyx":321
+  /* "SLEPc/ST.pyx":305
  *         cdef PetscMat *mats = NULL
  *         cdef Py_ssize_t k=0, n = len(operators)
  *         cdef tmp = allocate(<size_t>n*sizeof(PetscMat),<void**>&mats)             # <<<<<<<<<<<<<<
  *         for k from 0 <= k < n: mats[k] = (<Mat?>operators[k]).mat
  *         CHKERR( STSetOperators(self.st, <PetscInt>n, mats) )
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_allocate((((size_t)__pyx_v_n) * (sizeof(Mat))), ((void **)(&__pyx_v_mats))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_allocate((((size_t)__pyx_v_n) * (sizeof(Mat))), ((void **)(&__pyx_v_mats))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 305, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_tmp = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "SLEPc/ST.pyx":322
+  /* "SLEPc/ST.pyx":306
  *         cdef Py_ssize_t k=0, n = len(operators)
  *         cdef tmp = allocate(<size_t>n*sizeof(PetscMat),<void**>&mats)
  *         for k from 0 <= k < n: mats[k] = (<Mat?>operators[k]).mat             # <<<<<<<<<<<<<<
@@ -7774,24 +8439,24 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_32setOperators(struct PySlepcSTOb
  */
   __pyx_t_2 = __pyx_v_n;
   for (__pyx_v_k = 0; __pyx_v_k < __pyx_t_2; __pyx_v_k++) {
-    __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_operators, __pyx_v_k, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_operators, __pyx_v_k, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 306, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Mat)))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Mat)))) __PYX_ERR(0, 306, __pyx_L1_error)
     __pyx_t_3 = ((struct PyPetscMatObject *)__pyx_t_1)->mat;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     (__pyx_v_mats[__pyx_v_k]) = __pyx_t_3;
   }
 
-  /* "SLEPc/ST.pyx":323
+  /* "SLEPc/ST.pyx":307
  *         cdef tmp = allocate(<size_t>n*sizeof(PetscMat),<void**>&mats)
  *         for k from 0 <= k < n: mats[k] = (<Mat?>operators[k]).mat
  *         CHKERR( STSetOperators(self.st, <PetscInt>n, mats) )             # <<<<<<<<<<<<<<
  * 
  *     def getOperators(self):
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STSetOperators(__pyx_v_self->st, ((PetscInt)__pyx_v_n), __pyx_v_mats)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STSetOperators(__pyx_v_self->st, ((PetscInt)__pyx_v_n), __pyx_v_mats)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 307, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":309
+  /* "SLEPc/ST.pyx":293
  *         return val
  * 
  *     def setOperators(self, operators):             # <<<<<<<<<<<<<<
@@ -7814,7 +8479,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_32setOperators(struct PySlepcSTOb
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":325
+/* "SLEPc/ST.pyx":309
  *         CHKERR( STSetOperators(self.st, <PetscInt>n, mats) )
  * 
  *     def getOperators(self):             # <<<<<<<<<<<<<<
@@ -7851,12 +8516,9 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_34getOperators(struct PySlepcSTOb
   PyObject *__pyx_t_2 = NULL;
   PetscInt __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getOperators", 0);
 
-  /* "SLEPc/ST.pyx":335
+  /* "SLEPc/ST.pyx":319
  *         """
  *         cdef Mat A
  *         cdef PetscMat mat = NULL             # <<<<<<<<<<<<<<
@@ -7865,7 +8527,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_34getOperators(struct PySlepcSTOb
  */
   __pyx_v_mat = NULL;
 
-  /* "SLEPc/ST.pyx":336
+  /* "SLEPc/ST.pyx":320
  *         cdef Mat A
  *         cdef PetscMat mat = NULL
  *         cdef PetscInt k=0, n=0             # <<<<<<<<<<<<<<
@@ -7875,28 +8537,28 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_34getOperators(struct PySlepcSTOb
   __pyx_v_k = 0;
   __pyx_v_n = 0;
 
-  /* "SLEPc/ST.pyx":337
+  /* "SLEPc/ST.pyx":321
  *         cdef PetscMat mat = NULL
  *         cdef PetscInt k=0, n=0
  *         CHKERR( STGetNumMatrices(self.st, &n) )             # <<<<<<<<<<<<<<
  *         cdef object operators = []
  *         for k from 0 <= k < n:
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STGetNumMatrices(__pyx_v_self->st, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STGetNumMatrices(__pyx_v_self->st, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 321, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":338
+  /* "SLEPc/ST.pyx":322
  *         cdef PetscInt k=0, n=0
  *         CHKERR( STGetNumMatrices(self.st, &n) )
  *         cdef object operators = []             # <<<<<<<<<<<<<<
  *         for k from 0 <= k < n:
  *             CHKERR( STGetOperators(self.st, k, &mat) )
  */
-  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 322, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_operators = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "SLEPc/ST.pyx":339
+  /* "SLEPc/ST.pyx":323
  *         CHKERR( STGetNumMatrices(self.st, &n) )
  *         cdef object operators = []
  *         for k from 0 <= k < n:             # <<<<<<<<<<<<<<
@@ -7906,40 +8568,40 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_34getOperators(struct PySlepcSTOb
   __pyx_t_3 = __pyx_v_n;
   for (__pyx_v_k = 0; __pyx_v_k < __pyx_t_3; __pyx_v_k++) {
 
-    /* "SLEPc/ST.pyx":340
+    /* "SLEPc/ST.pyx":324
  *         cdef object operators = []
  *         for k from 0 <= k < n:
  *             CHKERR( STGetOperators(self.st, k, &mat) )             # <<<<<<<<<<<<<<
  *             A = Mat(); A.mat = mat; PetscINCREF(A.obj)
  *             operators.append(A)
  */
-    __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STGetOperators(__pyx_v_self->st, __pyx_v_k, (&__pyx_v_mat))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STGetOperators(__pyx_v_self->st, __pyx_v_k, (&__pyx_v_mat))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 324, __pyx_L1_error)
 
-    /* "SLEPc/ST.pyx":341
+    /* "SLEPc/ST.pyx":325
  *         for k from 0 <= k < n:
  *             CHKERR( STGetOperators(self.st, k, &mat) )
  *             A = Mat(); A.mat = mat; PetscINCREF(A.obj)             # <<<<<<<<<<<<<<
  *             operators.append(A)
  *         return tuple(operators)
  */
-    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Mat)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 325, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_XDECREF_SET(__pyx_v_A, ((struct PyPetscMatObject *)__pyx_t_2));
     __pyx_t_2 = 0;
     __pyx_v_A->mat = __pyx_v_mat;
     __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_A->__pyx_base.obj);
 
-    /* "SLEPc/ST.pyx":342
+    /* "SLEPc/ST.pyx":326
  *             CHKERR( STGetOperators(self.st, k, &mat) )
  *             A = Mat(); A.mat = mat; PetscINCREF(A.obj)
  *             operators.append(A)             # <<<<<<<<<<<<<<
  *         return tuple(operators)
  * 
  */
-    __pyx_t_4 = __Pyx_PyObject_Append(__pyx_v_operators, ((PyObject *)__pyx_v_A)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Append(__pyx_v_operators, ((PyObject *)__pyx_v_A)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 326, __pyx_L1_error)
   }
 
-  /* "SLEPc/ST.pyx":343
+  /* "SLEPc/ST.pyx":327
  *             A = Mat(); A.mat = mat; PetscINCREF(A.obj)
  *             operators.append(A)
  *         return tuple(operators)             # <<<<<<<<<<<<<<
@@ -7947,13 +8609,13 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_34getOperators(struct PySlepcSTOb
  *     def setMatStructure(self, structure):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PySequence_Tuple(__pyx_v_operators); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PySequence_Tuple(__pyx_v_operators); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 327, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/ST.pyx":325
+  /* "SLEPc/ST.pyx":309
  *         CHKERR( STSetOperators(self.st, <PetscInt>n, mats) )
  * 
  *     def getOperators(self):             # <<<<<<<<<<<<<<
@@ -7974,22 +8636,19 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_34getOperators(struct PySlepcSTOb
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":345
+/* "SLEPc/ST.pyx":329
  *         return tuple(operators)
  * 
  *     def setMatStructure(self, structure):             # <<<<<<<<<<<<<<
  *         """
- *         Sets an internal MatStructure attribute to indicate which is
+ *         Sets an internal Mat.Structure attribute to indicate which is
  */
 
 /* Python wrapper */
 static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_37setMatStructure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2ST_36setMatStructure[] = "ST.setMatStructure(self, structure)\n\n        Sets an internal MatStructure attribute to indicate which is\n        the relation of the sparsity pattern of the two matrices ``A``\n        and ``B`` constituting the generalized eigenvalue\n        problem. This function has no effect in the case of standard\n        eigenproblems.\n\n        Parameters\n        ----------\n        structure: `ST.MatStructure` enumerate\n   [...]
+static char __pyx_doc_8slepc4py_5SLEPc_2ST_36setMatStructure[] = "ST.setMatStructure(self, structure)\n\n        Sets an internal Mat.Structure attribute to indicate which is\n        the relation of the sparsity pattern of the two matrices ``A``\n        and ``B`` constituting the generalized eigenvalue\n        problem. This function has no effect in the case of standard\n        eigenproblems.\n\n        Parameters\n        ----------\n        structure: `PETSc.Mat.Structure` enumerat [...]
 static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_37setMatStructure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_structure = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setMatStructure (wrapper)", 0);
@@ -8011,7 +8670,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_37setMatStructure(PyObject *__pyx
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMatStructure") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMatStructure") < 0)) __PYX_ERR(0, 329, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -8022,7 +8681,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_37setMatStructure(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMatStructure", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setMatStructure", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 329, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("slepc4py.SLEPc.ST.setMatStructure", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -8041,36 +8700,33 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_36setMatStructure(struct PySlepcS
   __Pyx_RefNannyDeclarations
   MatStructure __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setMatStructure", 0);
 
-  /* "SLEPc/ST.pyx":366
+  /* "SLEPc/ST.pyx":350
  *         particular, for internal *AXPY()* matrix operations).
  *         """
- *         cdef PetscMatStructure val = structure             # <<<<<<<<<<<<<<
+ *         cdef PetscMatStructure val = matstructure(structure)             # <<<<<<<<<<<<<<
  *         CHKERR( STSetMatStructure(self.st, val) )
  * 
  */
-  __pyx_t_1 = ((MatStructure)PyInt_AsLong(__pyx_v_structure)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_matstructure(__pyx_v_structure); if (unlikely(__pyx_t_1 == ((MatStructure)-1L))) __PYX_ERR(0, 350, __pyx_L1_error)
   __pyx_v_val = __pyx_t_1;
 
-  /* "SLEPc/ST.pyx":367
+  /* "SLEPc/ST.pyx":351
  *         """
- *         cdef PetscMatStructure val = structure
+ *         cdef PetscMatStructure val = matstructure(structure)
  *         CHKERR( STSetMatStructure(self.st, val) )             # <<<<<<<<<<<<<<
  * 
  *     def setKSP(self, KSP ksp not None):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STSetMatStructure(__pyx_v_self->st, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STSetMatStructure(__pyx_v_self->st, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 351, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":345
+  /* "SLEPc/ST.pyx":329
  *         return tuple(operators)
  * 
  *     def setMatStructure(self, structure):             # <<<<<<<<<<<<<<
  *         """
- *         Sets an internal MatStructure attribute to indicate which is
+ *         Sets an internal Mat.Structure attribute to indicate which is
  */
 
   /* function exit code */
@@ -8085,7 +8741,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_36setMatStructure(struct PySlepcS
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":369
+/* "SLEPc/ST.pyx":353
  *         CHKERR( STSetMatStructure(self.st, val) )
  * 
  *     def setKSP(self, KSP ksp not None):             # <<<<<<<<<<<<<<
@@ -8098,9 +8754,6 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_39setKSP(PyObject *__pyx_v_self,
 static char __pyx_doc_8slepc4py_5SLEPc_2ST_38setKSP[] = "ST.setKSP(self, KSP ksp)\n\n        Sets the KSP object associated with the spectral\n        transformation.\n\n        Parameters\n        ----------\n        ksp: KSP\n             The linear solver object.\n        ";
 static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_39setKSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscKSPObject *__pyx_v_ksp = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setKSP (wrapper)", 0);
@@ -8122,7 +8775,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_39setKSP(PyObject *__pyx_v_self,
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setKSP") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setKSP") < 0)) __PYX_ERR(0, 353, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -8133,13 +8786,13 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_39setKSP(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setKSP", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setKSP", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 353, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("slepc4py.SLEPc.ST.setKSP", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ksp), __pyx_ptype_8petsc4py_5PETSc_KSP, 0, "ksp", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ksp), __pyx_ptype_8petsc4py_5PETSc_KSP, 0, "ksp", 0))) __PYX_ERR(0, 353, __pyx_L1_error)
   __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2ST_38setKSP(((struct PySlepcSTObject *)__pyx_v_self), __pyx_v_ksp);
 
   /* function exit code */
@@ -8155,21 +8808,18 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_38setKSP(struct PySlepcSTObject *
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setKSP", 0);
 
-  /* "SLEPc/ST.pyx":379
+  /* "SLEPc/ST.pyx":363
  *              The linear solver object.
  *         """
  *         CHKERR( STSetKSP(self.st, ksp.ksp) )             # <<<<<<<<<<<<<<
  * 
  *     def getKSP(self):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STSetKSP(__pyx_v_self->st, __pyx_v_ksp->ksp)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STSetKSP(__pyx_v_self->st, __pyx_v_ksp->ksp)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 363, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":369
+  /* "SLEPc/ST.pyx":353
  *         CHKERR( STSetMatStructure(self.st, val) )
  * 
  *     def setKSP(self, KSP ksp not None):             # <<<<<<<<<<<<<<
@@ -8189,7 +8839,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_38setKSP(struct PySlepcSTObject *
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":381
+/* "SLEPc/ST.pyx":365
  *         CHKERR( STSetKSP(self.st, ksp.ksp) )
  * 
  *     def getKSP(self):             # <<<<<<<<<<<<<<
@@ -8220,33 +8870,30 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_40getKSP(struct PySlepcSTObject *
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getKSP", 0);
 
-  /* "SLEPc/ST.pyx":397
+  /* "SLEPc/ST.pyx":381
  *         does not require to solve a linear system of equations.
  *         """
  *         cdef KSP ksp = KSP()             # <<<<<<<<<<<<<<
  *         CHKERR( STGetKSP(self.st, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_KSP)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_KSP), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 381, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ksp = ((struct PyPetscKSPObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "SLEPc/ST.pyx":398
+  /* "SLEPc/ST.pyx":382
  *         """
  *         cdef KSP ksp = KSP()
  *         CHKERR( STGetKSP(self.st, &ksp.ksp) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(ksp.obj)
  *         return ksp
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STGetKSP(__pyx_v_self->st, (&__pyx_v_ksp->ksp))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STGetKSP(__pyx_v_self->st, (&__pyx_v_ksp->ksp))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 382, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":399
+  /* "SLEPc/ST.pyx":383
  *         cdef KSP ksp = KSP()
  *         CHKERR( STGetKSP(self.st, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)             # <<<<<<<<<<<<<<
@@ -8255,7 +8902,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_40getKSP(struct PySlepcSTObject *
  */
   __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_ksp->__pyx_base.obj);
 
-  /* "SLEPc/ST.pyx":400
+  /* "SLEPc/ST.pyx":384
  *         CHKERR( STGetKSP(self.st, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)
  *         return ksp             # <<<<<<<<<<<<<<
@@ -8267,7 +8914,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_40getKSP(struct PySlepcSTObject *
   __pyx_r = ((PyObject *)__pyx_v_ksp);
   goto __pyx_L0;
 
-  /* "SLEPc/ST.pyx":381
+  /* "SLEPc/ST.pyx":365
  *         CHKERR( STSetKSP(self.st, ksp.ksp) )
  * 
  *     def getKSP(self):             # <<<<<<<<<<<<<<
@@ -8287,7 +8934,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_40getKSP(struct PySlepcSTObject *
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":404
+/* "SLEPc/ST.pyx":388
  *     #
  * 
  *     def setUp(self):             # <<<<<<<<<<<<<<
@@ -8316,21 +8963,18 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_42setUp(struct PySlepcSTObject *_
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setUp", 0);
 
-  /* "SLEPc/ST.pyx":408
+  /* "SLEPc/ST.pyx":392
  *         Prepares for the use of a spectral transformation.
  *         """
  *         CHKERR( STSetUp(self.st) )             # <<<<<<<<<<<<<<
  * 
  *     def apply(self, Vec x not None, Vec y not None):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STSetUp(__pyx_v_self->st)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STSetUp(__pyx_v_self->st)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 392, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":404
+  /* "SLEPc/ST.pyx":388
  *     #
  * 
  *     def setUp(self):             # <<<<<<<<<<<<<<
@@ -8350,7 +8994,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_42setUp(struct PySlepcSTObject *_
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":410
+/* "SLEPc/ST.pyx":394
  *         CHKERR( STSetUp(self.st) )
  * 
  *     def apply(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -8364,9 +9008,6 @@ static char __pyx_doc_8slepc4py_5SLEPc_2ST_44apply[] = "ST.apply(self, Vec x, Ve
 static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_45apply(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscVecObject *__pyx_v_y = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("apply (wrapper)", 0);
@@ -8390,11 +9031,11 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_45apply(PyObject *__pyx_v_self, P
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("apply", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("apply", 1, 2, 2, 1); __PYX_ERR(0, 394, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "apply") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "apply") < 0)) __PYX_ERR(0, 394, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -8407,14 +9048,14 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_45apply(PyObject *__pyx_v_self, P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("apply", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("apply", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 394, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("slepc4py.SLEPc.ST.apply", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(0, 394, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(0, 394, __pyx_L1_error)
   __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2ST_44apply(((struct PySlepcSTObject *)__pyx_v_self), __pyx_v_x, __pyx_v_y);
 
   /* function exit code */
@@ -8430,21 +9071,18 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_44apply(struct PySlepcSTObject *_
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("apply", 0);
 
-  /* "SLEPc/ST.pyx":423
+  /* "SLEPc/ST.pyx":407
  *            The result vector.
  *         """
  *         CHKERR( STApply(self.st, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def applyTranspose(self, Vec x not None, Vec y not None):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STApply(__pyx_v_self->st, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STApply(__pyx_v_self->st, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 407, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":410
+  /* "SLEPc/ST.pyx":394
  *         CHKERR( STSetUp(self.st) )
  * 
  *     def apply(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -8464,7 +9102,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_44apply(struct PySlepcSTObject *_
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":425
+/* "SLEPc/ST.pyx":409
  *         CHKERR( STApply(self.st, x.vec, y.vec) )
  * 
  *     def applyTranspose(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -8478,9 +9116,6 @@ static char __pyx_doc_8slepc4py_5SLEPc_2ST_46applyTranspose[] = "ST.applyTranspo
 static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_47applyTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscVecObject *__pyx_v_y = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("applyTranspose (wrapper)", 0);
@@ -8504,11 +9139,11 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_47applyTranspose(PyObject *__pyx_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("applyTranspose", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("applyTranspose", 1, 2, 2, 1); __PYX_ERR(0, 409, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applyTranspose") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applyTranspose") < 0)) __PYX_ERR(0, 409, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -8521,14 +9156,14 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_47applyTranspose(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("applyTranspose", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("applyTranspose", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 409, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("slepc4py.SLEPc.ST.applyTranspose", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(0, 409, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(0, 409, __pyx_L1_error)
   __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2ST_46applyTranspose(((struct PySlepcSTObject *)__pyx_v_self), __pyx_v_x, __pyx_v_y);
 
   /* function exit code */
@@ -8544,21 +9179,18 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_46applyTranspose(struct PySlepcST
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("applyTranspose", 0);
 
-  /* "SLEPc/ST.pyx":438
+  /* "SLEPc/ST.pyx":422
  *            The result vector.
  *         """
  *         CHKERR( STApplyTranspose(self.st, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STApplyTranspose(__pyx_v_self->st, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STApplyTranspose(__pyx_v_self->st, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 422, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":425
+  /* "SLEPc/ST.pyx":409
  *         CHKERR( STApply(self.st, x.vec, y.vec) )
  * 
  *     def applyTranspose(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
@@ -8578,7 +9210,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_46applyTranspose(struct PySlepcST
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":442
+/* "SLEPc/ST.pyx":426
  *     #
  * 
  *     def setCayleyAntishift(self, tau):             # <<<<<<<<<<<<<<
@@ -8591,9 +9223,6 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_49setCayleyAntishift(PyObject *__
 static char __pyx_doc_8slepc4py_5SLEPc_2ST_48setCayleyAntishift[] = "ST.setCayleyAntishift(self, tau)\n\n        Sets the value of the anti-shift for the Cayley spectral\n        transformation.\n\n        Parameters\n        ----------\n        tau: scalar (possibly complex)\n             The anti-shift.\n\n        Notes\n        -----\n\n        In the generalized Cayley transform, the operator can be\n        expressed as ``OP = inv(A - sigma B)*(A + tau B)``. This\n        function s [...]
 static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_49setCayleyAntishift(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_tau = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setCayleyAntishift (wrapper)", 0);
@@ -8615,7 +9244,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_49setCayleyAntishift(PyObject *__
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCayleyAntishift") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCayleyAntishift") < 0)) __PYX_ERR(0, 426, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -8626,7 +9255,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2ST_49setCayleyAntishift(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setCayleyAntishift", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setCayleyAntishift", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 426, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("slepc4py.SLEPc.ST.setCayleyAntishift", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -8645,31 +9274,28 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_48setCayleyAntishift(struct PySle
   __Pyx_RefNannyDeclarations
   PetscScalar __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setCayleyAntishift", 0);
 
-  /* "SLEPc/ST.pyx":460
+  /* "SLEPc/ST.pyx":444
  *         setting ``sigma``.
  *         """
  *         cdef PetscScalar sval = asScalar(tau)             # <<<<<<<<<<<<<<
  *         CHKERR( STCayleySetAntishift(self.st, sval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_asScalar(__pyx_v_tau); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_asScalar(__pyx_v_tau); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 444, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
-  /* "SLEPc/ST.pyx":461
+  /* "SLEPc/ST.pyx":445
  *         """
  *         cdef PetscScalar sval = asScalar(tau)
  *         CHKERR( STCayleySetAntishift(self.st, sval) )             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STCayleySetAntishift(__pyx_v_self->st, __pyx_v_sval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(STCayleySetAntishift(__pyx_v_self->st, __pyx_v_sval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 445, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":442
+  /* "SLEPc/ST.pyx":426
  *     #
  * 
  *     def setCayleyAntishift(self, tau):             # <<<<<<<<<<<<<<
@@ -8689,7 +9315,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_48setCayleyAntishift(struct PySle
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":466
+/* "SLEPc/ST.pyx":450
  * 
  *     property shift:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -8716,12 +9342,9 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_5shift___get__(struct PySlepcSTOb
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "SLEPc/ST.pyx":467
+  /* "SLEPc/ST.pyx":451
  *     property shift:
  *         def __get__(self):
  *             return self.getShift()             # <<<<<<<<<<<<<<
@@ -8729,7 +9352,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_5shift___get__(struct PySlepcSTOb
  *             self.setShift(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getShift); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getShift); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 451, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -8742,10 +9365,10 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_5shift___get__(struct PySlepcSTOb
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 451, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 451, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -8753,7 +9376,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_5shift___get__(struct PySlepcSTOb
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/ST.pyx":466
+  /* "SLEPc/ST.pyx":450
  * 
  *     property shift:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -8774,7 +9397,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_5shift___get__(struct PySlepcSTOb
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":468
+/* "SLEPc/ST.pyx":452
  *         def __get__(self):
  *             return self.getShift()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -8802,19 +9425,16 @@ static int __pyx_pf_8slepc4py_5SLEPc_2ST_5shift_2__set__(struct PySlepcSTObject
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "SLEPc/ST.pyx":469
+  /* "SLEPc/ST.pyx":453
  *             return self.getShift()
  *         def __set__(self, value):
  *             self.setShift(value)             # <<<<<<<<<<<<<<
  * 
  *     property mat_mode:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setShift); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setShift); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 453, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -8827,23 +9447,23 @@ static int __pyx_pf_8slepc4py_5SLEPc_2ST_5shift_2__set__(struct PySlepcSTObject
     }
   }
   if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 453, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 453, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
     __Pyx_INCREF(__pyx_v_value);
     __Pyx_GIVEREF(__pyx_v_value);
     PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 453, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "SLEPc/ST.pyx":468
+  /* "SLEPc/ST.pyx":452
  *         def __get__(self):
  *             return self.getShift()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -8866,7 +9486,7 @@ static int __pyx_pf_8slepc4py_5SLEPc_2ST_5shift_2__set__(struct PySlepcSTObject
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":472
+/* "SLEPc/ST.pyx":456
  * 
  *     property mat_mode:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -8893,12 +9513,9 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_8mat_mode___get__(struct PySlepcS
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "SLEPc/ST.pyx":473
+  /* "SLEPc/ST.pyx":457
  *     property mat_mode:
  *         def __get__(self):
  *             return self.getMatMode()             # <<<<<<<<<<<<<<
@@ -8906,7 +9523,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_8mat_mode___get__(struct PySlepcS
  *             self.setMatMode(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getMatMode); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getMatMode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 457, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -8919,10 +9536,10 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_8mat_mode___get__(struct PySlepcS
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 457, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 457, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -8930,7 +9547,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_8mat_mode___get__(struct PySlepcS
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/ST.pyx":472
+  /* "SLEPc/ST.pyx":456
  * 
  *     property mat_mode:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -8951,7 +9568,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_8mat_mode___get__(struct PySlepcS
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":474
+/* "SLEPc/ST.pyx":458
  *         def __get__(self):
  *             return self.getMatMode()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -8979,19 +9596,16 @@ static int __pyx_pf_8slepc4py_5SLEPc_2ST_8mat_mode_2__set__(struct PySlepcSTObje
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "SLEPc/ST.pyx":475
+  /* "SLEPc/ST.pyx":459
  *             return self.getMatMode()
  *         def __set__(self, value):
  *             self.setMatMode(value)             # <<<<<<<<<<<<<<
  * 
  *     property ksp:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setMatMode); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setMatMode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 459, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -9004,23 +9618,23 @@ static int __pyx_pf_8slepc4py_5SLEPc_2ST_8mat_mode_2__set__(struct PySlepcSTObje
     }
   }
   if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 459, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 459, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
     __Pyx_INCREF(__pyx_v_value);
     __Pyx_GIVEREF(__pyx_v_value);
     PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 459, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "SLEPc/ST.pyx":474
+  /* "SLEPc/ST.pyx":458
  *         def __get__(self):
  *             return self.getMatMode()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -9043,7 +9657,7 @@ static int __pyx_pf_8slepc4py_5SLEPc_2ST_8mat_mode_2__set__(struct PySlepcSTObje
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":478
+/* "SLEPc/ST.pyx":462
  * 
  *     property ksp:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -9070,12 +9684,9 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_3ksp___get__(struct PySlepcSTObje
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "SLEPc/ST.pyx":479
+  /* "SLEPc/ST.pyx":463
  *     property ksp:
  *         def __get__(self):
  *             return self.getKSP()             # <<<<<<<<<<<<<<
@@ -9083,7 +9694,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_3ksp___get__(struct PySlepcSTObje
  *             self.setKSP(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getKSP); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getKSP); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 463, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -9096,10 +9707,10 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_3ksp___get__(struct PySlepcSTObje
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 463, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 463, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -9107,7 +9718,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_3ksp___get__(struct PySlepcSTObje
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/ST.pyx":478
+  /* "SLEPc/ST.pyx":462
  * 
  *     property ksp:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -9128,7 +9739,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2ST_3ksp___get__(struct PySlepcSTObje
   return __pyx_r;
 }
 
-/* "SLEPc/ST.pyx":480
+/* "SLEPc/ST.pyx":464
  *         def __get__(self):
  *             return self.getKSP()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -9156,19 +9767,16 @@ static int __pyx_pf_8slepc4py_5SLEPc_2ST_3ksp_2__set__(struct PySlepcSTObject *_
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "SLEPc/ST.pyx":481
+  /* "SLEPc/ST.pyx":465
  *             return self.getKSP()
  *         def __set__(self, value):
  *             self.setKSP(value)             # <<<<<<<<<<<<<<
  * 
  * # -----------------------------------------------------------------------------
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setKSP); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setKSP); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 465, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -9181,23 +9789,23 @@ static int __pyx_pf_8slepc4py_5SLEPc_2ST_3ksp_2__set__(struct PySlepcSTObject *_
     }
   }
   if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 465, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 465, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
     __Pyx_INCREF(__pyx_v_value);
     __Pyx_GIVEREF(__pyx_v_value);
     PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 465, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "SLEPc/ST.pyx":480
+  /* "SLEPc/ST.pyx":464
  *         def __get__(self):
  *             return self.getKSP()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -9294,9 +9902,6 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_3view(PyObject *__pyx_v_self, PyO
 static char __pyx_doc_8slepc4py_5SLEPc_2BV_2view[] = "BV.view(self, Viewer viewer=None)\n\n        Prints the BV data structure.\n\n        Parameters\n        ----------\n        viewer: Viewer, optional\n                Visualization context; if not provided, the standard\n                output is used.\n        ";
 static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscViewerObject *__pyx_v_viewer = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("view (wrapper)", 0);
@@ -9321,7 +9926,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_3view(PyObject *__pyx_v_self, PyO
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(3, 63, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -9334,13 +9939,13 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_3view(PyObject *__pyx_v_self, PyO
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 63, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("slepc4py.SLEPc.BV.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) __PYX_ERR(3, 63, __pyx_L1_error)
   __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_2view(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
@@ -9360,9 +9965,6 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_2view(struct PySlepcBVObject *__p
   int __pyx_t_2;
   PetscViewer __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("view", 0);
 
   /* "SLEPc/BV.pyx":73
@@ -9386,9 +9988,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_2view(struct PySlepcBVObject *__p
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_viewer->vwr;
     __pyx_v_vwr = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
   /* "SLEPc/BV.pyx":75
  *         cdef PetscViewer vwr = NULL
@@ -9397,7 +9997,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_2view(struct PySlepcBVObject *__p
  * 
  *     def destroy(self):
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVView(__pyx_v_self->bv, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVView(__pyx_v_self->bv, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 75, __pyx_L1_error)
 
   /* "SLEPc/BV.pyx":63
  *         self.bv = NULL
@@ -9448,9 +10048,6 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_4destroy(struct PySlepcBVObject *
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("destroy", 0);
 
   /* "SLEPc/BV.pyx":81
@@ -9460,7 +10057,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_4destroy(struct PySlepcBVObject *
  *         self.bv = NULL
  *         return self
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVDestroy((&__pyx_v_self->bv))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVDestroy((&__pyx_v_self->bv))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 81, __pyx_L1_error)
 
   /* "SLEPc/BV.pyx":82
  *         """
@@ -9514,9 +10111,6 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_7create(PyObject *__pyx_v_self, P
 static char __pyx_doc_8slepc4py_5SLEPc_2BV_6create[] = "BV.create(self, comm=None)\n\n        Creates the BV object.\n\n        Parameters\n        ----------\n        comm: Comm, optional\n              MPI communicator; if not provided, it defaults to all\n              processes.\n        ";
 static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_7create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_comm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("create (wrapper)", 0);
@@ -9541,7 +10135,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_7create(PyObject *__pyx_v_self, P
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(3, 85, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -9554,7 +10148,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_7create(PyObject *__pyx_v_self, P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 85, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("slepc4py.SLEPc.BV.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -9574,9 +10168,6 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_6create(struct PySlepcBVObject *_
   __Pyx_RefNannyDeclarations
   MPI_Comm __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("create", 0);
 
   /* "SLEPc/BV.pyx":95
@@ -9586,7 +10177,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_6create(struct PySlepcBVObject *_
  *         cdef SlepcBV newbv = NULL
  *         CHKERR( BVCreate(ccomm, &newbv) )
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_def_Comm(__pyx_v_comm, __pyx_f_8slepc4py_5SLEPc_SLEPC_COMM_DEFAULT()); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_def_Comm(__pyx_v_comm, __pyx_f_8slepc4py_5SLEPc_SLEPC_COMM_DEFAULT()); if (unlikely(PyErr_Occurred())) __PYX_ERR(3, 95, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
   /* "SLEPc/BV.pyx":96
@@ -9605,7 +10196,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_6create(struct PySlepcBVObject *_
  *         SlepcCLEAR(self.obj); self.bv = newbv
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVCreate(__pyx_v_ccomm, (&__pyx_v_newbv))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVCreate(__pyx_v_ccomm, (&__pyx_v_newbv))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(3, 97, __pyx_L1_error)
 
   /* "SLEPc/BV.pyx":98
  *         cdef SlepcBV newbv = NULL
@@ -9622,7 +10213,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_6create(struct PySlepcBVObject *_
  *         SlepcCLEAR(self.obj); self.bv = newbv
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     def setType(self, bv_type):
+ *     def duplicate(self):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
@@ -9650,19 +10241,325 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_6create(struct PySlepcBVObject *_
 /* "SLEPc/BV.pyx":101
  *         return self
  * 
+ *     def duplicate(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Duplicate the BV object with the same type and dimensions.
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_9duplicate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_8duplicate[] = "BV.duplicate(self)\n\n        Duplicate the BV object with the same type and dimensions.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_9duplicate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("duplicate (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("duplicate", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "duplicate", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_8duplicate(((struct PySlepcBVObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_8duplicate(struct PySlepcBVObject *__pyx_v_self) {
+  struct PySlepcBVObject *__pyx_v_bv = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("duplicate", 0);
+
+  /* "SLEPc/BV.pyx":105
+ *         Duplicate the BV object with the same type and dimensions.
+ *         """
+ *         cdef BV bv = type(self)()             # <<<<<<<<<<<<<<
+ *         CHKERR( BVDuplicate(self.bv, &bv.bv) )
+ *         return bv
+ */
+  __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+  __pyx_t_2 = ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))); __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
+  }
+  if (__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 105, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  } else {
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 105, __pyx_L1_error)
+  }
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8slepc4py_5SLEPc_BV))))) __PYX_ERR(3, 105, __pyx_L1_error)
+  __pyx_v_bv = ((struct PySlepcBVObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "SLEPc/BV.pyx":106
+ *         """
+ *         cdef BV bv = type(self)()
+ *         CHKERR( BVDuplicate(self.bv, &bv.bv) )             # <<<<<<<<<<<<<<
+ *         return bv
+ * 
+ */
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVDuplicate(__pyx_v_self->bv, (&__pyx_v_bv->bv))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 106, __pyx_L1_error)
+
+  /* "SLEPc/BV.pyx":107
+ *         cdef BV bv = type(self)()
+ *         CHKERR( BVDuplicate(self.bv, &bv.bv) )
+ *         return bv             # <<<<<<<<<<<<<<
+ * 
+ *     def copy(self, BV result=None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_bv));
+  __pyx_r = ((PyObject *)__pyx_v_bv);
+  goto __pyx_L0;
+
+  /* "SLEPc/BV.pyx":101
+ *         return self
+ * 
+ *     def duplicate(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Duplicate the BV object with the same type and dimensions.
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.duplicate", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_bv);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/BV.pyx":109
+ *         return bv
+ * 
+ *     def copy(self, BV result=None):             # <<<<<<<<<<<<<<
+ *         if result is None:
+ *             result = type(self)()
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_11copy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_10copy[] = "BV.copy(self, BV result=None)";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_11copy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PySlepcBVObject *__pyx_v_result = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("copy (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_result,0};
+    PyObject* values[1] = {0};
+    values[0] = (PyObject *)((struct PySlepcBVObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_result);
+          if (value) { values[0] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "copy") < 0)) __PYX_ERR(3, 109, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_result = ((struct PySlepcBVObject *)values[0]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("copy", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 109, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_result), __pyx_ptype_8slepc4py_5SLEPc_BV, 1, "result", 0))) __PYX_ERR(3, 109, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_10copy(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_result);
+
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_10copy(struct PySlepcBVObject *__pyx_v_self, struct PySlepcBVObject *__pyx_v_result) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  int __pyx_t_6;
+  __Pyx_RefNannySetupContext("copy", 0);
+  __Pyx_INCREF((PyObject *)__pyx_v_result);
+
+  /* "SLEPc/BV.pyx":110
+ * 
+ *     def copy(self, BV result=None):
+ *         if result is None:             # <<<<<<<<<<<<<<
+ *             result = type(self)()
+ *         if result.bv == NULL:
+ */
+  __pyx_t_1 = (((PyObject *)__pyx_v_result) == Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "SLEPc/BV.pyx":111
+ *     def copy(self, BV result=None):
+ *         if result is None:
+ *             result = type(self)()             # <<<<<<<<<<<<<<
+ *         if result.bv == NULL:
+ *             CHKERR( BVDuplicate(self.bv, &result.bv) )
+ */
+    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+    __pyx_t_4 = ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))); __pyx_t_5 = NULL;
+    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
+      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
+      if (likely(__pyx_t_5)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
+        __Pyx_INCREF(__pyx_t_5);
+        __Pyx_INCREF(function);
+        __Pyx_DECREF_SET(__pyx_t_4, function);
+      }
+    }
+    if (__pyx_t_5) {
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 111, __pyx_L1_error)
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    } else {
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 111, __pyx_L1_error)
+    }
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8slepc4py_5SLEPc_BV))))) __PYX_ERR(3, 111, __pyx_L1_error)
+    __Pyx_DECREF_SET(__pyx_v_result, ((struct PySlepcBVObject *)__pyx_t_3));
+    __pyx_t_3 = 0;
+
+    /* "SLEPc/BV.pyx":110
+ * 
+ *     def copy(self, BV result=None):
+ *         if result is None:             # <<<<<<<<<<<<<<
+ *             result = type(self)()
+ *         if result.bv == NULL:
+ */
+  }
+
+  /* "SLEPc/BV.pyx":112
+ *         if result is None:
+ *             result = type(self)()
+ *         if result.bv == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( BVDuplicate(self.bv, &result.bv) )
+ *         CHKERR( BVCopy(self.bv, result.bv) )
+ */
+  __pyx_t_2 = ((__pyx_v_result->bv == NULL) != 0);
+  if (__pyx_t_2) {
+
+    /* "SLEPc/BV.pyx":113
+ *             result = type(self)()
+ *         if result.bv == NULL:
+ *             CHKERR( BVDuplicate(self.bv, &result.bv) )             # <<<<<<<<<<<<<<
+ *         CHKERR( BVCopy(self.bv, result.bv) )
+ *         return result
+ */
+    __pyx_t_6 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVDuplicate(__pyx_v_self->bv, (&__pyx_v_result->bv))); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(3, 113, __pyx_L1_error)
+
+    /* "SLEPc/BV.pyx":112
+ *         if result is None:
+ *             result = type(self)()
+ *         if result.bv == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( BVDuplicate(self.bv, &result.bv) )
+ *         CHKERR( BVCopy(self.bv, result.bv) )
+ */
+  }
+
+  /* "SLEPc/BV.pyx":114
+ *         if result.bv == NULL:
+ *             CHKERR( BVDuplicate(self.bv, &result.bv) )
+ *         CHKERR( BVCopy(self.bv, result.bv) )             # <<<<<<<<<<<<<<
+ *         return result
+ * 
+ */
+  __pyx_t_6 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVCopy(__pyx_v_self->bv, __pyx_v_result->bv)); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(3, 114, __pyx_L1_error)
+
+  /* "SLEPc/BV.pyx":115
+ *             CHKERR( BVDuplicate(self.bv, &result.bv) )
+ *         CHKERR( BVCopy(self.bv, result.bv) )
+ *         return result             # <<<<<<<<<<<<<<
+ * 
+ *     def setType(self, bv_type):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_result));
+  __pyx_r = ((PyObject *)__pyx_v_result);
+  goto __pyx_L0;
+
+  /* "SLEPc/BV.pyx":109
+ *         return bv
+ * 
+ *     def copy(self, BV result=None):             # <<<<<<<<<<<<<<
+ *         if result is None:
+ *             result = type(self)()
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_result);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/BV.pyx":117
+ *         return result
+ * 
  *     def setType(self, bv_type):             # <<<<<<<<<<<<<<
  *         """
  *         Selects the type for the BV object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_9setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2BV_8setType[] = "BV.setType(self, bv_type)\n\n        Selects the type for the BV object.\n\n        Parameters\n        ----------\n        bv_type: `BV.Type` enumerate\n                  The inner product type to be used.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_9setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_13setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_12setType[] = "BV.setType(self, bv_type)\n\n        Selects the type for the BV object.\n\n        Parameters\n        ----------\n        bv_type: `BV.Type` enumerate\n                  The inner product type to be used.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_13setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_bv_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setType (wrapper)", 0);
@@ -9684,7 +10581,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_9setType(PyObject *__pyx_v_self,
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(3, 117, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -9695,32 +10592,29 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_9setType(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 117, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("slepc4py.SLEPc.BV.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_8setType(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_bv_type);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_12setType(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_bv_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_8setType(struct PySlepcBVObject *__pyx_v_self, PyObject *__pyx_v_bv_type) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_12setType(struct PySlepcBVObject *__pyx_v_self, PyObject *__pyx_v_bv_type) {
   const char* __pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setType", 0);
   __Pyx_INCREF(__pyx_v_bv_type);
 
-  /* "SLEPc/BV.pyx":110
+  /* "SLEPc/BV.pyx":126
  *                   The inner product type to be used.
  *         """
  *         cdef SlepcBVType cval = NULL             # <<<<<<<<<<<<<<
@@ -9729,29 +10623,29 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_8setType(struct PySlepcBVObject *
  */
   __pyx_v_cval = NULL;
 
-  /* "SLEPc/BV.pyx":111
+  /* "SLEPc/BV.pyx":127
  *         """
  *         cdef SlepcBVType cval = NULL
  *         bv_type = str2bytes(bv_type, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( BVSetType(self.bv, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_bv_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_bv_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 127, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_bv_type, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "SLEPc/BV.pyx":112
+  /* "SLEPc/BV.pyx":128
  *         cdef SlepcBVType cval = NULL
  *         bv_type = str2bytes(bv_type, &cval)
  *         CHKERR( BVSetType(self.bv, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def getType(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVSetType(__pyx_v_self->bv, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVSetType(__pyx_v_self->bv, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(3, 128, __pyx_L1_error)
 
-  /* "SLEPc/BV.pyx":101
- *         return self
+  /* "SLEPc/BV.pyx":117
+ *         return result
  * 
  *     def setType(self, bv_type):             # <<<<<<<<<<<<<<
  *         """
@@ -9772,7 +10666,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_8setType(struct PySlepcBVObject *
   return __pyx_r;
 }
 
-/* "SLEPc/BV.pyx":114
+/* "SLEPc/BV.pyx":130
  *         CHKERR( BVSetType(self.bv, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -9781,34 +10675,31 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_8setType(struct PySlepcBVObject *
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_11getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2BV_10getType[] = "BV.getType(self)\n\n        Gets the BV type of this object.\n\n        Returns\n        -------\n        type: `BV.Type` enumerate\n              The inner product type currently being used.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_11getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_15getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_14getType[] = "BV.getType(self)\n\n        Gets the BV type of this object.\n\n        Returns\n        -------\n        type: `BV.Type` enumerate\n              The inner product type currently being used.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_15getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getType (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getType", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_10getType(((struct PySlepcBVObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_14getType(((struct PySlepcBVObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_10getType(struct PySlepcBVObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_14getType(struct PySlepcBVObject *__pyx_v_self) {
   const char* __pyx_v_bv_type;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getType", 0);
 
-  /* "SLEPc/BV.pyx":123
+  /* "SLEPc/BV.pyx":139
  *               The inner product type currently being used.
  *         """
  *         cdef SlepcBVType bv_type = NULL             # <<<<<<<<<<<<<<
@@ -9817,30 +10708,30 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_10getType(struct PySlepcBVObject
  */
   __pyx_v_bv_type = NULL;
 
-  /* "SLEPc/BV.pyx":124
+  /* "SLEPc/BV.pyx":140
  *         """
  *         cdef SlepcBVType bv_type = NULL
  *         CHKERR( BVGetType(self.bv, &bv_type) )             # <<<<<<<<<<<<<<
  *         return bytes2str(bv_type)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVGetType(__pyx_v_self->bv, (&__pyx_v_bv_type))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVGetType(__pyx_v_self->bv, (&__pyx_v_bv_type))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 140, __pyx_L1_error)
 
-  /* "SLEPc/BV.pyx":125
+  /* "SLEPc/BV.pyx":141
  *         cdef SlepcBVType bv_type = NULL
  *         CHKERR( BVGetType(self.bv, &bv_type) )
  *         return bytes2str(bv_type)             # <<<<<<<<<<<<<<
  * 
- *     def setOptionsPrefix(self, prefix):
+ *     def setSizes(self, sizes, m):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_bv_type); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_bv_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 141, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/BV.pyx":114
+  /* "SLEPc/BV.pyx":130
  *         CHKERR( BVSetType(self.bv, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -9859,22 +10750,385 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_10getType(struct PySlepcBVObject
   return __pyx_r;
 }
 
-/* "SLEPc/BV.pyx":127
+/* "SLEPc/BV.pyx":143
  *         return bytes2str(bv_type)
  * 
+ *     def setSizes(self, sizes, m):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the local and global sizes, and the number of columns.
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_17setSizes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_16setSizes[] = "BV.setSizes(self, sizes, m)\n\n        Sets the local and global sizes, and the number of columns.\n\n        Parameters\n        ----------\n        sizes: int or two-tuple of int\n              The global size ``N`` or a two-tuple ``(n, N)``\n              with the local and global sizes.\n        m: int\n              The number of columns.\n\n        Notes\n        -----\n        Either ``n`` or ``N`` (but not both) can be `` [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_17setSizes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_sizes = 0;
+  PyObject *__pyx_v_m = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setSizes (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sizes,&__pyx_n_s_m,0};
+    PyObject* values[2] = {0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sizes)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_m)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setSizes", 1, 2, 2, 1); __PYX_ERR(3, 143, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSizes") < 0)) __PYX_ERR(3, 143, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+    }
+    __pyx_v_sizes = values[0];
+    __pyx_v_m = values[1];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setSizes", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 143, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.setSizes", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_16setSizes(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_sizes, __pyx_v_m);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_16setSizes(struct PySlepcBVObject *__pyx_v_self, PyObject *__pyx_v_sizes, PyObject *__pyx_v_m) {
+  PetscInt __pyx_v_n;
+  PetscInt __pyx_v_N;
+  PetscInt __pyx_v_ival;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setSizes", 0);
+
+  /* "SLEPc/BV.pyx":160
+ *         or ``None`` to have it automatically set.
+ *         """
+ *         cdef PetscInt n=0, N=0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival = asInt(m)
+ *         BV_Sizes(sizes, &n, &N)
+ */
+  __pyx_v_n = 0;
+  __pyx_v_N = 0;
+
+  /* "SLEPc/BV.pyx":161
+ *         """
+ *         cdef PetscInt n=0, N=0
+ *         cdef PetscInt ival = asInt(m)             # <<<<<<<<<<<<<<
+ *         BV_Sizes(sizes, &n, &N)
+ *         CHKERR( BVSetSizes(self.bv, n, N, ival) )
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_m); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(3, 161, __pyx_L1_error)
+  __pyx_v_ival = __pyx_t_1;
+
+  /* "SLEPc/BV.pyx":162
+ *         cdef PetscInt n=0, N=0
+ *         cdef PetscInt ival = asInt(m)
+ *         BV_Sizes(sizes, &n, &N)             # <<<<<<<<<<<<<<
+ *         CHKERR( BVSetSizes(self.bv, n, N, ival) )
+ * 
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_BV_Sizes(__pyx_v_sizes, (&__pyx_v_n), (&__pyx_v_N)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(3, 162, __pyx_L1_error)
+
+  /* "SLEPc/BV.pyx":163
+ *         cdef PetscInt ival = asInt(m)
+ *         BV_Sizes(sizes, &n, &N)
+ *         CHKERR( BVSetSizes(self.bv, n, N, ival) )             # <<<<<<<<<<<<<<
+ * 
+ *     def setSizesFromVec(self, Vec w not None, m):
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVSetSizes(__pyx_v_self->bv, __pyx_v_n, __pyx_v_N, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(3, 163, __pyx_L1_error)
+
+  /* "SLEPc/BV.pyx":143
+ *         return bytes2str(bv_type)
+ * 
+ *     def setSizes(self, sizes, m):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the local and global sizes, and the number of columns.
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.setSizes", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/BV.pyx":165
+ *         CHKERR( BVSetSizes(self.bv, n, N, ival) )
+ * 
+ *     def setSizesFromVec(self, Vec w not None, m):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the local and global sizes, and the number of columns. Local and
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_19setSizesFromVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_18setSizesFromVec[] = "BV.setSizesFromVec(self, Vec w, m)\n\n        Sets the local and global sizes, and the number of columns. Local and\n        global sizes are specified indirectly by passing a template vector.\n\n        Parameters\n        ----------\n        w: Vec\n            The template vector.\n        m: int\n            The number of columns.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_19setSizesFromVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscVecObject *__pyx_v_w = 0;
+  PyObject *__pyx_v_m = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setSizesFromVec (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_w,&__pyx_n_s_m,0};
+    PyObject* values[2] = {0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_w)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_m)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setSizesFromVec", 1, 2, 2, 1); __PYX_ERR(3, 165, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSizesFromVec") < 0)) __PYX_ERR(3, 165, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+    }
+    __pyx_v_w = ((struct PyPetscVecObject *)values[0]);
+    __pyx_v_m = values[1];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setSizesFromVec", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 165, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.setSizesFromVec", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_w), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "w", 0))) __PYX_ERR(3, 165, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_18setSizesFromVec(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_w, __pyx_v_m);
+
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_18setSizesFromVec(struct PySlepcBVObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_w, PyObject *__pyx_v_m) {
+  PetscInt __pyx_v_ival;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setSizesFromVec", 0);
+
+  /* "SLEPc/BV.pyx":177
+ *             The number of columns.
+ *         """
+ *         cdef PetscInt ival = asInt(m)             # <<<<<<<<<<<<<<
+ *         CHKERR( BVSetSizesFromVec(self.bv, w.vec, ival) )
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_m); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(3, 177, __pyx_L1_error)
+  __pyx_v_ival = __pyx_t_1;
+
+  /* "SLEPc/BV.pyx":178
+ *         """
+ *         cdef PetscInt ival = asInt(m)
+ *         CHKERR( BVSetSizesFromVec(self.bv, w.vec, ival) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getSizes(self):
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVSetSizesFromVec(__pyx_v_self->bv, __pyx_v_w->vec, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(3, 178, __pyx_L1_error)
+
+  /* "SLEPc/BV.pyx":165
+ *         CHKERR( BVSetSizes(self.bv, n, N, ival) )
+ * 
+ *     def setSizesFromVec(self, Vec w not None, m):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the local and global sizes, and the number of columns. Local and
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.setSizesFromVec", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/BV.pyx":180
+ *         CHKERR( BVSetSizesFromVec(self.bv, w.vec, ival) )
+ * 
+ *     def getSizes(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Returns the local and global sizes, and the number of columns.
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_21getSizes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_20getSizes[] = "BV.getSizes(self)\n\n        Returns the local and global sizes, and the number of columns.\n\n        Returns\n        -------\n        sizes: two-tuple of int\n                The local and global sizes ``(n, N)``.\n        m: int\n                The number of columns.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_21getSizes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getSizes (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getSizes", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getSizes", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_20getSizes(((struct PySlepcBVObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_20getSizes(struct PySlepcBVObject *__pyx_v_self) {
+  PetscInt __pyx_v_n;
+  PetscInt __pyx_v_N;
+  PetscInt __pyx_v_m;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("getSizes", 0);
+
+  /* "SLEPc/BV.pyx":191
+ *                 The number of columns.
+ *         """
+ *         cdef PetscInt n=0, N=0, m=0             # <<<<<<<<<<<<<<
+ *         CHKERR( BVGetSizes(self.bv, &n, &N, &m) )
+ *         return ((toInt(n), toInt(N)), toInt(m))
+ */
+  __pyx_v_n = 0;
+  __pyx_v_N = 0;
+  __pyx_v_m = 0;
+
+  /* "SLEPc/BV.pyx":192
+ *         """
+ *         cdef PetscInt n=0, N=0, m=0
+ *         CHKERR( BVGetSizes(self.bv, &n, &N, &m) )             # <<<<<<<<<<<<<<
+ *         return ((toInt(n), toInt(N)), toInt(m))
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVGetSizes(__pyx_v_self->bv, (&__pyx_v_n), (&__pyx_v_N), (&__pyx_v_m))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 192, __pyx_L1_error)
+
+  /* "SLEPc/BV.pyx":193
+ *         cdef PetscInt n=0, N=0, m=0
+ *         CHKERR( BVGetSizes(self.bv, &n, &N, &m) )
+ *         return ((toInt(n), toInt(N)), toInt(m))             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 193, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 193, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 193, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
+  __pyx_t_2 = 0;
+  __pyx_t_3 = 0;
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 193, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 193, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_4);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
+  __pyx_t_4 = 0;
+  __pyx_t_3 = 0;
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "SLEPc/BV.pyx":180
+ *         CHKERR( BVSetSizesFromVec(self.bv, w.vec, ival) )
+ * 
+ *     def getSizes(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Returns the local and global sizes, and the number of columns.
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.getSizes", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/BV.pyx":196
+ * 
+ * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
  *         """
  *         Sets the prefix used for searching for all BV options in the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_13setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2BV_12setOptionsPrefix[] = "BV.setOptionsPrefix(self, prefix)\n\n        Sets the prefix used for searching for all BV options in the\n        database.\n\n        Parameters\n        ----------\n        prefix: string\n                The prefix string to prepend to all BV option\n                requests.\n\n        Notes\n        -----\n        A hyphen (``-``) must NOT be given at the beginning of the\n        prefix name.  The first character o [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_13setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_23setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_22setOptionsPrefix[] = "BV.setOptionsPrefix(self, prefix)\n\n        Sets the prefix used for searching for all BV options in the\n        database.\n\n        Parameters\n        ----------\n        prefix: string\n                The prefix string to prepend to all BV option\n                requests.\n\n        Notes\n        -----\n        A hyphen (``-``) must NOT be given at the beginning of the\n        prefix name.  The first character o [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_23setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_prefix = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setOptionsPrefix (wrapper)", 0);
@@ -9896,7 +11150,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_13setOptionsPrefix(PyObject *__py
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) __PYX_ERR(3, 196, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -9907,32 +11161,29 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_13setOptionsPrefix(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 196, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("slepc4py.SLEPc.BV.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_12setOptionsPrefix(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_prefix);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_22setOptionsPrefix(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_prefix);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_12setOptionsPrefix(struct PySlepcBVObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_22setOptionsPrefix(struct PySlepcBVObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
   const char *__pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setOptionsPrefix", 0);
   __Pyx_INCREF(__pyx_v_prefix);
 
-  /* "SLEPc/BV.pyx":144
+  /* "SLEPc/BV.pyx":213
  *         AUTOMATICALLY the hyphen.
  *         """
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -9941,29 +11192,29 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_12setOptionsPrefix(struct PySlepc
  */
   __pyx_v_cval = NULL;
 
-  /* "SLEPc/BV.pyx":145
+  /* "SLEPc/BV.pyx":214
  *         """
  *         cdef const_char *cval = NULL
  *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
  *         CHKERR( BVSetOptionsPrefix(self.bv, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 214, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "SLEPc/BV.pyx":146
+  /* "SLEPc/BV.pyx":215
  *         cdef const_char *cval = NULL
  *         prefix = str2bytes(prefix, &cval)
  *         CHKERR( BVSetOptionsPrefix(self.bv, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def getOptionsPrefix(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVSetOptionsPrefix(__pyx_v_self->bv, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVSetOptionsPrefix(__pyx_v_self->bv, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(3, 215, __pyx_L1_error)
 
-  /* "SLEPc/BV.pyx":127
- *         return bytes2str(bv_type)
+  /* "SLEPc/BV.pyx":196
+ * 
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
  *         """
@@ -9984,7 +11235,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_12setOptionsPrefix(struct PySlepc
   return __pyx_r;
 }
 
-/* "SLEPc/BV.pyx":148
+/* "SLEPc/BV.pyx":217
  *         CHKERR( BVSetOptionsPrefix(self.bv, cval) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
@@ -9993,34 +11244,31 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_12setOptionsPrefix(struct PySlepc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2BV_14getOptionsPrefix[] = "BV.getOptionsPrefix(self)\n\n        Gets the prefix used for searching for all BV options in the\n        database.\n\n        Returns\n        -------\n        prefix: string\n                The prefix string set for this BV object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_25getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_24getOptionsPrefix[] = "BV.getOptionsPrefix(self)\n\n        Gets the prefix used for searching for all BV options in the\n        database.\n\n        Returns\n        -------\n        prefix: string\n                The prefix string set for this BV object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_25getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getOptionsPrefix (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getOptionsPrefix", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getOptionsPrefix", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_14getOptionsPrefix(((struct PySlepcBVObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_24getOptionsPrefix(((struct PySlepcBVObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_14getOptionsPrefix(struct PySlepcBVObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_24getOptionsPrefix(struct PySlepcBVObject *__pyx_v_self) {
   const char *__pyx_v_prefix;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getOptionsPrefix", 0);
 
-  /* "SLEPc/BV.pyx":158
+  /* "SLEPc/BV.pyx":227
  *                 The prefix string set for this BV object.
  *         """
  *         cdef const_char *prefix = NULL             # <<<<<<<<<<<<<<
@@ -10029,16 +11277,16 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_14getOptionsPrefix(struct PySlepc
  */
   __pyx_v_prefix = NULL;
 
-  /* "SLEPc/BV.pyx":159
+  /* "SLEPc/BV.pyx":228
  *         """
  *         cdef const_char *prefix = NULL
  *         CHKERR( BVGetOptionsPrefix(self.bv, &prefix) )             # <<<<<<<<<<<<<<
  *         return bytes2str(prefix)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVGetOptionsPrefix(__pyx_v_self->bv, (&__pyx_v_prefix))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVGetOptionsPrefix(__pyx_v_self->bv, (&__pyx_v_prefix))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 228, __pyx_L1_error)
 
-  /* "SLEPc/BV.pyx":160
+  /* "SLEPc/BV.pyx":229
  *         cdef const_char *prefix = NULL
  *         CHKERR( BVGetOptionsPrefix(self.bv, &prefix) )
  *         return bytes2str(prefix)             # <<<<<<<<<<<<<<
@@ -10046,13 +11294,13 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_14getOptionsPrefix(struct PySlepc
  *     def setFromOptions(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_prefix); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_prefix); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 229, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/BV.pyx":148
+  /* "SLEPc/BV.pyx":217
  *         CHKERR( BVSetOptionsPrefix(self.bv, cval) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
@@ -10071,7 +11319,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_14getOptionsPrefix(struct PySlepc
   return __pyx_r;
 }
 
-/* "SLEPc/BV.pyx":162
+/* "SLEPc/BV.pyx":231
  *         return bytes2str(prefix)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -10080,41 +11328,38 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_14getOptionsPrefix(struct PySlepc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_17setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2BV_16setFromOptions[] = "BV.setFromOptions(self)\n\n        Sets BV options from the options database.\n\n        Notes\n        -----\n        To see all options, run your program with the ``-help``\n        option.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_17setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_27setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_26setFromOptions[] = "BV.setFromOptions(self)\n\n        Sets BV options from the options database.\n\n        Notes\n        -----\n        To see all options, run your program with the ``-help``\n        option.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_27setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setFromOptions (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("setFromOptions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setFromOptions", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_16setFromOptions(((struct PySlepcBVObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_26setFromOptions(((struct PySlepcBVObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_16setFromOptions(struct PySlepcBVObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_26setFromOptions(struct PySlepcBVObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setFromOptions", 0);
 
-  /* "SLEPc/BV.pyx":171
+  /* "SLEPc/BV.pyx":240
  *         option.
  *         """
  *         CHKERR( BVSetFromOptions(self.bv) )             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVSetFromOptions(__pyx_v_self->bv)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVSetFromOptions(__pyx_v_self->bv)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 240, __pyx_L1_error)
 
-  /* "SLEPc/BV.pyx":162
+  /* "SLEPc/BV.pyx":231
  *         return bytes2str(prefix)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -10134,7 +11379,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_16setFromOptions(struct PySlepcBV
   return __pyx_r;
 }
 
-/* "SLEPc/BV.pyx":175
+/* "SLEPc/BV.pyx":244
  *     #
  * 
  *     def getOrthogonalization(self):             # <<<<<<<<<<<<<<
@@ -10143,23 +11388,23 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_16setFromOptions(struct PySlepcBV
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_19getOrthogonalization(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2BV_18getOrthogonalization[] = "BV.getOrthogonalization(self)\n\n        Gets the orthogonalization settings from the BV object.\n\n        Returns\n        -------\n        type: `BV.OrthogType` enumerate\n              The type of orthogonalization technique.\n        refine: `BV.OrthogRefineType` enumerate\n              The type of refinement.\n        eta:  float\n              Parameter for selective refinement (used when the the\n             [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_19getOrthogonalization(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_29getOrthogonalization(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_28getOrthogonalization[] = "BV.getOrthogonalization(self)\n\n        Gets the orthogonalization settings from the BV object.\n\n        Returns\n        -------\n        type: `BV.OrthogType` enumerate\n              The type of orthogonalization technique.\n        refine: `BV.OrthogRefineType` enumerate\n              The type of refinement.\n        eta:  float\n              Parameter for selective refinement (used when the the\n             [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_29getOrthogonalization(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getOrthogonalization (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getOrthogonalization", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getOrthogonalization", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_18getOrthogonalization(((struct PySlepcBVObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_28getOrthogonalization(((struct PySlepcBVObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_18getOrthogonalization(struct PySlepcBVObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_28getOrthogonalization(struct PySlepcBVObject *__pyx_v_self) {
   BVOrthogType __pyx_v_val1;
   BVOrthogRefineType __pyx_v_val2;
   BVOrthogBlockType __pyx_v_val3;
@@ -10172,12 +11417,9 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_18getOrthogonalization(struct PyS
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getOrthogonalization", 0);
 
-  /* "SLEPc/BV.pyx":191
+  /* "SLEPc/BV.pyx":260
  *               The type of block orthogonalization .
  *         """
  *         cdef SlepcBVOrthogType val1 = BV_ORTHOG_CGS             # <<<<<<<<<<<<<<
@@ -10186,7 +11428,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_18getOrthogonalization(struct PyS
  */
   __pyx_v_val1 = BV_ORTHOG_CGS;
 
-  /* "SLEPc/BV.pyx":192
+  /* "SLEPc/BV.pyx":261
  *         """
  *         cdef SlepcBVOrthogType val1 = BV_ORTHOG_CGS
  *         cdef SlepcBVOrthogRefineType val2 = BV_ORTHOG_REFINE_IFNEEDED             # <<<<<<<<<<<<<<
@@ -10195,7 +11437,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_18getOrthogonalization(struct PyS
  */
   __pyx_v_val2 = BV_ORTHOG_REFINE_IFNEEDED;
 
-  /* "SLEPc/BV.pyx":193
+  /* "SLEPc/BV.pyx":262
  *         cdef SlepcBVOrthogType val1 = BV_ORTHOG_CGS
  *         cdef SlepcBVOrthogRefineType val2 = BV_ORTHOG_REFINE_IFNEEDED
  *         cdef SlepcBVOrthogBlockType val3 = BV_ORTHOG_BLOCK_GS             # <<<<<<<<<<<<<<
@@ -10204,7 +11446,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_18getOrthogonalization(struct PyS
  */
   __pyx_v_val3 = BV_ORTHOG_BLOCK_GS;
 
-  /* "SLEPc/BV.pyx":194
+  /* "SLEPc/BV.pyx":263
  *         cdef SlepcBVOrthogRefineType val2 = BV_ORTHOG_REFINE_IFNEEDED
  *         cdef SlepcBVOrthogBlockType val3 = BV_ORTHOG_BLOCK_GS
  *         cdef PetscReal rval = PETSC_DEFAULT             # <<<<<<<<<<<<<<
@@ -10213,16 +11455,16 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_18getOrthogonalization(struct PyS
  */
   __pyx_v_rval = PETSC_DEFAULT;
 
-  /* "SLEPc/BV.pyx":195
+  /* "SLEPc/BV.pyx":264
  *         cdef SlepcBVOrthogBlockType val3 = BV_ORTHOG_BLOCK_GS
  *         cdef PetscReal rval = PETSC_DEFAULT
  *         CHKERR( BVGetOrthogonalization(self.bv, &val1, &val2, &rval, &val3) )             # <<<<<<<<<<<<<<
  *         return (val1, val2, toReal(rval), val3)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVGetOrthogonalization(__pyx_v_self->bv, (&__pyx_v_val1), (&__pyx_v_val2), (&__pyx_v_rval), (&__pyx_v_val3))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVGetOrthogonalization(__pyx_v_self->bv, (&__pyx_v_val1), (&__pyx_v_val2), (&__pyx_v_rval), (&__pyx_v_val3))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 264, __pyx_L1_error)
 
-  /* "SLEPc/BV.pyx":196
+  /* "SLEPc/BV.pyx":265
  *         cdef PetscReal rval = PETSC_DEFAULT
  *         CHKERR( BVGetOrthogonalization(self.bv, &val1, &val2, &rval, &val3) )
  *         return (val1, val2, toReal(rval), val3)             # <<<<<<<<<<<<<<
@@ -10230,15 +11472,15 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_18getOrthogonalization(struct PyS
  *     def setOrthogonalization(self, type=None, refine=None, eta=None, block=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_val1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_BVOrthogType(__pyx_v_val1); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 265, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyInt_FromLong(__pyx_v_val2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_BVOrthogRefineType(__pyx_v_val2); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 265, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 265, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyInt_FromLong(__pyx_v_val3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_BVOrthogBlockType(__pyx_v_val3); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 265, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 265, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
@@ -10256,7 +11498,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_18getOrthogonalization(struct PyS
   __pyx_t_6 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/BV.pyx":175
+  /* "SLEPc/BV.pyx":244
  *     #
  * 
  *     def getOrthogonalization(self):             # <<<<<<<<<<<<<<
@@ -10279,7 +11521,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_18getOrthogonalization(struct PyS
   return __pyx_r;
 }
 
-/* "SLEPc/BV.pyx":198
+/* "SLEPc/BV.pyx":267
  *         return (val1, val2, toReal(rval), val3)
  * 
  *     def setOrthogonalization(self, type=None, refine=None, eta=None, block=None):             # <<<<<<<<<<<<<<
@@ -10288,16 +11530,13 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_18getOrthogonalization(struct PyS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_21setOrthogonalization(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2BV_20setOrthogonalization[] = "BV.setOrthogonalization(self, type=None, refine=None, eta=None, block=None)\n\n        Specifies the method used for the orthogonalization of vectors\n        (classical or modified Gram-Schmidt with or without refinement),\n        and for the block-orthogonalization (simultaneous orthogonalization\n        of a set of vectors).\n\n        Parameters\n        ----------\n        type: `BV.OrthogType` enumerate, optio [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_21setOrthogonalization(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_31setOrthogonalization(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_30setOrthogonalization[] = "BV.setOrthogonalization(self, type=None, refine=None, eta=None, block=None)\n\n        Specifies the method used for the orthogonalization of vectors\n        (classical or modified Gram-Schmidt with or without refinement),\n        and for the block-orthogonalization (simultaneous orthogonalization\n        of a set of vectors).\n\n        Parameters\n        ----------\n        type: `BV.OrthogType` enumerate, optio [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_31setOrthogonalization(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_type = 0;
   PyObject *__pyx_v_refine = 0;
   PyObject *__pyx_v_eta = 0;
   PyObject *__pyx_v_block = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setOrthogonalization (wrapper)", 0);
@@ -10343,7 +11582,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_21setOrthogonalization(PyObject *
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOrthogonalization") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOrthogonalization") < 0)) __PYX_ERR(3, 267, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -10362,20 +11601,20 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_21setOrthogonalization(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setOrthogonalization", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setOrthogonalization", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 267, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("slepc4py.SLEPc.BV.setOrthogonalization", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_20setOrthogonalization(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_type, __pyx_v_refine, __pyx_v_eta, __pyx_v_block);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_30setOrthogonalization(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_type, __pyx_v_refine, __pyx_v_eta, __pyx_v_block);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_20setOrthogonalization(struct PySlepcBVObject *__pyx_v_self, PyObject *__pyx_v_type, PyObject *__pyx_v_refine, PyObject *__pyx_v_eta, PyObject *__pyx_v_block) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_30setOrthogonalization(struct PySlepcBVObject *__pyx_v_self, PyObject *__pyx_v_type, PyObject *__pyx_v_refine, PyObject *__pyx_v_eta, PyObject *__pyx_v_block) {
   BVOrthogType __pyx_v_val1;
   BVOrthogRefineType __pyx_v_val2;
   BVOrthogBlockType __pyx_v_val3;
@@ -10384,17 +11623,14 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_20setOrthogonalization(struct PyS
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
-  BVOrthogType __pyx_t_3;
-  BVOrthogRefineType __pyx_t_4;
-  BVOrthogBlockType __pyx_t_5;
-  PetscReal __pyx_t_6;
-  int __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+  int __pyx_t_3;
+  BVOrthogType __pyx_t_4;
+  BVOrthogRefineType __pyx_t_5;
+  BVOrthogBlockType __pyx_t_6;
+  PetscReal __pyx_t_7;
   __Pyx_RefNannySetupContext("setOrthogonalization", 0);
 
-  /* "SLEPc/BV.pyx":230
+  /* "SLEPc/BV.pyx":299
  *         computation is done column by column with the vector orthogonalization.
  *         """
  *         cdef SlepcBVOrthogType val1 = BV_ORTHOG_CGS             # <<<<<<<<<<<<<<
@@ -10403,7 +11639,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_20setOrthogonalization(struct PyS
  */
   __pyx_v_val1 = BV_ORTHOG_CGS;
 
-  /* "SLEPc/BV.pyx":231
+  /* "SLEPc/BV.pyx":300
  *         """
  *         cdef SlepcBVOrthogType val1 = BV_ORTHOG_CGS
  *         cdef SlepcBVOrthogRefineType val2 = BV_ORTHOG_REFINE_IFNEEDED             # <<<<<<<<<<<<<<
@@ -10412,98 +11648,99 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_20setOrthogonalization(struct PyS
  */
   __pyx_v_val2 = BV_ORTHOG_REFINE_IFNEEDED;
 
-  /* "SLEPc/BV.pyx":232
+  /* "SLEPc/BV.pyx":301
  *         cdef SlepcBVOrthogType val1 = BV_ORTHOG_CGS
  *         cdef SlepcBVOrthogRefineType val2 = BV_ORTHOG_REFINE_IFNEEDED
  *         cdef SlepcBVOrthogBlockType val3 = BV_ORTHOG_BLOCK_GS             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval = PETSC_DEFAULT
- *         if type   is not None: val1= type
+ *         CHKERR( BVGetOrthogonalization(self.bv, &val1, &val2, &rval, &val3) )
  */
   __pyx_v_val3 = BV_ORTHOG_BLOCK_GS;
 
-  /* "SLEPc/BV.pyx":233
+  /* "SLEPc/BV.pyx":302
  *         cdef SlepcBVOrthogRefineType val2 = BV_ORTHOG_REFINE_IFNEEDED
  *         cdef SlepcBVOrthogBlockType val3 = BV_ORTHOG_BLOCK_GS
  *         cdef PetscReal rval = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         if type   is not None: val1= type
- *         if refine is not None: val2= refine
+ *         CHKERR( BVGetOrthogonalization(self.bv, &val1, &val2, &rval, &val3) )
+ *         if type   is not None: val1 = type
  */
   __pyx_v_rval = PETSC_DEFAULT;
 
-  /* "SLEPc/BV.pyx":234
+  /* "SLEPc/BV.pyx":303
  *         cdef SlepcBVOrthogBlockType val3 = BV_ORTHOG_BLOCK_GS
  *         cdef PetscReal rval = PETSC_DEFAULT
- *         if type   is not None: val1= type             # <<<<<<<<<<<<<<
- *         if refine is not None: val2= refine
- *         if block  is not None: val3= block
+ *         CHKERR( BVGetOrthogonalization(self.bv, &val1, &val2, &rval, &val3) )             # <<<<<<<<<<<<<<
+ *         if type   is not None: val1 = type
+ *         if refine is not None: val2 = refine
  */
-  __pyx_t_1 = (__pyx_v_type != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = ((BVOrthogType)PyInt_AsLong(__pyx_v_type)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_val1 = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVGetOrthogonalization(__pyx_v_self->bv, (&__pyx_v_val1), (&__pyx_v_val2), (&__pyx_v_rval), (&__pyx_v_val3))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 303, __pyx_L1_error)
 
-  /* "SLEPc/BV.pyx":235
+  /* "SLEPc/BV.pyx":304
  *         cdef PetscReal rval = PETSC_DEFAULT
- *         if type   is not None: val1= type
- *         if refine is not None: val2= refine             # <<<<<<<<<<<<<<
- *         if block  is not None: val3= block
+ *         CHKERR( BVGetOrthogonalization(self.bv, &val1, &val2, &rval, &val3) )
+ *         if type   is not None: val1 = type             # <<<<<<<<<<<<<<
+ *         if refine is not None: val2 = refine
+ *         if block  is not None: val3 = block
+ */
+  __pyx_t_2 = (__pyx_v_type != Py_None);
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
+    __pyx_t_4 = ((BVOrthogType)__Pyx_PyInt_As_BVOrthogType(__pyx_v_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(3, 304, __pyx_L1_error)
+    __pyx_v_val1 = __pyx_t_4;
+  }
+
+  /* "SLEPc/BV.pyx":305
+ *         CHKERR( BVGetOrthogonalization(self.bv, &val1, &val2, &rval, &val3) )
+ *         if type   is not None: val1 = type
+ *         if refine is not None: val2 = refine             # <<<<<<<<<<<<<<
+ *         if block  is not None: val3 = block
  *         if eta    is not None: rval = asReal(eta)
  */
-  __pyx_t_2 = (__pyx_v_refine != Py_None);
-  __pyx_t_1 = (__pyx_t_2 != 0);
-  if (__pyx_t_1) {
-    __pyx_t_4 = ((BVOrthogRefineType)PyInt_AsLong(__pyx_v_refine)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_val2 = __pyx_t_4;
-    goto __pyx_L4;
+  __pyx_t_3 = (__pyx_v_refine != Py_None);
+  __pyx_t_2 = (__pyx_t_3 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_5 = ((BVOrthogRefineType)__Pyx_PyInt_As_BVOrthogRefineType(__pyx_v_refine)); if (unlikely(PyErr_Occurred())) __PYX_ERR(3, 305, __pyx_L1_error)
+    __pyx_v_val2 = __pyx_t_5;
   }
-  __pyx_L4:;
 
-  /* "SLEPc/BV.pyx":236
- *         if type   is not None: val1= type
- *         if refine is not None: val2= refine
- *         if block  is not None: val3= block             # <<<<<<<<<<<<<<
+  /* "SLEPc/BV.pyx":306
+ *         if type   is not None: val1 = type
+ *         if refine is not None: val2 = refine
+ *         if block  is not None: val3 = block             # <<<<<<<<<<<<<<
  *         if eta    is not None: rval = asReal(eta)
  *         CHKERR( BVSetOrthogonalization(self.bv, val1, val2, rval, val3) )
  */
-  __pyx_t_1 = (__pyx_v_block != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_5 = ((BVOrthogBlockType)PyInt_AsLong(__pyx_v_block)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_val3 = __pyx_t_5;
-    goto __pyx_L5;
+  __pyx_t_2 = (__pyx_v_block != Py_None);
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
+    __pyx_t_6 = ((BVOrthogBlockType)__Pyx_PyInt_As_BVOrthogBlockType(__pyx_v_block)); if (unlikely(PyErr_Occurred())) __PYX_ERR(3, 306, __pyx_L1_error)
+    __pyx_v_val3 = __pyx_t_6;
   }
-  __pyx_L5:;
 
-  /* "SLEPc/BV.pyx":237
- *         if refine is not None: val2= refine
- *         if block  is not None: val3= block
+  /* "SLEPc/BV.pyx":307
+ *         if refine is not None: val2 = refine
+ *         if block  is not None: val3 = block
  *         if eta    is not None: rval = asReal(eta)             # <<<<<<<<<<<<<<
  *         CHKERR( BVSetOrthogonalization(self.bv, val1, val2, rval, val3) )
  * 
  */
-  __pyx_t_2 = (__pyx_v_eta != Py_None);
-  __pyx_t_1 = (__pyx_t_2 != 0);
-  if (__pyx_t_1) {
-    __pyx_t_6 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_eta); if (unlikely(__pyx_t_6 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_rval = __pyx_t_6;
-    goto __pyx_L6;
+  __pyx_t_3 = (__pyx_v_eta != Py_None);
+  __pyx_t_2 = (__pyx_t_3 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_7 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_eta); if (unlikely(__pyx_t_7 == -1.0 && PyErr_Occurred())) __PYX_ERR(3, 307, __pyx_L1_error)
+    __pyx_v_rval = __pyx_t_7;
   }
-  __pyx_L6:;
 
-  /* "SLEPc/BV.pyx":238
- *         if block  is not None: val3= block
+  /* "SLEPc/BV.pyx":308
+ *         if block  is not None: val3 = block
  *         if eta    is not None: rval = asReal(eta)
  *         CHKERR( BVSetOrthogonalization(self.bv, val1, val2, rval, val3) )             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_7 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVSetOrthogonalization(__pyx_v_self->bv, __pyx_v_val1, __pyx_v_val2, __pyx_v_rval, __pyx_v_val3)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVSetOrthogonalization(__pyx_v_self->bv, __pyx_v_val1, __pyx_v_val2, __pyx_v_rval, __pyx_v_val3)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 308, __pyx_L1_error)
 
-  /* "SLEPc/BV.pyx":198
+  /* "SLEPc/BV.pyx":267
  *         return (val1, val2, toReal(rval), val3)
  * 
  *     def setOrthogonalization(self, type=None, refine=None, eta=None, block=None):             # <<<<<<<<<<<<<<
@@ -10523,7 +11760,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_20setOrthogonalization(struct PyS
   return __pyx_r;
 }
 
-/* "SLEPc/BV.pyx":242
+/* "SLEPc/BV.pyx":312
  *     #
  * 
  *     def getMatrix(self):             # <<<<<<<<<<<<<<
@@ -10532,23 +11769,23 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_20setOrthogonalization(struct PyS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_23getMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2BV_22getMatrix[] = "BV.getMatrix(self)\n\n        Retrieves the matrix representation of the inner product.\n\n        Returns\n        -------\n        mat: the matrix of the inner product\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_23getMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_33getMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_32getMatrix[] = "BV.getMatrix(self)\n\n        Retrieves the matrix representation of the inner product.\n\n        Returns\n        -------\n        mat: the matrix of the inner product\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_33getMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getMatrix (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getMatrix", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getMatrix", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_22getMatrix(((struct PySlepcBVObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_32getMatrix(((struct PySlepcBVObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_22getMatrix(struct PySlepcBVObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_32getMatrix(struct PySlepcBVObject *__pyx_v_self) {
   struct PyPetscMatObject *__pyx_v_mat = 0;
   PetscBool __pyx_v_indef;
   PyObject *__pyx_r = NULL;
@@ -10556,24 +11793,21 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_22getMatrix(struct PySlepcBVObjec
   PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getMatrix", 0);
 
-  /* "SLEPc/BV.pyx":250
+  /* "SLEPc/BV.pyx":320
  *         mat: the matrix of the inner product
  *         """
  *         cdef Mat mat = Mat()             # <<<<<<<<<<<<<<
  *         cdef PetscBool indef = PETSC_FALSE
  *         CHKERR( BVGetMatrix(self.bv, &mat.mat, &indef) )
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Mat)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 320, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "SLEPc/BV.pyx":251
+  /* "SLEPc/BV.pyx":321
  *         """
  *         cdef Mat mat = Mat()
  *         cdef PetscBool indef = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -10582,16 +11816,16 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_22getMatrix(struct PySlepcBVObjec
  */
   __pyx_v_indef = PETSC_FALSE;
 
-  /* "SLEPc/BV.pyx":252
+  /* "SLEPc/BV.pyx":322
  *         cdef Mat mat = Mat()
  *         cdef PetscBool indef = PETSC_FALSE
  *         CHKERR( BVGetMatrix(self.bv, &mat.mat, &indef) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(mat.obj)
  *         return mat, <bint>indef
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVGetMatrix(__pyx_v_self->bv, (&__pyx_v_mat->mat), (&__pyx_v_indef))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVGetMatrix(__pyx_v_self->bv, (&__pyx_v_mat->mat), (&__pyx_v_indef))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(3, 322, __pyx_L1_error)
 
-  /* "SLEPc/BV.pyx":253
+  /* "SLEPc/BV.pyx":323
  *         cdef PetscBool indef = PETSC_FALSE
  *         CHKERR( BVGetMatrix(self.bv, &mat.mat, &indef) )
  *         PetscINCREF(mat.obj)             # <<<<<<<<<<<<<<
@@ -10600,7 +11834,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_22getMatrix(struct PySlepcBVObjec
  */
   __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_mat->__pyx_base.obj);
 
-  /* "SLEPc/BV.pyx":254
+  /* "SLEPc/BV.pyx":324
  *         CHKERR( BVGetMatrix(self.bv, &mat.mat, &indef) )
  *         PetscINCREF(mat.obj)
  *         return mat, <bint>indef             # <<<<<<<<<<<<<<
@@ -10608,9 +11842,9 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_22getMatrix(struct PySlepcBVObjec
  *     def setMatrix(self, Mat mat, bint indef):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_indef); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_PetscBool(__pyx_v_indef); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 324, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 324, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(((PyObject *)__pyx_v_mat));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_mat));
@@ -10622,7 +11856,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_22getMatrix(struct PySlepcBVObjec
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/BV.pyx":242
+  /* "SLEPc/BV.pyx":312
  *     #
  * 
  *     def getMatrix(self):             # <<<<<<<<<<<<<<
@@ -10643,7 +11877,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_22getMatrix(struct PySlepcBVObjec
   return __pyx_r;
 }
 
-/* "SLEPc/BV.pyx":256
+/* "SLEPc/BV.pyx":326
  *         return mat, <bint>indef
  * 
  *     def setMatrix(self, Mat mat, bint indef):             # <<<<<<<<<<<<<<
@@ -10652,14 +11886,11 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_22getMatrix(struct PySlepcBVObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_25setMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2BV_24setMatrix[] = "BV.setMatrix(self, Mat mat, bool indef)\n\n        Sets the bilinear form to be used for inner products.\n\n        Parameters\n        ----------\n        mat:  Mat, optional\n              The matrix of the inner product.\n        indef: bool, optional\n               Whether the matrix is indefinite\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_25setMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_35setMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_34setMatrix[] = "BV.setMatrix(self, Mat mat, bool indef)\n\n        Sets the bilinear form to be used for inner products.\n\n        Parameters\n        ----------\n        mat:  Mat, optional\n              The matrix of the inner product.\n        indef: bool, optional\n               Whether the matrix is indefinite\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_35setMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscMatObject *__pyx_v_mat = 0;
   int __pyx_v_indef;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setMatrix (wrapper)", 0);
@@ -10683,11 +11914,11 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_25setMatrix(PyObject *__pyx_v_sel
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_indef)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setMatrix", 1, 2, 2, 1); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setMatrix", 1, 2, 2, 1); __PYX_ERR(3, 326, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMatrix") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMatrix") < 0)) __PYX_ERR(3, 326, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -10696,18 +11927,18 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_25setMatrix(PyObject *__pyx_v_sel
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
     __pyx_v_mat = ((struct PyPetscMatObject *)values[0]);
-    __pyx_v_indef = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_indef == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_indef = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_indef == (int)-1) && PyErr_Occurred())) __PYX_ERR(3, 326, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMatrix", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setMatrix", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 326, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("slepc4py.SLEPc.BV.setMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "mat", 0))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_24setMatrix(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_indef);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "mat", 0))) __PYX_ERR(3, 326, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_34setMatrix(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_indef);
 
   /* function exit code */
   goto __pyx_L0;
@@ -10718,78 +11949,56 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_25setMatrix(PyObject *__pyx_v_sel
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_24setMatrix(struct PySlepcBVObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, int __pyx_v_indef) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_34setMatrix(struct PySlepcBVObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, int __pyx_v_indef) {
   Mat __pyx_v_m;
-  PetscBool __pyx_v_cflag;
+  PetscBool __pyx_v_tval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  void *__pyx_t_1;
   int __pyx_t_2;
-  Mat __pyx_t_3;
+  PetscBool __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setMatrix", 0);
 
-  /* "SLEPc/BV.pyx":267
+  /* "SLEPc/BV.pyx":337
  *                Whether the matrix is indefinite
  *         """
- *         cdef PetscMat m = NULL             # <<<<<<<<<<<<<<
- *         if mat is not None: m = mat.mat
- *         cdef PetscBool cflag = PETSC_FALSE
- */
-  __pyx_v_m = NULL;
-
-  /* "SLEPc/BV.pyx":268
- *         """
- *         cdef PetscMat m = NULL
- *         if mat is not None: m = mat.mat             # <<<<<<<<<<<<<<
- *         cdef PetscBool cflag = PETSC_FALSE
- *         if indef: cflag = PETSC_TRUE
+ *         cdef PetscMat m = NULL if mat is None else mat.mat             # <<<<<<<<<<<<<<
+ *         cdef PetscBool tval = PETSC_TRUE if indef else PETSC_FALSE
+ *         CHKERR( BVSetMatrix(self.bv, m, tval) )
  */
-  __pyx_t_1 = (((PyObject *)__pyx_v_mat) != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_v_mat->mat;
-    __pyx_v_m = __pyx_t_3;
-    goto __pyx_L3;
+  __pyx_t_2 = (((PyObject *)__pyx_v_mat) == Py_None);
+  if ((__pyx_t_2 != 0)) {
+    __pyx_t_1 = NULL;
+  } else {
+    __pyx_t_1 = __pyx_v_mat->mat;
   }
-  __pyx_L3:;
-
-  /* "SLEPc/BV.pyx":269
- *         cdef PetscMat m = NULL
- *         if mat is not None: m = mat.mat
- *         cdef PetscBool cflag = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         if indef: cflag = PETSC_TRUE
- *         CHKERR( BVSetMatrix(self.bv, m, cflag) )
- */
-  __pyx_v_cflag = PETSC_FALSE;
+  __pyx_v_m = __pyx_t_1;
 
-  /* "SLEPc/BV.pyx":270
- *         if mat is not None: m = mat.mat
- *         cdef PetscBool cflag = PETSC_FALSE
- *         if indef: cflag = PETSC_TRUE             # <<<<<<<<<<<<<<
- *         CHKERR( BVSetMatrix(self.bv, m, cflag) )
+  /* "SLEPc/BV.pyx":338
+ *         """
+ *         cdef PetscMat m = NULL if mat is None else mat.mat
+ *         cdef PetscBool tval = PETSC_TRUE if indef else PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( BVSetMatrix(self.bv, m, tval) )
  * 
  */
-  __pyx_t_2 = (__pyx_v_indef != 0);
-  if (__pyx_t_2) {
-    __pyx_v_cflag = PETSC_TRUE;
-    goto __pyx_L4;
+  if ((__pyx_v_indef != 0)) {
+    __pyx_t_3 = PETSC_TRUE;
+  } else {
+    __pyx_t_3 = PETSC_FALSE;
   }
-  __pyx_L4:;
+  __pyx_v_tval = __pyx_t_3;
 
-  /* "SLEPc/BV.pyx":271
- *         cdef PetscBool cflag = PETSC_FALSE
- *         if indef: cflag = PETSC_TRUE
- *         CHKERR( BVSetMatrix(self.bv, m, cflag) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/BV.pyx":339
+ *         cdef PetscMat m = NULL if mat is None else mat.mat
+ *         cdef PetscBool tval = PETSC_TRUE if indef else PETSC_FALSE
+ *         CHKERR( BVSetMatrix(self.bv, m, tval) )             # <<<<<<<<<<<<<<
  * 
  *     def applyMatrix(self, Vec x not None, Vec y not None):
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVSetMatrix(__pyx_v_self->bv, __pyx_v_m, __pyx_v_cflag)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVSetMatrix(__pyx_v_self->bv, __pyx_v_m, __pyx_v_tval)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 339, __pyx_L1_error)
 
-  /* "SLEPc/BV.pyx":256
+  /* "SLEPc/BV.pyx":326
  *         return mat, <bint>indef
  * 
  *     def setMatrix(self, Mat mat, bint indef):             # <<<<<<<<<<<<<<
@@ -10809,8 +12018,8 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_24setMatrix(struct PySlepcBVObjec
   return __pyx_r;
 }
 
-/* "SLEPc/BV.pyx":273
- *         CHKERR( BVSetMatrix(self.bv, m, cflag) )
+/* "SLEPc/BV.pyx":341
+ *         CHKERR( BVSetMatrix(self.bv, m, tval) )
  * 
  *     def applyMatrix(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
  *         """
@@ -10818,14 +12027,11 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_24setMatrix(struct PySlepcBVObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_27applyMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2BV_26applyMatrix[] = "BV.applyMatrix(self, Vec x, Vec y)\n\n        Multiplies a vector with the matrix associated to the bilinear\n        form.\n\n        Parameters\n        ----------\n        x: Vec\n           The input vector.\n        y: Vec\n           The result vector.\n\n        Notes\n        -----\n        If the bilinear form has no associated matrix this function\n        copies the vector.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_27applyMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_37applyMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_36applyMatrix[] = "BV.applyMatrix(self, Vec x, Vec y)\n\n        Multiplies a vector with the matrix associated to the bilinear\n        form.\n\n        Parameters\n        ----------\n        x: Vec\n           The input vector.\n        y: Vec\n           The result vector.\n\n        Notes\n        -----\n        If the bilinear form has no associated matrix this function\n        copies the vector.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_37applyMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscVecObject *__pyx_v_y = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("applyMatrix (wrapper)", 0);
@@ -10849,11 +12055,11 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_27applyMatrix(PyObject *__pyx_v_s
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("applyMatrix", 1, 2, 2, 1); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("applyMatrix", 1, 2, 2, 1); __PYX_ERR(3, 341, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applyMatrix") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applyMatrix") < 0)) __PYX_ERR(3, 341, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -10866,15 +12072,15 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_27applyMatrix(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("applyMatrix", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("applyMatrix", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 341, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("slepc4py.SLEPc.BV.applyMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_26applyMatrix(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_x, __pyx_v_y);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(3, 341, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(3, 341, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_36applyMatrix(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_x, __pyx_v_y);
 
   /* function exit code */
   goto __pyx_L0;
@@ -10885,26 +12091,23 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_27applyMatrix(PyObject *__pyx_v_s
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_26applyMatrix(struct PySlepcBVObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_36applyMatrix(struct PySlepcBVObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("applyMatrix", 0);
 
-  /* "SLEPc/BV.pyx":290
+  /* "SLEPc/BV.pyx":358
  *         copies the vector.
  *         """
  *         CHKERR( BVApplyMatrix(self.bv, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def orthogonalizeVec(self, Vec v not None):
+ *     def setActiveColumns(self, int l, int k):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVApplyMatrix(__pyx_v_self->bv, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVApplyMatrix(__pyx_v_self->bv, __pyx_v_x->vec, __pyx_v_y->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 358, __pyx_L1_error)
 
-  /* "SLEPc/BV.pyx":273
- *         CHKERR( BVSetMatrix(self.bv, m, cflag) )
+  /* "SLEPc/BV.pyx":341
+ *         CHKERR( BVSetMatrix(self.bv, m, tval) )
  * 
  *     def applyMatrix(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
  *         """
@@ -10923,32 +12126,31 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_26applyMatrix(struct PySlepcBVObj
   return __pyx_r;
 }
 
-/* "SLEPc/BV.pyx":292
+/* "SLEPc/BV.pyx":360
  *         CHKERR( BVApplyMatrix(self.bv, x.vec, y.vec) )
  * 
- *     def orthogonalizeVec(self, Vec v not None):             # <<<<<<<<<<<<<<
+ *     def setActiveColumns(self, int l, int k):             # <<<<<<<<<<<<<<
  *         """
- *         Orthogonalize a vector with respect to a set of vectors.
+ *         Specify the columns that will be involved in operations.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_29orthogonalizeVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2BV_28orthogonalizeVec[] = "BV.orthogonalizeVec(self, Vec v)\n\n        Orthogonalize a vector with respect to a set of vectors.\n\n        Parameters\n        ----------\n        v:  Vec\n            Vector to be orthogonalized, modified on return.\n\n        Returns\n        -------\n        norm: float\n            The norm of the resulting vector.\n        lindep: boolean\n            Flag indicating that refinement did not improve the\n         [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_29orthogonalizeVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscVecObject *__pyx_v_v = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_39setActiveColumns(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_38setActiveColumns[] = "BV.setActiveColumns(self, int l, int k)\n\n        Specify the columns that will be involved in operations.\n\n        Parameters\n        ----------\n        l: int\n            The leading number of columns.\n        k: int\n            The active number of columns.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_39setActiveColumns(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_l;
+  int __pyx_v_k;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("orthogonalizeVec (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setActiveColumns (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_v,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_l,&__pyx_n_s_k,0};
+    PyObject* values[2] = {0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -10956,118 +12158,69 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_29orthogonalizeVec(PyObject *__py
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_v)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_l)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_k)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setActiveColumns", 1, 2, 2, 1); __PYX_ERR(3, 360, __pyx_L3_error)
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "orthogonalizeVec") < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setActiveColumns") < 0)) __PYX_ERR(3, 360, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_v = ((struct PyPetscVecObject *)values[0]);
+    __pyx_v_l = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_l == (int)-1) && PyErr_Occurred())) __PYX_ERR(3, 360, __pyx_L3_error)
+    __pyx_v_k = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_k == (int)-1) && PyErr_Occurred())) __PYX_ERR(3, 360, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("orthogonalizeVec", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[8]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setActiveColumns", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 360, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.BV.orthogonalizeVec", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.setActiveColumns", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "v", 0))) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_28orthogonalizeVec(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_v);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_38setActiveColumns(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_l, __pyx_v_k);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_28orthogonalizeVec(struct PySlepcBVObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_v) {
-  PetscReal __pyx_v_rval;
-  PetscBool __pyx_v_tval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_38setActiveColumns(struct PySlepcBVObject *__pyx_v_self, int __pyx_v_l, int __pyx_v_k) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("orthogonalizeVec", 0);
+  __Pyx_RefNannySetupContext("setActiveColumns", 0);
 
-  /* "SLEPc/BV.pyx":317
- *         This routine does not normalize the resulting vector.
- *         """
- *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( BVOrthogonalizeVec(self.bv, v.vec, NULL, &rval, &tval) )
- */
-  __pyx_v_rval = 0.0;
-
-  /* "SLEPc/BV.pyx":318
+  /* "SLEPc/BV.pyx":371
+ *             The active number of columns.
  *         """
- *         cdef PetscReal rval = 0
- *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( BVOrthogonalizeVec(self.bv, v.vec, NULL, &rval, &tval) )
- *         return (toReal(rval), <bint>tval)
- */
-  __pyx_v_tval = PETSC_FALSE;
-
-  /* "SLEPc/BV.pyx":319
- *         cdef PetscReal rval = 0
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( BVOrthogonalizeVec(self.bv, v.vec, NULL, &rval, &tval) )             # <<<<<<<<<<<<<<
- *         return (toReal(rval), <bint>tval)
- * 
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVOrthogonalizeVec(__pyx_v_self->bv, __pyx_v_v->vec, NULL, (&__pyx_v_rval), (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/BV.pyx":320
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( BVOrthogonalizeVec(self.bv, v.vec, NULL, &rval, &tval) )
- *         return (toReal(rval), <bint>tval)             # <<<<<<<<<<<<<<
+ *         CHKERR( BVSetActiveColumns(self.bv, l, k) )             # <<<<<<<<<<<<<<
  * 
- * # -----------------------------------------------------------------------------
+ *     def getActiveColumns(self):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyInt_FromLong(__pyx_v_tval); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __Pyx_GIVEREF(__pyx_t_2);
-  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_3);
-  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
-  __pyx_t_2 = 0;
-  __pyx_t_3 = 0;
-  __pyx_r = __pyx_t_4;
-  __pyx_t_4 = 0;
-  goto __pyx_L0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVSetActiveColumns(__pyx_v_self->bv, __pyx_v_l, __pyx_v_k)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 371, __pyx_L1_error)
 
-  /* "SLEPc/BV.pyx":292
+  /* "SLEPc/BV.pyx":360
  *         CHKERR( BVApplyMatrix(self.bv, x.vec, y.vec) )
  * 
- *     def orthogonalizeVec(self, Vec v not None):             # <<<<<<<<<<<<<<
+ *     def setActiveColumns(self, int l, int k):             # <<<<<<<<<<<<<<
  *         """
- *         Orthogonalize a vector with respect to a set of vectors.
+ *         Specify the columns that will be involved in operations.
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("slepc4py.SLEPc.BV.orthogonalizeVec", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.setActiveColumns", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -11075,94 +12228,131 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_28orthogonalizeVec(struct PySlepc
   return __pyx_r;
 }
 
-/* "SLEPc/DS.pyx":72
- *     MatType   = DSMatType
+/* "SLEPc/BV.pyx":373
+ *         CHKERR( BVSetActiveColumns(self.bv, l, k) )
  * 
- *     def __cinit__(self):             # <<<<<<<<<<<<<<
- *         self.obj = <PetscObject*> &self.ds
- *         self.ds = NULL
+ *     def getActiveColumns(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Returns the current active dimensions.
  */
 
 /* Python wrapper */
-static int __pyx_pw_8slepc4py_5SLEPc_2DS_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_8slepc4py_5SLEPc_2DS_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_r;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_41getActiveColumns(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_40getActiveColumns[] = "BV.getActiveColumns(self)\n\n        Returns the current active dimensions.\n\n        Returns\n        -------\n        l: int\n            The leading number of columns.\n        k: int\n            The active number of columns.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_41getActiveColumns(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getActiveColumns (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS___cinit__(((struct PySlepcDSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getActiveColumns", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getActiveColumns", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_40getActiveColumns(((struct PySlepcBVObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_8slepc4py_5SLEPc_2DS___cinit__(struct PySlepcDSObject *__pyx_v_self) {
-  int __pyx_r;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_40getActiveColumns(struct PySlepcBVObject *__pyx_v_self) {
+  PetscInt __pyx_v_l;
+  PetscInt __pyx_v_k;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__", 0);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("getActiveColumns", 0);
 
-  /* "SLEPc/DS.pyx":73
- * 
- *     def __cinit__(self):
- *         self.obj = <PetscObject*> &self.ds             # <<<<<<<<<<<<<<
- *         self.ds = NULL
+  /* "SLEPc/BV.pyx":384
+ *             The active number of columns.
+ *         """
+ *         cdef PetscInt l=0, k=0             # <<<<<<<<<<<<<<
+ *         CHKERR( BVGetActiveColumns(self.bv, &l, &k) )
+ *         return (toInt(l), toInt(k))
+ */
+  __pyx_v_l = 0;
+  __pyx_v_k = 0;
+
+  /* "SLEPc/BV.pyx":385
+ *         """
+ *         cdef PetscInt l=0, k=0
+ *         CHKERR( BVGetActiveColumns(self.bv, &l, &k) )             # <<<<<<<<<<<<<<
+ *         return (toInt(l), toInt(k))
  * 
  */
-  __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->ds));
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVGetActiveColumns(__pyx_v_self->bv, (&__pyx_v_l), (&__pyx_v_k))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 385, __pyx_L1_error)
 
-  /* "SLEPc/DS.pyx":74
- *     def __cinit__(self):
- *         self.obj = <PetscObject*> &self.ds
- *         self.ds = NULL             # <<<<<<<<<<<<<<
+  /* "SLEPc/BV.pyx":386
+ *         cdef PetscInt l=0, k=0
+ *         CHKERR( BVGetActiveColumns(self.bv, &l, &k) )
+ *         return (toInt(l), toInt(k))             # <<<<<<<<<<<<<<
  * 
- *     def view(self, Viewer viewer=None):
+ *     def scaleColumn(self, int j, alpha):
  */
-  __pyx_v_self->ds = NULL;
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_l); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 386, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_k); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 386, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 386, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
+  __pyx_t_2 = 0;
+  __pyx_t_3 = 0;
+  __pyx_r = __pyx_t_4;
+  __pyx_t_4 = 0;
+  goto __pyx_L0;
 
-  /* "SLEPc/DS.pyx":72
- *     MatType   = DSMatType
+  /* "SLEPc/BV.pyx":373
+ *         CHKERR( BVSetActiveColumns(self.bv, l, k) )
  * 
- *     def __cinit__(self):             # <<<<<<<<<<<<<<
- *         self.obj = <PetscObject*> &self.ds
- *         self.ds = NULL
+ *     def getActiveColumns(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Returns the current active dimensions.
  */
 
   /* function exit code */
-  __pyx_r = 0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.getActiveColumns", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/DS.pyx":76
- *         self.ds = NULL
+/* "SLEPc/BV.pyx":388
+ *         return (toInt(l), toInt(k))
  * 
- *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *     def scaleColumn(self, int j, alpha):             # <<<<<<<<<<<<<<
  *         """
- *         Prints the DS data structure.
+ *         Scale column j by alpha
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2DS_2view[] = "DS.view(self, Viewer viewer=None)\n\n        Prints the DS data structure.\n\n        Parameters\n        ----------\n        viewer: Viewer, optional\n                Visualization context; if not provided, the standard\n                output is used.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscViewerObject *__pyx_v_viewer = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_43scaleColumn(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_42scaleColumn[] = "BV.scaleColumn(self, int j, alpha)\n\n        Scale column j by alpha\n\n        Parameters\n        ----------\n        j: int\n            column number to be scaled.\n        alpha: float\n            scaling factor.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_43scaleColumn(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_j;
+  PyObject *__pyx_v_alpha = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("view (wrapper)", 0);
+  __Pyx_RefNannySetupContext("scaleColumn (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_viewer,0};
-    PyObject* values[1] = {0};
-    values[0] = (PyObject *)((struct PyPetscViewerObject *)Py_None);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_j,&__pyx_n_s_alpha,0};
+    PyObject* values[2] = {0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -11170,103 +12360,81 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_3view(PyObject *__pyx_v_self, PyO
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_viewer);
-          if (value) { values[0] = value; kw_args--; }
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_j)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("scaleColumn", 1, 2, 2, 1); __PYX_ERR(3, 388, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scaleColumn") < 0)) __PYX_ERR(3, 388, __pyx_L3_error)
       }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+      goto __pyx_L5_argtuple_error;
     } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_viewer = ((struct PyPetscViewerObject *)values[0]);
+    __pyx_v_j = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_j == (int)-1) && PyErr_Occurred())) __PYX_ERR(3, 388, __pyx_L3_error)
+    __pyx_v_alpha = values[1];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[9]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("scaleColumn", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 388, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.scaleColumn", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_2view(((struct PySlepcDSObject *)__pyx_v_self), __pyx_v_viewer);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_42scaleColumn(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_j, __pyx_v_alpha);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_2view(struct PySlepcDSObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
-  PetscViewer __pyx_v_vwr;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_42scaleColumn(struct PySlepcBVObject *__pyx_v_self, int __pyx_v_j, PyObject *__pyx_v_alpha) {
+  PetscScalar __pyx_v_sval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PetscScalar __pyx_t_1;
   int __pyx_t_2;
-  PetscViewer __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("view", 0);
-
-  /* "SLEPc/DS.pyx":86
- *                 output is used.
- *         """
- *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
- *         if viewer is not None: vwr = viewer.vwr
- *         CHKERR( DSView(self.ds, vwr) )
- */
-  __pyx_v_vwr = NULL;
+  __Pyx_RefNannySetupContext("scaleColumn", 0);
 
-  /* "SLEPc/DS.pyx":87
+  /* "SLEPc/BV.pyx":399
+ *             scaling factor.
  *         """
- *         cdef PetscViewer vwr = NULL
- *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
- *         CHKERR( DSView(self.ds, vwr) )
+ *         cdef PetscScalar sval = asScalar(alpha)             # <<<<<<<<<<<<<<
+ *         CHKERR( BVScaleColumn(self.bv, j, sval) )
  * 
  */
-  __pyx_t_1 = (((PyObject *)__pyx_v_viewer) != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_v_viewer->vwr;
-    __pyx_v_vwr = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) __PYX_ERR(3, 399, __pyx_L1_error)
+  __pyx_v_sval = __pyx_t_1;
 
-  /* "SLEPc/DS.pyx":88
- *         cdef PetscViewer vwr = NULL
- *         if viewer is not None: vwr = viewer.vwr
- *         CHKERR( DSView(self.ds, vwr) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/BV.pyx":400
+ *         """
+ *         cdef PetscScalar sval = asScalar(alpha)
+ *         CHKERR( BVScaleColumn(self.bv, j, sval) )             # <<<<<<<<<<<<<<
  * 
- *     def destroy(self):
+ *     def scale(self, alpha):
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSView(__pyx_v_self->ds, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVScaleColumn(__pyx_v_self->bv, __pyx_v_j, __pyx_v_sval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(3, 400, __pyx_L1_error)
 
-  /* "SLEPc/DS.pyx":76
- *         self.ds = NULL
+  /* "SLEPc/BV.pyx":388
+ *         return (toInt(l), toInt(k))
  * 
- *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *     def scaleColumn(self, int j, alpha):             # <<<<<<<<<<<<<<
  *         """
- *         Prints the DS data structure.
+ *         Scale column j by alpha
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.scaleColumn", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -11274,81 +12442,104 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_2view(struct PySlepcDSObject *__p
   return __pyx_r;
 }
 
-/* "SLEPc/DS.pyx":90
- *         CHKERR( DSView(self.ds, vwr) )
+/* "SLEPc/BV.pyx":402
+ *         CHKERR( BVScaleColumn(self.bv, j, sval) )
  * 
- *     def destroy(self):             # <<<<<<<<<<<<<<
+ *     def scale(self, alpha):             # <<<<<<<<<<<<<<
  *         """
- *         Destroys the DS object.
+ *         Multiply the entries by a scalar value.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2DS_4destroy[] = "DS.destroy(self)\n\n        Destroys the DS object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_45scale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_44scale[] = "BV.scale(self, alpha)\n\n        Multiply the entries by a scalar value.\n\n        Parameters\n        ----------\n        alpha: float\n            scaling factor.\n\n        Notes\n        -----\n        All active columns (except the leading ones) are scaled.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_45scale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_alpha = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("destroy (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("destroy", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "destroy", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_4destroy(((struct PySlepcDSObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("scale (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_alpha,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scale") < 0)) __PYX_ERR(3, 402, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_alpha = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("scale", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 402, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.scale", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_44scale(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_alpha);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_4destroy(struct PySlepcDSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_44scale(struct PySlepcBVObject *__pyx_v_self, PyObject *__pyx_v_alpha) {
+  PetscScalar __pyx_v_sval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("destroy", 0);
-
-  /* "SLEPc/DS.pyx":94
- *         Destroys the DS object.
- *         """
- *         CHKERR( DSDestroy(&self.ds) )             # <<<<<<<<<<<<<<
- *         self.ds = NULL
- *         return self
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSDestroy((&__pyx_v_self->ds))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PetscScalar __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("scale", 0);
 
-  /* "SLEPc/DS.pyx":95
+  /* "SLEPc/BV.pyx":415
+ *         All active columns (except the leading ones) are scaled.
  *         """
- *         CHKERR( DSDestroy(&self.ds) )
- *         self.ds = NULL             # <<<<<<<<<<<<<<
- *         return self
+ *         cdef PetscScalar sval = asScalar(alpha)             # <<<<<<<<<<<<<<
+ *         CHKERR( BVScale(self.bv, sval) )
  * 
  */
-  __pyx_v_self->ds = NULL;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) __PYX_ERR(3, 415, __pyx_L1_error)
+  __pyx_v_sval = __pyx_t_1;
 
-  /* "SLEPc/DS.pyx":96
- *         CHKERR( DSDestroy(&self.ds) )
- *         self.ds = NULL
- *         return self             # <<<<<<<<<<<<<<
+  /* "SLEPc/BV.pyx":416
+ *         """
+ *         cdef PetscScalar sval = asScalar(alpha)
+ *         CHKERR( BVScale(self.bv, sval) )             # <<<<<<<<<<<<<<
  * 
- *     def reset(self):
+ *     def insertVec(self, int j, Vec w not None):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_r = ((PyObject *)__pyx_v_self);
-  goto __pyx_L0;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVScale(__pyx_v_self->bv, __pyx_v_sval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(3, 416, __pyx_L1_error)
 
-  /* "SLEPc/DS.pyx":90
- *         CHKERR( DSView(self.ds, vwr) )
+  /* "SLEPc/BV.pyx":402
+ *         CHKERR( BVScaleColumn(self.bv, j, sval) )
  * 
- *     def destroy(self):             # <<<<<<<<<<<<<<
+ *     def scale(self, alpha):             # <<<<<<<<<<<<<<
  *         """
- *         Destroys the DS object.
+ *         Multiply the entries by a scalar value.
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.destroy", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.scale", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -11356,62 +12547,106 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_4destroy(struct PySlepcDSObject *
   return __pyx_r;
 }
 
-/* "SLEPc/DS.pyx":98
- *         return self
+/* "SLEPc/BV.pyx":418
+ *         CHKERR( BVScale(self.bv, sval) )
  * 
- *     def reset(self):             # <<<<<<<<<<<<<<
+ *     def insertVec(self, int j, Vec w not None):             # <<<<<<<<<<<<<<
  *         """
- *         Resets the DS object.
+ *         Insert a vector into the specified column.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_7reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2DS_6reset[] = "DS.reset(self)\n\n        Resets the DS object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_7reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_47insertVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_46insertVec[] = "BV.insertVec(self, int j, Vec w)\n\n        Insert a vector into the specified column.\n\n        Parameters\n        ----------\n        j: int\n            The column to be overwritten.\n        w: Vec\n            The vector to be copied.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_47insertVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_j;
+  struct PyPetscVecObject *__pyx_v_w = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("reset (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("reset", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "reset", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_6reset(((struct PySlepcDSObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("insertVec (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_j,&__pyx_n_s_w,0};
+    PyObject* values[2] = {0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_j)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_w)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("insertVec", 1, 2, 2, 1); __PYX_ERR(3, 418, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "insertVec") < 0)) __PYX_ERR(3, 418, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+    }
+    __pyx_v_j = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_j == (int)-1) && PyErr_Occurred())) __PYX_ERR(3, 418, __pyx_L3_error)
+    __pyx_v_w = ((struct PyPetscVecObject *)values[1]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("insertVec", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 418, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.insertVec", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_w), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "w", 0))) __PYX_ERR(3, 418, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_46insertVec(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_j, __pyx_v_w);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_6reset(struct PySlepcDSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_46insertVec(struct PySlepcBVObject *__pyx_v_self, int __pyx_v_j, struct PyPetscVecObject *__pyx_v_w) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("reset", 0);
+  __Pyx_RefNannySetupContext("insertVec", 0);
 
-  /* "SLEPc/DS.pyx":102
- *         Resets the DS object.
+  /* "SLEPc/BV.pyx":429
+ *             The vector to be copied.
  *         """
- *         CHKERR( DSReset(self.ds) )             # <<<<<<<<<<<<<<
+ *         CHKERR( BVInsertVec(self.bv, j, w.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def create(self, comm=None):
+ *     def insertVecs(self, int s, W not None, bint orth):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSReset(__pyx_v_self->ds)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVInsertVec(__pyx_v_self->bv, __pyx_v_j, __pyx_v_w->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 429, __pyx_L1_error)
 
-  /* "SLEPc/DS.pyx":98
- *         return self
+  /* "SLEPc/BV.pyx":418
+ *         CHKERR( BVScale(self.bv, sval) )
  * 
- *     def reset(self):             # <<<<<<<<<<<<<<
+ *     def insertVec(self, int j, Vec w not None):             # <<<<<<<<<<<<<<
  *         """
- *         Resets the DS object.
+ *         Insert a vector into the specified column.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.reset", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.insertVec", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -11419,33 +12654,33 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_6reset(struct PySlepcDSObject *__
   return __pyx_r;
 }
 
-/* "SLEPc/DS.pyx":104
- *         CHKERR( DSReset(self.ds) )
+/* "SLEPc/BV.pyx":431
+ *         CHKERR( BVInsertVec(self.bv, j, w.vec) )
  * 
- *     def create(self, comm=None):             # <<<<<<<<<<<<<<
+ *     def insertVecs(self, int s, W not None, bint orth):             # <<<<<<<<<<<<<<
  *         """
- *         Creates the DS object.
+ *         Insert a set of vectors into specified columns.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2DS_8create[] = "DS.create(self, comm=None)\n\n        Creates the DS object.\n\n        Parameters\n        ----------\n        comm: Comm, optional\n              MPI communicator; if not provided, it defaults to all\n              processes.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_comm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_49insertVecs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_48insertVecs[] = "BV.insertVecs(self, int s, W, bool orth)\n\n        Insert a set of vectors into specified columns.\n\n        Parameters\n        ----------\n        s: int\n            The first column to be overwritten.\n        W: Vec or sequence of Vec.\n            Set of vectors to be copied.\n        orth:\n            Flag indicating if the vectors must be orthogonalized.\n\n        Returns\n        -------\n        m: int\n           [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_49insertVecs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_s;
+  PyObject *__pyx_v_W = 0;
+  int __pyx_v_orth;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("create (wrapper)", 0);
+  __Pyx_RefNannySetupContext("insertVecs (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,0};
-    PyObject* values[1] = {0};
-    values[0] = ((PyObject *)Py_None);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_s,&__pyx_n_s_W,&__pyx_n_s_orth,0};
+    PyObject* values[3] = {0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -11453,139 +12688,229 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_9create(PyObject *__pyx_v_self, P
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
-          if (value) { values[0] = value; kw_args--; }
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_s)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_W)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("insertVecs", 1, 3, 3, 1); __PYX_ERR(3, 431, __pyx_L3_error)
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_orth)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("insertVecs", 1, 3, 3, 2); __PYX_ERR(3, 431, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "insertVecs") < 0)) __PYX_ERR(3, 431, __pyx_L3_error)
       }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
+      goto __pyx_L5_argtuple_error;
     } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_comm = values[0];
+    __pyx_v_s = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_s == (int)-1) && PyErr_Occurred())) __PYX_ERR(3, 431, __pyx_L3_error)
+    __pyx_v_W = values[1];
+    __pyx_v_orth = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_orth == (int)-1) && PyErr_Occurred())) __PYX_ERR(3, 431, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[9]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("insertVecs", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 431, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.insertVecs", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_8create(((struct PySlepcDSObject *)__pyx_v_self), __pyx_v_comm);
+  if (unlikely(((PyObject *)__pyx_v_W) == Py_None)) {
+    PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "W"); __PYX_ERR(3, 431, __pyx_L1_error)
+  }
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_48insertVecs(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_s, __pyx_v_W, __pyx_v_orth);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_8create(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_comm) {
-  MPI_Comm __pyx_v_ccomm;
-  DS __pyx_v_newds;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_48insertVecs(struct PySlepcBVObject *__pyx_v_self, int __pyx_v_s, PyObject *__pyx_v_W, int __pyx_v_orth) {
+  Vec *__pyx_v_ws;
+  Py_ssize_t __pyx_v_i;
+  Py_ssize_t __pyx_v_ns;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
+  PetscInt __pyx_v_m;
+  PetscBool __pyx_v_tval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  MPI_Comm __pyx_t_1;
+  int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("create", 0);
+  PyObject *__pyx_t_3 = NULL;
+  Py_ssize_t __pyx_t_4;
+  Py_ssize_t __pyx_t_5;
+  Vec __pyx_t_6;
+  PetscBool __pyx_t_7;
+  int __pyx_t_8;
+  __Pyx_RefNannySetupContext("insertVecs", 0);
+  __Pyx_INCREF(__pyx_v_W);
 
-  /* "SLEPc/DS.pyx":114
- *               processes.
+  /* "SLEPc/BV.pyx":457
+ *         decreased.
  *         """
- *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())             # <<<<<<<<<<<<<<
- *         cdef SlepcDS newds = NULL
- *         CHKERR( DSCreate(ccomm, &newds) )
+ *         if isinstance(W, Vec): W = [W]             # <<<<<<<<<<<<<<
+ *         cdef PetscVec *ws = NULL
+ *         cdef Py_ssize_t i = 0, ns = len(W)
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_def_Comm(__pyx_v_comm, __pyx_f_8slepc4py_5SLEPc_SLEPC_COMM_DEFAULT()); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ccomm = __pyx_t_1;
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_W, __pyx_ptype_8petsc4py_5PETSc_Vec); 
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 457, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_v_W);
+    __Pyx_GIVEREF(__pyx_v_W);
+    PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_W);
+    __Pyx_DECREF_SET(__pyx_v_W, __pyx_t_3);
+    __pyx_t_3 = 0;
+  }
 
-  /* "SLEPc/DS.pyx":115
+  /* "SLEPc/BV.pyx":458
  *         """
- *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
- *         cdef SlepcDS newds = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( DSCreate(ccomm, &newds) )
- *         SlepcCLEAR(self.obj); self.ds = newds
+ *         if isinstance(W, Vec): W = [W]
+ *         cdef PetscVec *ws = NULL             # <<<<<<<<<<<<<<
+ *         cdef Py_ssize_t i = 0, ns = len(W)
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&ws)
  */
-  __pyx_v_newds = NULL;
+  __pyx_v_ws = NULL;
 
-  /* "SLEPc/DS.pyx":116
- *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
- *         cdef SlepcDS newds = NULL
- *         CHKERR( DSCreate(ccomm, &newds) )             # <<<<<<<<<<<<<<
- *         SlepcCLEAR(self.obj); self.ds = newds
- *         return self
+  /* "SLEPc/BV.pyx":459
+ *         if isinstance(W, Vec): W = [W]
+ *         cdef PetscVec *ws = NULL
+ *         cdef Py_ssize_t i = 0, ns = len(W)             # <<<<<<<<<<<<<<
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&ws)
+ *         for i in range(ns): ws[i] = (<Vec?>W[i]).vec
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSCreate(__pyx_v_ccomm, (&__pyx_v_newds))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_i = 0;
+  __pyx_t_4 = PyObject_Length(__pyx_v_W); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 459, __pyx_L1_error)
+  __pyx_v_ns = __pyx_t_4;
 
-  /* "SLEPc/DS.pyx":117
- *         cdef SlepcDS newds = NULL
- *         CHKERR( DSCreate(ccomm, &newds) )
- *         SlepcCLEAR(self.obj); self.ds = newds             # <<<<<<<<<<<<<<
- *         return self
- * 
+  /* "SLEPc/BV.pyx":460
+ *         cdef PetscVec *ws = NULL
+ *         cdef Py_ssize_t i = 0, ns = len(W)
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&ws)             # <<<<<<<<<<<<<<
+ *         for i in range(ns): ws[i] = (<Vec?>W[i]).vec
+ *         cdef PetscInt m = <PetscInt>ns
  */
-  __pyx_f_8slepc4py_5SLEPc_SlepcCLEAR(__pyx_v_self->__pyx_base.obj);
-  __pyx_v_self->ds = __pyx_v_newds;
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_allocate((((size_t)__pyx_v_ns) * (sizeof(struct PyPetscVecObject))), ((void **)(&__pyx_v_ws))); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 460, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_v_tmp = __pyx_t_3;
+  __pyx_t_3 = 0;
 
-  /* "SLEPc/DS.pyx":118
- *         CHKERR( DSCreate(ccomm, &newds) )
- *         SlepcCLEAR(self.obj); self.ds = newds
- *         return self             # <<<<<<<<<<<<<<
- * 
- *     def setType(self, ds_type):
+  /* "SLEPc/BV.pyx":461
+ *         cdef Py_ssize_t i = 0, ns = len(W)
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&ws)
+ *         for i in range(ns): ws[i] = (<Vec?>W[i]).vec             # <<<<<<<<<<<<<<
+ *         cdef PetscInt m = <PetscInt>ns
+ *         cdef PetscBool tval = PETSC_TRUE if orth else PETSC_FALSE
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_r = ((PyObject *)__pyx_v_self);
-  goto __pyx_L0;
+  __pyx_t_4 = __pyx_v_ns;
+  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
+    __pyx_v_i = __pyx_t_5;
+    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_W, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 461, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(3, 461, __pyx_L1_error)
+    __pyx_t_6 = ((struct PyPetscVecObject *)__pyx_t_3)->vec;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    (__pyx_v_ws[__pyx_v_i]) = __pyx_t_6;
+  }
 
-  /* "SLEPc/DS.pyx":104
- *         CHKERR( DSReset(self.ds) )
+  /* "SLEPc/BV.pyx":462
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&ws)
+ *         for i in range(ns): ws[i] = (<Vec?>W[i]).vec
+ *         cdef PetscInt m = <PetscInt>ns             # <<<<<<<<<<<<<<
+ *         cdef PetscBool tval = PETSC_TRUE if orth else PETSC_FALSE
+ *         CHKERR( BVInsertVecs(self.bv, <PetscInt>s, &m, ws, tval) )
+ */
+  __pyx_v_m = ((PetscInt)__pyx_v_ns);
+
+  /* "SLEPc/BV.pyx":463
+ *         for i in range(ns): ws[i] = (<Vec?>W[i]).vec
+ *         cdef PetscInt m = <PetscInt>ns
+ *         cdef PetscBool tval = PETSC_TRUE if orth else PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( BVInsertVecs(self.bv, <PetscInt>s, &m, ws, tval) )
+ *         return toInt(m)
+ */
+  if ((__pyx_v_orth != 0)) {
+    __pyx_t_7 = PETSC_TRUE;
+  } else {
+    __pyx_t_7 = PETSC_FALSE;
+  }
+  __pyx_v_tval = __pyx_t_7;
+
+  /* "SLEPc/BV.pyx":464
+ *         cdef PetscInt m = <PetscInt>ns
+ *         cdef PetscBool tval = PETSC_TRUE if orth else PETSC_FALSE
+ *         CHKERR( BVInsertVecs(self.bv, <PetscInt>s, &m, ws, tval) )             # <<<<<<<<<<<<<<
+ *         return toInt(m)
  * 
- *     def create(self, comm=None):             # <<<<<<<<<<<<<<
+ */
+  __pyx_t_8 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVInsertVecs(__pyx_v_self->bv, ((PetscInt)__pyx_v_s), (&__pyx_v_m), __pyx_v_ws, __pyx_v_tval)); if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(3, 464, __pyx_L1_error)
+
+  /* "SLEPc/BV.pyx":465
+ *         cdef PetscBool tval = PETSC_TRUE if orth else PETSC_FALSE
+ *         CHKERR( BVInsertVecs(self.bv, <PetscInt>s, &m, ws, tval) )
+ *         return toInt(m)             # <<<<<<<<<<<<<<
+ * 
+ *     def dotVec(self, Vec v not None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_m); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 465, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  /* "SLEPc/BV.pyx":431
+ *         CHKERR( BVInsertVec(self.bv, j, w.vec) )
+ * 
+ *     def insertVecs(self, int s, W not None, bint orth):             # <<<<<<<<<<<<<<
  *         """
- *         Creates the DS object.
+ *         Insert a set of vectors into specified columns.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.insertVecs", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_tmp);
+  __Pyx_XDECREF(__pyx_v_W);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/DS.pyx":120
- *         return self
+/* "SLEPc/BV.pyx":467
+ *         return toInt(m)
  * 
- *     def setType(self, ds_type):             # <<<<<<<<<<<<<<
+ *     def dotVec(self, Vec v not None):             # <<<<<<<<<<<<<<
  *         """
- *         Selects the type for the DS object.
+ *         Computes multiple dot products of a vector against all the column
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2DS_10setType[] = "DS.setType(self, ds_type)\n\n        Selects the type for the DS object.\n\n        Parameters\n        ----------\n        ds_type: `DS.Type` enumerate\n                  The direct solver type to be used.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_ds_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_51dotVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_50dotVec[] = "BV.dotVec(self, Vec v)\n\n        Computes multiple dot products of a vector against all the column\n        vectors of a BV.\n\n        Parameters\n        ----------\n        v: Vec\n            A vector.\n\n        Returns\n        -------\n        m: Vec\n            A vector with the results.\n\n        This is analogue to VecMDot(), but using BV to represent a collection\n        of vectors. The result is m = X^H*y, so m_i is [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_51dotVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscVecObject *__pyx_v_v = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setType (wrapper)", 0);
+  __Pyx_RefNannySetupContext("dotVec (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ds_type,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_v,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -11598,206 +12923,472 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_11setType(PyObject *__pyx_v_self,
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ds_type)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_v)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dotVec") < 0)) __PYX_ERR(3, 467, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_ds_type = values[0];
+    __pyx_v_v = ((struct PyPetscVecObject *)values[0]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[9]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("dotVec", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 467, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.dotVec", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_10setType(((struct PySlepcDSObject *)__pyx_v_self), __pyx_v_ds_type);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "v", 0))) __PYX_ERR(3, 467, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_50dotVec(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_v);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_10setType(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_ds_type) {
-  const char* __pyx_v_cval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_50dotVec(struct PySlepcBVObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_v) {
+  PyObject *__pyx_v_l = NULL;
+  PyObject *__pyx_v_k = NULL;
+  PetscScalar *__pyx_v_mval;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
+  PyObject *__pyx_v_i = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setType", 0);
-  __Pyx_INCREF(__pyx_v_ds_type);
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *(*__pyx_t_5)(PyObject *);
+  size_t __pyx_t_6;
+  int __pyx_t_7;
+  PyObject *__pyx_t_8 = NULL;
+  Py_ssize_t __pyx_t_9;
+  PyObject *(*__pyx_t_10)(PyObject *);
+  Py_ssize_t __pyx_t_11;
+  __Pyx_RefNannySetupContext("dotVec", 0);
+  __Pyx_INCREF((PyObject *)__pyx_v_v);
 
-  /* "SLEPc/DS.pyx":129
- *                   The direct solver type to be used.
+  /* "SLEPc/BV.pyx":489
+ *         then the result is m = X^H*B*y.
  *         """
- *         cdef SlepcDSType cval = NULL             # <<<<<<<<<<<<<<
- *         ds_type = str2bytes(ds_type, &cval)
- *         CHKERR( DSSetType(self.ds, cval) )
+ *         l, k = self.getActiveColumns()             # <<<<<<<<<<<<<<
+ *         cdef PetscScalar* mval = NULL
+ *         cdef tmp = allocate(<size_t>(k - l)*sizeof(PetscScalar),<void**>&mval)
  */
-  __pyx_v_cval = NULL;
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getActiveColumns); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 489, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
+  }
+  if (__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 489, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  } else {
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 489, __pyx_L1_error)
+  }
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    #if CYTHON_COMPILING_IN_CPYTHON
+    Py_ssize_t size = Py_SIZE(sequence);
+    #else
+    Py_ssize_t size = PySequence_Size(sequence);
+    #endif
+    if (unlikely(size != 2)) {
+      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(3, 489, __pyx_L1_error)
+    }
+    #if CYTHON_COMPILING_IN_CPYTHON
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_3);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 489, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 489, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 489, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_3);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(3, 489, __pyx_L1_error)
+    __pyx_t_5 = NULL;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_5 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(3, 489, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
+  }
+  __pyx_v_l = __pyx_t_2;
+  __pyx_t_2 = 0;
+  __pyx_v_k = __pyx_t_3;
+  __pyx_t_3 = 0;
 
-  /* "SLEPc/DS.pyx":130
+  /* "SLEPc/BV.pyx":490
  *         """
- *         cdef SlepcDSType cval = NULL
- *         ds_type = str2bytes(ds_type, &cval)             # <<<<<<<<<<<<<<
- *         CHKERR( DSSetType(self.ds, cval) )
+ *         l, k = self.getActiveColumns()
+ *         cdef PetscScalar* mval = NULL             # <<<<<<<<<<<<<<
+ *         cdef tmp = allocate(<size_t>(k - l)*sizeof(PetscScalar),<void**>&mval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_ds_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_mval = NULL;
+
+  /* "SLEPc/BV.pyx":491
+ *         l, k = self.getActiveColumns()
+ *         cdef PetscScalar* mval = NULL
+ *         cdef tmp = allocate(<size_t>(k - l)*sizeof(PetscScalar),<void**>&mval)             # <<<<<<<<<<<<<<
+ * 
+ *         CHKERR( BVDotVec(self.bv, v.vec, mval) )
+ */
+  __pyx_t_1 = PyNumber_Subtract(__pyx_v_k, __pyx_v_l); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 491, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_ds_type, __pyx_t_1);
+  __pyx_t_6 = __Pyx_PyInt_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_6 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(3, 491, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_allocate((((size_t)__pyx_t_6) * (sizeof(PetscScalar))), ((void **)(&__pyx_v_mval))); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 491, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_tmp = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "SLEPc/DS.pyx":131
- *         cdef SlepcDSType cval = NULL
- *         ds_type = str2bytes(ds_type, &cval)
- *         CHKERR( DSSetType(self.ds, cval) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/BV.pyx":493
+ *         cdef tmp = allocate(<size_t>(k - l)*sizeof(PetscScalar),<void**>&mval)
  * 
- *     def getType(self):
+ *         CHKERR( BVDotVec(self.bv, v.vec, mval) )             # <<<<<<<<<<<<<<
+ * 
+ *         v = Vec().create(COMM_SELF)
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSSetType(__pyx_v_self->ds, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVDotVec(__pyx_v_self->bv, __pyx_v_v->vec, __pyx_v_mval)); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(3, 493, __pyx_L1_error)
 
-  /* "SLEPc/DS.pyx":120
- *         return self
+  /* "SLEPc/BV.pyx":495
+ *         CHKERR( BVDotVec(self.bv, v.vec, mval) )
  * 
- *     def setType(self, ds_type):             # <<<<<<<<<<<<<<
- *         """
- *         Selects the type for the DS object.
+ *         v = Vec().create(COMM_SELF)             # <<<<<<<<<<<<<<
+ *         v.setType('seq')
+ *         v.setSizes((DECIDE,k-l))
  */
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 495, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_create); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 495, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_COMM_SELF); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 495, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_4)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_4);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
+  }
+  if (!__pyx_t_4) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 495, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_GOTREF(__pyx_t_1);
+  } else {
+    __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 495, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_8);
+    __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4); __pyx_t_4 = NULL;
+    __Pyx_GIVEREF(__pyx_t_3);
+    PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_t_3);
+    __pyx_t_3 = 0;
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 495, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  }
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(3, 495, __pyx_L1_error)
+  __Pyx_DECREF_SET(__pyx_v_v, ((struct PyPetscVecObject *)__pyx_t_1));
+  __pyx_t_1 = 0;
 
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_ds_type);
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "SLEPc/DS.pyx":133
- *         CHKERR( DSSetType(self.ds, cval) )
+  /* "SLEPc/BV.pyx":496
  * 
- *     def getType(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the DS type of this object.
+ *         v = Vec().create(COMM_SELF)
+ *         v.setType('seq')             # <<<<<<<<<<<<<<
+ *         v.setSizes((DECIDE,k-l))
+ *         v.setArray([mval[i] for i in range(0, k - l)])
  */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_v), __pyx_n_s_setType); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 496, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 496, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-/* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2DS_12getType[] = "DS.getType(self)\n\n        Gets the DS type of this object.\n\n        Returns\n        -------\n        type: `DS.Type` enumerate\n              The direct solver type currently being used.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getType (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getType", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_12getType(((struct PySlepcDSObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_12getType(struct PySlepcDSObject *__pyx_v_self) {
-  const char* __pyx_v_ds_type;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getType", 0);
+  /* "SLEPc/BV.pyx":497
+ *         v = Vec().create(COMM_SELF)
+ *         v.setType('seq')
+ *         v.setSizes((DECIDE,k-l))             # <<<<<<<<<<<<<<
+ *         v.setArray([mval[i] for i in range(0, k - l)])
+ *         v.ghostUpdate()
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_v), __pyx_n_s_setSizes); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 497, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DECIDE); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 497, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  __pyx_t_3 = PyNumber_Subtract(__pyx_v_k, __pyx_v_l); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 497, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 497, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_GIVEREF(__pyx_t_8);
+  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_8);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
+  __pyx_t_8 = 0;
+  __pyx_t_3 = 0;
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_1, function);
+    }
+  }
+  if (!__pyx_t_3) {
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 497, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+  } else {
+    __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 497, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_8);
+    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_3); __pyx_t_3 = NULL;
+    __Pyx_GIVEREF(__pyx_t_4);
+    PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_t_4);
+    __pyx_t_4 = 0;
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 497, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  }
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "SLEPc/DS.pyx":142
- *               The direct solver type currently being used.
- *         """
- *         cdef SlepcDSType ds_type = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( DSGetType(self.ds, &ds_type) )
- *         return bytes2str(ds_type)
+  /* "SLEPc/BV.pyx":498
+ *         v.setType('seq')
+ *         v.setSizes((DECIDE,k-l))
+ *         v.setArray([mval[i] for i in range(0, k - l)])             # <<<<<<<<<<<<<<
+ *         v.ghostUpdate()
+ * 
  */
-  __pyx_v_ds_type = NULL;
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_v), __pyx_n_s_setArray); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 498, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_8 = PyList_New(0); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 498, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  __pyx_t_4 = PyNumber_Subtract(__pyx_v_k, __pyx_v_l); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 498, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 498, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_int_0);
+  __Pyx_GIVEREF(__pyx_int_0);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_int_0);
+  __Pyx_GIVEREF(__pyx_t_4);
+  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4);
+  __pyx_t_4 = 0;
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 498, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) {
+    __pyx_t_3 = __pyx_t_4; __Pyx_INCREF(__pyx_t_3); __pyx_t_9 = 0;
+    __pyx_t_10 = NULL;
+  } else {
+    __pyx_t_9 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 498, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_10 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(3, 498, __pyx_L1_error)
+  }
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  for (;;) {
+    if (likely(!__pyx_t_10)) {
+      if (likely(PyList_CheckExact(__pyx_t_3))) {
+        if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_3)) break;
+        #if CYTHON_COMPILING_IN_CPYTHON
+        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_9); __Pyx_INCREF(__pyx_t_4); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(3, 498, __pyx_L1_error)
+        #else
+        __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 498, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_4);
+        #endif
+      } else {
+        if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
+        #if CYTHON_COMPILING_IN_CPYTHON
+        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_9); __Pyx_INCREF(__pyx_t_4); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(3, 498, __pyx_L1_error)
+        #else
+        __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 498, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_4);
+        #endif
+      }
+    } else {
+      __pyx_t_4 = __pyx_t_10(__pyx_t_3);
+      if (unlikely(!__pyx_t_4)) {
+        PyObject* exc_type = PyErr_Occurred();
+        if (exc_type) {
+          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+          else __PYX_ERR(3, 498, __pyx_L1_error)
+        }
+        break;
+      }
+      __Pyx_GOTREF(__pyx_t_4);
+    }
+    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_4);
+    __pyx_t_4 = 0;
+    __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(3, 498, __pyx_L1_error)
+    __pyx_t_4 = PyFloat_FromDouble((__pyx_v_mval[__pyx_t_11])); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 498, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_8, (PyObject*)__pyx_t_4))) __PYX_ERR(3, 498, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  }
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_1, function);
+    }
+  }
+  if (!__pyx_t_3) {
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 498, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+  } else {
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 498, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+    __Pyx_GIVEREF(__pyx_t_8);
+    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_t_8);
+    __pyx_t_8 = 0;
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 498, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  }
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "SLEPc/DS.pyx":143
- *         """
- *         cdef SlepcDSType ds_type = NULL
- *         CHKERR( DSGetType(self.ds, &ds_type) )             # <<<<<<<<<<<<<<
- *         return bytes2str(ds_type)
+  /* "SLEPc/BV.pyx":499
+ *         v.setSizes((DECIDE,k-l))
+ *         v.setArray([mval[i] for i in range(0, k - l)])
+ *         v.ghostUpdate()             # <<<<<<<<<<<<<<
  * 
+ *         return v
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSGetType(__pyx_v_self->ds, (&__pyx_v_ds_type))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_v), __pyx_n_s_ghostUpdate); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 499, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
+    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
+    if (likely(__pyx_t_4)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
+      __Pyx_INCREF(__pyx_t_4);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_1, function);
+    }
+  }
+  if (__pyx_t_4) {
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 499, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  } else {
+    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 499, __pyx_L1_error)
+  }
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "SLEPc/DS.pyx":144
- *         cdef SlepcDSType ds_type = NULL
- *         CHKERR( DSGetType(self.ds, &ds_type) )
- *         return bytes2str(ds_type)             # <<<<<<<<<<<<<<
+  /* "SLEPc/BV.pyx":501
+ *         v.ghostUpdate()
  * 
- *     def setOptionsPrefix(self, prefix):
+ *         return v             # <<<<<<<<<<<<<<
+ * 
+ *     def getColumn(self, int j):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_ds_type); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __Pyx_INCREF(((PyObject *)__pyx_v_v));
+  __pyx_r = ((PyObject *)__pyx_v_v);
   goto __pyx_L0;
 
-  /* "SLEPc/DS.pyx":133
- *         CHKERR( DSSetType(self.ds, cval) )
+  /* "SLEPc/BV.pyx":467
+ *         return toInt(m)
  * 
- *     def getType(self):             # <<<<<<<<<<<<<<
+ *     def dotVec(self, Vec v not None):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the DS type of this object.
+ *         Computes multiple dot products of a vector against all the column
  */
 
   /* function exit code */
   __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.getType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.dotVec", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_l);
+  __Pyx_XDECREF(__pyx_v_k);
+  __Pyx_XDECREF(__pyx_v_tmp);
+  __Pyx_XDECREF(__pyx_v_i);
+  __Pyx_XDECREF((PyObject *)__pyx_v_v);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/DS.pyx":146
- *         return bytes2str(ds_type)
+/* "SLEPc/BV.pyx":503
+ *         return v
  * 
- *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *     def getColumn(self, int j):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the prefix used for searching for all DS options in the
+ *         Returns a Vec object that contains the entries of the requested column
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_15setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2DS_14setOptionsPrefix[] = "DS.setOptionsPrefix(self, prefix)\n\n        Sets the prefix used for searching for all DS options in the\n        database.\n\n        Parameters\n        ----------\n        prefix: string\n                The prefix string to prepend to all DS option\n                requests.\n\n        Notes\n        -----\n        A hyphen (``-``) must NOT be given at the beginning of the\n        prefix name.  The first character o [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_15setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_prefix = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_53getColumn(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_52getColumn[] = "BV.getColumn(self, int j)\n\n        Returns a Vec object that contains the entries of the requested column\n        of the basis vectors object.\n\n        Parameters\n        ----------\n        j: int\n            The index of the requested column.\n\n        Returns\n        -------\n        v: Vec\n            The vector containing the jth column.\n\n        Notes\n        -----\n        Modifying the returned Vec will chan [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_53getColumn(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_j;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setOptionsPrefix (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getColumn (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_prefix,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_j,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -11810,178 +13401,195 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_15setOptionsPrefix(PyObject *__py
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_prefix)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_j)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getColumn") < 0)) __PYX_ERR(3, 503, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_prefix = values[0];
+    __pyx_v_j = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_j == (int)-1) && PyErr_Occurred())) __PYX_ERR(3, 503, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[9]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getColumn", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 503, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.getColumn", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_14setOptionsPrefix(((struct PySlepcDSObject *)__pyx_v_self), __pyx_v_prefix);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_52getColumn(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_j);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_14setOptionsPrefix(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
-  const char *__pyx_v_cval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_52getColumn(struct PySlepcBVObject *__pyx_v_self, int __pyx_v_j) {
+  struct PyPetscVecObject *__pyx_v_v = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setOptionsPrefix", 0);
-  __Pyx_INCREF(__pyx_v_prefix);
+  __Pyx_RefNannySetupContext("getColumn", 0);
 
-  /* "SLEPc/DS.pyx":163
- *         AUTOMATICALLY the hyphen.
+  /* "SLEPc/BV.pyx":522
+ *         Modifying the returned Vec will change the BV entries as well.
  *         """
- *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
- *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( DSSetOptionsPrefix(self.ds, cval) )
+ *         cdef Vec v = Vec()             # <<<<<<<<<<<<<<
+ *         CHKERR( BVGetColumn(self.bv, j, &v.vec) )
+ *         return v
  */
-  __pyx_v_cval = NULL;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 522, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_v = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/DS.pyx":164
+  /* "SLEPc/BV.pyx":523
  *         """
- *         cdef const_char *cval = NULL
- *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
- *         CHKERR( DSSetOptionsPrefix(self.ds, cval) )
+ *         cdef Vec v = Vec()
+ *         CHKERR( BVGetColumn(self.bv, j, &v.vec) )             # <<<<<<<<<<<<<<
+ *         return v
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVGetColumn(__pyx_v_self->bv, __pyx_v_j, (&__pyx_v_v->vec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(3, 523, __pyx_L1_error)
 
-  /* "SLEPc/DS.pyx":165
- *         cdef const_char *cval = NULL
- *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( DSSetOptionsPrefix(self.ds, cval) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/BV.pyx":524
+ *         cdef Vec v = Vec()
+ *         CHKERR( BVGetColumn(self.bv, j, &v.vec) )
+ *         return v             # <<<<<<<<<<<<<<
  * 
- *     def getOptionsPrefix(self):
+ *     def restoreColumn(self, int j, Vec v not None):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSSetOptionsPrefix(__pyx_v_self->ds, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_v));
+  __pyx_r = ((PyObject *)__pyx_v_v);
+  goto __pyx_L0;
 
-  /* "SLEPc/DS.pyx":146
- *         return bytes2str(ds_type)
+  /* "SLEPc/BV.pyx":503
+ *         return v
  * 
- *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *     def getColumn(self, int j):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the prefix used for searching for all DS options in the
+ *         Returns a Vec object that contains the entries of the requested column
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.getColumn", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_prefix);
+  __Pyx_XDECREF((PyObject *)__pyx_v_v);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/DS.pyx":167
- *         CHKERR( DSSetOptionsPrefix(self.ds, cval) )
+/* "SLEPc/BV.pyx":526
+ *         return v
  * 
- *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
+ *     def restoreColumn(self, int j, Vec v not None):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the prefix used for searching for all DS options in the
+ *         Restore a column obtained with BVGetColumn().
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_17getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2DS_16getOptionsPrefix[] = "DS.getOptionsPrefix(self)\n\n        Gets the prefix used for searching for all DS options in the\n        database.\n\n        Returns\n        -------\n        prefix: string\n                The prefix string set for this DS object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_17getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_55restoreColumn(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_54restoreColumn[] = "BV.restoreColumn(self, int j, Vec v)\n\n        Restore a column obtained with BVGetColumn().\n\n        Parameters\n        ----------\n        j: int\n            The index of the requested column.\n\n        v: Vec\n            The vector obtained with BVGetColumn().\n\n        Notes\n        -----\n        The arguments must match the corresponding call to BVGetColumn().\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_55restoreColumn(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_j;
+  struct PyPetscVecObject *__pyx_v_v = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getOptionsPrefix (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getOptionsPrefix", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getOptionsPrefix", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_16getOptionsPrefix(((struct PySlepcDSObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("restoreColumn (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_j,&__pyx_n_s_v,0};
+    PyObject* values[2] = {0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_j)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_v)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("restoreColumn", 1, 2, 2, 1); __PYX_ERR(3, 526, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "restoreColumn") < 0)) __PYX_ERR(3, 526, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+    }
+    __pyx_v_j = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_j == (int)-1) && PyErr_Occurred())) __PYX_ERR(3, 526, __pyx_L3_error)
+    __pyx_v_v = ((struct PyPetscVecObject *)values[1]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("restoreColumn", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 526, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.restoreColumn", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "v", 0))) __PYX_ERR(3, 526, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_54restoreColumn(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_j, __pyx_v_v);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_16getOptionsPrefix(struct PySlepcDSObject *__pyx_v_self) {
-  const char *__pyx_v_prefix;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_54restoreColumn(struct PySlepcBVObject *__pyx_v_self, int __pyx_v_j, struct PyPetscVecObject *__pyx_v_v) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getOptionsPrefix", 0);
-
-  /* "SLEPc/DS.pyx":177
- *                 The prefix string set for this DS object.
- *         """
- *         cdef const_char *prefix = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( DSGetOptionsPrefix(self.ds, &prefix) )
- *         return bytes2str(prefix)
- */
-  __pyx_v_prefix = NULL;
+  __Pyx_RefNannySetupContext("restoreColumn", 0);
 
-  /* "SLEPc/DS.pyx":178
+  /* "SLEPc/BV.pyx":542
+ *         The arguments must match the corresponding call to BVGetColumn().
  *         """
- *         cdef const_char *prefix = NULL
- *         CHKERR( DSGetOptionsPrefix(self.ds, &prefix) )             # <<<<<<<<<<<<<<
- *         return bytes2str(prefix)
- * 
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSGetOptionsPrefix(__pyx_v_self->ds, (&__pyx_v_prefix))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/DS.pyx":179
- *         cdef const_char *prefix = NULL
- *         CHKERR( DSGetOptionsPrefix(self.ds, &prefix) )
- *         return bytes2str(prefix)             # <<<<<<<<<<<<<<
+ *         CHKERR( BVRestoreColumn(self.bv, j, &v.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def setFromOptions(self):
+ *     def dot(self, BV Y not None):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_prefix); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVRestoreColumn(__pyx_v_self->bv, __pyx_v_j, (&__pyx_v_v->vec))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 542, __pyx_L1_error)
 
-  /* "SLEPc/DS.pyx":167
- *         CHKERR( DSSetOptionsPrefix(self.ds, cval) )
+  /* "SLEPc/BV.pyx":526
+ *         return v
  * 
- *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
+ *     def restoreColumn(self, int j, Vec v not None):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the prefix used for searching for all DS options in the
+ *         Restore a column obtained with BVGetColumn().
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.getOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.restoreColumn", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -11989,95 +13597,258 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_16getOptionsPrefix(struct PySlepc
   return __pyx_r;
 }
 
-/* "SLEPc/DS.pyx":181
- *         return bytes2str(prefix)
+/* "SLEPc/BV.pyx":544
+ *         CHKERR( BVRestoreColumn(self.bv, j, &v.vec) )
  * 
- *     def setFromOptions(self):             # <<<<<<<<<<<<<<
+ *     def dot(self, BV Y not None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets DS options from the options database.
+ *         Computes the 'block-dot' product of two basis vectors objects.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_19setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2DS_18setFromOptions[] = "DS.setFromOptions(self)\n\n        Sets DS options from the options database.\n\n        Notes\n        -----\n        To see all options, run your program with the ``-help``\n        option.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_19setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_57dot(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_56dot[] = "BV.dot(self, BV Y)\n\n        Computes the 'block-dot' product of two basis vectors objects.\n            M = Y^H*X (m_ij = y_i^H x_j) or M = Y^H*B*X\n\n        Parameters\n        ----------\n        Y: BV\n            Left basis vectors, can be the same as self, giving M = X^H X.\n\n        Returns\n        -------\n        M: Mat\n            The resulting matrix.\n\n        Notes\n        -----\n        This is the generalization  [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_57dot(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PySlepcBVObject *__pyx_v_Y = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setFromOptions (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("setFromOptions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setFromOptions", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_18setFromOptions(((struct PySlepcDSObject *)__pyx_v_self));
-
-  /* function exit code */
+  __Pyx_RefNannySetupContext("dot (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_Y,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Y)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dot") < 0)) __PYX_ERR(3, 544, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_Y = ((struct PySlepcBVObject *)values[0]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("dot", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 544, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.dot", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Y), __pyx_ptype_8slepc4py_5SLEPc_BV, 0, "Y", 0))) __PYX_ERR(3, 544, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_56dot(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_Y);
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_18setFromOptions(struct PySlepcDSObject *__pyx_v_self) {
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_56dot(struct PySlepcBVObject *__pyx_v_self, struct PySlepcBVObject *__pyx_v_Y) {
+  struct PySlepcBVObject *__pyx_v_X = 0;
+  PetscInt __pyx_v_ky;
+  PetscInt __pyx_v_kx;
+  struct PyPetscMatObject *__pyx_v_M = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setFromOptions", 0);
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  __Pyx_RefNannySetupContext("dot", 0);
 
-  /* "SLEPc/DS.pyx":190
- *         option.
+  /* "SLEPc/BV.pyx":575
+ *         (resp. X).
  *         """
- *         CHKERR( DSSetFromOptions(self.ds) )             # <<<<<<<<<<<<<<
+ *         cdef BV X = self             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ky=0, kx=0
+ *         CHKERR( BVGetActiveColumns(Y.bv, NULL, &ky) )
+ */
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_v_X = __pyx_v_self;
+
+  /* "SLEPc/BV.pyx":576
+ *         """
+ *         cdef BV X = self
+ *         cdef PetscInt ky=0, kx=0             # <<<<<<<<<<<<<<
+ *         CHKERR( BVGetActiveColumns(Y.bv, NULL, &ky) )
+ *         CHKERR( BVGetActiveColumns(X.bv, NULL, &kx) )
+ */
+  __pyx_v_ky = 0;
+  __pyx_v_kx = 0;
+
+  /* "SLEPc/BV.pyx":577
+ *         cdef BV X = self
+ *         cdef PetscInt ky=0, kx=0
+ *         CHKERR( BVGetActiveColumns(Y.bv, NULL, &ky) )             # <<<<<<<<<<<<<<
+ *         CHKERR( BVGetActiveColumns(X.bv, NULL, &kx) )
+ *         cdef Mat M = Mat().createDense((ky, kx), comm=COMM_SELF).setUp()
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVGetActiveColumns(__pyx_v_Y->bv, NULL, (&__pyx_v_ky))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 577, __pyx_L1_error)
+
+  /* "SLEPc/BV.pyx":578
+ *         cdef PetscInt ky=0, kx=0
+ *         CHKERR( BVGetActiveColumns(Y.bv, NULL, &ky) )
+ *         CHKERR( BVGetActiveColumns(X.bv, NULL, &kx) )             # <<<<<<<<<<<<<<
+ *         cdef Mat M = Mat().createDense((ky, kx), comm=COMM_SELF).setUp()
+ *         CHKERR( BVDot(X.bv, Y.bv, M.mat) )
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVGetActiveColumns(__pyx_v_X->bv, NULL, (&__pyx_v_kx))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 578, __pyx_L1_error)
+
+  /* "SLEPc/BV.pyx":579
+ *         CHKERR( BVGetActiveColumns(Y.bv, NULL, &ky) )
+ *         CHKERR( BVGetActiveColumns(X.bv, NULL, &kx) )
+ *         cdef Mat M = Mat().createDense((ky, kx), comm=COMM_SELF).setUp()             # <<<<<<<<<<<<<<
+ *         CHKERR( BVDot(X.bv, Y.bv, M.mat) )
+ *         return M
+ */
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 579, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_createDense); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 579, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = __Pyx_PyInt_From_PetscInt(__pyx_v_ky); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 579, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_5 = __Pyx_PyInt_From_PetscInt(__pyx_v_kx); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 579, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 579, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_5);
+  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5);
+  __pyx_t_3 = 0;
+  __pyx_t_5 = 0;
+  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 579, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_GIVEREF(__pyx_t_6);
+  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6);
+  __pyx_t_6 = 0;
+  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 579, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_COMM_SELF); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 579, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_comm, __pyx_t_3) < 0) __PYX_ERR(3, 579, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 579, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_setUp); if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 579, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_6, function);
+    }
+  }
+  if (__pyx_t_3) {
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 579, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  } else {
+    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 579, __pyx_L1_error)
+  }
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(3, 579, __pyx_L1_error)
+  __pyx_v_M = ((struct PyPetscMatObject *)__pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "SLEPc/BV.pyx":580
+ *         CHKERR( BVGetActiveColumns(X.bv, NULL, &kx) )
+ *         cdef Mat M = Mat().createDense((ky, kx), comm=COMM_SELF).setUp()
+ *         CHKERR( BVDot(X.bv, Y.bv, M.mat) )             # <<<<<<<<<<<<<<
+ *         return M
  * 
- *     #
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSSetFromOptions(__pyx_v_self->ds)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVDot(__pyx_v_X->bv, __pyx_v_Y->bv, __pyx_v_M->mat)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 580, __pyx_L1_error)
 
-  /* "SLEPc/DS.pyx":181
- *         return bytes2str(prefix)
+  /* "SLEPc/BV.pyx":581
+ *         cdef Mat M = Mat().createDense((ky, kx), comm=COMM_SELF).setUp()
+ *         CHKERR( BVDot(X.bv, Y.bv, M.mat) )
+ *         return M             # <<<<<<<<<<<<<<
  * 
- *     def setFromOptions(self):             # <<<<<<<<<<<<<<
+ *     def matProject(self, Mat A, BV Y not None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_M));
+  __pyx_r = ((PyObject *)__pyx_v_M);
+  goto __pyx_L0;
+
+  /* "SLEPc/BV.pyx":544
+ *         CHKERR( BVRestoreColumn(self.bv, j, &v.vec) )
+ * 
+ *     def dot(self, BV Y not None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets DS options from the options database.
+ *         Computes the 'block-dot' product of two basis vectors objects.
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setFromOptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.dot", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_X);
+  __Pyx_XDECREF((PyObject *)__pyx_v_M);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/DS.pyx":194
- *     #
+/* "SLEPc/BV.pyx":583
+ *         return M
  * 
- *     def allocate(self, ld):             # <<<<<<<<<<<<<<
+ *     def matProject(self, Mat A, BV Y not None):             # <<<<<<<<<<<<<<
  *         """
- *         Allocates memory for internal storage or matrices in DS.
+ *         Computes the projection of a matrix onto a subspace.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_21allocate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2DS_20allocate[] = "DS.allocate(self, ld)\n\n        Allocates memory for internal storage or matrices in DS.\n\n        Parameters\n        ----------\n        ld: integer\n            Leading dimension (maximum allowed dimension for the\n            matrices, including the extra row if present).\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_21allocate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_ld = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_59matProject(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_58matProject[] = "BV.matProject(self, Mat A, BV Y)\n\n        Computes the projection of a matrix onto a subspace.\n\n        M = Y^H A X\n\n        Parameters\n        ----------\n        A: Mat or None\n            Matrix to be projected.\n\n        Y: BV\n            Left basis vectors, can be the same as self, giving M = X^H A X.\n\n        Returns\n        -------\n        M: Mat\n            Projection of the matrix A onto the subspace.\n  [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_59matProject(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscMatObject *__pyx_v_A = 0;
+  struct PySlepcBVObject *__pyx_v_Y = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("allocate (wrapper)", 0);
+  __Pyx_RefNannySetupContext("matProject (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ld,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_A,&__pyx_n_s_Y,0};
+    PyObject* values[2] = {0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -12085,197 +13856,255 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_21allocate(PyObject *__pyx_v_self
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ld)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Y)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("matProject", 1, 2, 2, 1); __PYX_ERR(3, 583, __pyx_L3_error)
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "allocate") < 0)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "matProject") < 0)) __PYX_ERR(3, 583, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_ld = values[0];
+    __pyx_v_A = ((struct PyPetscMatObject *)values[0]);
+    __pyx_v_Y = ((struct PySlepcBVObject *)values[1]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("allocate", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[9]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("matProject", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 583, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.allocate", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.matProject", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_20allocate(((struct PySlepcDSObject *)__pyx_v_self), __pyx_v_ld);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_A), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "A", 0))) __PYX_ERR(3, 583, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Y), __pyx_ptype_8slepc4py_5SLEPc_BV, 0, "Y", 0))) __PYX_ERR(3, 583, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_58matProject(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_A, __pyx_v_Y);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_20allocate(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_ld) {
-  PetscInt __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_58matProject(struct PySlepcBVObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A, struct PySlepcBVObject *__pyx_v_Y) {
+  struct PySlepcBVObject *__pyx_v_X = 0;
+  PetscInt __pyx_v_ky;
+  PetscInt __pyx_v_kx;
+  struct PyPetscMatObject *__pyx_v_M = 0;
+  Mat __pyx_v_Amat;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscInt __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("allocate", 0);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  void *__pyx_t_7;
+  int __pyx_t_8;
+  __Pyx_RefNannySetupContext("matProject", 0);
 
-  /* "SLEPc/DS.pyx":204
- *             matrices, including the extra row if present).
+  /* "SLEPc/BV.pyx":602
+ *             Projection of the matrix A onto the subspace.
  *         """
- *         cdef PetscInt val = ld             # <<<<<<<<<<<<<<
- *         CHKERR( DSAllocate(self.ds, val) )
- * 
+ *         cdef BV X = self             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ky=0, kx=0
+ *         CHKERR( BVGetActiveColumns(Y.bv, NULL, &ky) )
  */
-  __pyx_t_1 = __Pyx_PyInt_As_PetscInt(__pyx_v_ld); if (unlikely((__pyx_t_1 == (PetscInt)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_val = __pyx_t_1;
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_v_X = __pyx_v_self;
 
-  /* "SLEPc/DS.pyx":205
+  /* "SLEPc/BV.pyx":603
  *         """
- *         cdef PetscInt val = ld
- *         CHKERR( DSAllocate(self.ds, val) )             # <<<<<<<<<<<<<<
- * 
- *     def getLeadingDimension(self):
+ *         cdef BV X = self
+ *         cdef PetscInt ky=0, kx=0             # <<<<<<<<<<<<<<
+ *         CHKERR( BVGetActiveColumns(Y.bv, NULL, &ky) )
+ *         CHKERR( BVGetActiveColumns(X.bv, NULL, &kx) )
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSAllocate(__pyx_v_self->ds, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_ky = 0;
+  __pyx_v_kx = 0;
 
-  /* "SLEPc/DS.pyx":194
- *     #
- * 
- *     def allocate(self, ld):             # <<<<<<<<<<<<<<
- *         """
- *         Allocates memory for internal storage or matrices in DS.
+  /* "SLEPc/BV.pyx":604
+ *         cdef BV X = self
+ *         cdef PetscInt ky=0, kx=0
+ *         CHKERR( BVGetActiveColumns(Y.bv, NULL, &ky) )             # <<<<<<<<<<<<<<
+ *         CHKERR( BVGetActiveColumns(X.bv, NULL, &kx) )
+ *         cdef Mat M = Mat().createDense((ky, kx), comm=COMM_SELF).setUp()
  */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVGetActiveColumns(__pyx_v_Y->bv, NULL, (&__pyx_v_ky))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 604, __pyx_L1_error)
 
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.allocate", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "SLEPc/DS.pyx":207
- *         CHKERR( DSAllocate(self.ds, val) )
- * 
- *     def getLeadingDimension(self):             # <<<<<<<<<<<<<<
- *         """
- *         Returns the leading dimension of the allocated matrices.
+  /* "SLEPc/BV.pyx":605
+ *         cdef PetscInt ky=0, kx=0
+ *         CHKERR( BVGetActiveColumns(Y.bv, NULL, &ky) )
+ *         CHKERR( BVGetActiveColumns(X.bv, NULL, &kx) )             # <<<<<<<<<<<<<<
+ *         cdef Mat M = Mat().createDense((ky, kx), comm=COMM_SELF).setUp()
+ *         cdef PetscMat Amat = NULL if A is None else A.mat
  */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVGetActiveColumns(__pyx_v_X->bv, NULL, (&__pyx_v_kx))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 605, __pyx_L1_error)
 
-/* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_23getLeadingDimension(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2DS_22getLeadingDimension[] = "DS.getLeadingDimension(self)\n\n        Returns the leading dimension of the allocated matrices.\n\n        Returns\n        -------\n        ld: integer\n            Leading dimension (maximum allowed dimension for the matrices).\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_23getLeadingDimension(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getLeadingDimension (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getLeadingDimension", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getLeadingDimension", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_22getLeadingDimension(((struct PySlepcDSObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_22getLeadingDimension(struct PySlepcDSObject *__pyx_v_self) {
-  PetscInt __pyx_v_val;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getLeadingDimension", 0);
+  /* "SLEPc/BV.pyx":606
+ *         CHKERR( BVGetActiveColumns(Y.bv, NULL, &ky) )
+ *         CHKERR( BVGetActiveColumns(X.bv, NULL, &kx) )
+ *         cdef Mat M = Mat().createDense((ky, kx), comm=COMM_SELF).setUp()             # <<<<<<<<<<<<<<
+ *         cdef PetscMat Amat = NULL if A is None else A.mat
+ *         CHKERR( BVMatProject(X.bv, Amat, Y.bv, M.mat) )
+ */
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 606, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_createDense); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 606, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = __Pyx_PyInt_From_PetscInt(__pyx_v_ky); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 606, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_5 = __Pyx_PyInt_From_PetscInt(__pyx_v_kx); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 606, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 606, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_5);
+  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5);
+  __pyx_t_3 = 0;
+  __pyx_t_5 = 0;
+  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 606, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_GIVEREF(__pyx_t_6);
+  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6);
+  __pyx_t_6 = 0;
+  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 606, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_COMM_SELF); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 606, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_comm, __pyx_t_3) < 0) __PYX_ERR(3, 606, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 606, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_setUp); if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 606, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_6, function);
+    }
+  }
+  if (__pyx_t_3) {
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 606, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  } else {
+    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 606, __pyx_L1_error)
+  }
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(3, 606, __pyx_L1_error)
+  __pyx_v_M = ((struct PyPetscMatObject *)__pyx_t_2);
+  __pyx_t_2 = 0;
 
-  /* "SLEPc/DS.pyx":216
- *             Leading dimension (maximum allowed dimension for the matrices).
- *         """
- *         cdef PetscInt val = 0             # <<<<<<<<<<<<<<
- *         CHKERR( DSGetLeadingDimension(self.ds, &val) )
- *         return val
+  /* "SLEPc/BV.pyx":607
+ *         CHKERR( BVGetActiveColumns(X.bv, NULL, &kx) )
+ *         cdef Mat M = Mat().createDense((ky, kx), comm=COMM_SELF).setUp()
+ *         cdef PetscMat Amat = NULL if A is None else A.mat             # <<<<<<<<<<<<<<
+ *         CHKERR( BVMatProject(X.bv, Amat, Y.bv, M.mat) )
+ *         return M
  */
-  __pyx_v_val = 0;
+  __pyx_t_8 = (((PyObject *)__pyx_v_A) == Py_None);
+  if ((__pyx_t_8 != 0)) {
+    __pyx_t_7 = NULL;
+  } else {
+    __pyx_t_7 = __pyx_v_A->mat;
+  }
+  __pyx_v_Amat = __pyx_t_7;
 
-  /* "SLEPc/DS.pyx":217
- *         """
- *         cdef PetscInt val = 0
- *         CHKERR( DSGetLeadingDimension(self.ds, &val) )             # <<<<<<<<<<<<<<
- *         return val
+  /* "SLEPc/BV.pyx":608
+ *         cdef Mat M = Mat().createDense((ky, kx), comm=COMM_SELF).setUp()
+ *         cdef PetscMat Amat = NULL if A is None else A.mat
+ *         CHKERR( BVMatProject(X.bv, Amat, Y.bv, M.mat) )             # <<<<<<<<<<<<<<
+ *         return M
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSGetLeadingDimension(__pyx_v_self->ds, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVMatProject(__pyx_v_X->bv, __pyx_v_Amat, __pyx_v_Y->bv, __pyx_v_M->mat)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 608, __pyx_L1_error)
 
-  /* "SLEPc/DS.pyx":218
- *         cdef PetscInt val = 0
- *         CHKERR( DSGetLeadingDimension(self.ds, &val) )
- *         return val             # <<<<<<<<<<<<<<
+  /* "SLEPc/BV.pyx":609
+ *         cdef PetscMat Amat = NULL if A is None else A.mat
+ *         CHKERR( BVMatProject(X.bv, Amat, Y.bv, M.mat) )
+ *         return M             # <<<<<<<<<<<<<<
  * 
- *     def setState(self, state):
+ *     def matMult(self, Mat A not None, BV Y=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscInt(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __Pyx_INCREF(((PyObject *)__pyx_v_M));
+  __pyx_r = ((PyObject *)__pyx_v_M);
   goto __pyx_L0;
 
-  /* "SLEPc/DS.pyx":207
- *         CHKERR( DSAllocate(self.ds, val) )
+  /* "SLEPc/BV.pyx":583
+ *         return M
  * 
- *     def getLeadingDimension(self):             # <<<<<<<<<<<<<<
+ *     def matProject(self, Mat A, BV Y not None):             # <<<<<<<<<<<<<<
  *         """
- *         Returns the leading dimension of the allocated matrices.
+ *         Computes the projection of a matrix onto a subspace.
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.getLeadingDimension", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.matProject", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_X);
+  __Pyx_XDECREF((PyObject *)__pyx_v_M);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/DS.pyx":220
- *         return val
+/* "SLEPc/BV.pyx":611
+ *         return M
  * 
- *     def setState(self, state):             # <<<<<<<<<<<<<<
+ *     def matMult(self, Mat A not None, BV Y=None):             # <<<<<<<<<<<<<<
  *         """
- *         Change the state of the DS object.
+ *         Computes the matrix-vector product for each column, Y = A*V.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_25setState(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2DS_24setState[] = "DS.setState(self, state)\n\n        Change the state of the DS object.\n\n        Parameters\n        ----------\n        state: `DS.StateType` enumerate\n               The new state.\n\n        Notes\n        -----\n        The state indicates that the dense system is in an initial\n        state (raw), in an intermediate state (such as tridiagonal,\n        Hessenberg or Hessenberg-triangular), in a condensed state\n        (s [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_25setState(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_state = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_61matMult(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_60matMult[] = "BV.matMult(self, Mat A, BV Y=None)\n\n        Computes the matrix-vector product for each column, Y = A*V.\n\n        Parameters\n        ----------\n        A: Mat\n            The matrix.\n\n        Returns\n        -------\n        Y: BV\n            The result.\n\n        Notes\n        -----\n        Only active columns (excluding the leading ones) are processed.\n\n        It is possible to choose whether the computation is  [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_61matMult(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscMatObject *__pyx_v_A = 0;
+  struct PySlepcBVObject *__pyx_v_Y = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setState (wrapper)", 0);
+  __Pyx_RefNannySetupContext("matMult (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_state,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_A,&__pyx_n_s_Y,0};
+    PyObject* values[2] = {0,0};
+    values[1] = (PyObject *)((struct PySlepcBVObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -12283,206 +14112,334 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_25setState(PyObject *__pyx_v_self
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_state)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Y);
+          if (value) { values[1] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setState") < 0)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "matMult") < 0)) __PYX_ERR(3, 611, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
     } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
     }
-    __pyx_v_state = values[0];
+    __pyx_v_A = ((struct PyPetscMatObject *)values[0]);
+    __pyx_v_Y = ((struct PySlepcBVObject *)values[1]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setState", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[9]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("matMult", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 611, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setState", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.matMult", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_24setState(((struct PySlepcDSObject *)__pyx_v_self), __pyx_v_state);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_A), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "A", 0))) __PYX_ERR(3, 611, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Y), __pyx_ptype_8slepc4py_5SLEPc_BV, 1, "Y", 0))) __PYX_ERR(3, 611, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_60matMult(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_A, __pyx_v_Y);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_24setState(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_state) {
-  DSStateType __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_60matMult(struct PySlepcBVObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A, struct PySlepcBVObject *__pyx_v_Y) {
+  MPI_Comm __pyx_v_comm;
+  const char* __pyx_v_bv_type;
+  PetscInt __pyx_v_n;
+  PetscInt __pyx_v_N;
+  PetscInt __pyx_v_m;
+  BVOrthogType __pyx_v_val1;
+  BVOrthogRefineType __pyx_v_val2;
+  BVOrthogBlockType __pyx_v_val3;
+  PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  DSStateType __pyx_t_1;
+  int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setState", 0);
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("matMult", 0);
+  __Pyx_INCREF((PyObject *)__pyx_v_Y);
 
-  /* "SLEPc/DS.pyx":240
- *         the condensed structure is destroyed.
+  /* "SLEPc/BV.pyx":637
+ *         The default is bv_matmult_mat.
  *         """
- *         cdef SlepcDSStateType val = state             # <<<<<<<<<<<<<<
- *         CHKERR( DSSetState(self.ds, val) )
- * 
+ *         cdef MPI_Comm comm = PetscObjectComm(<PetscObject>self.bv)             # <<<<<<<<<<<<<<
+ *         cdef SlepcBVType bv_type = NULL
+ *         cdef PetscInt n=0, N=0, m=0
  */
-  __pyx_t_1 = ((DSStateType)PyInt_AsLong(__pyx_v_state)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_val = __pyx_t_1;
+  __pyx_v_comm = PetscObjectComm(((PetscObject)__pyx_v_self->bv));
 
-  /* "SLEPc/DS.pyx":241
+  /* "SLEPc/BV.pyx":638
  *         """
- *         cdef SlepcDSStateType val = state
- *         CHKERR( DSSetState(self.ds, val) )             # <<<<<<<<<<<<<<
- * 
- *     def getState(self):
+ *         cdef MPI_Comm comm = PetscObjectComm(<PetscObject>self.bv)
+ *         cdef SlepcBVType bv_type = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscInt n=0, N=0, m=0
+ *         cdef SlepcBVOrthogType val1 = BV_ORTHOG_CGS
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSSetState(__pyx_v_self->ds, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_bv_type = NULL;
 
-  /* "SLEPc/DS.pyx":220
- *         return val
- * 
- *     def setState(self, state):             # <<<<<<<<<<<<<<
- *         """
- *         Change the state of the DS object.
+  /* "SLEPc/BV.pyx":639
+ *         cdef MPI_Comm comm = PetscObjectComm(<PetscObject>self.bv)
+ *         cdef SlepcBVType bv_type = NULL
+ *         cdef PetscInt n=0, N=0, m=0             # <<<<<<<<<<<<<<
+ *         cdef SlepcBVOrthogType val1 = BV_ORTHOG_CGS
+ *         cdef SlepcBVOrthogRefineType val2 = BV_ORTHOG_REFINE_IFNEEDED
  */
+  __pyx_v_n = 0;
+  __pyx_v_N = 0;
+  __pyx_v_m = 0;
 
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setState", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "SLEPc/BV.pyx":640
+ *         cdef SlepcBVType bv_type = NULL
+ *         cdef PetscInt n=0, N=0, m=0
+ *         cdef SlepcBVOrthogType val1 = BV_ORTHOG_CGS             # <<<<<<<<<<<<<<
+ *         cdef SlepcBVOrthogRefineType val2 = BV_ORTHOG_REFINE_IFNEEDED
+ *         cdef SlepcBVOrthogBlockType val3 = BV_ORTHOG_BLOCK_GS
+ */
+  __pyx_v_val1 = BV_ORTHOG_CGS;
 
-/* "SLEPc/DS.pyx":243
- *         CHKERR( DSSetState(self.ds, val) )
- * 
- *     def getState(self):             # <<<<<<<<<<<<<<
- *         """
- *         Returns the current state.
+  /* "SLEPc/BV.pyx":641
+ *         cdef PetscInt n=0, N=0, m=0
+ *         cdef SlepcBVOrthogType val1 = BV_ORTHOG_CGS
+ *         cdef SlepcBVOrthogRefineType val2 = BV_ORTHOG_REFINE_IFNEEDED             # <<<<<<<<<<<<<<
+ *         cdef SlepcBVOrthogBlockType val3 = BV_ORTHOG_BLOCK_GS
+ *         cdef PetscReal rval = PETSC_DEFAULT
  */
+  __pyx_v_val2 = BV_ORTHOG_REFINE_IFNEEDED;
 
-/* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_27getState(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2DS_26getState[] = "DS.getState(self)\n\n        Returns the current state.\n\n        Returns\n        -------\n        state: `DS.StateType` enumerate\n               The current state.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_27getState(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getState (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getState", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getState", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_26getState(((struct PySlepcDSObject *)__pyx_v_self));
+  /* "SLEPc/BV.pyx":642
+ *         cdef SlepcBVOrthogType val1 = BV_ORTHOG_CGS
+ *         cdef SlepcBVOrthogRefineType val2 = BV_ORTHOG_REFINE_IFNEEDED
+ *         cdef SlepcBVOrthogBlockType val3 = BV_ORTHOG_BLOCK_GS             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = PETSC_DEFAULT
+ *         if Y is None: Y = BV()
+ */
+  __pyx_v_val3 = BV_ORTHOG_BLOCK_GS;
 
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "SLEPc/BV.pyx":643
+ *         cdef SlepcBVOrthogRefineType val2 = BV_ORTHOG_REFINE_IFNEEDED
+ *         cdef SlepcBVOrthogBlockType val3 = BV_ORTHOG_BLOCK_GS
+ *         cdef PetscReal rval = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         if Y is None: Y = BV()
+ *         if Y.bv == NULL:
+ */
+  __pyx_v_rval = PETSC_DEFAULT;
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_26getState(struct PySlepcDSObject *__pyx_v_self) {
-  DSStateType __pyx_v_val;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getState", 0);
+  /* "SLEPc/BV.pyx":644
+ *         cdef SlepcBVOrthogBlockType val3 = BV_ORTHOG_BLOCK_GS
+ *         cdef PetscReal rval = PETSC_DEFAULT
+ *         if Y is None: Y = BV()             # <<<<<<<<<<<<<<
+ *         if Y.bv == NULL:
+ *             CHKERR( BVGetType(self.bv, &bv_type) )
+ */
+  __pyx_t_1 = (((PyObject *)__pyx_v_Y) == Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_BV), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 644, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF_SET(__pyx_v_Y, ((struct PySlepcBVObject *)__pyx_t_3));
+    __pyx_t_3 = 0;
+  }
 
-  /* "SLEPc/DS.pyx":252
- *                The current state.
- *         """
- *         cdef SlepcDSStateType val = DS_STATE_RAW             # <<<<<<<<<<<<<<
- *         CHKERR( DSGetState(self.ds, &val) )
- *         return val
+  /* "SLEPc/BV.pyx":645
+ *         cdef PetscReal rval = PETSC_DEFAULT
+ *         if Y is None: Y = BV()
+ *         if Y.bv == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( BVGetType(self.bv, &bv_type) )
+ *             CHKERR( MatGetLocalSize(A.mat, &n, NULL) )
  */
-  __pyx_v_val = DS_STATE_RAW;
+  __pyx_t_2 = ((__pyx_v_Y->bv == NULL) != 0);
+  if (__pyx_t_2) {
 
-  /* "SLEPc/DS.pyx":253
- *         """
- *         cdef SlepcDSStateType val = DS_STATE_RAW
- *         CHKERR( DSGetState(self.ds, &val) )             # <<<<<<<<<<<<<<
- *         return val
+    /* "SLEPc/BV.pyx":646
+ *         if Y is None: Y = BV()
+ *         if Y.bv == NULL:
+ *             CHKERR( BVGetType(self.bv, &bv_type) )             # <<<<<<<<<<<<<<
+ *             CHKERR( MatGetLocalSize(A.mat, &n, NULL) )
+ *             CHKERR( MatGetSize(A.mat, &N, NULL) )
+ */
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVGetType(__pyx_v_self->bv, (&__pyx_v_bv_type))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 646, __pyx_L1_error)
+
+    /* "SLEPc/BV.pyx":647
+ *         if Y.bv == NULL:
+ *             CHKERR( BVGetType(self.bv, &bv_type) )
+ *             CHKERR( MatGetLocalSize(A.mat, &n, NULL) )             # <<<<<<<<<<<<<<
+ *             CHKERR( MatGetSize(A.mat, &N, NULL) )
+ *             CHKERR( BVGetSizes(self.bv, NULL, NULL, &m) )
+ */
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MatGetLocalSize(__pyx_v_A->mat, (&__pyx_v_n), NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 647, __pyx_L1_error)
+
+    /* "SLEPc/BV.pyx":648
+ *             CHKERR( BVGetType(self.bv, &bv_type) )
+ *             CHKERR( MatGetLocalSize(A.mat, &n, NULL) )
+ *             CHKERR( MatGetSize(A.mat, &N, NULL) )             # <<<<<<<<<<<<<<
+ *             CHKERR( BVGetSizes(self.bv, NULL, NULL, &m) )
+ *             CHKERR( BVGetOrthogonalization(self.bv, &val1, &val2, &rval, &val3) )
+ */
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MatGetSize(__pyx_v_A->mat, (&__pyx_v_N), NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 648, __pyx_L1_error)
+
+    /* "SLEPc/BV.pyx":649
+ *             CHKERR( MatGetLocalSize(A.mat, &n, NULL) )
+ *             CHKERR( MatGetSize(A.mat, &N, NULL) )
+ *             CHKERR( BVGetSizes(self.bv, NULL, NULL, &m) )             # <<<<<<<<<<<<<<
+ *             CHKERR( BVGetOrthogonalization(self.bv, &val1, &val2, &rval, &val3) )
+ *         if Y.bv == NULL:
+ */
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVGetSizes(__pyx_v_self->bv, NULL, NULL, (&__pyx_v_m))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 649, __pyx_L1_error)
+
+    /* "SLEPc/BV.pyx":650
+ *             CHKERR( MatGetSize(A.mat, &N, NULL) )
+ *             CHKERR( BVGetSizes(self.bv, NULL, NULL, &m) )
+ *             CHKERR( BVGetOrthogonalization(self.bv, &val1, &val2, &rval, &val3) )             # <<<<<<<<<<<<<<
+ *         if Y.bv == NULL:
+ *             CHKERR( BVCreate(comm, &Y.bv) )
+ */
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVGetOrthogonalization(__pyx_v_self->bv, (&__pyx_v_val1), (&__pyx_v_val2), (&__pyx_v_rval), (&__pyx_v_val3))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 650, __pyx_L1_error)
+
+    /* "SLEPc/BV.pyx":645
+ *         cdef PetscReal rval = PETSC_DEFAULT
+ *         if Y is None: Y = BV()
+ *         if Y.bv == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( BVGetType(self.bv, &bv_type) )
+ *             CHKERR( MatGetLocalSize(A.mat, &n, NULL) )
+ */
+  }
+
+  /* "SLEPc/BV.pyx":651
+ *             CHKERR( BVGetSizes(self.bv, NULL, NULL, &m) )
+ *             CHKERR( BVGetOrthogonalization(self.bv, &val1, &val2, &rval, &val3) )
+ *         if Y.bv == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( BVCreate(comm, &Y.bv) )
+ *             CHKERR( BVSetType(Y.bv, bv_type) )
+ */
+  __pyx_t_2 = ((__pyx_v_Y->bv == NULL) != 0);
+  if (__pyx_t_2) {
+
+    /* "SLEPc/BV.pyx":652
+ *             CHKERR( BVGetOrthogonalization(self.bv, &val1, &val2, &rval, &val3) )
+ *         if Y.bv == NULL:
+ *             CHKERR( BVCreate(comm, &Y.bv) )             # <<<<<<<<<<<<<<
+ *             CHKERR( BVSetType(Y.bv, bv_type) )
+ *             CHKERR( BVSetSizes(Y.bv, n, N, m) )
+ */
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVCreate(__pyx_v_comm, (&__pyx_v_Y->bv))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 652, __pyx_L1_error)
+
+    /* "SLEPc/BV.pyx":653
+ *         if Y.bv == NULL:
+ *             CHKERR( BVCreate(comm, &Y.bv) )
+ *             CHKERR( BVSetType(Y.bv, bv_type) )             # <<<<<<<<<<<<<<
+ *             CHKERR( BVSetSizes(Y.bv, n, N, m) )
+ *             CHKERR( BVSetOrthogonalization(Y.bv, val1, val2, rval, val3) )
+ */
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVSetType(__pyx_v_Y->bv, __pyx_v_bv_type)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 653, __pyx_L1_error)
+
+    /* "SLEPc/BV.pyx":654
+ *             CHKERR( BVCreate(comm, &Y.bv) )
+ *             CHKERR( BVSetType(Y.bv, bv_type) )
+ *             CHKERR( BVSetSizes(Y.bv, n, N, m) )             # <<<<<<<<<<<<<<
+ *             CHKERR( BVSetOrthogonalization(Y.bv, val1, val2, rval, val3) )
+ *         CHKERR( BVMatMult(self.bv, A.mat, Y.bv) )
+ */
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVSetSizes(__pyx_v_Y->bv, __pyx_v_n, __pyx_v_N, __pyx_v_m)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 654, __pyx_L1_error)
+
+    /* "SLEPc/BV.pyx":655
+ *             CHKERR( BVSetType(Y.bv, bv_type) )
+ *             CHKERR( BVSetSizes(Y.bv, n, N, m) )
+ *             CHKERR( BVSetOrthogonalization(Y.bv, val1, val2, rval, val3) )             # <<<<<<<<<<<<<<
+ *         CHKERR( BVMatMult(self.bv, A.mat, Y.bv) )
+ *         return Y
+ */
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVSetOrthogonalization(__pyx_v_Y->bv, __pyx_v_val1, __pyx_v_val2, __pyx_v_rval, __pyx_v_val3)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 655, __pyx_L1_error)
+
+    /* "SLEPc/BV.pyx":651
+ *             CHKERR( BVGetSizes(self.bv, NULL, NULL, &m) )
+ *             CHKERR( BVGetOrthogonalization(self.bv, &val1, &val2, &rval, &val3) )
+ *         if Y.bv == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( BVCreate(comm, &Y.bv) )
+ *             CHKERR( BVSetType(Y.bv, bv_type) )
+ */
+  }
+
+  /* "SLEPc/BV.pyx":656
+ *             CHKERR( BVSetSizes(Y.bv, n, N, m) )
+ *             CHKERR( BVSetOrthogonalization(Y.bv, val1, val2, rval, val3) )
+ *         CHKERR( BVMatMult(self.bv, A.mat, Y.bv) )             # <<<<<<<<<<<<<<
+ *         return Y
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSGetState(__pyx_v_self->ds, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVMatMult(__pyx_v_self->bv, __pyx_v_A->mat, __pyx_v_Y->bv)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 656, __pyx_L1_error)
 
-  /* "SLEPc/DS.pyx":254
- *         cdef SlepcDSStateType val = DS_STATE_RAW
- *         CHKERR( DSGetState(self.ds, &val) )
- *         return val             # <<<<<<<<<<<<<<
+  /* "SLEPc/BV.pyx":657
+ *             CHKERR( BVSetOrthogonalization(Y.bv, val1, val2, rval, val3) )
+ *         CHKERR( BVMatMult(self.bv, A.mat, Y.bv) )
+ *         return Y             # <<<<<<<<<<<<<<
  * 
- *     def setDimensions(self, n=None, m=None, l=None, k=None):
+ *     def matMultHermitianTranspose(self, Mat A not None, BV Y=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __Pyx_INCREF(((PyObject *)__pyx_v_Y));
+  __pyx_r = ((PyObject *)__pyx_v_Y);
   goto __pyx_L0;
 
-  /* "SLEPc/DS.pyx":243
- *         CHKERR( DSSetState(self.ds, val) )
+  /* "SLEPc/BV.pyx":611
+ *         return M
  * 
- *     def getState(self):             # <<<<<<<<<<<<<<
+ *     def matMult(self, Mat A not None, BV Y=None):             # <<<<<<<<<<<<<<
  *         """
- *         Returns the current state.
+ *         Computes the matrix-vector product for each column, Y = A*V.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.getState", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.matMult", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_Y);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/DS.pyx":256
- *         return val
+/* "SLEPc/BV.pyx":659
+ *         return Y
  * 
- *     def setDimensions(self, n=None, m=None, l=None, k=None):             # <<<<<<<<<<<<<<
+ *     def matMultHermitianTranspose(self, Mat A not None, BV Y=None):             # <<<<<<<<<<<<<<
  *         """
- *         Resize the matrices in the DS object.
+ *         Computes the matrix-vector product with the conjugate transpose of a
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_29setDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2DS_28setDimensions[] = "DS.setDimensions(self, n=None, m=None, l=None, k=None)\n\n        Resize the matrices in the DS object.\n\n        Parameters\n        ----------\n        n: int, optional\n           The new size.\n        m: int, optional\n           The new column size (only for SVD).\n        l: int, optional\n           Number of locked (inactive) leading columns.\n        k: int, optional\n           Intermediate dimension (e.g., posit [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_29setDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_n = 0;
-  PyObject *__pyx_v_m = 0;
-  PyObject *__pyx_v_l = 0;
-  PyObject *__pyx_v_k = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_63matMultHermitianTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_62matMultHermitianTranspose[] = "BV.matMultHermitianTranspose(self, Mat A, BV Y=None)\n\n        Computes the matrix-vector product with the conjugate transpose of a\n        matrix for each column, Y=A^H*V.\n\n        Parameters\n        ----------\n        A: Mat\n            The matrix.\n\n        Returns\n        -------\n        Y: BV\n            The result.\n\n        Notes\n        -----\n        Only active columns (excluding the leadin [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_63matMultHermitianTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscMatObject *__pyx_v_A = 0;
+  struct PySlepcBVObject *__pyx_v_Y = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setDimensions (wrapper)", 0);
+  __Pyx_RefNannySetupContext("matMultHermitianTranspose (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_n,&__pyx_n_s_m,&__pyx_n_s_l,&__pyx_n_s_k,0};
-    PyObject* values[4] = {0,0,0,0};
-    values[0] = ((PyObject *)Py_None);
-    values[1] = ((PyObject *)Py_None);
-    values[2] = ((PyObject *)Py_None);
-    values[3] = ((PyObject *)Py_None);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_A,&__pyx_n_s_Y,0};
+    PyObject* values[2] = {0,0};
+    values[1] = (PyObject *)((struct PySlepcBVObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
-        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
@@ -12491,392 +14448,338 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_29setDimensions(PyObject *__pyx_v
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_n);
-          if (value) { values[0] = value; kw_args--; }
-        }
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_m);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Y);
           if (value) { values[1] = value; kw_args--; }
         }
-        case  2:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_l);
-          if (value) { values[2] = value; kw_args--; }
-        }
-        case  3:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_k);
-          if (value) { values[3] = value; kw_args--; }
-        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDimensions") < 0)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "matMultHermitianTranspose") < 0)) __PYX_ERR(3, 659, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
+        break;
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_n = values[0];
-    __pyx_v_m = values[1];
-    __pyx_v_l = values[2];
-    __pyx_v_k = values[3];
+    __pyx_v_A = ((struct PyPetscMatObject *)values[0]);
+    __pyx_v_Y = ((struct PySlepcBVObject *)values[1]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDimensions", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[9]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("matMultHermitianTranspose", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 659, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.matMultHermitianTranspose", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_28setDimensions(((struct PySlepcDSObject *)__pyx_v_self), __pyx_v_n, __pyx_v_m, __pyx_v_l, __pyx_v_k);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_A), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "A", 0))) __PYX_ERR(3, 659, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Y), __pyx_ptype_8slepc4py_5SLEPc_BV, 1, "Y", 0))) __PYX_ERR(3, 659, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_62matMultHermitianTranspose(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_A, __pyx_v_Y);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_28setDimensions(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_n, PyObject *__pyx_v_m, PyObject *__pyx_v_l, PyObject *__pyx_v_k) {
-  PetscInt __pyx_v_ival1;
-  PetscInt __pyx_v_ival2;
-  PetscInt __pyx_v_ival3;
-  PetscInt __pyx_v_ival4;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_62matMultHermitianTranspose(struct PySlepcBVObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A, struct PySlepcBVObject *__pyx_v_Y) {
+  MPI_Comm __pyx_v_comm;
+  const char* __pyx_v_bv_type;
+  PetscInt __pyx_v_n;
+  PetscInt __pyx_v_N;
+  PetscInt __pyx_v_m;
+  BVOrthogType __pyx_v_val1;
+  BVOrthogRefineType __pyx_v_val2;
+  BVOrthogBlockType __pyx_v_val3;
+  PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
-  PetscInt __pyx_t_3;
+  PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setDimensions", 0);
+  __Pyx_RefNannySetupContext("matMultHermitianTranspose", 0);
+  __Pyx_INCREF((PyObject *)__pyx_v_Y);
 
-  /* "SLEPc/DS.pyx":277
- *         The value `m` is not used except in the case of DS.SVD.
+  /* "SLEPc/BV.pyx":681
+ *         column, with a sequence of calls to MatMultHermitianTranspose().
  *         """
- *         cdef PetscInt ival1 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival2 = PETSC_DEFAULT
- *         cdef PetscInt ival3 = 0
+ *         cdef MPI_Comm comm = PetscObjectComm(<PetscObject>self.bv)             # <<<<<<<<<<<<<<
+ *         cdef SlepcBVType bv_type = NULL
+ *         cdef PetscInt n=0, N=0, m=0
  */
-  __pyx_v_ival1 = PETSC_DEFAULT;
+  __pyx_v_comm = PetscObjectComm(((PetscObject)__pyx_v_self->bv));
 
-  /* "SLEPc/DS.pyx":278
+  /* "SLEPc/BV.pyx":682
  *         """
- *         cdef PetscInt ival1 = PETSC_DEFAULT
- *         cdef PetscInt ival2 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival3 = 0
- *         cdef PetscInt ival4 = 0
+ *         cdef MPI_Comm comm = PetscObjectComm(<PetscObject>self.bv)
+ *         cdef SlepcBVType bv_type = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscInt n=0, N=0, m=0
+ *         cdef SlepcBVOrthogType val1 = BV_ORTHOG_CGS
  */
-  __pyx_v_ival2 = PETSC_DEFAULT;
+  __pyx_v_bv_type = NULL;
 
-  /* "SLEPc/DS.pyx":279
- *         cdef PetscInt ival1 = PETSC_DEFAULT
- *         cdef PetscInt ival2 = PETSC_DEFAULT
- *         cdef PetscInt ival3 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival4 = 0
- *         if n is not None: ival1 = asInt(n)
+  /* "SLEPc/BV.pyx":683
+ *         cdef MPI_Comm comm = PetscObjectComm(<PetscObject>self.bv)
+ *         cdef SlepcBVType bv_type = NULL
+ *         cdef PetscInt n=0, N=0, m=0             # <<<<<<<<<<<<<<
+ *         cdef SlepcBVOrthogType val1 = BV_ORTHOG_CGS
+ *         cdef SlepcBVOrthogRefineType val2 = BV_ORTHOG_REFINE_IFNEEDED
  */
-  __pyx_v_ival3 = 0;
+  __pyx_v_n = 0;
+  __pyx_v_N = 0;
+  __pyx_v_m = 0;
 
-  /* "SLEPc/DS.pyx":280
- *         cdef PetscInt ival2 = PETSC_DEFAULT
- *         cdef PetscInt ival3 = 0
- *         cdef PetscInt ival4 = 0             # <<<<<<<<<<<<<<
- *         if n is not None: ival1 = asInt(n)
- *         if m is not None: ival2 = asInt(m)
+  /* "SLEPc/BV.pyx":684
+ *         cdef SlepcBVType bv_type = NULL
+ *         cdef PetscInt n=0, N=0, m=0
+ *         cdef SlepcBVOrthogType val1 = BV_ORTHOG_CGS             # <<<<<<<<<<<<<<
+ *         cdef SlepcBVOrthogRefineType val2 = BV_ORTHOG_REFINE_IFNEEDED
+ *         cdef SlepcBVOrthogBlockType val3 = BV_ORTHOG_BLOCK_GS
  */
-  __pyx_v_ival4 = 0;
+  __pyx_v_val1 = BV_ORTHOG_CGS;
 
-  /* "SLEPc/DS.pyx":281
- *         cdef PetscInt ival3 = 0
- *         cdef PetscInt ival4 = 0
- *         if n is not None: ival1 = asInt(n)             # <<<<<<<<<<<<<<
- *         if m is not None: ival2 = asInt(m)
- *         if l is not None: ival3 = asInt(l)
+  /* "SLEPc/BV.pyx":685
+ *         cdef PetscInt n=0, N=0, m=0
+ *         cdef SlepcBVOrthogType val1 = BV_ORTHOG_CGS
+ *         cdef SlepcBVOrthogRefineType val2 = BV_ORTHOG_REFINE_IFNEEDED             # <<<<<<<<<<<<<<
+ *         cdef SlepcBVOrthogBlockType val3 = BV_ORTHOG_BLOCK_GS
+ *         cdef PetscReal rval = PETSC_DEFAULT
  */
-  __pyx_t_1 = (__pyx_v_n != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_n); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival1 = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+  __pyx_v_val2 = BV_ORTHOG_REFINE_IFNEEDED;
 
-  /* "SLEPc/DS.pyx":282
- *         cdef PetscInt ival4 = 0
- *         if n is not None: ival1 = asInt(n)
- *         if m is not None: ival2 = asInt(m)             # <<<<<<<<<<<<<<
- *         if l is not None: ival3 = asInt(l)
- *         if k is not None: ival4 = asInt(k)
+  /* "SLEPc/BV.pyx":686
+ *         cdef SlepcBVOrthogType val1 = BV_ORTHOG_CGS
+ *         cdef SlepcBVOrthogRefineType val2 = BV_ORTHOG_REFINE_IFNEEDED
+ *         cdef SlepcBVOrthogBlockType val3 = BV_ORTHOG_BLOCK_GS             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = PETSC_DEFAULT
+ *         if Y is None: Y = BV()
  */
-  __pyx_t_2 = (__pyx_v_m != Py_None);
-  __pyx_t_1 = (__pyx_t_2 != 0);
-  if (__pyx_t_1) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_m); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival2 = __pyx_t_3;
-    goto __pyx_L4;
-  }
-  __pyx_L4:;
+  __pyx_v_val3 = BV_ORTHOG_BLOCK_GS;
 
-  /* "SLEPc/DS.pyx":283
- *         if n is not None: ival1 = asInt(n)
- *         if m is not None: ival2 = asInt(m)
- *         if l is not None: ival3 = asInt(l)             # <<<<<<<<<<<<<<
- *         if k is not None: ival4 = asInt(k)
- *         CHKERR( DSSetDimensions(self.ds, ival1, ival2, ival3, ival4) )
+  /* "SLEPc/BV.pyx":687
+ *         cdef SlepcBVOrthogRefineType val2 = BV_ORTHOG_REFINE_IFNEEDED
+ *         cdef SlepcBVOrthogBlockType val3 = BV_ORTHOG_BLOCK_GS
+ *         cdef PetscReal rval = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         if Y is None: Y = BV()
+ *         if Y.bv == NULL:
  */
-  __pyx_t_1 = (__pyx_v_l != Py_None);
+  __pyx_v_rval = PETSC_DEFAULT;
+
+  /* "SLEPc/BV.pyx":688
+ *         cdef SlepcBVOrthogBlockType val3 = BV_ORTHOG_BLOCK_GS
+ *         cdef PetscReal rval = PETSC_DEFAULT
+ *         if Y is None: Y = BV()             # <<<<<<<<<<<<<<
+ *         if Y.bv == NULL:
+ *             CHKERR( BVGetType(self.bv, &bv_type) )
+ */
+  __pyx_t_1 = (((PyObject *)__pyx_v_Y) == Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_l); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival3 = __pyx_t_3;
-    goto __pyx_L5;
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_BV), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 688, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF_SET(__pyx_v_Y, ((struct PySlepcBVObject *)__pyx_t_3));
+    __pyx_t_3 = 0;
   }
-  __pyx_L5:;
 
-  /* "SLEPc/DS.pyx":284
- *         if m is not None: ival2 = asInt(m)
- *         if l is not None: ival3 = asInt(l)
- *         if k is not None: ival4 = asInt(k)             # <<<<<<<<<<<<<<
- *         CHKERR( DSSetDimensions(self.ds, ival1, ival2, ival3, ival4) )
- * 
+  /* "SLEPc/BV.pyx":689
+ *         cdef PetscReal rval = PETSC_DEFAULT
+ *         if Y is None: Y = BV()
+ *         if Y.bv == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( BVGetType(self.bv, &bv_type) )
+ *             CHKERR( MatGetLocalSize(A.mat, &n, NULL) )
  */
-  __pyx_t_2 = (__pyx_v_k != Py_None);
-  __pyx_t_1 = (__pyx_t_2 != 0);
-  if (__pyx_t_1) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_k); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival4 = __pyx_t_3;
-    goto __pyx_L6;
-  }
-  __pyx_L6:;
+  __pyx_t_2 = ((__pyx_v_Y->bv == NULL) != 0);
+  if (__pyx_t_2) {
 
-  /* "SLEPc/DS.pyx":285
- *         if l is not None: ival3 = asInt(l)
- *         if k is not None: ival4 = asInt(k)
- *         CHKERR( DSSetDimensions(self.ds, ival1, ival2, ival3, ival4) )             # <<<<<<<<<<<<<<
- * 
- *     def getDimensions(self):
+    /* "SLEPc/BV.pyx":690
+ *         if Y is None: Y = BV()
+ *         if Y.bv == NULL:
+ *             CHKERR( BVGetType(self.bv, &bv_type) )             # <<<<<<<<<<<<<<
+ *             CHKERR( MatGetLocalSize(A.mat, &n, NULL) )
+ *             CHKERR( MatGetSize(A.mat, &N, NULL) )
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSSetDimensions(__pyx_v_self->ds, __pyx_v_ival1, __pyx_v_ival2, __pyx_v_ival3, __pyx_v_ival4)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVGetType(__pyx_v_self->bv, (&__pyx_v_bv_type))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 690, __pyx_L1_error)
 
-  /* "SLEPc/DS.pyx":256
- *         return val
- * 
- *     def setDimensions(self, n=None, m=None, l=None, k=None):             # <<<<<<<<<<<<<<
- *         """
- *         Resize the matrices in the DS object.
+    /* "SLEPc/BV.pyx":691
+ *         if Y.bv == NULL:
+ *             CHKERR( BVGetType(self.bv, &bv_type) )
+ *             CHKERR( MatGetLocalSize(A.mat, &n, NULL) )             # <<<<<<<<<<<<<<
+ *             CHKERR( MatGetSize(A.mat, &N, NULL) )
+ *             CHKERR( BVGetSizes(self.bv, NULL, NULL, &m) )
  */
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MatGetLocalSize(__pyx_v_A->mat, (&__pyx_v_n), NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 691, __pyx_L1_error)
 
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "SLEPc/DS.pyx":287
- *         CHKERR( DSSetDimensions(self.ds, ival1, ival2, ival3, ival4) )
- * 
- *     def getDimensions(self):             # <<<<<<<<<<<<<<
- *         """
- *         Returns the current dimensions.
+    /* "SLEPc/BV.pyx":692
+ *             CHKERR( BVGetType(self.bv, &bv_type) )
+ *             CHKERR( MatGetLocalSize(A.mat, &n, NULL) )
+ *             CHKERR( MatGetSize(A.mat, &N, NULL) )             # <<<<<<<<<<<<<<
+ *             CHKERR( BVGetSizes(self.bv, NULL, NULL, &m) )
+ *             CHKERR( BVGetOrthogonalization(self.bv, &val1, &val2, &rval, &val3) )
  */
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MatGetSize(__pyx_v_A->mat, (&__pyx_v_N), NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 692, __pyx_L1_error)
 
-/* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_31getDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2DS_30getDimensions[] = "DS.getDimensions(self)\n\n        Returns the current dimensions.\n\n        Returns\n        -------\n        n: int\n           The new size.\n        m: int\n           The new column size (only for SVD).\n        l: int\n           Number of locked (inactive) leading columns.\n        k: int\n           Intermediate dimension (e.g., position of arrow).\n        t: int\n           Truncated length.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_31getDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getDimensions (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getDimensions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDimensions", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_30getDimensions(((struct PySlepcDSObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_30getDimensions(struct PySlepcDSObject *__pyx_v_self) {
-  PetscInt __pyx_v_ival1;
-  PetscInt __pyx_v_ival2;
-  PetscInt __pyx_v_ival3;
-  PetscInt __pyx_v_ival4;
-  PetscInt __pyx_v_ival5;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  PyObject *__pyx_t_5 = NULL;
-  PyObject *__pyx_t_6 = NULL;
-  PyObject *__pyx_t_7 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getDimensions", 0);
-
-  /* "SLEPc/DS.pyx":304
- *            Truncated length.
- *         """
- *         cdef PetscInt ival1 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival2 = 0
- *         cdef PetscInt ival3 = 0
+    /* "SLEPc/BV.pyx":693
+ *             CHKERR( MatGetLocalSize(A.mat, &n, NULL) )
+ *             CHKERR( MatGetSize(A.mat, &N, NULL) )
+ *             CHKERR( BVGetSizes(self.bv, NULL, NULL, &m) )             # <<<<<<<<<<<<<<
+ *             CHKERR( BVGetOrthogonalization(self.bv, &val1, &val2, &rval, &val3) )
+ *         if Y.bv == NULL:
  */
-  __pyx_v_ival1 = 0;
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVGetSizes(__pyx_v_self->bv, NULL, NULL, (&__pyx_v_m))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 693, __pyx_L1_error)
 
-  /* "SLEPc/DS.pyx":305
- *         """
- *         cdef PetscInt ival1 = 0
- *         cdef PetscInt ival2 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival3 = 0
- *         cdef PetscInt ival4 = 0
+    /* "SLEPc/BV.pyx":694
+ *             CHKERR( MatGetSize(A.mat, &N, NULL) )
+ *             CHKERR( BVGetSizes(self.bv, NULL, NULL, &m) )
+ *             CHKERR( BVGetOrthogonalization(self.bv, &val1, &val2, &rval, &val3) )             # <<<<<<<<<<<<<<
+ *         if Y.bv == NULL:
+ *             CHKERR( BVCreate(comm, &Y.bv) )
  */
-  __pyx_v_ival2 = 0;
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVGetOrthogonalization(__pyx_v_self->bv, (&__pyx_v_val1), (&__pyx_v_val2), (&__pyx_v_rval), (&__pyx_v_val3))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 694, __pyx_L1_error)
 
-  /* "SLEPc/DS.pyx":306
- *         cdef PetscInt ival1 = 0
- *         cdef PetscInt ival2 = 0
- *         cdef PetscInt ival3 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival4 = 0
- *         cdef PetscInt ival5 = 0
+    /* "SLEPc/BV.pyx":689
+ *         cdef PetscReal rval = PETSC_DEFAULT
+ *         if Y is None: Y = BV()
+ *         if Y.bv == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( BVGetType(self.bv, &bv_type) )
+ *             CHKERR( MatGetLocalSize(A.mat, &n, NULL) )
  */
-  __pyx_v_ival3 = 0;
+  }
 
-  /* "SLEPc/DS.pyx":307
- *         cdef PetscInt ival2 = 0
- *         cdef PetscInt ival3 = 0
- *         cdef PetscInt ival4 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival5 = 0
- *         CHKERR( DSGetDimensions(self.ds, &ival1, &ival2, &ival3, &ival4, &ival5) )
+  /* "SLEPc/BV.pyx":695
+ *             CHKERR( BVGetSizes(self.bv, NULL, NULL, &m) )
+ *             CHKERR( BVGetOrthogonalization(self.bv, &val1, &val2, &rval, &val3) )
+ *         if Y.bv == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( BVCreate(comm, &Y.bv) )
+ *             CHKERR( BVSetType(Y.bv, bv_type) )
  */
-  __pyx_v_ival4 = 0;
+  __pyx_t_2 = ((__pyx_v_Y->bv == NULL) != 0);
+  if (__pyx_t_2) {
 
-  /* "SLEPc/DS.pyx":308
- *         cdef PetscInt ival3 = 0
- *         cdef PetscInt ival4 = 0
- *         cdef PetscInt ival5 = 0             # <<<<<<<<<<<<<<
- *         CHKERR( DSGetDimensions(self.ds, &ival1, &ival2, &ival3, &ival4, &ival5) )
- *         return (toInt(ival1), toInt(ival2), toInt(ival3), toInt(ival4), toInt(ival5))
+    /* "SLEPc/BV.pyx":696
+ *             CHKERR( BVGetOrthogonalization(self.bv, &val1, &val2, &rval, &val3) )
+ *         if Y.bv == NULL:
+ *             CHKERR( BVCreate(comm, &Y.bv) )             # <<<<<<<<<<<<<<
+ *             CHKERR( BVSetType(Y.bv, bv_type) )
+ *             CHKERR( BVSetSizes(Y.bv, n, N, m) )
+ */
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVCreate(__pyx_v_comm, (&__pyx_v_Y->bv))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 696, __pyx_L1_error)
+
+    /* "SLEPc/BV.pyx":697
+ *         if Y.bv == NULL:
+ *             CHKERR( BVCreate(comm, &Y.bv) )
+ *             CHKERR( BVSetType(Y.bv, bv_type) )             # <<<<<<<<<<<<<<
+ *             CHKERR( BVSetSizes(Y.bv, n, N, m) )
+ *             CHKERR( BVSetOrthogonalization(Y.bv, val1, val2, rval, val3) )
+ */
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVSetType(__pyx_v_Y->bv, __pyx_v_bv_type)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 697, __pyx_L1_error)
+
+    /* "SLEPc/BV.pyx":698
+ *             CHKERR( BVCreate(comm, &Y.bv) )
+ *             CHKERR( BVSetType(Y.bv, bv_type) )
+ *             CHKERR( BVSetSizes(Y.bv, n, N, m) )             # <<<<<<<<<<<<<<
+ *             CHKERR( BVSetOrthogonalization(Y.bv, val1, val2, rval, val3) )
+ *         CHKERR( BVMatMultHermitianTranspose(self.bv, A.mat, Y.bv) )
+ */
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVSetSizes(__pyx_v_Y->bv, __pyx_v_n, __pyx_v_N, __pyx_v_m)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 698, __pyx_L1_error)
+
+    /* "SLEPc/BV.pyx":699
+ *             CHKERR( BVSetType(Y.bv, bv_type) )
+ *             CHKERR( BVSetSizes(Y.bv, n, N, m) )
+ *             CHKERR( BVSetOrthogonalization(Y.bv, val1, val2, rval, val3) )             # <<<<<<<<<<<<<<
+ *         CHKERR( BVMatMultHermitianTranspose(self.bv, A.mat, Y.bv) )
+ *         return Y
+ */
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVSetOrthogonalization(__pyx_v_Y->bv, __pyx_v_val1, __pyx_v_val2, __pyx_v_rval, __pyx_v_val3)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 699, __pyx_L1_error)
+
+    /* "SLEPc/BV.pyx":695
+ *             CHKERR( BVGetSizes(self.bv, NULL, NULL, &m) )
+ *             CHKERR( BVGetOrthogonalization(self.bv, &val1, &val2, &rval, &val3) )
+ *         if Y.bv == NULL:             # <<<<<<<<<<<<<<
+ *             CHKERR( BVCreate(comm, &Y.bv) )
+ *             CHKERR( BVSetType(Y.bv, bv_type) )
  */
-  __pyx_v_ival5 = 0;
+  }
 
-  /* "SLEPc/DS.pyx":309
- *         cdef PetscInt ival4 = 0
- *         cdef PetscInt ival5 = 0
- *         CHKERR( DSGetDimensions(self.ds, &ival1, &ival2, &ival3, &ival4, &ival5) )             # <<<<<<<<<<<<<<
- *         return (toInt(ival1), toInt(ival2), toInt(ival3), toInt(ival4), toInt(ival5))
+  /* "SLEPc/BV.pyx":700
+ *             CHKERR( BVSetSizes(Y.bv, n, N, m) )
+ *             CHKERR( BVSetOrthogonalization(Y.bv, val1, val2, rval, val3) )
+ *         CHKERR( BVMatMultHermitianTranspose(self.bv, A.mat, Y.bv) )             # <<<<<<<<<<<<<<
+ *         return Y
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSGetDimensions(__pyx_v_self->ds, (&__pyx_v_ival1), (&__pyx_v_ival2), (&__pyx_v_ival3), (&__pyx_v_ival4), (&__pyx_v_ival5))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVMatMultHermitianTranspose(__pyx_v_self->bv, __pyx_v_A->mat, __pyx_v_Y->bv)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 700, __pyx_L1_error)
 
-  /* "SLEPc/DS.pyx":310
- *         cdef PetscInt ival5 = 0
- *         CHKERR( DSGetDimensions(self.ds, &ival1, &ival2, &ival3, &ival4, &ival5) )
- *         return (toInt(ival1), toInt(ival2), toInt(ival3), toInt(ival4), toInt(ival5))             # <<<<<<<<<<<<<<
+  /* "SLEPc/BV.pyx":701
+ *             CHKERR( BVSetOrthogonalization(Y.bv, val1, val2, rval, val3) )
+ *         CHKERR( BVMatMultHermitianTranspose(self.bv, A.mat, Y.bv) )
+ *         return Y             # <<<<<<<<<<<<<<
  * 
- *     def setMethod(self, meth):
+ *     def multVec(self, alpha, beta, Vec y not None, q):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = PyTuple_New(5); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
-  __Pyx_GIVEREF(__pyx_t_2);
-  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_3);
-  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_4);
-  PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_4);
-  __Pyx_GIVEREF(__pyx_t_5);
-  PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_t_5);
-  __Pyx_GIVEREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_7, 4, __pyx_t_6);
-  __pyx_t_2 = 0;
-  __pyx_t_3 = 0;
-  __pyx_t_4 = 0;
-  __pyx_t_5 = 0;
-  __pyx_t_6 = 0;
-  __pyx_r = __pyx_t_7;
-  __pyx_t_7 = 0;
+  __Pyx_INCREF(((PyObject *)__pyx_v_Y));
+  __pyx_r = ((PyObject *)__pyx_v_Y);
   goto __pyx_L0;
 
-  /* "SLEPc/DS.pyx":287
- *         CHKERR( DSSetDimensions(self.ds, ival1, ival2, ival3, ival4) )
+  /* "SLEPc/BV.pyx":659
+ *         return Y
  * 
- *     def getDimensions(self):             # <<<<<<<<<<<<<<
+ *     def matMultHermitianTranspose(self, Mat A not None, BV Y=None):             # <<<<<<<<<<<<<<
  *         """
- *         Returns the current dimensions.
+ *         Computes the matrix-vector product with the conjugate transpose of a
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_XDECREF(__pyx_t_6);
-  __Pyx_XDECREF(__pyx_t_7);
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.getDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.matMultHermitianTranspose", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_Y);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/DS.pyx":312
- *         return (toInt(ival1), toInt(ival2), toInt(ival3), toInt(ival4), toInt(ival5))
+/* "SLEPc/BV.pyx":703
+ *         return Y
  * 
- *     def setMethod(self, meth):             # <<<<<<<<<<<<<<
+ *     def multVec(self, alpha, beta, Vec y not None, q):             # <<<<<<<<<<<<<<
  *         """
- *         Selects the method to be used to solve the problem.
+ *         Computes y = beta*y + alpha*X*q.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_33setMethod(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2DS_32setMethod[] = "DS.setMethod(self, meth)\n\n        Selects the method to be used to solve the problem.\n\n        Parameters\n        ----------\n        meth: int\n              An index indentifying the method.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_33setMethod(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_meth = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_65multVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_64multVec[] = "BV.multVec(self, alpha, beta, Vec y, q)\n\n        Computes y = beta*y + alpha*X*q.\n\n        Parameter\n        ---------\n        alpha: scalar\n        beta: scalar\n        q: scalar or sequence of scalars\n\n        Return\n        ------\n        y: Vec\n            The result.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_65multVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_alpha = 0;
+  PyObject *__pyx_v_beta = 0;
+  struct PyPetscVecObject *__pyx_v_y = 0;
+  PyObject *__pyx_v_q = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setMethod (wrapper)", 0);
+  __Pyx_RefNannySetupContext("multVec (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_meth,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_alpha,&__pyx_n_s_beta,&__pyx_n_s_y,&__pyx_n_s_q,0};
+    PyObject* values[4] = {0,0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -12884,164 +14787,340 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_33setMethod(PyObject *__pyx_v_sel
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_meth)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_beta)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("multVec", 1, 4, 4, 1); __PYX_ERR(3, 703, __pyx_L3_error)
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("multVec", 1, 4, 4, 2); __PYX_ERR(3, 703, __pyx_L3_error)
+        }
+        case  3:
+        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_q)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("multVec", 1, 4, 4, 3); __PYX_ERR(3, 703, __pyx_L3_error)
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMethod") < 0)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "multVec") < 0)) __PYX_ERR(3, 703, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
     }
-    __pyx_v_meth = values[0];
+    __pyx_v_alpha = values[0];
+    __pyx_v_beta = values[1];
+    __pyx_v_y = ((struct PyPetscVecObject *)values[2]);
+    __pyx_v_q = values[3];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMethod", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[9]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("multVec", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 703, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setMethod", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.multVec", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_32setMethod(((struct PySlepcDSObject *)__pyx_v_self), __pyx_v_meth);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(3, 703, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_64multVec(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_alpha, __pyx_v_beta, __pyx_v_y, __pyx_v_q);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_32setMethod(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_meth) {
-  PetscInt __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_64multVec(struct PySlepcBVObject *__pyx_v_self, PyObject *__pyx_v_alpha, PyObject *__pyx_v_beta, struct PyPetscVecObject *__pyx_v_y, PyObject *__pyx_v_q) {
+  PetscScalar __pyx_v_sval1;
+  PetscScalar __pyx_v_sval2;
+  PetscInt __pyx_v_nq;
+  PetscScalar *__pyx_v_qval;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
+  PetscInt __pyx_v_l;
+  PetscInt __pyx_v_k;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscInt __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setMethod", 0);
+  PetscScalar __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  __Pyx_RefNannySetupContext("multVec", 0);
 
-  /* "SLEPc/DS.pyx":321
- *               An index indentifying the method.
+  /* "SLEPc/BV.pyx":718
+ *             The result.
  *         """
- *         cdef PetscInt val = meth             # <<<<<<<<<<<<<<
- *         CHKERR( DSSetMethod(self.ds, val) )
- * 
+ *         cdef PetscScalar sval1 = asScalar(alpha)             # <<<<<<<<<<<<<<
+ *         cdef PetscScalar sval2 = asScalar(beta)
+ *         cdef PetscInt nq = 0
  */
-  __pyx_t_1 = __Pyx_PyInt_As_PetscInt(__pyx_v_meth); if (unlikely((__pyx_t_1 == (PetscInt)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_val = __pyx_t_1;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) __PYX_ERR(3, 718, __pyx_L1_error)
+  __pyx_v_sval1 = __pyx_t_1;
 
-  /* "SLEPc/DS.pyx":322
+  /* "SLEPc/BV.pyx":719
  *         """
- *         cdef PetscInt val = meth
- *         CHKERR( DSSetMethod(self.ds, val) )             # <<<<<<<<<<<<<<
+ *         cdef PetscScalar sval1 = asScalar(alpha)
+ *         cdef PetscScalar sval2 = asScalar(beta)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt nq = 0
+ *         cdef PetscScalar* qval = NULL
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_asScalar(__pyx_v_beta); if (unlikely(PyErr_Occurred())) __PYX_ERR(3, 719, __pyx_L1_error)
+  __pyx_v_sval2 = __pyx_t_1;
+
+  /* "SLEPc/BV.pyx":720
+ *         cdef PetscScalar sval1 = asScalar(alpha)
+ *         cdef PetscScalar sval2 = asScalar(beta)
+ *         cdef PetscInt nq = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscScalar* qval = NULL
+ *         cdef tmp = iarray_s(q, &nq, &qval)
+ */
+  __pyx_v_nq = 0;
+
+  /* "SLEPc/BV.pyx":721
+ *         cdef PetscScalar sval2 = asScalar(beta)
+ *         cdef PetscInt nq = 0
+ *         cdef PetscScalar* qval = NULL             # <<<<<<<<<<<<<<
+ *         cdef tmp = iarray_s(q, &nq, &qval)
+ *         cdef PetscInt l=0, k=0
+ */
+  __pyx_v_qval = NULL;
+
+  /* "SLEPc/BV.pyx":722
+ *         cdef PetscInt nq = 0
+ *         cdef PetscScalar* qval = NULL
+ *         cdef tmp = iarray_s(q, &nq, &qval)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt l=0, k=0
+ *         CHKERR( BVGetActiveColumns(self.bv, &l, &k) )
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_iarray_s(__pyx_v_q, (&__pyx_v_nq), (&__pyx_v_qval)); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 722, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_v_tmp = __pyx_t_2;
+  __pyx_t_2 = 0;
+
+  /* "SLEPc/BV.pyx":723
+ *         cdef PetscScalar* qval = NULL
+ *         cdef tmp = iarray_s(q, &nq, &qval)
+ *         cdef PetscInt l=0, k=0             # <<<<<<<<<<<<<<
+ *         CHKERR( BVGetActiveColumns(self.bv, &l, &k) )
+ *         assert nq == k-l
+ */
+  __pyx_v_l = 0;
+  __pyx_v_k = 0;
+
+  /* "SLEPc/BV.pyx":724
+ *         cdef tmp = iarray_s(q, &nq, &qval)
+ *         cdef PetscInt l=0, k=0
+ *         CHKERR( BVGetActiveColumns(self.bv, &l, &k) )             # <<<<<<<<<<<<<<
+ *         assert nq == k-l
+ *         CHKERR( BVMultVec(self.bv, sval1, sval2, y.vec, qval) )
+ */
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVGetActiveColumns(__pyx_v_self->bv, (&__pyx_v_l), (&__pyx_v_k))); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(3, 724, __pyx_L1_error)
+
+  /* "SLEPc/BV.pyx":725
+ *         cdef PetscInt l=0, k=0
+ *         CHKERR( BVGetActiveColumns(self.bv, &l, &k) )
+ *         assert nq == k-l             # <<<<<<<<<<<<<<
+ *         CHKERR( BVMultVec(self.bv, sval1, sval2, y.vec, qval) )
  * 
- *     def getMethod(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSSetMethod(__pyx_v_self->ds, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!Py_OptimizeFlag)) {
+    if (unlikely(!((__pyx_v_nq == (__pyx_v_k - __pyx_v_l)) != 0))) {
+      PyErr_SetNone(PyExc_AssertionError);
+      __PYX_ERR(3, 725, __pyx_L1_error)
+    }
+  }
+  #endif
+
+  /* "SLEPc/BV.pyx":726
+ *         CHKERR( BVGetActiveColumns(self.bv, &l, &k) )
+ *         assert nq == k-l
+ *         CHKERR( BVMultVec(self.bv, sval1, sval2, y.vec, qval) )             # <<<<<<<<<<<<<<
+ * 
+ *     def normColumn(self, int j, norm_type=None):
+ */
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVMultVec(__pyx_v_self->bv, __pyx_v_sval1, __pyx_v_sval2, __pyx_v_y->vec, __pyx_v_qval)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(3, 726, __pyx_L1_error)
 
-  /* "SLEPc/DS.pyx":312
- *         return (toInt(ival1), toInt(ival2), toInt(ival3), toInt(ival4), toInt(ival5))
+  /* "SLEPc/BV.pyx":703
+ *         return Y
  * 
- *     def setMethod(self, meth):             # <<<<<<<<<<<<<<
+ *     def multVec(self, alpha, beta, Vec y not None, q):             # <<<<<<<<<<<<<<
  *         """
- *         Selects the method to be used to solve the problem.
+ *         Computes y = beta*y + alpha*X*q.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setMethod", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.multVec", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_tmp);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/DS.pyx":324
- *         CHKERR( DSSetMethod(self.ds, val) )
+/* "SLEPc/BV.pyx":728
+ *         CHKERR( BVMultVec(self.bv, sval1, sval2, y.vec, qval) )
  * 
- *     def getMethod(self):             # <<<<<<<<<<<<<<
+ *     def normColumn(self, int j, norm_type=None):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the method currently used in the DS.
+ *         Computes the matrix norm of the BV.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_35getMethod(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2DS_34getMethod[] = "DS.getMethod(self)\n\n        Gets the method currently used in the DS.\n\n        Returns\n        -------\n        meth: int\n              Identifier of the method.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_35getMethod(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_67normColumn(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_66normColumn[] = "BV.normColumn(self, int j, norm_type=None)\n\n        Computes the matrix norm of the BV.\n\n        Parameters\n        ----------\n        j: int\n            Index of column.\n        norm_type: PETSc.NormType (int)\n            The norm type.\n\n        Returns\n        -------\n        norm: float\n\n        Notes\n        -----\n        The norm of V[j] is computed (NORM_1, NORM_2, or NORM_INFINITY).\n\n        If a non-s [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_67normColumn(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_j;
+  PyObject *__pyx_v_norm_type = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getMethod (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getMethod", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getMethod", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_34getMethod(((struct PySlepcDSObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("normColumn (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_j,&__pyx_n_s_norm_type,0};
+    PyObject* values[2] = {0,0};
+    values[1] = ((PyObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_j)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_norm_type);
+          if (value) { values[1] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "normColumn") < 0)) __PYX_ERR(3, 728, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_j = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_j == (int)-1) && PyErr_Occurred())) __PYX_ERR(3, 728, __pyx_L3_error)
+    __pyx_v_norm_type = values[1];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("normColumn", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 728, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.normColumn", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_66normColumn(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_j, __pyx_v_norm_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_34getMethod(struct PySlepcDSObject *__pyx_v_self) {
-  PetscInt __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_66normColumn(struct PySlepcBVObject *__pyx_v_self, int __pyx_v_j, PyObject *__pyx_v_norm_type) {
+  NormType __pyx_v_ntype;
+  PetscReal __pyx_v_norm;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getMethod", 0);
+  int __pyx_t_2;
+  NormType __pyx_t_3;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("normColumn", 0);
 
-  /* "SLEPc/DS.pyx":333
- *               Identifier of the method.
+  /* "SLEPc/BV.pyx":751
+ *         product matrix (argument 'type' is ignored).
  *         """
- *         cdef PetscInt val = 0             # <<<<<<<<<<<<<<
- *         CHKERR( DSGetMethod(self.ds, &val) )
- *         return val
+ *         cdef PetscNormType ntype = PETSC_NORM_2             # <<<<<<<<<<<<<<
+ *         if norm_type is not None: ntype = norm_type
+ *         cdef PetscReal norm = 0
  */
-  __pyx_v_val = 0;
+  __pyx_v_ntype = NORM_2;
 
-  /* "SLEPc/DS.pyx":334
+  /* "SLEPc/BV.pyx":752
  *         """
- *         cdef PetscInt val = 0
- *         CHKERR( DSGetMethod(self.ds, &val) )             # <<<<<<<<<<<<<<
- *         return val
+ *         cdef PetscNormType ntype = PETSC_NORM_2
+ *         if norm_type is not None: ntype = norm_type             # <<<<<<<<<<<<<<
+ *         cdef PetscReal norm = 0
+ *         CHKERR( BVNormColumn(self.bv, j, ntype, &norm) )
+ */
+  __pyx_t_1 = (__pyx_v_norm_type != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = ((NormType)__Pyx_PyInt_As_NormType(__pyx_v_norm_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(3, 752, __pyx_L1_error)
+    __pyx_v_ntype = __pyx_t_3;
+  }
+
+  /* "SLEPc/BV.pyx":753
+ *         cdef PetscNormType ntype = PETSC_NORM_2
+ *         if norm_type is not None: ntype = norm_type
+ *         cdef PetscReal norm = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( BVNormColumn(self.bv, j, ntype, &norm) )
+ *         return toReal(norm)
+ */
+  __pyx_v_norm = 0.0;
+
+  /* "SLEPc/BV.pyx":754
+ *         if norm_type is not None: ntype = norm_type
+ *         cdef PetscReal norm = 0
+ *         CHKERR( BVNormColumn(self.bv, j, ntype, &norm) )             # <<<<<<<<<<<<<<
+ *         return toReal(norm)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSGetMethod(__pyx_v_self->ds, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVNormColumn(__pyx_v_self->bv, __pyx_v_j, __pyx_v_ntype, (&__pyx_v_norm))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 754, __pyx_L1_error)
 
-  /* "SLEPc/DS.pyx":335
- *         cdef PetscInt val = 0
- *         CHKERR( DSGetMethod(self.ds, &val) )
- *         return val             # <<<<<<<<<<<<<<
+  /* "SLEPc/BV.pyx":755
+ *         cdef PetscReal norm = 0
+ *         CHKERR( BVNormColumn(self.bv, j, ntype, &norm) )
+ *         return toReal(norm)             # <<<<<<<<<<<<<<
  * 
- *     def setCompact(self, comp):
+ *     def norm(self, norm_type=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscInt(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_norm); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 755, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_r = __pyx_t_5;
+  __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/DS.pyx":324
- *         CHKERR( DSSetMethod(self.ds, val) )
+  /* "SLEPc/BV.pyx":728
+ *         CHKERR( BVMultVec(self.bv, sval1, sval2, y.vec, qval) )
  * 
- *     def getMethod(self):             # <<<<<<<<<<<<<<
+ *     def normColumn(self, int j, norm_type=None):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the method currently used in the DS.
+ *         Computes the matrix norm of the BV.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.getMethod", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.normColumn", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -13049,28 +15128,26 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_34getMethod(struct PySlepcDSObjec
   return __pyx_r;
 }
 
-/* "SLEPc/DS.pyx":337
- *         return val
+/* "SLEPc/BV.pyx":757
+ *         return toReal(norm)
  * 
- *     def setCompact(self, comp):             # <<<<<<<<<<<<<<
+ *     def norm(self, norm_type=None):             # <<<<<<<<<<<<<<
  *         """
- *         Switch to compact storage of matrices.
+ *         Computes the matrix norm of the BV.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_37setCompact(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2DS_36setCompact[] = "DS.setCompact(self, comp)\n\n        Switch to compact storage of matrices.\n\n        Parameters\n        ----------\n        comp: boolean\n              A boolean flag.\n\n        Notes\n        -----\n        Compact storage is used in some `DS` types such as\n        `DS.Type.HEP` when the matrix is tridiagonal. This flag\n        can be used to indicate whether the user provides the\n        matrix entries via the compact [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_37setCompact(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_comp = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_69norm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_68norm[] = "BV.norm(self, norm_type=None)\n\n        Computes the matrix norm of the BV.\n\n        Parameters\n        ----------\n        norm_type: PETSC.NormType enumerate\n            The norm type.\n\n        Returns\n        -------\n        norm: float\n\n        Notes\n        -----\n        All active columns (except the leading ones) are considered as a\n        matrix. The allowed norms are NORM_1, NORM_FROBENIUS, and\n        NORM_I [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_69norm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_norm_type = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setCompact (wrapper)", 0);
+  __Pyx_RefNannySetupContext("norm (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comp,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_norm_type,0};
     PyObject* values[1] = {0};
+    values[0] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
@@ -13082,90 +15159,117 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_37setCompact(PyObject *__pyx_v_se
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comp)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_norm_type);
+          if (value) { values[0] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCompact") < 0)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "norm") < 0)) __PYX_ERR(3, 757, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
     } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
     }
-    __pyx_v_comp = values[0];
+    __pyx_v_norm_type = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setCompact", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[9]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("norm", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 757, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setCompact", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.norm", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_36setCompact(((struct PySlepcDSObject *)__pyx_v_self), __pyx_v_comp);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_68norm(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_norm_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_36setCompact(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_comp) {
-  PetscBool __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_68norm(struct PySlepcBVObject *__pyx_v_self, PyObject *__pyx_v_norm_type) {
+  NormType __pyx_v_ntype;
+  PetscReal __pyx_v_norm;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setCompact", 0);
+  NormType __pyx_t_3;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("norm", 0);
 
-  /* "SLEPc/DS.pyx":356
- *         The default is ``False``.
+  /* "SLEPc/BV.pyx":779
+ *         with BVSetMatrix().
  *         """
- *         cdef PetscBool val = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         if comp: val = PETSC_TRUE
- *         CHKERR( DSSetCompact(self.ds, val) )
+ *         cdef PetscNormType ntype = PETSC_NORM_FROBENIUS             # <<<<<<<<<<<<<<
+ *         if norm_type is not None: ntype = norm_type
+ *         cdef PetscReal norm = 0
  */
-  __pyx_v_val = PETSC_FALSE;
+  __pyx_v_ntype = NORM_FROBENIUS;
 
-  /* "SLEPc/DS.pyx":357
+  /* "SLEPc/BV.pyx":780
  *         """
- *         cdef PetscBool val = PETSC_FALSE
- *         if comp: val = PETSC_TRUE             # <<<<<<<<<<<<<<
- *         CHKERR( DSSetCompact(self.ds, val) )
- * 
+ *         cdef PetscNormType ntype = PETSC_NORM_FROBENIUS
+ *         if norm_type is not None: ntype = norm_type             # <<<<<<<<<<<<<<
+ *         cdef PetscReal norm = 0
+ *         CHKERR( BVNorm(self.bv, ntype, &norm) )
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_comp); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__pyx_t_1) {
-    __pyx_v_val = PETSC_TRUE;
-    goto __pyx_L3;
+  __pyx_t_1 = (__pyx_v_norm_type != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = ((NormType)__Pyx_PyInt_As_NormType(__pyx_v_norm_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(3, 780, __pyx_L1_error)
+    __pyx_v_ntype = __pyx_t_3;
   }
-  __pyx_L3:;
 
-  /* "SLEPc/DS.pyx":358
- *         cdef PetscBool val = PETSC_FALSE
- *         if comp: val = PETSC_TRUE
- *         CHKERR( DSSetCompact(self.ds, val) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/BV.pyx":781
+ *         cdef PetscNormType ntype = PETSC_NORM_FROBENIUS
+ *         if norm_type is not None: ntype = norm_type
+ *         cdef PetscReal norm = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( BVNorm(self.bv, ntype, &norm) )
+ *         return toReal(norm)
+ */
+  __pyx_v_norm = 0.0;
+
+  /* "SLEPc/BV.pyx":782
+ *         if norm_type is not None: ntype = norm_type
+ *         cdef PetscReal norm = 0
+ *         CHKERR( BVNorm(self.bv, ntype, &norm) )             # <<<<<<<<<<<<<<
+ *         return toReal(norm)
  * 
- *     def getCompact(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSSetCompact(__pyx_v_self->ds, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVNorm(__pyx_v_self->bv, __pyx_v_ntype, (&__pyx_v_norm))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(3, 782, __pyx_L1_error)
 
-  /* "SLEPc/DS.pyx":337
- *         return val
+  /* "SLEPc/BV.pyx":783
+ *         cdef PetscReal norm = 0
+ *         CHKERR( BVNorm(self.bv, ntype, &norm) )
+ *         return toReal(norm)             # <<<<<<<<<<<<<<
  * 
- *     def setCompact(self, comp):             # <<<<<<<<<<<<<<
+ *     def setRandom(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_norm); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 783, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_r = __pyx_t_5;
+  __pyx_t_5 = 0;
+  goto __pyx_L0;
+
+  /* "SLEPc/BV.pyx":757
+ *         return toReal(norm)
+ * 
+ *     def norm(self, norm_type=None):             # <<<<<<<<<<<<<<
  *         """
- *         Switch to compact storage of matrices.
+ *         Computes the matrix norm of the BV.
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setCompact", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.norm", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -13173,86 +15277,59 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_36setCompact(struct PySlepcDSObje
   return __pyx_r;
 }
 
-/* "SLEPc/DS.pyx":360
- *         CHKERR( DSSetCompact(self.ds, val) )
+/* "SLEPc/BV.pyx":785
+ *         return toReal(norm)
  * 
- *     def getCompact(self):             # <<<<<<<<<<<<<<
+ *     def setRandom(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the compact storage flag.
+ *         Set the active columns of BV to random numbers.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_39getCompact(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2DS_38getCompact[] = "DS.getCompact(self)\n\n        Gets the compact storage flag.\n\n        Returns\n        -------\n        comp: boolean\n              The flag.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_39getCompact(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_71setRandom(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_70setRandom[] = "BV.setRandom(self)\n\n        Set the active columns of BV to random numbers.\n\n        Notes\n        -----\n        All active columns (except the leading ones) are modified.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_71setRandom(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getCompact (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setRandom (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getCompact", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getCompact", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_38getCompact(((struct PySlepcDSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("setRandom", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setRandom", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_70setRandom(((struct PySlepcBVObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_38getCompact(struct PySlepcDSObject *__pyx_v_self) {
-  PetscBool __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_70setRandom(struct PySlepcBVObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getCompact", 0);
+  __Pyx_RefNannySetupContext("setRandom", 0);
 
-  /* "SLEPc/DS.pyx":369
- *               The flag.
- *         """
- *         cdef PetscBool val = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( DSGetCompact(self.ds, &val) )
- *         return val
- */
-  __pyx_v_val = PETSC_FALSE;
-
-  /* "SLEPc/DS.pyx":370
+  /* "SLEPc/BV.pyx":793
+ *         All active columns (except the leading ones) are modified.
  *         """
- *         cdef PetscBool val = PETSC_FALSE
- *         CHKERR( DSGetCompact(self.ds, &val) )             # <<<<<<<<<<<<<<
- *         return val
- * 
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSGetCompact(__pyx_v_self->ds, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/DS.pyx":371
- *         cdef PetscBool val = PETSC_FALSE
- *         CHKERR( DSGetCompact(self.ds, &val) )
- *         return val             # <<<<<<<<<<<<<<
+ *         CHKERR( BVSetRandom(self.bv) )             # <<<<<<<<<<<<<<
  * 
- *     def setExtraRow(self, ext):
+ *     def orthogonalizeVec(self, Vec v not None):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVSetRandom(__pyx_v_self->bv)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 793, __pyx_L1_error)
 
-  /* "SLEPc/DS.pyx":360
- *         CHKERR( DSSetCompact(self.ds, val) )
+  /* "SLEPc/BV.pyx":785
+ *         return toReal(norm)
  * 
- *     def getCompact(self):             # <<<<<<<<<<<<<<
+ *     def setRandom(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the compact storage flag.
+ *         Set the active columns of BV to random numbers.
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.getCompact", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.setRandom", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -13260,27 +15337,24 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_38getCompact(struct PySlepcDSObje
   return __pyx_r;
 }
 
-/* "SLEPc/DS.pyx":373
- *         return val
+/* "SLEPc/BV.pyx":795
+ *         CHKERR( BVSetRandom(self.bv) )
  * 
- *     def setExtraRow(self, ext):             # <<<<<<<<<<<<<<
+ *     def orthogonalizeVec(self, Vec v not None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets a flag to indicate that the matrix has one extra row.
+ *         Orthogonalize a vector with respect to a set of vectors.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_41setExtraRow(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2DS_40setExtraRow[] = "DS.setExtraRow(self, ext)\n\n        Sets a flag to indicate that the matrix has one extra row.\n\n        Parameters\n        ----------\n        ext: boolean\n             A boolean flag.\n\n        Notes\n        -----\n        In Krylov methods it is useful that the matrix representing\n        the direct solver has one extra row, i.e., has dimension (n+1)\n        x n. If this flag is activated, all transformations applie [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_41setExtraRow(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_ext = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_73orthogonalizeVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_72orthogonalizeVec[] = "BV.orthogonalizeVec(self, Vec v)\n\n        Orthogonalize a vector with respect to a set of vectors.\n\n        Parameters\n        ----------\n        v:  Vec\n            Vector to be orthogonalized, modified on return.\n\n        Returns\n        -------\n        norm: float\n            The norm of the resulting vector.\n        lindep: boolean\n            Flag indicating that refinement did not improve the\n         [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_73orthogonalizeVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscVecObject *__pyx_v_v = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setExtraRow (wrapper)", 0);
+  __Pyx_RefNannySetupContext("orthogonalizeVec (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ext,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_v,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -13293,177 +15367,115 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_41setExtraRow(PyObject *__pyx_v_s
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ext)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_v)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setExtraRow") < 0)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "orthogonalizeVec") < 0)) __PYX_ERR(3, 795, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_ext = values[0];
+    __pyx_v_v = ((struct PyPetscVecObject *)values[0]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setExtraRow", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[9]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("orthogonalizeVec", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 795, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setExtraRow", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.orthogonalizeVec", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_40setExtraRow(((struct PySlepcDSObject *)__pyx_v_self), __pyx_v_ext);
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_40setExtraRow(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_ext) {
-  PetscBool __pyx_v_val;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setExtraRow", 0);
-
-  /* "SLEPc/DS.pyx":393
- *         The default is ``False``.
- *         """
- *         cdef PetscBool val = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         if ext: val = PETSC_TRUE
- *         CHKERR( DSSetExtraRow(self.ds, val) )
- */
-  __pyx_v_val = PETSC_FALSE;
-
-  /* "SLEPc/DS.pyx":394
- *         """
- *         cdef PetscBool val = PETSC_FALSE
- *         if ext: val = PETSC_TRUE             # <<<<<<<<<<<<<<
- *         CHKERR( DSSetExtraRow(self.ds, val) )
- * 
- */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_ext); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__pyx_t_1) {
-    __pyx_v_val = PETSC_TRUE;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "SLEPc/DS.pyx":395
- *         cdef PetscBool val = PETSC_FALSE
- *         if ext: val = PETSC_TRUE
- *         CHKERR( DSSetExtraRow(self.ds, val) )             # <<<<<<<<<<<<<<
- * 
- *     def getExtraRow(self):
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSSetExtraRow(__pyx_v_self->ds, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/DS.pyx":373
- *         return val
- * 
- *     def setExtraRow(self, ext):             # <<<<<<<<<<<<<<
- *         """
- *         Sets a flag to indicate that the matrix has one extra row.
- */
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "v", 0))) __PYX_ERR(3, 795, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_72orthogonalizeVec(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_v);
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setExtraRow", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "SLEPc/DS.pyx":397
- *         CHKERR( DSSetExtraRow(self.ds, val) )
- * 
- *     def getExtraRow(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the extra row flag.
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_43getExtraRow(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2DS_42getExtraRow[] = "DS.getExtraRow(self)\n\n        Gets the extra row flag.\n\n        Returns\n        -------\n        comp: boolean\n              The flag.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_43getExtraRow(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getExtraRow (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getExtraRow", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getExtraRow", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_42getExtraRow(((struct PySlepcDSObject *)__pyx_v_self));
-
-  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_42getExtraRow(struct PySlepcDSObject *__pyx_v_self) {
-  PetscBool __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_72orthogonalizeVec(struct PySlepcBVObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_v) {
+  PetscReal __pyx_v_norm;
+  PetscBool __pyx_v_ldep;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getExtraRow", 0);
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("orthogonalizeVec", 0);
 
-  /* "SLEPc/DS.pyx":406
- *               The flag.
+  /* "SLEPc/BV.pyx":820
+ *         This routine does not normalize the resulting vector.
  *         """
- *         cdef PetscBool val = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( DSGetExtraRow(self.ds, &val) )
- *         return val
+ *         cdef PetscReal norm = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscBool ldep = PETSC_FALSE
+ *         CHKERR( BVOrthogonalizeVec(self.bv, v.vec, NULL, &norm, &ldep) )
  */
-  __pyx_v_val = PETSC_FALSE;
+  __pyx_v_norm = 0.0;
 
-  /* "SLEPc/DS.pyx":407
+  /* "SLEPc/BV.pyx":821
  *         """
- *         cdef PetscBool val = PETSC_FALSE
- *         CHKERR( DSGetExtraRow(self.ds, &val) )             # <<<<<<<<<<<<<<
- *         return val
+ *         cdef PetscReal norm = 0
+ *         cdef PetscBool ldep = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( BVOrthogonalizeVec(self.bv, v.vec, NULL, &norm, &ldep) )
+ *         return (toReal(norm), <bint>ldep)
+ */
+  __pyx_v_ldep = PETSC_FALSE;
+
+  /* "SLEPc/BV.pyx":822
+ *         cdef PetscReal norm = 0
+ *         cdef PetscBool ldep = PETSC_FALSE
+ *         CHKERR( BVOrthogonalizeVec(self.bv, v.vec, NULL, &norm, &ldep) )             # <<<<<<<<<<<<<<
+ *         return (toReal(norm), <bint>ldep)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSGetExtraRow(__pyx_v_self->ds, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVOrthogonalizeVec(__pyx_v_self->bv, __pyx_v_v->vec, NULL, (&__pyx_v_norm), (&__pyx_v_ldep))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(3, 822, __pyx_L1_error)
 
-  /* "SLEPc/DS.pyx":408
- *         cdef PetscBool val = PETSC_FALSE
- *         CHKERR( DSGetExtraRow(self.ds, &val) )
- *         return val             # <<<<<<<<<<<<<<
+  /* "SLEPc/BV.pyx":823
+ *         cdef PetscBool ldep = PETSC_FALSE
+ *         CHKERR( BVOrthogonalizeVec(self.bv, v.vec, NULL, &norm, &ldep) )
+ *         return (toReal(norm), <bint>ldep)             # <<<<<<<<<<<<<<
  * 
- *     def setRefined(self, ref):
+ *     def orthogonalize(self, Mat R=None, **kargs):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_norm); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 823, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
+  __pyx_t_3 = __Pyx_PyInt_From_PetscBool(__pyx_v_ldep); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 823, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 823, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
   __pyx_t_2 = 0;
+  __pyx_t_3 = 0;
+  __pyx_r = __pyx_t_4;
+  __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/DS.pyx":397
- *         CHKERR( DSSetExtraRow(self.ds, val) )
+  /* "SLEPc/BV.pyx":795
+ *         CHKERR( BVSetRandom(self.bv) )
  * 
- *     def getExtraRow(self):             # <<<<<<<<<<<<<<
+ *     def orthogonalizeVec(self, Vec v not None):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the extra row flag.
+ *         Orthogonalize a vector with respect to a set of vectors.
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.getExtraRow", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.orthogonalizeVec", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -13471,28 +15483,29 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_42getExtraRow(struct PySlepcDSObj
   return __pyx_r;
 }
 
-/* "SLEPc/DS.pyx":410
- *         return val
+/* "SLEPc/BV.pyx":825
+ *         return (toReal(norm), <bint>ldep)
  * 
- *     def setRefined(self, ref):             # <<<<<<<<<<<<<<
+ *     def orthogonalize(self, Mat R=None, **kargs):             # <<<<<<<<<<<<<<
  *         """
- *         Sets a flag to indicate that refined vectors must be computed.
+ *         Orthogonalize all columns (except leading ones),
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_45setRefined(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2DS_44setRefined[] = "DS.setRefined(self, ref)\n\n        Sets a flag to indicate that refined vectors must be computed.\n\n        Parameters\n        ----------\n        ref: boolean\n             A boolean flag.\n\n        Notes\n        -----\n        Normally the vectors returned in `DS.MatType.X` are eigenvectors\n        of the projected matrix. With this flag activated, `vectors()`\n        will return the right singular vector of the smalle [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_45setRefined(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_ref = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_75orthogonalize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2BV_74orthogonalize[] = "BV.orthogonalize(self, Mat R=None, **kargs)\n\n        Orthogonalize all columns (except leading ones),\n        that is, compute the QR decomposition.\n\n        Parameters\n        ----------\n        R: Mat or None\n            A sequential dense matrix.\n\n        Notes\n        -----\n        The output satisfies ``V0 = V*R`` (where V0 represent the input V) and ``V'*V = I``.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2BV_75orthogonalize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscMatObject *__pyx_v_R = 0;
+  PyObject *__pyx_v_kargs = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setRefined (wrapper)", 0);
+  __Pyx_RefNannySetupContext("orthogonalize (wrapper)", 0);
+  __pyx_v_kargs = PyDict_New(); if (unlikely(!__pyx_v_kargs)) return NULL;
+  __Pyx_GOTREF(__pyx_v_kargs);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ref,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_R,0};
     PyObject* values[1] = {0};
+    values[0] = (PyObject *)((struct PyPetscMatObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
@@ -13504,90 +15517,112 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_45setRefined(PyObject *__pyx_v_se
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ref)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_R);
+          if (value) { values[0] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRefined") < 0)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kargs, values, pos_args, "orthogonalize") < 0)) __PYX_ERR(3, 825, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
     } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
     }
-    __pyx_v_ref = values[0];
+    __pyx_v_R = ((struct PyPetscMatObject *)values[0]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setRefined", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[9]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("orthogonalize", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 825, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setRefined", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_DECREF(__pyx_v_kargs); __pyx_v_kargs = 0;
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.orthogonalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_44setRefined(((struct PySlepcDSObject *)__pyx_v_self), __pyx_v_ref);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_R), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "R", 0))) __PYX_ERR(3, 825, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2BV_74orthogonalize(((struct PySlepcBVObject *)__pyx_v_self), __pyx_v_R, __pyx_v_kargs);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_44setRefined(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_ref) {
-  PetscBool __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2BV_74orthogonalize(struct PySlepcBVObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_R, PyObject *__pyx_v_kargs) {
+  Mat __pyx_v_Rmat;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setRefined", 0);
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  void *__pyx_t_4;
+  int __pyx_t_5;
+  __Pyx_RefNannySetupContext("orthogonalize", 0);
 
-  /* "SLEPc/DS.pyx":430
- *         The default is ``False``.
+  /* "SLEPc/BV.pyx":839
+ *         The output satisfies ``V0 = V*R`` (where V0 represent the input V) and ``V'*V = I``.
  *         """
- *         cdef PetscBool val = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         if ref: val = PETSC_TRUE
- *         CHKERR( DSSetRefined(self.ds, val) )
+ *         if kargs: self.setOrthogonalization(**kargs)             # <<<<<<<<<<<<<<
+ *         cdef PetscMat Rmat = NULL if R is None else R.mat
+ *         CHKERR( BVOrthogonalize(self.bv, Rmat) )
  */
-  __pyx_v_val = PETSC_FALSE;
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_kargs); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(3, 839, __pyx_L1_error)
+  if (__pyx_t_1) {
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setOrthogonalization); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 839, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_v_kargs); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 839, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  }
 
-  /* "SLEPc/DS.pyx":431
+  /* "SLEPc/BV.pyx":840
  *         """
- *         cdef PetscBool val = PETSC_FALSE
- *         if ref: val = PETSC_TRUE             # <<<<<<<<<<<<<<
- *         CHKERR( DSSetRefined(self.ds, val) )
+ *         if kargs: self.setOrthogonalization(**kargs)
+ *         cdef PetscMat Rmat = NULL if R is None else R.mat             # <<<<<<<<<<<<<<
+ *         CHKERR( BVOrthogonalize(self.bv, Rmat) )
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_ref); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__pyx_t_1) {
-    __pyx_v_val = PETSC_TRUE;
-    goto __pyx_L3;
+  __pyx_t_1 = (((PyObject *)__pyx_v_R) == Py_None);
+  if ((__pyx_t_1 != 0)) {
+    __pyx_t_4 = NULL;
+  } else {
+    __pyx_t_4 = __pyx_v_R->mat;
   }
-  __pyx_L3:;
+  __pyx_v_Rmat = __pyx_t_4;
 
-  /* "SLEPc/DS.pyx":432
- *         cdef PetscBool val = PETSC_FALSE
- *         if ref: val = PETSC_TRUE
- *         CHKERR( DSSetRefined(self.ds, val) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/BV.pyx":841
+ *         if kargs: self.setOrthogonalization(**kargs)
+ *         cdef PetscMat Rmat = NULL if R is None else R.mat
+ *         CHKERR( BVOrthogonalize(self.bv, Rmat) )             # <<<<<<<<<<<<<<
  * 
- *     def getRefined(self):
+ * # -----------------------------------------------------------------------------
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSSetRefined(__pyx_v_self->ds, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_CHKERR(BVOrthogonalize(__pyx_v_self->bv, __pyx_v_Rmat)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(3, 841, __pyx_L1_error)
 
-  /* "SLEPc/DS.pyx":410
- *         return val
+  /* "SLEPc/BV.pyx":825
+ *         return (toReal(norm), <bint>ldep)
  * 
- *     def setRefined(self, ref):             # <<<<<<<<<<<<<<
+ *     def orthogonalize(self, Mat R=None, **kargs):             # <<<<<<<<<<<<<<
  *         """
- *         Sets a flag to indicate that refined vectors must be computed.
+ *         Orthogonalize all columns (except leading ones),
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setRefined", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.BV.orthogonalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -13595,115 +15630,87 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_44setRefined(struct PySlepcDSObje
   return __pyx_r;
 }
 
-/* "SLEPc/DS.pyx":434
- *         CHKERR( DSSetRefined(self.ds, val) )
+/* "SLEPc/DS.pyx":72
+ *     MatType   = DSMatType
  * 
- *     def getRefined(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the refined vectors flag.
+ *     def __cinit__(self):             # <<<<<<<<<<<<<<
+ *         self.obj = <PetscObject*> &self.ds
+ *         self.ds = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_47getRefined(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2DS_46getRefined[] = "DS.getRefined(self)\n\n        Gets the refined vectors flag.\n\n        Returns\n        -------\n        comp: boolean\n              The flag.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_47getRefined(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
+static int __pyx_pw_8slepc4py_5SLEPc_2DS_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pw_8slepc4py_5SLEPc_2DS_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getRefined (wrapper)", 0);
+  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getRefined", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getRefined", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_46getRefined(((struct PySlepcDSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS___cinit__(((struct PySlepcDSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_46getRefined(struct PySlepcDSObject *__pyx_v_self) {
-  PetscBool __pyx_v_val;
-  PyObject *__pyx_r = NULL;
+static int __pyx_pf_8slepc4py_5SLEPc_2DS___cinit__(struct PySlepcDSObject *__pyx_v_self) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getRefined", 0);
-
-  /* "SLEPc/DS.pyx":443
- *               The flag.
- *         """
- *         cdef PetscBool val = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( DSGetRefined(self.ds, &val) )
- *         return val
- */
-  __pyx_v_val = PETSC_FALSE;
+  __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "SLEPc/DS.pyx":444
- *         """
- *         cdef PetscBool val = PETSC_FALSE
- *         CHKERR( DSGetRefined(self.ds, &val) )             # <<<<<<<<<<<<<<
- *         return val
+  /* "SLEPc/DS.pyx":73
+ * 
+ *     def __cinit__(self):
+ *         self.obj = <PetscObject*> &self.ds             # <<<<<<<<<<<<<<
+ *         self.ds = NULL
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSGetRefined(__pyx_v_self->ds, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->ds));
 
-  /* "SLEPc/DS.pyx":445
- *         cdef PetscBool val = PETSC_FALSE
- *         CHKERR( DSGetRefined(self.ds, &val) )
- *         return val             # <<<<<<<<<<<<<<
+  /* "SLEPc/DS.pyx":74
+ *     def __cinit__(self):
+ *         self.obj = <PetscObject*> &self.ds
+ *         self.ds = NULL             # <<<<<<<<<<<<<<
  * 
- *     def truncate(self, n):
+ *     def view(self, Viewer viewer=None):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __pyx_v_self->ds = NULL;
 
-  /* "SLEPc/DS.pyx":434
- *         CHKERR( DSSetRefined(self.ds, val) )
+  /* "SLEPc/DS.pyx":72
+ *     MatType   = DSMatType
  * 
- *     def getRefined(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the refined vectors flag.
+ *     def __cinit__(self):             # <<<<<<<<<<<<<<
+ *         self.obj = <PetscObject*> &self.ds
+ *         self.ds = NULL
  */
 
   /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.getRefined", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
+  __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/DS.pyx":447
- *         return val
+/* "SLEPc/DS.pyx":76
+ *         self.ds = NULL
  * 
- *     def truncate(self, n):             # <<<<<<<<<<<<<<
+ *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
  *         """
- *         Truncates the system represented in the DS object.
+ *         Prints the DS data structure.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_49truncate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2DS_48truncate[] = "DS.truncate(self, n)\n\n        Truncates the system represented in the DS object.\n\n        Parameters\n        ----------\n        n: integer\n           The new size.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_49truncate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_n = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2DS_2view[] = "DS.view(self, Viewer viewer=None)\n\n        Prints the DS data structure.\n\n        Parameters\n        ----------\n        viewer: Viewer, optional\n                Visualization context; if not provided, the standard\n                output is used.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscViewerObject *__pyx_v_viewer = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("truncate (wrapper)", 0);
+  __Pyx_RefNannySetupContext("view (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_n,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_viewer,0};
     PyObject* values[1] = {0};
+    values[0] = (PyObject *)((struct PyPetscViewerObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
@@ -13715,77 +15722,98 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_49truncate(PyObject *__pyx_v_self
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_n)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_viewer);
+          if (value) { values[0] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "truncate") < 0)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(10, 76, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
     } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
     }
-    __pyx_v_n = values[0];
+    __pyx_v_viewer = ((struct PyPetscViewerObject *)values[0]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("truncate", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[9]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 76, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.truncate", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_48truncate(((struct PySlepcDSObject *)__pyx_v_self), __pyx_v_n);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) __PYX_ERR(10, 76, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_2view(((struct PySlepcDSObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_48truncate(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_n) {
-  PetscInt __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_2view(struct PySlepcDSObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
+  PetscViewer __pyx_v_vwr;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscInt __pyx_t_1;
+  int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("truncate", 0);
+  PetscViewer __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("view", 0);
 
-  /* "SLEPc/DS.pyx":456
- *            The new size.
+  /* "SLEPc/DS.pyx":86
+ *                 output is used.
  *         """
- *         cdef PetscInt val = n             # <<<<<<<<<<<<<<
- *         CHKERR( DSTruncate(self.ds, val) )
- * 
+ *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( DSView(self.ds, vwr) )
  */
-  __pyx_t_1 = __Pyx_PyInt_As_PetscInt(__pyx_v_n); if (unlikely((__pyx_t_1 == (PetscInt)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_val = __pyx_t_1;
+  __pyx_v_vwr = NULL;
 
-  /* "SLEPc/DS.pyx":457
+  /* "SLEPc/DS.pyx":87
  *         """
- *         cdef PetscInt val = n
- *         CHKERR( DSTruncate(self.ds, val) )             # <<<<<<<<<<<<<<
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
+ *         CHKERR( DSView(self.ds, vwr) )
  * 
- *     def updateExtraRow(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSTruncate(__pyx_v_self->ds, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (((PyObject *)__pyx_v_viewer) != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_v_viewer->vwr;
+    __pyx_v_vwr = __pyx_t_3;
+  }
 
-  /* "SLEPc/DS.pyx":447
- *         return val
+  /* "SLEPc/DS.pyx":88
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( DSView(self.ds, vwr) )             # <<<<<<<<<<<<<<
  * 
- *     def truncate(self, n):             # <<<<<<<<<<<<<<
+ *     def destroy(self):
+ */
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSView(__pyx_v_self->ds, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(10, 88, __pyx_L1_error)
+
+  /* "SLEPc/DS.pyx":76
+ *         self.ds = NULL
+ * 
+ *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
  *         """
- *         Truncates the system represented in the DS object.
+ *         Prints the DS data structure.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.truncate", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -13793,261 +15821,78 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_48truncate(struct PySlepcDSObject
   return __pyx_r;
 }
 
-/* "SLEPc/DS.pyx":459
- *         CHKERR( DSTruncate(self.ds, val) )
+/* "SLEPc/DS.pyx":90
+ *         CHKERR( DSView(self.ds, vwr) )
  * 
- *     def updateExtraRow(self):             # <<<<<<<<<<<<<<
+ *     def destroy(self):             # <<<<<<<<<<<<<<
  *         """
- *         Performs all necessary operations so that the extra
+ *         Destroys the DS object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_51updateExtraRow(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2DS_50updateExtraRow[] = "DS.updateExtraRow(self)\n\n        Performs all necessary operations so that the extra\n        row gets up-to-date after a call to `solve()`.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_51updateExtraRow(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2DS_4destroy[] = "DS.destroy(self)\n\n        Destroys the DS object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("updateExtraRow (wrapper)", 0);
+  __Pyx_RefNannySetupContext("destroy (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("updateExtraRow", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "updateExtraRow", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_50updateExtraRow(((struct PySlepcDSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("destroy", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "destroy", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_4destroy(((struct PySlepcDSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_50updateExtraRow(struct PySlepcDSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_4destroy(struct PySlepcDSObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("updateExtraRow", 0);
+  __Pyx_RefNannySetupContext("destroy", 0);
 
-  /* "SLEPc/DS.pyx":464
- *         row gets up-to-date after a call to `solve()`.
+  /* "SLEPc/DS.pyx":94
+ *         Destroys the DS object.
  *         """
- *         CHKERR( DSUpdateExtraRow(self.ds) )             # <<<<<<<<<<<<<<
- * 
- * # -----------------------------------------------------------------------------
+ *         CHKERR( DSDestroy(&self.ds) )             # <<<<<<<<<<<<<<
+ *         self.ds = NULL
+ *         return self
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSUpdateExtraRow(__pyx_v_self->ds)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 464; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSDestroy((&__pyx_v_self->ds))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(10, 94, __pyx_L1_error)
 
-  /* "SLEPc/DS.pyx":459
- *         CHKERR( DSTruncate(self.ds, val) )
- * 
- *     def updateExtraRow(self):             # <<<<<<<<<<<<<<
+  /* "SLEPc/DS.pyx":95
  *         """
- *         Performs all necessary operations so that the extra
+ *         CHKERR( DSDestroy(&self.ds) )
+ *         self.ds = NULL             # <<<<<<<<<<<<<<
+ *         return self
+ * 
  */
+  __pyx_v_self->ds = NULL;
 
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.DS.updateExtraRow", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "SLEPc/FN.pyx":38
- *     Type = FNType
- * 
- *     def __cinit__(self):             # <<<<<<<<<<<<<<
- *         self.obj = <PetscObject*> &self.fn
- *         self.fn = NULL
- */
-
-/* Python wrapper */
-static int __pyx_pw_8slepc4py_5SLEPc_2FN_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_8slepc4py_5SLEPc_2FN_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN___cinit__(((struct PySlepcFNObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_8slepc4py_5SLEPc_2FN___cinit__(struct PySlepcFNObject *__pyx_v_self) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__", 0);
-
-  /* "SLEPc/FN.pyx":39
- * 
- *     def __cinit__(self):
- *         self.obj = <PetscObject*> &self.fn             # <<<<<<<<<<<<<<
- *         self.fn = NULL
- * 
- */
-  __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->fn));
-
-  /* "SLEPc/FN.pyx":40
- *     def __cinit__(self):
- *         self.obj = <PetscObject*> &self.fn
- *         self.fn = NULL             # <<<<<<<<<<<<<<
- * 
- *     def view(self, Viewer viewer=None):
- */
-  __pyx_v_self->fn = NULL;
-
-  /* "SLEPc/FN.pyx":38
- *     Type = FNType
- * 
- *     def __cinit__(self):             # <<<<<<<<<<<<<<
- *         self.obj = <PetscObject*> &self.fn
- *         self.fn = NULL
- */
-
-  /* function exit code */
-  __pyx_r = 0;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "SLEPc/FN.pyx":42
- *         self.fn = NULL
+  /* "SLEPc/DS.pyx":96
+ *         CHKERR( DSDestroy(&self.ds) )
+ *         self.ds = NULL
+ *         return self             # <<<<<<<<<<<<<<
  * 
- *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
- *         """
- *         Prints the FN data structure.
+ *     def reset(self):
  */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2FN_2view[] = "FN.view(self, Viewer viewer=None)\n\n        Prints the FN data structure.\n\n        Parameters\n        ----------\n        viewer: Viewer, optional\n                Visualization context; if not provided, the standard\n                output is used.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscViewerObject *__pyx_v_viewer = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("view (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_viewer,0};
-    PyObject* values[1] = {0};
-    values[0] = (PyObject *)((struct PyPetscViewerObject *)Py_None);
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_viewer);
-          if (value) { values[0] = value; kw_args--; }
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-    }
-    __pyx_v_viewer = ((struct PyPetscViewerObject *)values[0]);
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[10]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.FN.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_2view(((struct PySlepcFNObject *)__pyx_v_self), __pyx_v_viewer);
-
-  /* function exit code */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_2view(struct PySlepcFNObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
-  PetscViewer __pyx_v_vwr;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_t_2;
-  PetscViewer __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("view", 0);
-
-  /* "SLEPc/FN.pyx":52
- *                 output is used.
- *         """
- *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
- *         if viewer is not None: vwr = viewer.vwr
- *         CHKERR( FNView(self.fn, vwr) )
- */
-  __pyx_v_vwr = NULL;
-
-  /* "SLEPc/FN.pyx":53
- *         """
- *         cdef PetscViewer vwr = NULL
- *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
- *         CHKERR( FNView(self.fn, vwr) )
- * 
- */
-  __pyx_t_1 = (((PyObject *)__pyx_v_viewer) != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_v_viewer->vwr;
-    __pyx_v_vwr = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "SLEPc/FN.pyx":54
- *         cdef PetscViewer vwr = NULL
- *         if viewer is not None: vwr = viewer.vwr
- *         CHKERR( FNView(self.fn, vwr) )             # <<<<<<<<<<<<<<
- * 
- *     def destroy(self):
- */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNView(__pyx_v_self->fn, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "SLEPc/FN.pyx":42
- *         self.fn = NULL
+  /* "SLEPc/DS.pyx":90
+ *         CHKERR( DSView(self.ds, vwr) )
  * 
- *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *     def destroy(self):             # <<<<<<<<<<<<<<
  *         """
- *         Prints the FN data structure.
+ *         Destroys the DS object.
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.FN.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.destroy", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -14055,81 +15900,59 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_2view(struct PySlepcFNObject *__p
   return __pyx_r;
 }
 
-/* "SLEPc/FN.pyx":56
- *         CHKERR( FNView(self.fn, vwr) )
+/* "SLEPc/DS.pyx":98
+ *         return self
  * 
- *     def destroy(self):             # <<<<<<<<<<<<<<
+ *     def reset(self):             # <<<<<<<<<<<<<<
  *         """
- *         Destroys the FN object.
+ *         Resets the DS object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2FN_4destroy[] = "FN.destroy(self)\n\n        Destroys the FN object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_7reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2DS_6reset[] = "DS.reset(self)\n\n        Resets the DS object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_7reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("destroy (wrapper)", 0);
+  __Pyx_RefNannySetupContext("reset (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("destroy", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "destroy", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_4destroy(((struct PySlepcFNObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("reset", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "reset", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_6reset(((struct PySlepcDSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_4destroy(struct PySlepcFNObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_6reset(struct PySlepcDSObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("destroy", 0);
-
-  /* "SLEPc/FN.pyx":60
- *         Destroys the FN object.
- *         """
- *         CHKERR( FNDestroy(&self.fn) )             # <<<<<<<<<<<<<<
- *         self.fn = NULL
- *         return self
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNDestroy((&__pyx_v_self->fn))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_RefNannySetupContext("reset", 0);
 
-  /* "SLEPc/FN.pyx":61
+  /* "SLEPc/DS.pyx":102
+ *         Resets the DS object.
  *         """
- *         CHKERR( FNDestroy(&self.fn) )
- *         self.fn = NULL             # <<<<<<<<<<<<<<
- *         return self
- * 
- */
-  __pyx_v_self->fn = NULL;
-
-  /* "SLEPc/FN.pyx":62
- *         CHKERR( FNDestroy(&self.fn) )
- *         self.fn = NULL
- *         return self             # <<<<<<<<<<<<<<
+ *         CHKERR( DSReset(self.ds) )             # <<<<<<<<<<<<<<
  * 
  *     def create(self, comm=None):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_r = ((PyObject *)__pyx_v_self);
-  goto __pyx_L0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSReset(__pyx_v_self->ds)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(10, 102, __pyx_L1_error)
 
-  /* "SLEPc/FN.pyx":56
- *         CHKERR( FNView(self.fn, vwr) )
+  /* "SLEPc/DS.pyx":98
+ *         return self
  * 
- *     def destroy(self):             # <<<<<<<<<<<<<<
+ *     def reset(self):             # <<<<<<<<<<<<<<
  *         """
- *         Destroys the FN object.
+ *         Resets the DS object.
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.FN.destroy", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.reset", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -14137,22 +15960,19 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_4destroy(struct PySlepcFNObject *
   return __pyx_r;
 }
 
-/* "SLEPc/FN.pyx":64
- *         return self
+/* "SLEPc/DS.pyx":104
+ *         CHKERR( DSReset(self.ds) )
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
  *         """
- *         Creates the FN object.
+ *         Creates the DS object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_7create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2FN_6create[] = "FN.create(self, comm=None)\n\n        Creates the FN object.\n\n        Parameters\n        ----------\n        comm: Comm, optional\n              MPI communicator; if not provided, it defaults to all\n              processes.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_7create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2DS_8create[] = "DS.create(self, comm=None)\n\n        Creates the DS object.\n\n        Parameters\n        ----------\n        comm: Comm, optional\n              MPI communicator; if not provided, it defaults to all\n              processes.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_comm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("create (wrapper)", 0);
@@ -14177,7 +15997,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_7create(PyObject *__pyx_v_self, P
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(10, 104, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -14190,92 +16010,89 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_7create(PyObject *__pyx_v_self, P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[10]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 104, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.FN.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_6create(((struct PySlepcFNObject *)__pyx_v_self), __pyx_v_comm);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_8create(((struct PySlepcDSObject *)__pyx_v_self), __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_6create(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_8create(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_comm) {
   MPI_Comm __pyx_v_ccomm;
-  FN __pyx_v_newfn;
+  DS __pyx_v_newds;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   MPI_Comm __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("create", 0);
 
-  /* "SLEPc/FN.pyx":74
+  /* "SLEPc/DS.pyx":114
  *               processes.
  *         """
  *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())             # <<<<<<<<<<<<<<
- *         cdef SlepcFN newfn = NULL
- *         CHKERR( FNCreate(ccomm, &newfn) )
+ *         cdef SlepcDS newds = NULL
+ *         CHKERR( DSCreate(ccomm, &newds) )
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_def_Comm(__pyx_v_comm, __pyx_f_8slepc4py_5SLEPc_SLEPC_COMM_DEFAULT()); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_def_Comm(__pyx_v_comm, __pyx_f_8slepc4py_5SLEPc_SLEPC_COMM_DEFAULT()); if (unlikely(PyErr_Occurred())) __PYX_ERR(10, 114, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "SLEPc/FN.pyx":75
+  /* "SLEPc/DS.pyx":115
  *         """
  *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
- *         cdef SlepcFN newfn = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( FNCreate(ccomm, &newfn) )
- *         SlepcCLEAR(self.obj); self.fn = newfn
+ *         cdef SlepcDS newds = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( DSCreate(ccomm, &newds) )
+ *         SlepcCLEAR(self.obj); self.ds = newds
  */
-  __pyx_v_newfn = NULL;
+  __pyx_v_newds = NULL;
 
-  /* "SLEPc/FN.pyx":76
+  /* "SLEPc/DS.pyx":116
  *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
- *         cdef SlepcFN newfn = NULL
- *         CHKERR( FNCreate(ccomm, &newfn) )             # <<<<<<<<<<<<<<
- *         SlepcCLEAR(self.obj); self.fn = newfn
+ *         cdef SlepcDS newds = NULL
+ *         CHKERR( DSCreate(ccomm, &newds) )             # <<<<<<<<<<<<<<
+ *         SlepcCLEAR(self.obj); self.ds = newds
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNCreate(__pyx_v_ccomm, (&__pyx_v_newfn))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSCreate(__pyx_v_ccomm, (&__pyx_v_newds))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(10, 116, __pyx_L1_error)
 
-  /* "SLEPc/FN.pyx":77
- *         cdef SlepcFN newfn = NULL
- *         CHKERR( FNCreate(ccomm, &newfn) )
- *         SlepcCLEAR(self.obj); self.fn = newfn             # <<<<<<<<<<<<<<
+  /* "SLEPc/DS.pyx":117
+ *         cdef SlepcDS newds = NULL
+ *         CHKERR( DSCreate(ccomm, &newds) )
+ *         SlepcCLEAR(self.obj); self.ds = newds             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
   __pyx_f_8slepc4py_5SLEPc_SlepcCLEAR(__pyx_v_self->__pyx_base.obj);
-  __pyx_v_self->fn = __pyx_v_newfn;
+  __pyx_v_self->ds = __pyx_v_newds;
 
-  /* "SLEPc/FN.pyx":78
- *         CHKERR( FNCreate(ccomm, &newfn) )
- *         SlepcCLEAR(self.obj); self.fn = newfn
+  /* "SLEPc/DS.pyx":118
+ *         CHKERR( DSCreate(ccomm, &newds) )
+ *         SlepcCLEAR(self.obj); self.ds = newds
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     def setType(self, fn_type):
+ *     def setType(self, ds_type):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "SLEPc/FN.pyx":64
- *         return self
+  /* "SLEPc/DS.pyx":104
+ *         CHKERR( DSReset(self.ds) )
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
  *         """
- *         Creates the FN object.
+ *         Creates the DS object.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.FN.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -14283,27 +16100,24 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_6create(struct PySlepcFNObject *_
   return __pyx_r;
 }
 
-/* "SLEPc/FN.pyx":80
+/* "SLEPc/DS.pyx":120
  *         return self
  * 
- *     def setType(self, fn_type):             # <<<<<<<<<<<<<<
+ *     def setType(self, ds_type):             # <<<<<<<<<<<<<<
  *         """
- *         Selects the type for the FN object.
+ *         Selects the type for the DS object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_9setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2FN_8setType[] = "FN.setType(self, fn_type)\n\n        Selects the type for the FN object.\n\n        Parameters\n        ----------\n        fn_type: `FN.Type` enumerate\n                  The inner product type to be used.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_9setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_fn_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2DS_10setType[] = "DS.setType(self, ds_type)\n\n        Selects the type for the DS object.\n\n        Parameters\n        ----------\n        ds_type: `DS.Type` enumerate\n                  The direct solver type to be used.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_ds_type = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setType (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fn_type,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ds_type,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -14316,82 +16130,79 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_9setType(PyObject *__pyx_v_self,
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fn_type)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ds_type)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(10, 120, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_fn_type = values[0];
+    __pyx_v_ds_type = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[10]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 120, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.FN.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_8setType(((struct PySlepcFNObject *)__pyx_v_self), __pyx_v_fn_type);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_10setType(((struct PySlepcDSObject *)__pyx_v_self), __pyx_v_ds_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_8setType(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_fn_type) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_10setType(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_ds_type) {
   const char* __pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setType", 0);
-  __Pyx_INCREF(__pyx_v_fn_type);
+  __Pyx_INCREF(__pyx_v_ds_type);
 
-  /* "SLEPc/FN.pyx":89
- *                   The inner product type to be used.
+  /* "SLEPc/DS.pyx":129
+ *                   The direct solver type to be used.
  *         """
- *         cdef SlepcFNType cval = NULL             # <<<<<<<<<<<<<<
- *         fn_type = str2bytes(fn_type, &cval)
- *         CHKERR( FNSetType(self.fn, cval) )
+ *         cdef SlepcDSType cval = NULL             # <<<<<<<<<<<<<<
+ *         ds_type = str2bytes(ds_type, &cval)
+ *         CHKERR( DSSetType(self.ds, cval) )
  */
   __pyx_v_cval = NULL;
 
-  /* "SLEPc/FN.pyx":90
+  /* "SLEPc/DS.pyx":130
  *         """
- *         cdef SlepcFNType cval = NULL
- *         fn_type = str2bytes(fn_type, &cval)             # <<<<<<<<<<<<<<
- *         CHKERR( FNSetType(self.fn, cval) )
+ *         cdef SlepcDSType cval = NULL
+ *         ds_type = str2bytes(ds_type, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( DSSetType(self.ds, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_fn_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_ds_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 130, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_fn_type, __pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_ds_type, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "SLEPc/FN.pyx":91
- *         cdef SlepcFNType cval = NULL
- *         fn_type = str2bytes(fn_type, &cval)
- *         CHKERR( FNSetType(self.fn, cval) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/DS.pyx":131
+ *         cdef SlepcDSType cval = NULL
+ *         ds_type = str2bytes(ds_type, &cval)
+ *         CHKERR( DSSetType(self.ds, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def getType(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNSetType(__pyx_v_self->fn, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSSetType(__pyx_v_self->ds, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(10, 131, __pyx_L1_error)
 
-  /* "SLEPc/FN.pyx":80
+  /* "SLEPc/DS.pyx":120
  *         return self
  * 
- *     def setType(self, fn_type):             # <<<<<<<<<<<<<<
+ *     def setType(self, ds_type):             # <<<<<<<<<<<<<<
  *         """
- *         Selects the type for the FN object.
+ *         Selects the type for the DS object.
  */
 
   /* function exit code */
@@ -14399,95 +16210,92 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_8setType(struct PySlepcFNObject *
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.FN.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_fn_type);
+  __Pyx_XDECREF(__pyx_v_ds_type);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/FN.pyx":93
- *         CHKERR( FNSetType(self.fn, cval) )
+/* "SLEPc/DS.pyx":133
+ *         CHKERR( DSSetType(self.ds, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the FN type of this object.
+ *         Gets the DS type of this object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_11getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2FN_10getType[] = "FN.getType(self)\n\n        Gets the FN type of this object.\n\n        Returns\n        -------\n        type: `FN.Type` enumerate\n              The inner product type currently being used.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_11getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2DS_12getType[] = "DS.getType(self)\n\n        Gets the DS type of this object.\n\n        Returns\n        -------\n        type: `DS.Type` enumerate\n              The direct solver type currently being used.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getType (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getType", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_10getType(((struct PySlepcFNObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_12getType(((struct PySlepcDSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_10getType(struct PySlepcFNObject *__pyx_v_self) {
-  const char* __pyx_v_fn_type;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_12getType(struct PySlepcDSObject *__pyx_v_self) {
+  const char* __pyx_v_ds_type;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getType", 0);
 
-  /* "SLEPc/FN.pyx":102
- *               The inner product type currently being used.
+  /* "SLEPc/DS.pyx":142
+ *               The direct solver type currently being used.
  *         """
- *         cdef SlepcFNType fn_type = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( FNGetType(self.fn, &fn_type) )
- *         return bytes2str(fn_type)
+ *         cdef SlepcDSType ds_type = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( DSGetType(self.ds, &ds_type) )
+ *         return bytes2str(ds_type)
  */
-  __pyx_v_fn_type = NULL;
+  __pyx_v_ds_type = NULL;
 
-  /* "SLEPc/FN.pyx":103
+  /* "SLEPc/DS.pyx":143
  *         """
- *         cdef SlepcFNType fn_type = NULL
- *         CHKERR( FNGetType(self.fn, &fn_type) )             # <<<<<<<<<<<<<<
- *         return bytes2str(fn_type)
+ *         cdef SlepcDSType ds_type = NULL
+ *         CHKERR( DSGetType(self.ds, &ds_type) )             # <<<<<<<<<<<<<<
+ *         return bytes2str(ds_type)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNGetType(__pyx_v_self->fn, (&__pyx_v_fn_type))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSGetType(__pyx_v_self->ds, (&__pyx_v_ds_type))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(10, 143, __pyx_L1_error)
 
-  /* "SLEPc/FN.pyx":104
- *         cdef SlepcFNType fn_type = NULL
- *         CHKERR( FNGetType(self.fn, &fn_type) )
- *         return bytes2str(fn_type)             # <<<<<<<<<<<<<<
+  /* "SLEPc/DS.pyx":144
+ *         cdef SlepcDSType ds_type = NULL
+ *         CHKERR( DSGetType(self.ds, &ds_type) )
+ *         return bytes2str(ds_type)             # <<<<<<<<<<<<<<
  * 
  *     def setOptionsPrefix(self, prefix):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_fn_type); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_ds_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 144, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/FN.pyx":93
- *         CHKERR( FNSetType(self.fn, cval) )
+  /* "SLEPc/DS.pyx":133
+ *         CHKERR( DSSetType(self.ds, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the FN type of this object.
+ *         Gets the DS type of this object.
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.FN.getType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.getType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -14495,22 +16303,19 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_10getType(struct PySlepcFNObject
   return __pyx_r;
 }
 
-/* "SLEPc/FN.pyx":106
- *         return bytes2str(fn_type)
+/* "SLEPc/DS.pyx":146
+ *         return bytes2str(ds_type)
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the prefix used for searching for all FN options in the
+ *         Sets the prefix used for searching for all DS options in the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_13setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2FN_12setOptionsPrefix[] = "FN.setOptionsPrefix(self, prefix)\n\n        Sets the prefix used for searching for all FN options in the\n        database.\n\n        Parameters\n        ----------\n        prefix: string\n                The prefix string to prepend to all FN option\n                requests.\n\n        Notes\n        -----\n        A hyphen (``-``) must NOT be given at the beginning of the\n        prefix name.  The first character o [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_13setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_15setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2DS_14setOptionsPrefix[] = "DS.setOptionsPrefix(self, prefix)\n\n        Sets the prefix used for searching for all DS options in the\n        database.\n\n        Parameters\n        ----------\n        prefix: string\n                The prefix string to prepend to all DS option\n                requests.\n\n        Notes\n        -----\n        A hyphen (``-``) must NOT be given at the beginning of the\n        prefix name.  The first character o [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_15setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_prefix = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setOptionsPrefix (wrapper)", 0);
@@ -14532,7 +16337,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_13setOptionsPrefix(PyObject *__py
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) __PYX_ERR(10, 146, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -14543,67 +16348,64 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_13setOptionsPrefix(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[10]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 146, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.FN.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_12setOptionsPrefix(((struct PySlepcFNObject *)__pyx_v_self), __pyx_v_prefix);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_14setOptionsPrefix(((struct PySlepcDSObject *)__pyx_v_self), __pyx_v_prefix);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_12setOptionsPrefix(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_14setOptionsPrefix(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
   const char *__pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setOptionsPrefix", 0);
   __Pyx_INCREF(__pyx_v_prefix);
 
-  /* "SLEPc/FN.pyx":123
+  /* "SLEPc/DS.pyx":163
  *         AUTOMATICALLY the hyphen.
  *         """
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
  *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( FNSetOptionsPrefix(self.fn, cval) )
+ *         CHKERR( DSSetOptionsPrefix(self.ds, cval) )
  */
   __pyx_v_cval = NULL;
 
-  /* "SLEPc/FN.pyx":124
+  /* "SLEPc/DS.pyx":164
  *         """
  *         cdef const_char *cval = NULL
  *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
- *         CHKERR( FNSetOptionsPrefix(self.fn, cval) )
+ *         CHKERR( DSSetOptionsPrefix(self.ds, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 164, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "SLEPc/FN.pyx":125
+  /* "SLEPc/DS.pyx":165
  *         cdef const_char *cval = NULL
  *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( FNSetOptionsPrefix(self.fn, cval) )             # <<<<<<<<<<<<<<
+ *         CHKERR( DSSetOptionsPrefix(self.ds, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def getOptionsPrefix(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNSetOptionsPrefix(__pyx_v_self->fn, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSSetOptionsPrefix(__pyx_v_self->ds, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(10, 165, __pyx_L1_error)
 
-  /* "SLEPc/FN.pyx":106
- *         return bytes2str(fn_type)
+  /* "SLEPc/DS.pyx":146
+ *         return bytes2str(ds_type)
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the prefix used for searching for all FN options in the
+ *         Sets the prefix used for searching for all DS options in the
  */
 
   /* function exit code */
@@ -14611,7 +16413,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_12setOptionsPrefix(struct PySlepc
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.FN.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_prefix);
@@ -14620,86 +16422,83 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_12setOptionsPrefix(struct PySlepc
   return __pyx_r;
 }
 
-/* "SLEPc/FN.pyx":127
- *         CHKERR( FNSetOptionsPrefix(self.fn, cval) )
+/* "SLEPc/DS.pyx":167
+ *         CHKERR( DSSetOptionsPrefix(self.ds, cval) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the prefix used for searching for all FN options in the
+ *         Gets the prefix used for searching for all DS options in the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2FN_14getOptionsPrefix[] = "FN.getOptionsPrefix(self)\n\n        Gets the prefix used for searching for all FN options in the\n        database.\n\n        Returns\n        -------\n        prefix: string\n                The prefix string set for this FN object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_17getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2DS_16getOptionsPrefix[] = "DS.getOptionsPrefix(self)\n\n        Gets the prefix used for searching for all DS options in the\n        database.\n\n        Returns\n        -------\n        prefix: string\n                The prefix string set for this DS object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_17getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getOptionsPrefix (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getOptionsPrefix", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getOptionsPrefix", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_14getOptionsPrefix(((struct PySlepcFNObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_16getOptionsPrefix(((struct PySlepcDSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_14getOptionsPrefix(struct PySlepcFNObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_16getOptionsPrefix(struct PySlepcDSObject *__pyx_v_self) {
   const char *__pyx_v_prefix;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getOptionsPrefix", 0);
 
-  /* "SLEPc/FN.pyx":137
- *                 The prefix string set for this FN object.
+  /* "SLEPc/DS.pyx":177
+ *                 The prefix string set for this DS object.
  *         """
  *         cdef const_char *prefix = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( FNGetOptionsPrefix(self.fn, &prefix) )
+ *         CHKERR( DSGetOptionsPrefix(self.ds, &prefix) )
  *         return bytes2str(prefix)
  */
   __pyx_v_prefix = NULL;
 
-  /* "SLEPc/FN.pyx":138
+  /* "SLEPc/DS.pyx":178
  *         """
  *         cdef const_char *prefix = NULL
- *         CHKERR( FNGetOptionsPrefix(self.fn, &prefix) )             # <<<<<<<<<<<<<<
+ *         CHKERR( DSGetOptionsPrefix(self.ds, &prefix) )             # <<<<<<<<<<<<<<
  *         return bytes2str(prefix)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNGetOptionsPrefix(__pyx_v_self->fn, (&__pyx_v_prefix))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSGetOptionsPrefix(__pyx_v_self->ds, (&__pyx_v_prefix))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(10, 178, __pyx_L1_error)
 
-  /* "SLEPc/FN.pyx":139
+  /* "SLEPc/DS.pyx":179
  *         cdef const_char *prefix = NULL
- *         CHKERR( FNGetOptionsPrefix(self.fn, &prefix) )
+ *         CHKERR( DSGetOptionsPrefix(self.ds, &prefix) )
  *         return bytes2str(prefix)             # <<<<<<<<<<<<<<
  * 
  *     def setFromOptions(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_prefix); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_prefix); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 179, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/FN.pyx":127
- *         CHKERR( FNSetOptionsPrefix(self.fn, cval) )
+  /* "SLEPc/DS.pyx":167
+ *         CHKERR( DSSetOptionsPrefix(self.ds, cval) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the prefix used for searching for all FN options in the
+ *         Gets the prefix used for searching for all DS options in the
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.FN.getOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.getOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -14707,62 +16506,59 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_14getOptionsPrefix(struct PySlepc
   return __pyx_r;
 }
 
-/* "SLEPc/FN.pyx":141
+/* "SLEPc/DS.pyx":181
  *         return bytes2str(prefix)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets FN options from the options database.
+ *         Sets DS options from the options database.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_17setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2FN_16setFromOptions[] = "FN.setFromOptions(self)\n\n        Sets FN options from the options database.\n\n        Notes\n        -----\n        To see all options, run your program with the ``-help``\n        option.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_17setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_19setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2DS_18setFromOptions[] = "DS.setFromOptions(self)\n\n        Sets DS options from the options database.\n\n        Notes\n        -----\n        To see all options, run your program with the ``-help``\n        option.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_19setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setFromOptions (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("setFromOptions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setFromOptions", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_16setFromOptions(((struct PySlepcFNObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_18setFromOptions(((struct PySlepcDSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_16setFromOptions(struct PySlepcFNObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_18setFromOptions(struct PySlepcDSObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setFromOptions", 0);
 
-  /* "SLEPc/FN.pyx":150
+  /* "SLEPc/DS.pyx":190
  *         option.
  *         """
- *         CHKERR( FNSetFromOptions(self.fn) )             # <<<<<<<<<<<<<<
+ *         CHKERR( DSSetFromOptions(self.ds) )             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNSetFromOptions(__pyx_v_self->fn)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSSetFromOptions(__pyx_v_self->ds)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(10, 190, __pyx_L1_error)
 
-  /* "SLEPc/FN.pyx":141
+  /* "SLEPc/DS.pyx":181
  *         return bytes2str(prefix)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets FN options from the options database.
+ *         Sets DS options from the options database.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.FN.setFromOptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setFromOptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -14770,27 +16566,24 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_16setFromOptions(struct PySlepcFN
   return __pyx_r;
 }
 
-/* "SLEPc/FN.pyx":154
+/* "SLEPc/DS.pyx":194
  *     #
  * 
- *     def evaluateFunction(self, x):             # <<<<<<<<<<<<<<
+ *     def allocate(self, ld):             # <<<<<<<<<<<<<<
  *         """
- *         Computes the value of the function f(x) for a given x.
+ *         Allocates memory for internal storage or matrices in DS.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_19evaluateFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2FN_18evaluateFunction[] = "FN.evaluateFunction(self, x)\n\n        Computes the value of the function f(x) for a given x.\n\n        Parameters\n        ----------\n        x: scalar\n            Value where the function must be evaluated.\n\n        Returns\n        -------\n        y: scalar\n            The result of f(x).\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_19evaluateFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_x = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_21allocate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2DS_20allocate[] = "DS.allocate(self, ld)\n\n        Allocates memory for internal storage or matrices in DS.\n\n        Parameters\n        ----------\n        ld: integer\n            Leading dimension (maximum allowed dimension for the\n            matrices, including the extra row if present).\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_21allocate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_ld = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("evaluateFunction (wrapper)", 0);
+  __Pyx_RefNannySetupContext("allocate (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ld,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -14803,91 +16596,74 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_19evaluateFunction(PyObject *__py
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ld)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "evaluateFunction") < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "allocate") < 0)) __PYX_ERR(10, 194, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_x = values[0];
+    __pyx_v_ld = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("evaluateFunction", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[10]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("allocate", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 194, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.FN.evaluateFunction", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.allocate", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_18evaluateFunction(((struct PySlepcFNObject *)__pyx_v_self), __pyx_v_x);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_20allocate(((struct PySlepcDSObject *)__pyx_v_self), __pyx_v_ld);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_18evaluateFunction(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_x) {
-  PetscScalar __pyx_v_sval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_20allocate(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_ld) {
+  PetscInt __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscScalar __pyx_t_1;
+  PetscInt __pyx_t_1;
   int __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("evaluateFunction", 0);
-
-  /* "SLEPc/FN.pyx":168
- *             The result of f(x).
- *         """
- *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
- *         CHKERR( FNEvaluateFunction(self.fn, x, &sval) )
- *         return toScalar(sval)
- */
-  __pyx_v_sval = 0.0;
+  __Pyx_RefNannySetupContext("allocate", 0);
 
-  /* "SLEPc/FN.pyx":169
+  /* "SLEPc/DS.pyx":204
+ *             matrices, including the extra row if present).
  *         """
- *         cdef PetscScalar sval = 0
- *         CHKERR( FNEvaluateFunction(self.fn, x, &sval) )             # <<<<<<<<<<<<<<
- *         return toScalar(sval)
+ *         cdef PetscInt val = ld             # <<<<<<<<<<<<<<
+ *         CHKERR( DSAllocate(self.ds, val) )
  * 
  */
-  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_x); if (unlikely((__pyx_t_1 == (PetscScalar)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNEvaluateFunction(__pyx_v_self->fn, __pyx_t_1, (&__pyx_v_sval))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_PetscInt(__pyx_v_ld); if (unlikely((__pyx_t_1 == (PetscInt)-1) && PyErr_Occurred())) __PYX_ERR(10, 204, __pyx_L1_error)
+  __pyx_v_val = __pyx_t_1;
 
-  /* "SLEPc/FN.pyx":170
- *         cdef PetscScalar sval = 0
- *         CHKERR( FNEvaluateFunction(self.fn, x, &sval) )
- *         return toScalar(sval)             # <<<<<<<<<<<<<<
+  /* "SLEPc/DS.pyx":205
+ *         """
+ *         cdef PetscInt val = ld
+ *         CHKERR( DSAllocate(self.ds, val) )             # <<<<<<<<<<<<<<
  * 
- *     def evaluateDerivative(self, x):
+ *     def getLeadingDimension(self):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_r = __pyx_t_3;
-  __pyx_t_3 = 0;
-  goto __pyx_L0;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSAllocate(__pyx_v_self->ds, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(10, 205, __pyx_L1_error)
 
-  /* "SLEPc/FN.pyx":154
+  /* "SLEPc/DS.pyx":194
  *     #
  * 
- *     def evaluateFunction(self, x):             # <<<<<<<<<<<<<<
+ *     def allocate(self, ld):             # <<<<<<<<<<<<<<
  *         """
- *         Computes the value of the function f(x) for a given x.
+ *         Allocates memory for internal storage or matrices in DS.
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("slepc4py.SLEPc.FN.evaluateFunction", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.allocate", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -14895,124 +16671,83 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_18evaluateFunction(struct PySlepc
   return __pyx_r;
 }
 
-/* "SLEPc/FN.pyx":172
- *         return toScalar(sval)
+/* "SLEPc/DS.pyx":207
+ *         CHKERR( DSAllocate(self.ds, val) )
  * 
- *     def evaluateDerivative(self, x):             # <<<<<<<<<<<<<<
+ *     def getLeadingDimension(self):             # <<<<<<<<<<<<<<
  *         """
- *         Computes the value of the derivative f'(x) for a given x.
+ *         Returns the leading dimension of the allocated matrices.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_21evaluateDerivative(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2FN_20evaluateDerivative[] = "FN.evaluateDerivative(self, x)\n\n        Computes the value of the derivative f'(x) for a given x.\n\n        Parameters\n        ----------\n        x: scalar\n            Value where the derivative must be evaluated.\n\n        Returns\n        -------\n        y: scalar\n            The result of f'(x).\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_21evaluateDerivative(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_x = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_23getLeadingDimension(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2DS_22getLeadingDimension[] = "DS.getLeadingDimension(self)\n\n        Returns the leading dimension of the allocated matrices.\n\n        Returns\n        -------\n        ld: integer\n            Leading dimension (maximum allowed dimension for the matrices).\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_23getLeadingDimension(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("evaluateDerivative (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
-    PyObject* values[1] = {0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "evaluateDerivative") < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-    }
-    __pyx_v_x = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("evaluateDerivative", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[10]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.FN.evaluateDerivative", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_20evaluateDerivative(((struct PySlepcFNObject *)__pyx_v_self), __pyx_v_x);
+  __Pyx_RefNannySetupContext("getLeadingDimension (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getLeadingDimension", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getLeadingDimension", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_22getLeadingDimension(((struct PySlepcDSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_20evaluateDerivative(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_x) {
-  PetscScalar __pyx_v_sval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_22getLeadingDimension(struct PySlepcDSObject *__pyx_v_self) {
+  PetscInt __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscScalar __pyx_t_1;
-  int __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("evaluateDerivative", 0);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getLeadingDimension", 0);
 
-  /* "SLEPc/FN.pyx":186
- *             The result of f'(x).
+  /* "SLEPc/DS.pyx":216
+ *             Leading dimension (maximum allowed dimension for the matrices).
  *         """
- *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
- *         CHKERR( FNEvaluateDerivative(self.fn, x, &sval) )
- *         return toScalar(sval)
+ *         cdef PetscInt val = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( DSGetLeadingDimension(self.ds, &val) )
+ *         return val
  */
-  __pyx_v_sval = 0.0;
+  __pyx_v_val = 0;
 
-  /* "SLEPc/FN.pyx":187
+  /* "SLEPc/DS.pyx":217
  *         """
- *         cdef PetscScalar sval = 0
- *         CHKERR( FNEvaluateDerivative(self.fn, x, &sval) )             # <<<<<<<<<<<<<<
- *         return toScalar(sval)
+ *         cdef PetscInt val = 0
+ *         CHKERR( DSGetLeadingDimension(self.ds, &val) )             # <<<<<<<<<<<<<<
+ *         return val
  * 
  */
-  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_x); if (unlikely((__pyx_t_1 == (PetscScalar)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNEvaluateDerivative(__pyx_v_self->fn, __pyx_t_1, (&__pyx_v_sval))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSGetLeadingDimension(__pyx_v_self->ds, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(10, 217, __pyx_L1_error)
 
-  /* "SLEPc/FN.pyx":188
- *         cdef PetscScalar sval = 0
- *         CHKERR( FNEvaluateDerivative(self.fn, x, &sval) )
- *         return toScalar(sval)             # <<<<<<<<<<<<<<
+  /* "SLEPc/DS.pyx":218
+ *         cdef PetscInt val = 0
+ *         CHKERR( DSGetLeadingDimension(self.ds, &val) )
+ *         return val             # <<<<<<<<<<<<<<
  * 
- *     def setScale(self, alpha=None, beta=None):
+ *     def setState(self, state):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_r = __pyx_t_3;
-  __pyx_t_3 = 0;
+  __pyx_t_2 = __Pyx_PyInt_From_PetscInt(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 218, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/FN.pyx":172
- *         return toScalar(sval)
+  /* "SLEPc/DS.pyx":207
+ *         CHKERR( DSAllocate(self.ds, val) )
  * 
- *     def evaluateDerivative(self, x):             # <<<<<<<<<<<<<<
+ *     def getLeadingDimension(self):             # <<<<<<<<<<<<<<
  *         """
- *         Computes the value of the derivative f'(x) for a given x.
+ *         Returns the leading dimension of the allocated matrices.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("slepc4py.SLEPc.FN.evaluateDerivative", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.getLeadingDimension", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -15020,36 +16755,29 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_20evaluateDerivative(struct PySle
   return __pyx_r;
 }
 
-/* "SLEPc/FN.pyx":190
- *         return toScalar(sval)
+/* "SLEPc/DS.pyx":220
+ *         return val
  * 
- *     def setScale(self, alpha=None, beta=None):             # <<<<<<<<<<<<<<
+ *     def setState(self, state):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the scaling parameters that define the matematical function.
+ *         Change the state of the DS object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_23setScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2FN_22setScale[] = "FN.setScale(self, alpha=None, beta=None)\n\n        Sets the scaling parameters that define the matematical function.\n\n        Parameters\n        ----------\n        alpha: scalar (possibly complex)\n               inner scaling (argument).\n        beta: scalar (possibly complex)\n               outer scaling (result).\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_23setScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_alpha = 0;
-  PyObject *__pyx_v_beta = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_25setState(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2DS_24setState[] = "DS.setState(self, state)\n\n        Change the state of the DS object.\n\n        Parameters\n        ----------\n        state: `DS.StateType` enumerate\n               The new state.\n\n        Notes\n        -----\n        The state indicates that the dense system is in an initial\n        state (raw), in an intermediate state (such as tridiagonal,\n        Hessenberg or Hessenberg-triangular), in a condensed state\n        (s [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_25setState(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_state = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setScale (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setState (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_alpha,&__pyx_n_s_beta,0};
-    PyObject* values[2] = {0,0};
-    values[0] = ((PyObject *)Py_None);
-    values[1] = ((PyObject *)Py_None);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_state,0};
+    PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -15057,131 +16785,74 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_23setScale(PyObject *__pyx_v_self
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha);
-          if (value) { values[0] = value; kw_args--; }
-        }
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_beta);
-          if (value) { values[1] = value; kw_args--; }
-        }
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_state)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setScale") < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setState") < 0)) __PYX_ERR(10, 220, __pyx_L3_error)
       }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
     } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_alpha = values[0];
-    __pyx_v_beta = values[1];
+    __pyx_v_state = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setScale", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[10]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setState", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 220, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.FN.setScale", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setState", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_22setScale(((struct PySlepcFNObject *)__pyx_v_self), __pyx_v_alpha, __pyx_v_beta);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_24setState(((struct PySlepcDSObject *)__pyx_v_self), __pyx_v_state);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_22setScale(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_alpha, PyObject *__pyx_v_beta) {
-  PetscScalar __pyx_v_aval;
-  PetscScalar __pyx_v_bval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_24setState(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_state) {
+  DSStateType __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  DSStateType __pyx_t_1;
   int __pyx_t_2;
-  PetscScalar __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setScale", 0);
-
-  /* "SLEPc/FN.pyx":201
- *                outer scaling (result).
- *         """
- *         cdef PetscScalar aval = 1.0             # <<<<<<<<<<<<<<
- *         cdef PetscScalar bval = 1.0
- *         if alpha is not None: aval = asScalar(alpha)
- */
-  __pyx_v_aval = 1.0;
+  __Pyx_RefNannySetupContext("setState", 0);
 
-  /* "SLEPc/FN.pyx":202
+  /* "SLEPc/DS.pyx":240
+ *         the condensed structure is destroyed.
  *         """
- *         cdef PetscScalar aval = 1.0
- *         cdef PetscScalar bval = 1.0             # <<<<<<<<<<<<<<
- *         if alpha is not None: aval = asScalar(alpha)
- *         if beta  is not None: bval = asScalar(beta)
- */
-  __pyx_v_bval = 1.0;
-
-  /* "SLEPc/FN.pyx":203
- *         cdef PetscScalar aval = 1.0
- *         cdef PetscScalar bval = 1.0
- *         if alpha is not None: aval = asScalar(alpha)             # <<<<<<<<<<<<<<
- *         if beta  is not None: bval = asScalar(beta)
- *         CHKERR( FNSetScale(self.fn, aval, bval) )
- */
-  __pyx_t_1 = (__pyx_v_alpha != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_aval = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "SLEPc/FN.pyx":204
- *         cdef PetscScalar bval = 1.0
- *         if alpha is not None: aval = asScalar(alpha)
- *         if beta  is not None: bval = asScalar(beta)             # <<<<<<<<<<<<<<
- *         CHKERR( FNSetScale(self.fn, aval, bval) )
+ *         cdef SlepcDSStateType val = state             # <<<<<<<<<<<<<<
+ *         CHKERR( DSSetState(self.ds, val) )
  * 
  */
-  __pyx_t_2 = (__pyx_v_beta != Py_None);
-  __pyx_t_1 = (__pyx_t_2 != 0);
-  if (__pyx_t_1) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asScalar(__pyx_v_beta); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_bval = __pyx_t_3;
-    goto __pyx_L4;
-  }
-  __pyx_L4:;
+  __pyx_t_1 = ((DSStateType)__Pyx_PyInt_As_DSStateType(__pyx_v_state)); if (unlikely(PyErr_Occurred())) __PYX_ERR(10, 240, __pyx_L1_error)
+  __pyx_v_val = __pyx_t_1;
 
-  /* "SLEPc/FN.pyx":205
- *         if alpha is not None: aval = asScalar(alpha)
- *         if beta  is not None: bval = asScalar(beta)
- *         CHKERR( FNSetScale(self.fn, aval, bval) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/DS.pyx":241
+ *         """
+ *         cdef SlepcDSStateType val = state
+ *         CHKERR( DSSetState(self.ds, val) )             # <<<<<<<<<<<<<<
  * 
- *     def getScale(self):
+ *     def getState(self):
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNSetScale(__pyx_v_self->fn, __pyx_v_aval, __pyx_v_bval)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSSetState(__pyx_v_self->ds, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(10, 241, __pyx_L1_error)
 
-  /* "SLEPc/FN.pyx":190
- *         return toScalar(sval)
+  /* "SLEPc/DS.pyx":220
+ *         return val
  * 
- *     def setScale(self, alpha=None, beta=None):             # <<<<<<<<<<<<<<
+ *     def setState(self, state):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the scaling parameters that define the matematical function.
+ *         Change the state of the DS object.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.FN.setScale", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setState", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -15189,102 +16860,83 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_22setScale(struct PySlepcFNObject
   return __pyx_r;
 }
 
-/* "SLEPc/FN.pyx":207
- *         CHKERR( FNSetScale(self.fn, aval, bval) )
+/* "SLEPc/DS.pyx":243
+ *         CHKERR( DSSetState(self.ds, val) )
  * 
- *     def getScale(self):             # <<<<<<<<<<<<<<
+ *     def getState(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the scaling parameters that define the matematical function.
+ *         Returns the current state.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_25getScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2FN_24getScale[] = "FN.getScale(self)\n\n        Gets the scaling parameters that define the matematical function.\n\n        Returns\n        -------\n        alpha: scalar (possibly complex)\n               inner scaling (argument).\n        beta: scalar (possibly complex)\n               outer scaling (result).\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_25getScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_27getState(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2DS_26getState[] = "DS.getState(self)\n\n        Returns the current state.\n\n        Returns\n        -------\n        state: `DS.StateType` enumerate\n               The current state.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_27getState(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getScale (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getState (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getScale", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getScale", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_24getScale(((struct PySlepcFNObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getState", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getState", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_26getState(((struct PySlepcDSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_24getScale(struct PySlepcFNObject *__pyx_v_self) {
-  PetscScalar __pyx_v_aval;
-  PetscScalar __pyx_v_bval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_26getState(struct PySlepcDSObject *__pyx_v_self) {
+  DSStateType __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getScale", 0);
+  __Pyx_RefNannySetupContext("getState", 0);
 
-  /* "SLEPc/FN.pyx":218
- *                outer scaling (result).
+  /* "SLEPc/DS.pyx":252
+ *                The current state.
  *         """
- *         cdef PetscScalar aval = 0, bval = 0             # <<<<<<<<<<<<<<
- *         CHKERR( FNGetScale(self.fn, &aval, &bval) )
- *         return (toScalar(aval), toScalar(bval))
+ *         cdef SlepcDSStateType val = DS_STATE_RAW             # <<<<<<<<<<<<<<
+ *         CHKERR( DSGetState(self.ds, &val) )
+ *         return val
  */
-  __pyx_v_aval = 0.0;
-  __pyx_v_bval = 0.0;
+  __pyx_v_val = DS_STATE_RAW;
 
-  /* "SLEPc/FN.pyx":219
+  /* "SLEPc/DS.pyx":253
  *         """
- *         cdef PetscScalar aval = 0, bval = 0
- *         CHKERR( FNGetScale(self.fn, &aval, &bval) )             # <<<<<<<<<<<<<<
- *         return (toScalar(aval), toScalar(bval))
+ *         cdef SlepcDSStateType val = DS_STATE_RAW
+ *         CHKERR( DSGetState(self.ds, &val) )             # <<<<<<<<<<<<<<
+ *         return val
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNGetScale(__pyx_v_self->fn, (&__pyx_v_aval), (&__pyx_v_bval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSGetState(__pyx_v_self->ds, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(10, 253, __pyx_L1_error)
 
-  /* "SLEPc/FN.pyx":220
- *         cdef PetscScalar aval = 0, bval = 0
- *         CHKERR( FNGetScale(self.fn, &aval, &bval) )
- *         return (toScalar(aval), toScalar(bval))             # <<<<<<<<<<<<<<
+  /* "SLEPc/DS.pyx":254
+ *         cdef SlepcDSStateType val = DS_STATE_RAW
+ *         CHKERR( DSGetState(self.ds, &val) )
+ *         return val             # <<<<<<<<<<<<<<
  * 
- *     #
+ *     def setDimensions(self, n=None, m=None, l=None, k=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_aval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_DSStateType(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 254, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_bval); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __Pyx_GIVEREF(__pyx_t_2);
-  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_3);
-  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
+  __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
-  __pyx_t_3 = 0;
-  __pyx_r = __pyx_t_4;
-  __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/FN.pyx":207
- *         CHKERR( FNSetScale(self.fn, aval, bval) )
+  /* "SLEPc/DS.pyx":243
+ *         CHKERR( DSSetState(self.ds, val) )
  * 
- *     def getScale(self):             # <<<<<<<<<<<<<<
+ *     def getState(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the scaling parameters that define the matematical function.
+ *         Returns the current state.
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("slepc4py.SLEPc.FN.getScale", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.getState", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -15292,32 +16944,39 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_24getScale(struct PySlepcFNObject
   return __pyx_r;
 }
 
-/* "SLEPc/FN.pyx":224
- *     #
+/* "SLEPc/DS.pyx":256
+ *         return val
  * 
- *     def setRationalNumerator(self, alpha not None):             # <<<<<<<<<<<<<<
+ *     def setDimensions(self, n=None, m=None, l=None, k=None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the coefficients of the numerator of the rational function.
+ *         Resize the matrices in the DS object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_27setRationalNumerator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2FN_26setRationalNumerator[] = "FN.setRationalNumerator(self, alpha)\n\n        Sets the coefficients of the numerator of the rational function.\n\n        Parameters\n        ----------\n        alpha: array of scalars\n            Coefficients.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_27setRationalNumerator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_alpha = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_29setDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2DS_28setDimensions[] = "DS.setDimensions(self, n=None, m=None, l=None, k=None)\n\n        Resize the matrices in the DS object.\n\n        Parameters\n        ----------\n        n: int, optional\n           The new size.\n        m: int, optional\n           The new column size (only for SVD).\n        l: int, optional\n           Number of locked (inactive) leading columns.\n        k: int, optional\n           Intermediate dimension (e.g., posit [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_29setDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_n = 0;
+  PyObject *__pyx_v_m = 0;
+  PyObject *__pyx_v_l = 0;
+  PyObject *__pyx_v_k = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setRationalNumerator (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setDimensions (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_alpha,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_n,&__pyx_n_s_m,&__pyx_n_s_l,&__pyx_n_s_k,0};
+    PyObject* values[4] = {0,0,0,0};
+    values[0] = ((PyObject *)Py_None);
+    values[1] = ((PyObject *)Py_None);
+    values[2] = ((PyObject *)Py_None);
+    values[3] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -15325,136 +16984,370 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_27setRationalNumerator(PyObject *
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_n);
+          if (value) { values[0] = value; kw_args--; }
+        }
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_m);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_l);
+          if (value) { values[2] = value; kw_args--; }
+        }
+        case  3:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_k);
+          if (value) { values[3] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRationalNumerator") < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDimensions") < 0)) __PYX_ERR(10, 256, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
     } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
     }
-    __pyx_v_alpha = values[0];
+    __pyx_v_n = values[0];
+    __pyx_v_m = values[1];
+    __pyx_v_l = values[2];
+    __pyx_v_k = values[3];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setRationalNumerator", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[10]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setDimensions", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 256, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.FN.setRationalNumerator", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(((PyObject *)__pyx_v_alpha) == Py_None)) {
-    PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "alpha"); {__pyx_filename = __pyx_f[10]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_26setRationalNumerator(((struct PySlepcFNObject *)__pyx_v_self), __pyx_v_alpha);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_28setDimensions(((struct PySlepcDSObject *)__pyx_v_self), __pyx_v_n, __pyx_v_m, __pyx_v_l, __pyx_v_k);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_26setRationalNumerator(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_alpha) {
-  PetscInt __pyx_v_na;
-  PetscScalar *__pyx_v_a;
-  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_28setDimensions(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_n, PyObject *__pyx_v_m, PyObject *__pyx_v_l, PyObject *__pyx_v_k) {
+  PetscInt __pyx_v_ival1;
+  PetscInt __pyx_v_ival2;
+  PetscInt __pyx_v_ival3;
+  PetscInt __pyx_v_ival4;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setRationalNumerator", 0);
+  PetscInt __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("setDimensions", 0);
 
-  /* "SLEPc/FN.pyx":233
- *             Coefficients.
+  /* "SLEPc/DS.pyx":277
+ *         The value `m` is not used except in the case of DS.SVD.
  *         """
- *         cdef PetscInt na = 0             # <<<<<<<<<<<<<<
- *         cdef PetscScalar *a = NULL
- *         cdef object tmp1 = iarray_s(alpha, &na, &a)
+ *         cdef PetscInt ival1 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival2 = PETSC_DEFAULT
+ *         cdef PetscInt ival3 = 0
  */
-  __pyx_v_na = 0;
+  __pyx_v_ival1 = PETSC_DEFAULT;
 
-  /* "SLEPc/FN.pyx":234
+  /* "SLEPc/DS.pyx":278
  *         """
- *         cdef PetscInt na = 0
- *         cdef PetscScalar *a = NULL             # <<<<<<<<<<<<<<
- *         cdef object tmp1 = iarray_s(alpha, &na, &a)
- *         CHKERR( FNRationalSetNumerator(self.fn, na, a) )
- */
-  __pyx_v_a = NULL;
+ *         cdef PetscInt ival1 = PETSC_DEFAULT
+ *         cdef PetscInt ival2 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival3 = 0
+ *         cdef PetscInt ival4 = 0
+ */
+  __pyx_v_ival2 = PETSC_DEFAULT;
 
-  /* "SLEPc/FN.pyx":235
- *         cdef PetscInt na = 0
- *         cdef PetscScalar *a = NULL
- *         cdef object tmp1 = iarray_s(alpha, &na, &a)             # <<<<<<<<<<<<<<
- *         CHKERR( FNRationalSetNumerator(self.fn, na, a) )
+  /* "SLEPc/DS.pyx":279
+ *         cdef PetscInt ival1 = PETSC_DEFAULT
+ *         cdef PetscInt ival2 = PETSC_DEFAULT
+ *         cdef PetscInt ival3 = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival4 = 0
+ *         if n is not None: ival1 = asInt(n)
+ */
+  __pyx_v_ival3 = 0;
+
+  /* "SLEPc/DS.pyx":280
+ *         cdef PetscInt ival2 = PETSC_DEFAULT
+ *         cdef PetscInt ival3 = 0
+ *         cdef PetscInt ival4 = 0             # <<<<<<<<<<<<<<
+ *         if n is not None: ival1 = asInt(n)
+ *         if m is not None: ival2 = asInt(m)
+ */
+  __pyx_v_ival4 = 0;
+
+  /* "SLEPc/DS.pyx":281
+ *         cdef PetscInt ival3 = 0
+ *         cdef PetscInt ival4 = 0
+ *         if n is not None: ival1 = asInt(n)             # <<<<<<<<<<<<<<
+ *         if m is not None: ival2 = asInt(m)
+ *         if l is not None: ival3 = asInt(l)
+ */
+  __pyx_t_1 = (__pyx_v_n != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_n); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(10, 281, __pyx_L1_error)
+    __pyx_v_ival1 = __pyx_t_3;
+  }
+
+  /* "SLEPc/DS.pyx":282
+ *         cdef PetscInt ival4 = 0
+ *         if n is not None: ival1 = asInt(n)
+ *         if m is not None: ival2 = asInt(m)             # <<<<<<<<<<<<<<
+ *         if l is not None: ival3 = asInt(l)
+ *         if k is not None: ival4 = asInt(k)
+ */
+  __pyx_t_2 = (__pyx_v_m != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_m); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(10, 282, __pyx_L1_error)
+    __pyx_v_ival2 = __pyx_t_3;
+  }
+
+  /* "SLEPc/DS.pyx":283
+ *         if n is not None: ival1 = asInt(n)
+ *         if m is not None: ival2 = asInt(m)
+ *         if l is not None: ival3 = asInt(l)             # <<<<<<<<<<<<<<
+ *         if k is not None: ival4 = asInt(k)
+ *         CHKERR( DSSetDimensions(self.ds, ival1, ival2, ival3, ival4) )
+ */
+  __pyx_t_1 = (__pyx_v_l != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_l); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(10, 283, __pyx_L1_error)
+    __pyx_v_ival3 = __pyx_t_3;
+  }
+
+  /* "SLEPc/DS.pyx":284
+ *         if m is not None: ival2 = asInt(m)
+ *         if l is not None: ival3 = asInt(l)
+ *         if k is not None: ival4 = asInt(k)             # <<<<<<<<<<<<<<
+ *         CHKERR( DSSetDimensions(self.ds, ival1, ival2, ival3, ival4) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_iarray_s(__pyx_v_alpha, (&__pyx_v_na), (&__pyx_v_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_tmp1 = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_2 = (__pyx_v_k != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_k); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(10, 284, __pyx_L1_error)
+    __pyx_v_ival4 = __pyx_t_3;
+  }
 
-  /* "SLEPc/FN.pyx":236
- *         cdef PetscScalar *a = NULL
- *         cdef object tmp1 = iarray_s(alpha, &na, &a)
- *         CHKERR( FNRationalSetNumerator(self.fn, na, a) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/DS.pyx":285
+ *         if l is not None: ival3 = asInt(l)
+ *         if k is not None: ival4 = asInt(k)
+ *         CHKERR( DSSetDimensions(self.ds, ival1, ival2, ival3, ival4) )             # <<<<<<<<<<<<<<
  * 
- *     def setRationalDenominator(self, alpha not None):
+ *     def getDimensions(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNRationalSetNumerator(__pyx_v_self->fn, __pyx_v_na, __pyx_v_a)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSSetDimensions(__pyx_v_self->ds, __pyx_v_ival1, __pyx_v_ival2, __pyx_v_ival3, __pyx_v_ival4)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(10, 285, __pyx_L1_error)
 
-  /* "SLEPc/FN.pyx":224
- *     #
+  /* "SLEPc/DS.pyx":256
+ *         return val
  * 
- *     def setRationalNumerator(self, alpha not None):             # <<<<<<<<<<<<<<
+ *     def setDimensions(self, n=None, m=None, l=None, k=None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the coefficients of the numerator of the rational function.
+ *         Resize the matrices in the DS object.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.FN.setRationalNumerator", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_tmp1);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/FN.pyx":238
- *         CHKERR( FNRationalSetNumerator(self.fn, na, a) )
+/* "SLEPc/DS.pyx":287
+ *         CHKERR( DSSetDimensions(self.ds, ival1, ival2, ival3, ival4) )
  * 
- *     def setRationalDenominator(self, alpha not None):             # <<<<<<<<<<<<<<
+ *     def getDimensions(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the coefficients of the denominator of the rational function.
+ *         Returns the current dimensions.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_29setRationalDenominator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2FN_28setRationalDenominator[] = "FN.setRationalDenominator(self, alpha)\n\n        Sets the coefficients of the denominator of the rational function.\n\n        Parameters\n        ----------\n        alpha: array of scalars\n            Coefficients.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_29setRationalDenominator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_alpha = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_31getDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2DS_30getDimensions[] = "DS.getDimensions(self)\n\n        Returns the current dimensions.\n\n        Returns\n        -------\n        n: int\n           The new size.\n        m: int\n           The new column size (only for SVD).\n        l: int\n           Number of locked (inactive) leading columns.\n        k: int\n           Intermediate dimension (e.g., position of arrow).\n        t: int\n           Truncated length.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_31getDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setRationalDenominator (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getDimensions (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getDimensions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDimensions", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_30getDimensions(((struct PySlepcDSObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_30getDimensions(struct PySlepcDSObject *__pyx_v_self) {
+  PetscInt __pyx_v_ival1;
+  PetscInt __pyx_v_ival2;
+  PetscInt __pyx_v_ival3;
+  PetscInt __pyx_v_ival4;
+  PetscInt __pyx_v_ival5;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  __Pyx_RefNannySetupContext("getDimensions", 0);
+
+  /* "SLEPc/DS.pyx":304
+ *            Truncated length.
+ *         """
+ *         cdef PetscInt ival1 = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival2 = 0
+ *         cdef PetscInt ival3 = 0
+ */
+  __pyx_v_ival1 = 0;
+
+  /* "SLEPc/DS.pyx":305
+ *         """
+ *         cdef PetscInt ival1 = 0
+ *         cdef PetscInt ival2 = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival3 = 0
+ *         cdef PetscInt ival4 = 0
+ */
+  __pyx_v_ival2 = 0;
+
+  /* "SLEPc/DS.pyx":306
+ *         cdef PetscInt ival1 = 0
+ *         cdef PetscInt ival2 = 0
+ *         cdef PetscInt ival3 = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival4 = 0
+ *         cdef PetscInt ival5 = 0
+ */
+  __pyx_v_ival3 = 0;
+
+  /* "SLEPc/DS.pyx":307
+ *         cdef PetscInt ival2 = 0
+ *         cdef PetscInt ival3 = 0
+ *         cdef PetscInt ival4 = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival5 = 0
+ *         CHKERR( DSGetDimensions(self.ds, &ival1, &ival2, &ival3, &ival4, &ival5) )
+ */
+  __pyx_v_ival4 = 0;
+
+  /* "SLEPc/DS.pyx":308
+ *         cdef PetscInt ival3 = 0
+ *         cdef PetscInt ival4 = 0
+ *         cdef PetscInt ival5 = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( DSGetDimensions(self.ds, &ival1, &ival2, &ival3, &ival4, &ival5) )
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3), toInt(ival4), toInt(ival5))
+ */
+  __pyx_v_ival5 = 0;
+
+  /* "SLEPc/DS.pyx":309
+ *         cdef PetscInt ival4 = 0
+ *         cdef PetscInt ival5 = 0
+ *         CHKERR( DSGetDimensions(self.ds, &ival1, &ival2, &ival3, &ival4, &ival5) )             # <<<<<<<<<<<<<<
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3), toInt(ival4), toInt(ival5))
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSGetDimensions(__pyx_v_self->ds, (&__pyx_v_ival1), (&__pyx_v_ival2), (&__pyx_v_ival3), (&__pyx_v_ival4), (&__pyx_v_ival5))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(10, 309, __pyx_L1_error)
+
+  /* "SLEPc/DS.pyx":310
+ *         cdef PetscInt ival5 = 0
+ *         CHKERR( DSGetDimensions(self.ds, &ival1, &ival2, &ival3, &ival4, &ival5) )
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3), toInt(ival4), toInt(ival5))             # <<<<<<<<<<<<<<
+ * 
+ *     def setMethod(self, meth):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival1); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 310, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 310, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival3); if (unlikely(!__pyx_t_4)) __PYX_ERR(10, 310, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival4); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 310, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_6 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival5); if (unlikely(!__pyx_t_6)) __PYX_ERR(10, 310, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_t_7 = PyTuple_New(5); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 310, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_4);
+  PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_4);
+  __Pyx_GIVEREF(__pyx_t_5);
+  PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_t_5);
+  __Pyx_GIVEREF(__pyx_t_6);
+  PyTuple_SET_ITEM(__pyx_t_7, 4, __pyx_t_6);
+  __pyx_t_2 = 0;
+  __pyx_t_3 = 0;
+  __pyx_t_4 = 0;
+  __pyx_t_5 = 0;
+  __pyx_t_6 = 0;
+  __pyx_r = __pyx_t_7;
+  __pyx_t_7 = 0;
+  goto __pyx_L0;
+
+  /* "SLEPc/DS.pyx":287
+ *         CHKERR( DSSetDimensions(self.ds, ival1, ival2, ival3, ival4) )
+ * 
+ *     def getDimensions(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Returns the current dimensions.
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.getDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/DS.pyx":312
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3), toInt(ival4), toInt(ival5))
+ * 
+ *     def setMethod(self, meth):             # <<<<<<<<<<<<<<
+ *         """
+ *         Selects the method to be used to solve the problem.
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_33setMethod(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2DS_32setMethod[] = "DS.setMethod(self, meth)\n\n        Selects the method to be used to solve the problem.\n\n        Parameters\n        ----------\n        meth: int\n              An index indentifying the method.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_33setMethod(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_meth = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setMethod (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_alpha,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_meth,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -15467,199 +17360,184 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_29setRationalDenominator(PyObject
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_meth)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRationalDenominator") < 0)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMethod") < 0)) __PYX_ERR(10, 312, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_alpha = values[0];
+    __pyx_v_meth = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setRationalDenominator", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[10]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setMethod", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 312, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.FN.setRationalDenominator", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setMethod", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(((PyObject *)__pyx_v_alpha) == Py_None)) {
-    PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "alpha"); {__pyx_filename = __pyx_f[10]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_28setRationalDenominator(((struct PySlepcFNObject *)__pyx_v_self), __pyx_v_alpha);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_32setMethod(((struct PySlepcDSObject *)__pyx_v_self), __pyx_v_meth);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_28setRationalDenominator(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_alpha) {
-  PetscInt __pyx_v_na;
-  PetscScalar *__pyx_v_a;
-  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_32setMethod(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_meth) {
+  PetscInt __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  PetscInt __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setRationalDenominator", 0);
-
-  /* "SLEPc/FN.pyx":247
- *             Coefficients.
- *         """
- *         cdef PetscInt na = 0             # <<<<<<<<<<<<<<
- *         cdef PetscScalar *a = NULL
- *         cdef object tmp1 = iarray_s(alpha, &na, &a)
- */
-  __pyx_v_na = 0;
+  __Pyx_RefNannySetupContext("setMethod", 0);
 
-  /* "SLEPc/FN.pyx":248
+  /* "SLEPc/DS.pyx":321
+ *               An index indentifying the method.
  *         """
- *         cdef PetscInt na = 0
- *         cdef PetscScalar *a = NULL             # <<<<<<<<<<<<<<
- *         cdef object tmp1 = iarray_s(alpha, &na, &a)
- *         CHKERR( FNRationalSetDenominator(self.fn, na, a) )
- */
-  __pyx_v_a = NULL;
-
-  /* "SLEPc/FN.pyx":249
- *         cdef PetscInt na = 0
- *         cdef PetscScalar *a = NULL
- *         cdef object tmp1 = iarray_s(alpha, &na, &a)             # <<<<<<<<<<<<<<
- *         CHKERR( FNRationalSetDenominator(self.fn, na, a) )
+ *         cdef PetscInt val = meth             # <<<<<<<<<<<<<<
+ *         CHKERR( DSSetMethod(self.ds, val) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_iarray_s(__pyx_v_alpha, (&__pyx_v_na), (&__pyx_v_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_tmp1 = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_1 = __Pyx_PyInt_As_PetscInt(__pyx_v_meth); if (unlikely((__pyx_t_1 == (PetscInt)-1) && PyErr_Occurred())) __PYX_ERR(10, 321, __pyx_L1_error)
+  __pyx_v_val = __pyx_t_1;
 
-  /* "SLEPc/FN.pyx":250
- *         cdef PetscScalar *a = NULL
- *         cdef object tmp1 = iarray_s(alpha, &na, &a)
- *         CHKERR( FNRationalSetDenominator(self.fn, na, a) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/DS.pyx":322
+ *         """
+ *         cdef PetscInt val = meth
+ *         CHKERR( DSSetMethod(self.ds, val) )             # <<<<<<<<<<<<<<
  * 
- * # -----------------------------------------------------------------------------
+ *     def getMethod(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNRationalSetDenominator(__pyx_v_self->fn, __pyx_v_na, __pyx_v_a)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSSetMethod(__pyx_v_self->ds, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(10, 322, __pyx_L1_error)
 
-  /* "SLEPc/FN.pyx":238
- *         CHKERR( FNRationalSetNumerator(self.fn, na, a) )
+  /* "SLEPc/DS.pyx":312
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3), toInt(ival4), toInt(ival5))
  * 
- *     def setRationalDenominator(self, alpha not None):             # <<<<<<<<<<<<<<
+ *     def setMethod(self, meth):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the coefficients of the denominator of the rational function.
+ *         Selects the method to be used to solve the problem.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.FN.setRationalDenominator", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setMethod", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_tmp1);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/RG.pyx":22
- *     Type             = RGType
+/* "SLEPc/DS.pyx":324
+ *         CHKERR( DSSetMethod(self.ds, val) )
  * 
- *     def __cinit__(self):             # <<<<<<<<<<<<<<
- *         self.obj = <PetscObject*> &self.rg
- *         self.rg = NULL
+ *     def getMethod(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the method currently used in the DS.
  */
 
 /* Python wrapper */
-static int __pyx_pw_8slepc4py_5SLEPc_2RG_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_8slepc4py_5SLEPc_2RG_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_r;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_35getMethod(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2DS_34getMethod[] = "DS.getMethod(self)\n\n        Gets the method currently used in the DS.\n\n        Returns\n        -------\n        meth: int\n              Identifier of the method.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_35getMethod(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getMethod (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG___cinit__(((struct PySlepcRGObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getMethod", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getMethod", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_34getMethod(((struct PySlepcDSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_8slepc4py_5SLEPc_2RG___cinit__(struct PySlepcRGObject *__pyx_v_self) {
-  int __pyx_r;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_34getMethod(struct PySlepcDSObject *__pyx_v_self) {
+  PetscInt __pyx_v_val;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__", 0);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getMethod", 0);
 
-  /* "SLEPc/RG.pyx":23
- * 
- *     def __cinit__(self):
- *         self.obj = <PetscObject*> &self.rg             # <<<<<<<<<<<<<<
- *         self.rg = NULL
+  /* "SLEPc/DS.pyx":333
+ *               Identifier of the method.
+ *         """
+ *         cdef PetscInt val = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( DSGetMethod(self.ds, &val) )
+ *         return val
+ */
+  __pyx_v_val = 0;
+
+  /* "SLEPc/DS.pyx":334
+ *         """
+ *         cdef PetscInt val = 0
+ *         CHKERR( DSGetMethod(self.ds, &val) )             # <<<<<<<<<<<<<<
+ *         return val
  * 
  */
-  __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->rg));
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSGetMethod(__pyx_v_self->ds, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(10, 334, __pyx_L1_error)
 
-  /* "SLEPc/RG.pyx":24
- *     def __cinit__(self):
- *         self.obj = <PetscObject*> &self.rg
- *         self.rg = NULL             # <<<<<<<<<<<<<<
+  /* "SLEPc/DS.pyx":335
+ *         cdef PetscInt val = 0
+ *         CHKERR( DSGetMethod(self.ds, &val) )
+ *         return val             # <<<<<<<<<<<<<<
  * 
- *     def view(self, Viewer viewer=None):
+ *     def setCompact(self, comp):
  */
-  __pyx_v_self->rg = NULL;
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyInt_From_PetscInt(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 335, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
 
-  /* "SLEPc/RG.pyx":22
- *     Type             = RGType
+  /* "SLEPc/DS.pyx":324
+ *         CHKERR( DSSetMethod(self.ds, val) )
  * 
- *     def __cinit__(self):             # <<<<<<<<<<<<<<
- *         self.obj = <PetscObject*> &self.rg
- *         self.rg = NULL
+ *     def getMethod(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the method currently used in the DS.
  */
 
   /* function exit code */
-  __pyx_r = 0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.getMethod", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/RG.pyx":26
- *         self.rg = NULL
+/* "SLEPc/DS.pyx":337
+ *         return val
  * 
- *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *     def setCompact(self, comp):             # <<<<<<<<<<<<<<
  *         """
- *         Prints the RG data structure.
+ *         Switch to compact storage of matrices.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2RG_2view[] = "RG.view(self, Viewer viewer=None)\n\n        Prints the RG data structure.\n\n        Parameters\n        ----------\n        viewer: Viewer, optional\n                Visualization context; if not provided, the standard\n                output is used.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscViewerObject *__pyx_v_viewer = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_37setCompact(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2DS_36setCompact[] = "DS.setCompact(self, comp)\n\n        Switch to compact storage of matrices.\n\n        Parameters\n        ----------\n        comp: boolean\n              A boolean flag.\n\n        Notes\n        -----\n        Compact storage is used in some `DS` types such as\n        `DS.Type.HEP` when the matrix is tridiagonal. This flag\n        can be used to indicate whether the user provides the\n        matrix entries via the compact [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_37setCompact(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_comp = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("view (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setCompact (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_viewer,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comp,0};
     PyObject* values[1] = {0};
-    values[0] = (PyObject *)((struct PyPetscViewerObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
@@ -15671,103 +17549,85 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_3view(PyObject *__pyx_v_self, PyO
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_viewer);
-          if (value) { values[0] = value; kw_args--; }
-        }
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comp)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCompact") < 0)) __PYX_ERR(10, 337, __pyx_L3_error)
       }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
     } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_viewer = ((struct PyPetscViewerObject *)values[0]);
+    __pyx_v_comp = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setCompact", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 337, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.RG.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setCompact", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_2view(((struct PySlepcRGObject *)__pyx_v_self), __pyx_v_viewer);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_36setCompact(((struct PySlepcDSObject *)__pyx_v_self), __pyx_v_comp);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_2view(struct PySlepcRGObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
-  PetscViewer __pyx_v_vwr;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_36setCompact(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_comp) {
+  PetscBool __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
-  PetscViewer __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("view", 0);
+  __Pyx_RefNannySetupContext("setCompact", 0);
 
-  /* "SLEPc/RG.pyx":36
- *                 output is used.
+  /* "SLEPc/DS.pyx":356
+ *         The default is ``False``.
  *         """
- *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
- *         if viewer is not None: vwr = viewer.vwr
- *         CHKERR( RGView(self.rg, vwr) )
+ *         cdef PetscBool val = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         if comp: val = PETSC_TRUE
+ *         CHKERR( DSSetCompact(self.ds, val) )
  */
-  __pyx_v_vwr = NULL;
+  __pyx_v_val = PETSC_FALSE;
 
-  /* "SLEPc/RG.pyx":37
+  /* "SLEPc/DS.pyx":357
  *         """
- *         cdef PetscViewer vwr = NULL
- *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
- *         CHKERR( RGView(self.rg, vwr) )
+ *         cdef PetscBool val = PETSC_FALSE
+ *         if comp: val = PETSC_TRUE             # <<<<<<<<<<<<<<
+ *         CHKERR( DSSetCompact(self.ds, val) )
  * 
  */
-  __pyx_t_1 = (((PyObject *)__pyx_v_viewer) != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_v_viewer->vwr;
-    __pyx_v_vwr = __pyx_t_3;
-    goto __pyx_L3;
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_comp); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(10, 357, __pyx_L1_error)
+  if (__pyx_t_1) {
+    __pyx_v_val = PETSC_TRUE;
   }
-  __pyx_L3:;
 
-  /* "SLEPc/RG.pyx":38
- *         cdef PetscViewer vwr = NULL
- *         if viewer is not None: vwr = viewer.vwr
- *         CHKERR( RGView(self.rg, vwr) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/DS.pyx":358
+ *         cdef PetscBool val = PETSC_FALSE
+ *         if comp: val = PETSC_TRUE
+ *         CHKERR( DSSetCompact(self.ds, val) )             # <<<<<<<<<<<<<<
  * 
- *     def destroy(self):
+ *     def getCompact(self):
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGView(__pyx_v_self->rg, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSSetCompact(__pyx_v_self->ds, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(10, 358, __pyx_L1_error)
 
-  /* "SLEPc/RG.pyx":26
- *         self.rg = NULL
+  /* "SLEPc/DS.pyx":337
+ *         return val
  * 
- *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *     def setCompact(self, comp):             # <<<<<<<<<<<<<<
  *         """
- *         Prints the RG data structure.
+ *         Switch to compact storage of matrices.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.RG.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setCompact", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -15775,81 +17635,83 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_2view(struct PySlepcRGObject *__p
   return __pyx_r;
 }
 
-/* "SLEPc/RG.pyx":40
- *         CHKERR( RGView(self.rg, vwr) )
+/* "SLEPc/DS.pyx":360
+ *         CHKERR( DSSetCompact(self.ds, val) )
  * 
- *     def destroy(self):             # <<<<<<<<<<<<<<
+ *     def getCompact(self):             # <<<<<<<<<<<<<<
  *         """
- *         Destroys the RG object.
+ *         Gets the compact storage flag.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2RG_4destroy[] = "RG.destroy(self)\n\n        Destroys the RG object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_39getCompact(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2DS_38getCompact[] = "DS.getCompact(self)\n\n        Gets the compact storage flag.\n\n        Returns\n        -------\n        comp: boolean\n              The flag.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_39getCompact(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("destroy (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getCompact (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("destroy", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "destroy", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_4destroy(((struct PySlepcRGObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getCompact", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getCompact", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_38getCompact(((struct PySlepcDSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_4destroy(struct PySlepcRGObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_38getCompact(struct PySlepcDSObject *__pyx_v_self) {
+  PetscBool __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("destroy", 0);
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getCompact", 0);
 
-  /* "SLEPc/RG.pyx":44
- *         Destroys the RG object.
+  /* "SLEPc/DS.pyx":369
+ *               The flag.
  *         """
- *         CHKERR( RGDestroy(&self.rg) )             # <<<<<<<<<<<<<<
- *         self.rg = NULL
- *         return self
+ *         cdef PetscBool val = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( DSGetCompact(self.ds, &val) )
+ *         return val
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGDestroy((&__pyx_v_self->rg))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_val = PETSC_FALSE;
 
-  /* "SLEPc/RG.pyx":45
+  /* "SLEPc/DS.pyx":370
  *         """
- *         CHKERR( RGDestroy(&self.rg) )
- *         self.rg = NULL             # <<<<<<<<<<<<<<
- *         return self
+ *         cdef PetscBool val = PETSC_FALSE
+ *         CHKERR( DSGetCompact(self.ds, &val) )             # <<<<<<<<<<<<<<
+ *         return val
  * 
  */
-  __pyx_v_self->rg = NULL;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSGetCompact(__pyx_v_self->ds, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(10, 370, __pyx_L1_error)
 
-  /* "SLEPc/RG.pyx":46
- *         CHKERR( RGDestroy(&self.rg) )
- *         self.rg = NULL
- *         return self             # <<<<<<<<<<<<<<
+  /* "SLEPc/DS.pyx":371
+ *         cdef PetscBool val = PETSC_FALSE
+ *         CHKERR( DSGetCompact(self.ds, &val) )
+ *         return val             # <<<<<<<<<<<<<<
  * 
- *     def create(self, comm=None):
+ *     def setExtraRow(self, ext):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_r = ((PyObject *)__pyx_v_self);
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 371, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/RG.pyx":40
- *         CHKERR( RGView(self.rg, vwr) )
+  /* "SLEPc/DS.pyx":360
+ *         CHKERR( DSSetCompact(self.ds, val) )
  * 
- *     def destroy(self):             # <<<<<<<<<<<<<<
+ *     def getCompact(self):             # <<<<<<<<<<<<<<
  *         """
- *         Destroys the RG object.
+ *         Gets the compact storage flag.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.RG.destroy", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.getCompact", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -15857,29 +17719,25 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_4destroy(struct PySlepcRGObject *
   return __pyx_r;
 }
 
-/* "SLEPc/RG.pyx":48
- *         return self
+/* "SLEPc/DS.pyx":373
+ *         return val
  * 
- *     def create(self, comm=None):             # <<<<<<<<<<<<<<
+ *     def setExtraRow(self, ext):             # <<<<<<<<<<<<<<
  *         """
- *         Creates the RG object.
+ *         Sets a flag to indicate that the matrix has one extra row.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_7create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2RG_6create[] = "RG.create(self, comm=None)\n\n        Creates the RG object.\n\n        Parameters\n        ----------\n        comm: Comm, optional\n              MPI communicator; if not provided, it defaults to all\n              processes.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_7create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_comm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_41setExtraRow(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2DS_40setExtraRow[] = "DS.setExtraRow(self, ext)\n\n        Sets a flag to indicate that the matrix has one extra row.\n\n        Parameters\n        ----------\n        ext: boolean\n             A boolean flag.\n\n        Notes\n        -----\n        In Krylov methods it is useful that the matrix representing\n        the direct solver has one extra row, i.e., has dimension (n+1)\n        x n. If this flag is activated, all transformations applie [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_41setExtraRow(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_ext = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("create (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setExtraRow (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ext,0};
     PyObject* values[1] = {0};
-    values[0] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
@@ -15891,111 +17749,169 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_7create(PyObject *__pyx_v_self, P
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
-          if (value) { values[0] = value; kw_args--; }
-        }
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ext)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setExtraRow") < 0)) __PYX_ERR(10, 373, __pyx_L3_error)
       }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
     } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_comm = values[0];
+    __pyx_v_ext = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setExtraRow", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 373, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.RG.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setExtraRow", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_6create(((struct PySlepcRGObject *)__pyx_v_self), __pyx_v_comm);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_40setExtraRow(((struct PySlepcDSObject *)__pyx_v_self), __pyx_v_ext);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_6create(struct PySlepcRGObject *__pyx_v_self, PyObject *__pyx_v_comm) {
-  MPI_Comm __pyx_v_ccomm;
-  RG __pyx_v_newrg;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_40setExtraRow(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_ext) {
+  PetscBool __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  MPI_Comm __pyx_t_1;
+  int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("create", 0);
+  __Pyx_RefNannySetupContext("setExtraRow", 0);
 
-  /* "SLEPc/RG.pyx":58
- *               processes.
+  /* "SLEPc/DS.pyx":393
+ *         The default is ``False``.
  *         """
- *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())             # <<<<<<<<<<<<<<
- *         cdef SlepcRG newrg = NULL
- *         CHKERR( RGCreate(ccomm, &newrg) )
+ *         cdef PetscBool val = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         if ext: val = PETSC_TRUE
+ *         CHKERR( DSSetExtraRow(self.ds, val) )
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_def_Comm(__pyx_v_comm, __pyx_f_8slepc4py_5SLEPc_SLEPC_COMM_DEFAULT()); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ccomm = __pyx_t_1;
+  __pyx_v_val = PETSC_FALSE;
 
-  /* "SLEPc/RG.pyx":59
+  /* "SLEPc/DS.pyx":394
  *         """
- *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
- *         cdef SlepcRG newrg = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( RGCreate(ccomm, &newrg) )
- *         SlepcCLEAR(self.obj); self.rg = newrg
+ *         cdef PetscBool val = PETSC_FALSE
+ *         if ext: val = PETSC_TRUE             # <<<<<<<<<<<<<<
+ *         CHKERR( DSSetExtraRow(self.ds, val) )
+ * 
  */
-  __pyx_v_newrg = NULL;
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_ext); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(10, 394, __pyx_L1_error)
+  if (__pyx_t_1) {
+    __pyx_v_val = PETSC_TRUE;
+  }
 
-  /* "SLEPc/RG.pyx":60
- *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
- *         cdef SlepcRG newrg = NULL
- *         CHKERR( RGCreate(ccomm, &newrg) )             # <<<<<<<<<<<<<<
- *         SlepcCLEAR(self.obj); self.rg = newrg
- *         return self
+  /* "SLEPc/DS.pyx":395
+ *         cdef PetscBool val = PETSC_FALSE
+ *         if ext: val = PETSC_TRUE
+ *         CHKERR( DSSetExtraRow(self.ds, val) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getExtraRow(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGCreate(__pyx_v_ccomm, (&__pyx_v_newrg))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSSetExtraRow(__pyx_v_self->ds, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(10, 395, __pyx_L1_error)
 
-  /* "SLEPc/RG.pyx":61
- *         cdef SlepcRG newrg = NULL
- *         CHKERR( RGCreate(ccomm, &newrg) )
- *         SlepcCLEAR(self.obj); self.rg = newrg             # <<<<<<<<<<<<<<
- *         return self
+  /* "SLEPc/DS.pyx":373
+ *         return val
  * 
+ *     def setExtraRow(self, ext):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets a flag to indicate that the matrix has one extra row.
  */
-  __pyx_f_8slepc4py_5SLEPc_SlepcCLEAR(__pyx_v_self->__pyx_base.obj);
-  __pyx_v_self->rg = __pyx_v_newrg;
 
-  /* "SLEPc/RG.pyx":62
- *         CHKERR( RGCreate(ccomm, &newrg) )
- *         SlepcCLEAR(self.obj); self.rg = newrg
- *         return self             # <<<<<<<<<<<<<<
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setExtraRow", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/DS.pyx":397
+ *         CHKERR( DSSetExtraRow(self.ds, val) )
  * 
- *     def setType(self, rg_type):
+ *     def getExtraRow(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the extra row flag.
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_43getExtraRow(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2DS_42getExtraRow[] = "DS.getExtraRow(self)\n\n        Gets the extra row flag.\n\n        Returns\n        -------\n        comp: boolean\n              The flag.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_43getExtraRow(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getExtraRow (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getExtraRow", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getExtraRow", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_42getExtraRow(((struct PySlepcDSObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_42getExtraRow(struct PySlepcDSObject *__pyx_v_self) {
+  PetscBool __pyx_v_val;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getExtraRow", 0);
+
+  /* "SLEPc/DS.pyx":406
+ *               The flag.
+ *         """
+ *         cdef PetscBool val = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( DSGetExtraRow(self.ds, &val) )
+ *         return val
+ */
+  __pyx_v_val = PETSC_FALSE;
+
+  /* "SLEPc/DS.pyx":407
+ *         """
+ *         cdef PetscBool val = PETSC_FALSE
+ *         CHKERR( DSGetExtraRow(self.ds, &val) )             # <<<<<<<<<<<<<<
+ *         return val
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSGetExtraRow(__pyx_v_self->ds, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(10, 407, __pyx_L1_error)
+
+  /* "SLEPc/DS.pyx":408
+ *         cdef PetscBool val = PETSC_FALSE
+ *         CHKERR( DSGetExtraRow(self.ds, &val) )
+ *         return val             # <<<<<<<<<<<<<<
+ * 
+ *     def setRefined(self, ref):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_r = ((PyObject *)__pyx_v_self);
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 408, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/RG.pyx":48
- *         return self
+  /* "SLEPc/DS.pyx":397
+ *         CHKERR( DSSetExtraRow(self.ds, val) )
  * 
- *     def create(self, comm=None):             # <<<<<<<<<<<<<<
+ *     def getExtraRow(self):             # <<<<<<<<<<<<<<
  *         """
- *         Creates the RG object.
+ *         Gets the extra row flag.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.RG.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.getExtraRow", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -16003,27 +17919,24 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_6create(struct PySlepcRGObject *_
   return __pyx_r;
 }
 
-/* "SLEPc/RG.pyx":64
- *         return self
+/* "SLEPc/DS.pyx":410
+ *         return val
  * 
- *     def setType(self, rg_type):             # <<<<<<<<<<<<<<
+ *     def setRefined(self, ref):             # <<<<<<<<<<<<<<
  *         """
- *         Selects the type for the RG object.
+ *         Sets a flag to indicate that refined vectors must be computed.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_9setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2RG_8setType[] = "RG.setType(self, rg_type)\n\n        Selects the type for the RG object.\n\n        Parameters\n        ----------\n        rg_type: `RG.Type` enumerate\n                  The inner product type to be used.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_9setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_rg_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_45setRefined(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2DS_44setRefined[] = "DS.setRefined(self, ref)\n\n        Sets a flag to indicate that refined vectors must be computed.\n\n        Parameters\n        ----------\n        ref: boolean\n             A boolean flag.\n\n        Notes\n        -----\n        Normally the vectors returned in `DS.MatType.X` are eigenvectors\n        of the projected matrix. With this flag activated, `vectors()`\n        will return the right singular vector of the smalle [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_45setRefined(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_ref = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setType (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setRefined (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rg_type,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ref,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -16036,178 +17949,169 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_9setType(PyObject *__pyx_v_self,
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rg_type)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ref)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRefined") < 0)) __PYX_ERR(10, 410, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_rg_type = values[0];
+    __pyx_v_ref = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setRefined", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 410, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.RG.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setRefined", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_8setType(((struct PySlepcRGObject *)__pyx_v_self), __pyx_v_rg_type);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_44setRefined(((struct PySlepcDSObject *)__pyx_v_self), __pyx_v_ref);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_8setType(struct PySlepcRGObject *__pyx_v_self, PyObject *__pyx_v_rg_type) {
-  const char* __pyx_v_cval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_44setRefined(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_ref) {
+  PetscBool __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setType", 0);
-  __Pyx_INCREF(__pyx_v_rg_type);
+  __Pyx_RefNannySetupContext("setRefined", 0);
 
-  /* "SLEPc/RG.pyx":73
- *                   The inner product type to be used.
+  /* "SLEPc/DS.pyx":430
+ *         The default is ``False``.
  *         """
- *         cdef SlepcRGType cval = NULL             # <<<<<<<<<<<<<<
- *         rg_type = str2bytes(rg_type, &cval)
- *         CHKERR( RGSetType(self.rg, cval) )
+ *         cdef PetscBool val = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         if ref: val = PETSC_TRUE
+ *         CHKERR( DSSetRefined(self.ds, val) )
  */
-  __pyx_v_cval = NULL;
+  __pyx_v_val = PETSC_FALSE;
 
-  /* "SLEPc/RG.pyx":74
+  /* "SLEPc/DS.pyx":431
  *         """
- *         cdef SlepcRGType cval = NULL
- *         rg_type = str2bytes(rg_type, &cval)             # <<<<<<<<<<<<<<
- *         CHKERR( RGSetType(self.rg, cval) )
+ *         cdef PetscBool val = PETSC_FALSE
+ *         if ref: val = PETSC_TRUE             # <<<<<<<<<<<<<<
+ *         CHKERR( DSSetRefined(self.ds, val) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_rg_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_rg_type, __pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_ref); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(10, 431, __pyx_L1_error)
+  if (__pyx_t_1) {
+    __pyx_v_val = PETSC_TRUE;
+  }
 
-  /* "SLEPc/RG.pyx":75
- *         cdef SlepcRGType cval = NULL
- *         rg_type = str2bytes(rg_type, &cval)
- *         CHKERR( RGSetType(self.rg, cval) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/DS.pyx":432
+ *         cdef PetscBool val = PETSC_FALSE
+ *         if ref: val = PETSC_TRUE
+ *         CHKERR( DSSetRefined(self.ds, val) )             # <<<<<<<<<<<<<<
  * 
- *     def getType(self):
+ *     def getRefined(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGSetType(__pyx_v_self->rg, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSSetRefined(__pyx_v_self->ds, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(10, 432, __pyx_L1_error)
 
-  /* "SLEPc/RG.pyx":64
- *         return self
+  /* "SLEPc/DS.pyx":410
+ *         return val
  * 
- *     def setType(self, rg_type):             # <<<<<<<<<<<<<<
+ *     def setRefined(self, ref):             # <<<<<<<<<<<<<<
  *         """
- *         Selects the type for the RG object.
+ *         Sets a flag to indicate that refined vectors must be computed.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.RG.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.setRefined", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_rg_type);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/RG.pyx":77
- *         CHKERR( RGSetType(self.rg, cval) )
+/* "SLEPc/DS.pyx":434
+ *         CHKERR( DSSetRefined(self.ds, val) )
  * 
- *     def getType(self):             # <<<<<<<<<<<<<<
+ *     def getRefined(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the RG type of this object.
+ *         Gets the refined vectors flag.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_11getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2RG_10getType[] = "RG.getType(self)\n\n        Gets the RG type of this object.\n\n        Returns\n        -------\n        type: `RG.Type` enumerate\n              The inner product type currently being used.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_11getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_47getRefined(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2DS_46getRefined[] = "DS.getRefined(self)\n\n        Gets the refined vectors flag.\n\n        Returns\n        -------\n        comp: boolean\n              The flag.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_47getRefined(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getType (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getRefined (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getType", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_10getType(((struct PySlepcRGObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getRefined", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getRefined", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_46getRefined(((struct PySlepcDSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_10getType(struct PySlepcRGObject *__pyx_v_self) {
-  const char* __pyx_v_rg_type;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_46getRefined(struct PySlepcDSObject *__pyx_v_self) {
+  PetscBool __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getType", 0);
+  __Pyx_RefNannySetupContext("getRefined", 0);
 
-  /* "SLEPc/RG.pyx":86
- *               The inner product type currently being used.
+  /* "SLEPc/DS.pyx":443
+ *               The flag.
  *         """
- *         cdef SlepcRGType rg_type = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( RGGetType(self.rg, &rg_type) )
- *         return bytes2str(rg_type)
+ *         cdef PetscBool val = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( DSGetRefined(self.ds, &val) )
+ *         return val
  */
-  __pyx_v_rg_type = NULL;
+  __pyx_v_val = PETSC_FALSE;
 
-  /* "SLEPc/RG.pyx":87
+  /* "SLEPc/DS.pyx":444
  *         """
- *         cdef SlepcRGType rg_type = NULL
- *         CHKERR( RGGetType(self.rg, &rg_type) )             # <<<<<<<<<<<<<<
- *         return bytes2str(rg_type)
+ *         cdef PetscBool val = PETSC_FALSE
+ *         CHKERR( DSGetRefined(self.ds, &val) )             # <<<<<<<<<<<<<<
+ *         return val
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGGetType(__pyx_v_self->rg, (&__pyx_v_rg_type))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSGetRefined(__pyx_v_self->ds, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(10, 444, __pyx_L1_error)
 
-  /* "SLEPc/RG.pyx":88
- *         cdef SlepcRGType rg_type = NULL
- *         CHKERR( RGGetType(self.rg, &rg_type) )
- *         return bytes2str(rg_type)             # <<<<<<<<<<<<<<
+  /* "SLEPc/DS.pyx":445
+ *         cdef PetscBool val = PETSC_FALSE
+ *         CHKERR( DSGetRefined(self.ds, &val) )
+ *         return val             # <<<<<<<<<<<<<<
  * 
- *     def setOptionsPrefix(self, prefix):
+ *     def truncate(self, n):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_rg_type); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 445, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/RG.pyx":77
- *         CHKERR( RGSetType(self.rg, cval) )
+  /* "SLEPc/DS.pyx":434
+ *         CHKERR( DSSetRefined(self.ds, val) )
  * 
- *     def getType(self):             # <<<<<<<<<<<<<<
+ *     def getRefined(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the RG type of this object.
+ *         Gets the refined vectors flag.
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.RG.getType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.getRefined", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -16215,27 +18119,24 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_10getType(struct PySlepcRGObject
   return __pyx_r;
 }
 
-/* "SLEPc/RG.pyx":90
- *         return bytes2str(rg_type)
+/* "SLEPc/DS.pyx":447
+ *         return val
  * 
- *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *     def truncate(self, n):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the prefix used for searching for all RG options in the
+ *         Truncates the system represented in the DS object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_13setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2RG_12setOptionsPrefix[] = "RG.setOptionsPrefix(self, prefix)\n\n        Sets the prefix used for searching for all RG options in the\n        database.\n\n        Parameters\n        ----------\n        prefix: string\n                The prefix string to prepend to all RG option\n                requests.\n\n        Notes\n        -----\n        A hyphen (``-``) must NOT be given at the beginning of the\n        prefix name.  The first character o [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_13setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_prefix = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_49truncate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2DS_48truncate[] = "DS.truncate(self, n)\n\n        Truncates the system represented in the DS object.\n\n        Parameters\n        ----------\n        n: integer\n           The new size.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_49truncate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_n = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setOptionsPrefix (wrapper)", 0);
+  __Pyx_RefNannySetupContext("truncate (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_prefix,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_n,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -16248,178 +18149,134 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_13setOptionsPrefix(PyObject *__py
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_prefix)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_n)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "truncate") < 0)) __PYX_ERR(10, 447, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_prefix = values[0];
+    __pyx_v_n = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("truncate", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 447, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.RG.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.truncate", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_12setOptionsPrefix(((struct PySlepcRGObject *)__pyx_v_self), __pyx_v_prefix);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_48truncate(((struct PySlepcDSObject *)__pyx_v_self), __pyx_v_n);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_12setOptionsPrefix(struct PySlepcRGObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
-  const char *__pyx_v_cval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_48truncate(struct PySlepcDSObject *__pyx_v_self, PyObject *__pyx_v_n) {
+  PetscInt __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  PetscInt __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setOptionsPrefix", 0);
-  __Pyx_INCREF(__pyx_v_prefix);
+  __Pyx_RefNannySetupContext("truncate", 0);
 
-  /* "SLEPc/RG.pyx":107
- *         AUTOMATICALLY the hyphen.
+  /* "SLEPc/DS.pyx":456
+ *            The new size.
  *         """
- *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
- *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( RGSetOptionsPrefix(self.rg, cval) )
+ *         cdef PetscInt val = n             # <<<<<<<<<<<<<<
+ *         CHKERR( DSTruncate(self.ds, val) )
+ * 
  */
-  __pyx_v_cval = NULL;
+  __pyx_t_1 = __Pyx_PyInt_As_PetscInt(__pyx_v_n); if (unlikely((__pyx_t_1 == (PetscInt)-1) && PyErr_Occurred())) __PYX_ERR(10, 456, __pyx_L1_error)
+  __pyx_v_val = __pyx_t_1;
 
-  /* "SLEPc/RG.pyx":108
+  /* "SLEPc/DS.pyx":457
  *         """
- *         cdef const_char *cval = NULL
- *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
- *         CHKERR( RGSetOptionsPrefix(self.rg, cval) )
+ *         cdef PetscInt val = n
+ *         CHKERR( DSTruncate(self.ds, val) )             # <<<<<<<<<<<<<<
  * 
+ *     def updateExtraRow(self):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSTruncate(__pyx_v_self->ds, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(10, 457, __pyx_L1_error)
 
-  /* "SLEPc/RG.pyx":109
- *         cdef const_char *cval = NULL
- *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( RGSetOptionsPrefix(self.rg, cval) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/DS.pyx":447
+ *         return val
  * 
- *     def getOptionsPrefix(self):
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGSetOptionsPrefix(__pyx_v_self->rg, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/RG.pyx":90
- *         return bytes2str(rg_type)
- * 
- *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
- *         """
- *         Sets the prefix used for searching for all RG options in the
+ *     def truncate(self, n):             # <<<<<<<<<<<<<<
+ *         """
+ *         Truncates the system represented in the DS object.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.RG.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.truncate", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_prefix);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/RG.pyx":111
- *         CHKERR( RGSetOptionsPrefix(self.rg, cval) )
+/* "SLEPc/DS.pyx":459
+ *         CHKERR( DSTruncate(self.ds, val) )
  * 
- *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
+ *     def updateExtraRow(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the prefix used for searching for all RG options in the
+ *         Performs all necessary operations so that the extra
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2RG_14getOptionsPrefix[] = "RG.getOptionsPrefix(self)\n\n        Gets the prefix used for searching for all RG options in the\n        database.\n\n        Returns\n        -------\n        prefix: string\n                The prefix string set for this RG object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_51updateExtraRow(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2DS_50updateExtraRow[] = "DS.updateExtraRow(self)\n\n        Performs all necessary operations so that the extra\n        row gets up-to-date after a call to `solve()`.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2DS_51updateExtraRow(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getOptionsPrefix (wrapper)", 0);
+  __Pyx_RefNannySetupContext("updateExtraRow (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getOptionsPrefix", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getOptionsPrefix", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_14getOptionsPrefix(((struct PySlepcRGObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("updateExtraRow", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "updateExtraRow", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2DS_50updateExtraRow(((struct PySlepcDSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_14getOptionsPrefix(struct PySlepcRGObject *__pyx_v_self) {
-  const char *__pyx_v_prefix;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2DS_50updateExtraRow(struct PySlepcDSObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getOptionsPrefix", 0);
-
-  /* "SLEPc/RG.pyx":121
- *                 The prefix string set for this RG object.
- *         """
- *         cdef const_char *prefix = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( RGGetOptionsPrefix(self.rg, &prefix) )
- *         return bytes2str(prefix)
- */
-  __pyx_v_prefix = NULL;
+  __Pyx_RefNannySetupContext("updateExtraRow", 0);
 
-  /* "SLEPc/RG.pyx":122
+  /* "SLEPc/DS.pyx":464
+ *         row gets up-to-date after a call to `solve()`.
  *         """
- *         cdef const_char *prefix = NULL
- *         CHKERR( RGGetOptionsPrefix(self.rg, &prefix) )             # <<<<<<<<<<<<<<
- *         return bytes2str(prefix)
- * 
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGGetOptionsPrefix(__pyx_v_self->rg, (&__pyx_v_prefix))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/RG.pyx":123
- *         cdef const_char *prefix = NULL
- *         CHKERR( RGGetOptionsPrefix(self.rg, &prefix) )
- *         return bytes2str(prefix)             # <<<<<<<<<<<<<<
+ *         CHKERR( DSUpdateExtraRow(self.ds) )             # <<<<<<<<<<<<<<
  * 
- *     def setFromOptions(self):
+ * # -----------------------------------------------------------------------------
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_prefix); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(DSUpdateExtraRow(__pyx_v_self->ds)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(10, 464, __pyx_L1_error)
 
-  /* "SLEPc/RG.pyx":111
- *         CHKERR( RGSetOptionsPrefix(self.rg, cval) )
+  /* "SLEPc/DS.pyx":459
+ *         CHKERR( DSTruncate(self.ds, val) )
  * 
- *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
+ *     def updateExtraRow(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the prefix used for searching for all RG options in the
+ *         Performs all necessary operations so that the extra
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.RG.getOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.DS.updateExtraRow", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -16427,149 +18284,190 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_14getOptionsPrefix(struct PySlepc
   return __pyx_r;
 }
 
-/* "SLEPc/RG.pyx":125
- *         return bytes2str(prefix)
+/* "SLEPc/FN.pyx":40
+ *     CombineType = FNCombineType
  * 
- *     def setFromOptions(self):             # <<<<<<<<<<<<<<
- *         """
- *         Sets RG options from the options database.
+ *     def __cinit__(self):             # <<<<<<<<<<<<<<
+ *         self.obj = <PetscObject*> &self.fn
+ *         self.fn = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_17setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2RG_16setFromOptions[] = "RG.setFromOptions(self)\n\n        Sets RG options from the options database.\n\n        Notes\n        -----\n        To see all options, run your program with the ``-help``\n        option.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_17setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
+static int __pyx_pw_8slepc4py_5SLEPc_2FN_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pw_8slepc4py_5SLEPc_2FN_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setFromOptions (wrapper)", 0);
+  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("setFromOptions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setFromOptions", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_16setFromOptions(((struct PySlepcRGObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN___cinit__(((struct PySlepcFNObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_16setFromOptions(struct PySlepcRGObject *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
+static int __pyx_pf_8slepc4py_5SLEPc_2FN___cinit__(struct PySlepcFNObject *__pyx_v_self) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setFromOptions", 0);
+  __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "SLEPc/RG.pyx":134
- *         option.
- *         """
- *         CHKERR( RGSetFromOptions(self.rg) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/FN.pyx":41
+ * 
+ *     def __cinit__(self):
+ *         self.obj = <PetscObject*> &self.fn             # <<<<<<<<<<<<<<
+ *         self.fn = NULL
  * 
- *     #
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGSetFromOptions(__pyx_v_self->rg)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->fn));
 
-  /* "SLEPc/RG.pyx":125
- *         return bytes2str(prefix)
+  /* "SLEPc/FN.pyx":42
+ *     def __cinit__(self):
+ *         self.obj = <PetscObject*> &self.fn
+ *         self.fn = NULL             # <<<<<<<<<<<<<<
  * 
- *     def setFromOptions(self):             # <<<<<<<<<<<<<<
- *         """
- *         Sets RG options from the options database.
+ *     def view(self, Viewer viewer=None):
+ */
+  __pyx_v_self->fn = NULL;
+
+  /* "SLEPc/FN.pyx":40
+ *     CombineType = FNCombineType
+ * 
+ *     def __cinit__(self):             # <<<<<<<<<<<<<<
+ *         self.obj = <PetscObject*> &self.fn
+ *         self.fn = NULL
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.RG.setFromOptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
+  __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/RG.pyx":138
- *     #
+/* "SLEPc/FN.pyx":44
+ *         self.fn = NULL
  * 
- *     def isTrivial(self):             # <<<<<<<<<<<<<<
+ *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
  *         """
- *         Tells whether it is the trivial region (whole complex plane).
+ *         Prints the FN data structure.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_19isTrivial(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2RG_18isTrivial[] = "RG.isTrivial(self)\n\n        Tells whether it is the trivial region (whole complex plane).\n\n        Returns\n        -------\n        flag: boolean\n             True if the region is equal to the whole complex plane, e.g.,\n             an interval region with all four endpoints unbounded or an\n             ellipse with infinite radius.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_19isTrivial(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2FN_2view[] = "FN.view(self, Viewer viewer=None)\n\n        Prints the FN data structure.\n\n        Parameters\n        ----------\n        viewer: Viewer, optional\n                Visualization context; if not provided, the standard\n                output is used.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscViewerObject *__pyx_v_viewer = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("isTrivial (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("isTrivial", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "isTrivial", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_18isTrivial(((struct PySlepcRGObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("view (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_viewer,0};
+    PyObject* values[1] = {0};
+    values[0] = (PyObject *)((struct PyPetscViewerObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_viewer);
+          if (value) { values[0] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(11, 44, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_viewer = ((struct PyPetscViewerObject *)values[0]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(11, 44, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.FN.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) __PYX_ERR(11, 44, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_2view(((struct PySlepcFNObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_18isTrivial(struct PySlepcRGObject *__pyx_v_self) {
-  PetscBool __pyx_v_tval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_2view(struct PySlepcFNObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
+  PetscViewer __pyx_v_vwr;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("isTrivial", 0);
+  int __pyx_t_2;
+  PetscViewer __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("view", 0);
 
-  /* "SLEPc/RG.pyx":149
- *              ellipse with infinite radius.
+  /* "SLEPc/FN.pyx":54
+ *                 output is used.
  *         """
- *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( RGIsTrivial(self.rg, &tval) )
- *         return <bint> tval
+ *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( FNView(self.fn, vwr) )
  */
-  __pyx_v_tval = PETSC_FALSE;
+  __pyx_v_vwr = NULL;
 
-  /* "SLEPc/RG.pyx":150
+  /* "SLEPc/FN.pyx":55
  *         """
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( RGIsTrivial(self.rg, &tval) )             # <<<<<<<<<<<<<<
- *         return <bint> tval
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
+ *         CHKERR( FNView(self.fn, vwr) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGIsTrivial(__pyx_v_self->rg, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (((PyObject *)__pyx_v_viewer) != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_v_viewer->vwr;
+    __pyx_v_vwr = __pyx_t_3;
+  }
 
-  /* "SLEPc/RG.pyx":151
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( RGIsTrivial(self.rg, &tval) )
- *         return <bint> tval             # <<<<<<<<<<<<<<
+  /* "SLEPc/FN.pyx":56
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( FNView(self.fn, vwr) )             # <<<<<<<<<<<<<<
  * 
- *     def getComplement(self):
+ *     def destroy(self):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_tval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNView(__pyx_v_self->fn, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(11, 56, __pyx_L1_error)
 
-  /* "SLEPc/RG.pyx":138
- *     #
+  /* "SLEPc/FN.pyx":44
+ *         self.fn = NULL
  * 
- *     def isTrivial(self):             # <<<<<<<<<<<<<<
+ *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
  *         """
- *         Tells whether it is the trivial region (whole complex plane).
+ *         Prints the FN data structure.
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.RG.isTrivial", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.FN.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -16577,86 +18475,78 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_18isTrivial(struct PySlepcRGObjec
   return __pyx_r;
 }
 
-/* "SLEPc/RG.pyx":153
- *         return <bint> tval
+/* "SLEPc/FN.pyx":58
+ *         CHKERR( FNView(self.fn, vwr) )
  * 
- *     def getComplement(self):             # <<<<<<<<<<<<<<
+ *     def destroy(self):             # <<<<<<<<<<<<<<
  *         """
- *         Returns the flag indicating whether the region is complemented or not.
+ *         Destroys the FN object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_21getComplement(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2RG_20getComplement[] = "RG.getComplement(self)\n\n        Returns the flag indicating whether the region is complemented or not.\n\n        Returns\n        -------\n        flg: bool\n            Whether the region is complemented or not.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_21getComplement(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2FN_4destroy[] = "FN.destroy(self)\n\n        Destroys the FN object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getComplement (wrapper)", 0);
+  __Pyx_RefNannySetupContext("destroy (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getComplement", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getComplement", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_20getComplement(((struct PySlepcRGObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("destroy", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "destroy", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_4destroy(((struct PySlepcFNObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_20getComplement(struct PySlepcRGObject *__pyx_v_self) {
-  PetscBool __pyx_v_tval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_4destroy(struct PySlepcFNObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getComplement", 0);
+  __Pyx_RefNannySetupContext("destroy", 0);
 
-  /* "SLEPc/RG.pyx":162
- *             Whether the region is complemented or not.
+  /* "SLEPc/FN.pyx":62
+ *         Destroys the FN object.
  *         """
- *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( RGGetComplement(self.rg, &tval) )
- *         return <bint>tval
+ *         CHKERR( FNDestroy(&self.fn) )             # <<<<<<<<<<<<<<
+ *         self.fn = NULL
+ *         return self
  */
-  __pyx_v_tval = PETSC_FALSE;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNDestroy((&__pyx_v_self->fn))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(11, 62, __pyx_L1_error)
 
-  /* "SLEPc/RG.pyx":163
+  /* "SLEPc/FN.pyx":63
  *         """
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( RGGetComplement(self.rg, &tval) )             # <<<<<<<<<<<<<<
- *         return <bint>tval
+ *         CHKERR( FNDestroy(&self.fn) )
+ *         self.fn = NULL             # <<<<<<<<<<<<<<
+ *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGGetComplement(__pyx_v_self->rg, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->fn = NULL;
 
-  /* "SLEPc/RG.pyx":164
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( RGGetComplement(self.rg, &tval) )
- *         return <bint>tval             # <<<<<<<<<<<<<<
+  /* "SLEPc/FN.pyx":64
+ *         CHKERR( FNDestroy(&self.fn) )
+ *         self.fn = NULL
+ *         return self             # <<<<<<<<<<<<<<
  * 
- *     def setComplement(self, comp):
+ *     def create(self, comm=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_tval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "SLEPc/RG.pyx":153
- *         return <bint> tval
+  /* "SLEPc/FN.pyx":58
+ *         CHKERR( FNView(self.fn, vwr) )
  * 
- *     def getComplement(self):             # <<<<<<<<<<<<<<
+ *     def destroy(self):             # <<<<<<<<<<<<<<
  *         """
- *         Returns the flag indicating whether the region is complemented or not.
+ *         Destroys the FN object.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.RG.getComplement", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.FN.destroy", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -16664,28 +18554,26 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_20getComplement(struct PySlepcRGO
   return __pyx_r;
 }
 
-/* "SLEPc/RG.pyx":166
- *         return <bint>tval
+/* "SLEPc/FN.pyx":66
+ *         return self
  * 
- *     def setComplement(self, comp):             # <<<<<<<<<<<<<<
+ *     def create(self, comm=None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets a flag to indicate that the region is the complement
+ *         Creates the FN object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_23setComplement(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2RG_22setComplement[] = "RG.setComplement(self, comp)\n\n        Sets a flag to indicate that the region is the complement\n        of the specified one.\n\n        Parameters\n        ----------\n        comp: bool\n            Activate/deactivate the complementation of the region.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_23setComplement(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_comp = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_7create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2FN_6create[] = "FN.create(self, comm=None)\n\n        Creates the FN object.\n\n        Parameters\n        ----------\n        comm: Comm, optional\n              MPI communicator; if not provided, it defaults to all\n              processes.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_7create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setComplement (wrapper)", 0);
+  __Pyx_RefNannySetupContext("create (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comp,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,0};
     PyObject* values[1] = {0};
+    values[0] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
@@ -16697,77 +18585,108 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_23setComplement(PyObject *__pyx_v
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comp)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
+          if (value) { values[0] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setComplement") < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(11, 66, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
     } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
     }
-    __pyx_v_comp = values[0];
+    __pyx_v_comm = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setComplement", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(11, 66, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.RG.setComplement", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.FN.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_22setComplement(((struct PySlepcRGObject *)__pyx_v_self), __pyx_v_comp);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_6create(((struct PySlepcFNObject *)__pyx_v_self), __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_22setComplement(struct PySlepcRGObject *__pyx_v_self, PyObject *__pyx_v_comp) {
-  PetscBool __pyx_v_tval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_6create(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_comm) {
+  MPI_Comm __pyx_v_ccomm;
+  FN __pyx_v_newfn;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscBool __pyx_t_1;
+  MPI_Comm __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setComplement", 0);
+  __Pyx_RefNannySetupContext("create", 0);
 
-  /* "SLEPc/RG.pyx":176
- *             Activate/deactivate the complementation of the region.
+  /* "SLEPc/FN.pyx":76
+ *               processes.
  *         """
- *         cdef PetscBool tval = comp             # <<<<<<<<<<<<<<
- *         CHKERR( RGSetComplement(self.rg, tval) )
- * 
+ *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())             # <<<<<<<<<<<<<<
+ *         cdef SlepcFN newfn = NULL
+ *         CHKERR( FNCreate(ccomm, &newfn) )
  */
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_comp)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_tval = __pyx_t_1;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_def_Comm(__pyx_v_comm, __pyx_f_8slepc4py_5SLEPc_SLEPC_COMM_DEFAULT()); if (unlikely(PyErr_Occurred())) __PYX_ERR(11, 76, __pyx_L1_error)
+  __pyx_v_ccomm = __pyx_t_1;
 
-  /* "SLEPc/RG.pyx":177
+  /* "SLEPc/FN.pyx":77
  *         """
- *         cdef PetscBool tval = comp
- *         CHKERR( RGSetComplement(self.rg, tval) )             # <<<<<<<<<<<<<<
+ *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
+ *         cdef SlepcFN newfn = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( FNCreate(ccomm, &newfn) )
+ *         SlepcCLEAR(self.obj); self.fn = newfn
+ */
+  __pyx_v_newfn = NULL;
+
+  /* "SLEPc/FN.pyx":78
+ *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
+ *         cdef SlepcFN newfn = NULL
+ *         CHKERR( FNCreate(ccomm, &newfn) )             # <<<<<<<<<<<<<<
+ *         SlepcCLEAR(self.obj); self.fn = newfn
+ *         return self
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNCreate(__pyx_v_ccomm, (&__pyx_v_newfn))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 78, __pyx_L1_error)
+
+  /* "SLEPc/FN.pyx":79
+ *         cdef SlepcFN newfn = NULL
+ *         CHKERR( FNCreate(ccomm, &newfn) )
+ *         SlepcCLEAR(self.obj); self.fn = newfn             # <<<<<<<<<<<<<<
+ *         return self
  * 
- *     #
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGSetComplement(__pyx_v_self->rg, __pyx_v_tval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_f_8slepc4py_5SLEPc_SlepcCLEAR(__pyx_v_self->__pyx_base.obj);
+  __pyx_v_self->fn = __pyx_v_newfn;
 
-  /* "SLEPc/RG.pyx":166
- *         return <bint>tval
+  /* "SLEPc/FN.pyx":80
+ *         CHKERR( FNCreate(ccomm, &newfn) )
+ *         SlepcCLEAR(self.obj); self.fn = newfn
+ *         return self             # <<<<<<<<<<<<<<
  * 
- *     def setComplement(self, comp):             # <<<<<<<<<<<<<<
+ *     def setType(self, fn_type):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_r = ((PyObject *)__pyx_v_self);
+  goto __pyx_L0;
+
+  /* "SLEPc/FN.pyx":66
+ *         return self
+ * 
+ *     def create(self, comm=None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets a flag to indicate that the region is the complement
+ *         Creates the FN object.
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.RG.setComplement", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.FN.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -16775,36 +18694,29 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_22setComplement(struct PySlepcRGO
   return __pyx_r;
 }
 
-/* "SLEPc/RG.pyx":181
- *     #
+/* "SLEPc/FN.pyx":82
+ *         return self
  * 
- *     def setEllipseParameters(self, center, radius, vscale):             # <<<<<<<<<<<<<<
+ *     def setType(self, fn_type):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the parameters defining the ellipse region.
+ *         Selects the type for the FN object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_25setEllipseParameters(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2RG_24setEllipseParameters[] = "RG.setEllipseParameters(self, center, radius, vscale)\n\n        Sets the parameters defining the ellipse region.\n\n        Parameters\n        ----------\n        center: float (real or complex)\n              The center.\n        radius: float\n              The radius.\n        vscale: float\n              The vertical scale.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_25setEllipseParameters(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_center = 0;
-  PyObject *__pyx_v_radius = 0;
-  PyObject *__pyx_v_vscale = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_9setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2FN_8setType[] = "FN.setType(self, fn_type)\n\n        Selects the type for the FN object.\n\n        Parameters\n        ----------\n        fn_type: `FN.Type` enumerate\n                  The inner product type to be used.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_9setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_fn_type = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setEllipseParameters (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setType (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_center,&__pyx_n_s_radius,&__pyx_n_s_vscale,0};
-    PyObject* values[3] = {0,0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fn_type,0};
+    PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -16812,242 +18724,172 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_25setEllipseParameters(PyObject *
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_center)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fn_type)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_radius)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("setEllipseParameters", 1, 3, 3, 1); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-        case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vscale)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("setEllipseParameters", 1, 3, 3, 2); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setEllipseParameters") < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(11, 82, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_center = values[0];
-    __pyx_v_radius = values[1];
-    __pyx_v_vscale = values[2];
+    __pyx_v_fn_type = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setEllipseParameters", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(11, 82, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.RG.setEllipseParameters", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.FN.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_24setEllipseParameters(((struct PySlepcRGObject *)__pyx_v_self), __pyx_v_center, __pyx_v_radius, __pyx_v_vscale);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_8setType(((struct PySlepcFNObject *)__pyx_v_self), __pyx_v_fn_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_24setEllipseParameters(struct PySlepcRGObject *__pyx_v_self, PyObject *__pyx_v_center, PyObject *__pyx_v_radius, PyObject *__pyx_v_vscale) {
-  PetscScalar __pyx_v_sval;
-  PetscReal __pyx_v_val1;
-  PetscReal __pyx_v_val2;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_8setType(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_fn_type) {
+  const char* __pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscScalar __pyx_t_1;
-  PetscReal __pyx_t_2;
-  int __pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setEllipseParameters", 0);
-
-  /* "SLEPc/RG.pyx":194
- *               The vertical scale.
- *         """
- *         cdef PetscScalar sval = asScalar(center)             # <<<<<<<<<<<<<<
- *         cdef PetscReal val1 = radius
- *         cdef PetscReal val2 = vscale
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_asScalar(__pyx_v_center); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_sval = __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setType", 0);
+  __Pyx_INCREF(__pyx_v_fn_type);
 
-  /* "SLEPc/RG.pyx":195
+  /* "SLEPc/FN.pyx":91
+ *                   The inner product type to be used.
  *         """
- *         cdef PetscScalar sval = asScalar(center)
- *         cdef PetscReal val1 = radius             # <<<<<<<<<<<<<<
- *         cdef PetscReal val2 = vscale
- *         CHKERR( RGEllipseSetParameters(self.rg, sval, val1, val2) )
+ *         cdef SlepcFNType cval = NULL             # <<<<<<<<<<<<<<
+ *         fn_type = str2bytes(fn_type, &cval)
+ *         CHKERR( FNSetType(self.fn, cval) )
  */
-  __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_radius); if (unlikely((__pyx_t_2 == (PetscReal)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_val1 = __pyx_t_2;
+  __pyx_v_cval = NULL;
 
-  /* "SLEPc/RG.pyx":196
- *         cdef PetscScalar sval = asScalar(center)
- *         cdef PetscReal val1 = radius
- *         cdef PetscReal val2 = vscale             # <<<<<<<<<<<<<<
- *         CHKERR( RGEllipseSetParameters(self.rg, sval, val1, val2) )
+  /* "SLEPc/FN.pyx":92
+ *         """
+ *         cdef SlepcFNType cval = NULL
+ *         fn_type = str2bytes(fn_type, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( FNSetType(self.fn, cval) )
  * 
  */
-  __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_vscale); if (unlikely((__pyx_t_2 == (PetscReal)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_val2 = __pyx_t_2;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_fn_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 92, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_fn_type, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/RG.pyx":197
- *         cdef PetscReal val1 = radius
- *         cdef PetscReal val2 = vscale
- *         CHKERR( RGEllipseSetParameters(self.rg, sval, val1, val2) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/FN.pyx":93
+ *         cdef SlepcFNType cval = NULL
+ *         fn_type = str2bytes(fn_type, &cval)
+ *         CHKERR( FNSetType(self.fn, cval) )             # <<<<<<<<<<<<<<
  * 
- *     def getEllipseParameters(self):
+ *     def getType(self):
  */
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGEllipseSetParameters(__pyx_v_self->rg, __pyx_v_sval, __pyx_v_val1, __pyx_v_val2)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNSetType(__pyx_v_self->fn, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 93, __pyx_L1_error)
 
-  /* "SLEPc/RG.pyx":181
- *     #
+  /* "SLEPc/FN.pyx":82
+ *         return self
  * 
- *     def setEllipseParameters(self, center, radius, vscale):             # <<<<<<<<<<<<<<
+ *     def setType(self, fn_type):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the parameters defining the ellipse region.
+ *         Selects the type for the FN object.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.RG.setEllipseParameters", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.FN.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_fn_type);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/RG.pyx":199
- *         CHKERR( RGEllipseSetParameters(self.rg, sval, val1, val2) )
+/* "SLEPc/FN.pyx":95
+ *         CHKERR( FNSetType(self.fn, cval) )
  * 
- *     def getEllipseParameters(self):             # <<<<<<<<<<<<<<
+ *     def getType(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the parameters that define the ellipse region.
+ *         Gets the FN type of this object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_27getEllipseParameters(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2RG_26getEllipseParameters[] = "RG.getEllipseParameters(self)\n\n        Gets the parameters that define the ellipse region.\n\n        Returns\n        -------\n        center: float (real or complex)\n              The center.\n        radius: float\n              The radius.\n        vscale: float\n              The vertical scale.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_27getEllipseParameters(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_11getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2FN_10getType[] = "FN.getType(self)\n\n        Gets the FN type of this object.\n\n        Returns\n        -------\n        type: `FN.Type` enumerate\n              The inner product type currently being used.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_11getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getEllipseParameters (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getType (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getEllipseParameters", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getEllipseParameters", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_26getEllipseParameters(((struct PySlepcRGObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getType", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_10getType(((struct PySlepcFNObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_26getEllipseParameters(struct PySlepcRGObject *__pyx_v_self) {
-  PetscScalar __pyx_v_sval;
-  PetscReal __pyx_v_val1;
-  PetscReal __pyx_v_val2;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_10getType(struct PySlepcFNObject *__pyx_v_self) {
+  const char* __pyx_v_fn_type;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getEllipseParameters", 0);
+  __Pyx_RefNannySetupContext("getType", 0);
 
-  /* "SLEPc/RG.pyx":212
- *               The vertical scale.
+  /* "SLEPc/FN.pyx":104
+ *               The inner product type currently being used.
  *         """
- *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
- *         cdef PetscReal val1 = 0
- *         cdef PetscReal val2 = 0
+ *         cdef SlepcFNType fn_type = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( FNGetType(self.fn, &fn_type) )
+ *         return bytes2str(fn_type)
  */
-  __pyx_v_sval = 0.0;
+  __pyx_v_fn_type = NULL;
 
-  /* "SLEPc/RG.pyx":213
+  /* "SLEPc/FN.pyx":105
  *         """
- *         cdef PetscScalar sval = 0
- *         cdef PetscReal val1 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscReal val2 = 0
- *         CHKERR( RGEllipseGetParameters(self.rg, &sval, &val1, &val2) )
- */
-  __pyx_v_val1 = 0.0;
-
-  /* "SLEPc/RG.pyx":214
- *         cdef PetscScalar sval = 0
- *         cdef PetscReal val1 = 0
- *         cdef PetscReal val2 = 0             # <<<<<<<<<<<<<<
- *         CHKERR( RGEllipseGetParameters(self.rg, &sval, &val1, &val2) )
- *         return (toScalar(sval), toReal(val1), toReal(val2))
- */
-  __pyx_v_val2 = 0.0;
-
-  /* "SLEPc/RG.pyx":215
- *         cdef PetscReal val1 = 0
- *         cdef PetscReal val2 = 0
- *         CHKERR( RGEllipseGetParameters(self.rg, &sval, &val1, &val2) )             # <<<<<<<<<<<<<<
- *         return (toScalar(sval), toReal(val1), toReal(val2))
+ *         cdef SlepcFNType fn_type = NULL
+ *         CHKERR( FNGetType(self.fn, &fn_type) )             # <<<<<<<<<<<<<<
+ *         return bytes2str(fn_type)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGEllipseGetParameters(__pyx_v_self->rg, (&__pyx_v_sval), (&__pyx_v_val1), (&__pyx_v_val2))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNGetType(__pyx_v_self->fn, (&__pyx_v_fn_type))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(11, 105, __pyx_L1_error)
 
-  /* "SLEPc/RG.pyx":216
- *         cdef PetscReal val2 = 0
- *         CHKERR( RGEllipseGetParameters(self.rg, &sval, &val1, &val2) )
- *         return (toScalar(sval), toReal(val1), toReal(val2))             # <<<<<<<<<<<<<<
+  /* "SLEPc/FN.pyx":106
+ *         cdef SlepcFNType fn_type = NULL
+ *         CHKERR( FNGetType(self.fn, &fn_type) )
+ *         return bytes2str(fn_type)             # <<<<<<<<<<<<<<
  * 
- *     def setIntervalEndpoints(self, a, b, c, d):
+ *     def setOptionsPrefix(self, prefix):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_fn_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 106, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_val1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_val2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __Pyx_GIVEREF(__pyx_t_2);
-  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_3);
-  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_4);
-  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
+  __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
-  __pyx_t_3 = 0;
-  __pyx_t_4 = 0;
-  __pyx_r = __pyx_t_5;
-  __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/RG.pyx":199
- *         CHKERR( RGEllipseSetParameters(self.rg, sval, val1, val2) )
+  /* "SLEPc/FN.pyx":95
+ *         CHKERR( FNSetType(self.fn, cval) )
  * 
- *     def getEllipseParameters(self):             # <<<<<<<<<<<<<<
+ *     def getType(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the parameters that define the ellipse region.
+ *         Gets the FN type of this object.
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("slepc4py.SLEPc.RG.getEllipseParameters", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.FN.getType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -17055,38 +18897,29 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_26getEllipseParameters(struct PyS
   return __pyx_r;
 }
 
-/* "SLEPc/RG.pyx":218
- *         return (toScalar(sval), toReal(val1), toReal(val2))
+/* "SLEPc/FN.pyx":108
+ *         return bytes2str(fn_type)
  * 
- *     def setIntervalEndpoints(self, a, b, c, d):             # <<<<<<<<<<<<<<
+ *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the parameters defining the interval region.
+ *         Sets the prefix used for searching for all FN options in the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_29setIntervalEndpoints(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2RG_28setIntervalEndpoints[] = "RG.setIntervalEndpoints(self, a, b, c, d)\n\n        Sets the parameters defining the interval region.\n\n        Parameters\n        ----------\n        a: float\n              The left endpoint in the real axis.\n        b: float\n              The right endpoint in the real axis.\n        c: float\n              The upper endpoint in the imaginary axis.\n        d: float\n              The lower endpoint in the ima [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_29setIntervalEndpoints(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_a = 0;
-  PyObject *__pyx_v_b = 0;
-  PyObject *__pyx_v_c = 0;
-  PyObject *__pyx_v_d = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_13setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2FN_12setOptionsPrefix[] = "FN.setOptionsPrefix(self, prefix)\n\n        Sets the prefix used for searching for all FN options in the\n        database.\n\n        Parameters\n        ----------\n        prefix: string\n                The prefix string to prepend to all FN option\n                requests.\n\n        Notes\n        -----\n        A hyphen (``-``) must NOT be given at the beginning of the\n        prefix name.  The first character o [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_13setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_prefix = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setIntervalEndpoints (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setOptionsPrefix (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_a,&__pyx_n_s_b,&__pyx_n_s_c,&__pyx_n_s_d,0};
-    PyObject* values[4] = {0,0,0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_prefix,0};
+    PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
-        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -17094,276 +18927,172 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_29setIntervalEndpoints(PyObject *
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_a)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_prefix)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_b)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("setIntervalEndpoints", 1, 4, 4, 1); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-        case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_c)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("setIntervalEndpoints", 1, 4, 4, 2); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-        case  3:
-        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_d)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("setIntervalEndpoints", 1, 4, 4, 3); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setIntervalEndpoints") < 0)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) __PYX_ERR(11, 108, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
     }
-    __pyx_v_a = values[0];
-    __pyx_v_b = values[1];
-    __pyx_v_c = values[2];
-    __pyx_v_d = values[3];
+    __pyx_v_prefix = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setIntervalEndpoints", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[11]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(11, 108, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.RG.setIntervalEndpoints", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.FN.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_28setIntervalEndpoints(((struct PySlepcRGObject *)__pyx_v_self), __pyx_v_a, __pyx_v_b, __pyx_v_c, __pyx_v_d);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_12setOptionsPrefix(((struct PySlepcFNObject *)__pyx_v_self), __pyx_v_prefix);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_28setIntervalEndpoints(struct PySlepcRGObject *__pyx_v_self, PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) {
-  PetscReal __pyx_v_va;
-  PetscReal __pyx_v_vb;
-  PetscReal __pyx_v_vc;
-  PetscReal __pyx_v_vd;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_12setOptionsPrefix(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
+  const char *__pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscReal __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setIntervalEndpoints", 0);
+  __Pyx_RefNannySetupContext("setOptionsPrefix", 0);
+  __Pyx_INCREF(__pyx_v_prefix);
 
-  /* "SLEPc/RG.pyx":233
- *               The lower endpoint in the imaginary axis.
+  /* "SLEPc/FN.pyx":125
+ *         AUTOMATICALLY the hyphen.
  *         """
- *         cdef PetscReal va = a             # <<<<<<<<<<<<<<
- *         cdef PetscReal vb = b
- *         cdef PetscReal vc = c
+ *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
+ *         prefix = str2bytes(prefix, &cval)
+ *         CHKERR( FNSetOptionsPrefix(self.fn, cval) )
  */
-  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_a); if (unlikely((__pyx_t_1 == (PetscReal)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_va = __pyx_t_1;
+  __pyx_v_cval = NULL;
 
-  /* "SLEPc/RG.pyx":234
+  /* "SLEPc/FN.pyx":126
  *         """
- *         cdef PetscReal va = a
- *         cdef PetscReal vb = b             # <<<<<<<<<<<<<<
- *         cdef PetscReal vc = c
- *         cdef PetscReal vd = d
- */
-  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_b); if (unlikely((__pyx_t_1 == (PetscReal)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_vb = __pyx_t_1;
-
-  /* "SLEPc/RG.pyx":235
- *         cdef PetscReal va = a
- *         cdef PetscReal vb = b
- *         cdef PetscReal vc = c             # <<<<<<<<<<<<<<
- *         cdef PetscReal vd = d
- *         CHKERR( RGIntervalSetEndpoints(self.rg, va, vb, vc, vd) )
- */
-  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_c); if (unlikely((__pyx_t_1 == (PetscReal)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_vc = __pyx_t_1;
-
-  /* "SLEPc/RG.pyx":236
- *         cdef PetscReal vb = b
- *         cdef PetscReal vc = c
- *         cdef PetscReal vd = d             # <<<<<<<<<<<<<<
- *         CHKERR( RGIntervalSetEndpoints(self.rg, va, vb, vc, vd) )
+ *         cdef const_char *cval = NULL
+ *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( FNSetOptionsPrefix(self.fn, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_d); if (unlikely((__pyx_t_1 == (PetscReal)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_vd = __pyx_t_1;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 126, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/RG.pyx":237
- *         cdef PetscReal vc = c
- *         cdef PetscReal vd = d
- *         CHKERR( RGIntervalSetEndpoints(self.rg, va, vb, vc, vd) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/FN.pyx":127
+ *         cdef const_char *cval = NULL
+ *         prefix = str2bytes(prefix, &cval)
+ *         CHKERR( FNSetOptionsPrefix(self.fn, cval) )             # <<<<<<<<<<<<<<
  * 
- *     def getIntervalEndpoints(self):
+ *     def getOptionsPrefix(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGIntervalSetEndpoints(__pyx_v_self->rg, __pyx_v_va, __pyx_v_vb, __pyx_v_vc, __pyx_v_vd)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNSetOptionsPrefix(__pyx_v_self->fn, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 127, __pyx_L1_error)
 
-  /* "SLEPc/RG.pyx":218
- *         return (toScalar(sval), toReal(val1), toReal(val2))
+  /* "SLEPc/FN.pyx":108
+ *         return bytes2str(fn_type)
  * 
- *     def setIntervalEndpoints(self, a, b, c, d):             # <<<<<<<<<<<<<<
+ *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the parameters defining the interval region.
+ *         Sets the prefix used for searching for all FN options in the
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.RG.setIntervalEndpoints", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.FN.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_prefix);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/RG.pyx":239
- *         CHKERR( RGIntervalSetEndpoints(self.rg, va, vb, vc, vd) )
+/* "SLEPc/FN.pyx":129
+ *         CHKERR( FNSetOptionsPrefix(self.fn, cval) )
  * 
- *     def getIntervalEndpoints(self):             # <<<<<<<<<<<<<<
+ *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the parameters that define the interval region.
+ *         Gets the prefix used for searching for all FN options in the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_31getIntervalEndpoints(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2RG_30getIntervalEndpoints[] = "RG.getIntervalEndpoints(self)\n\n        Gets the parameters that define the interval region.\n\n        Returns\n        -------\n        a: float\n              The left endpoint in the real axis.\n        b: float\n              The right endpoint in the real axis.\n        c: float\n              The upper endpoint in the imaginary axis.\n        d: float\n              The lower endpoint in the imaginary axis.\n  [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_31getIntervalEndpoints(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2FN_14getOptionsPrefix[] = "FN.getOptionsPrefix(self)\n\n        Gets the prefix used for searching for all FN options in the\n        database.\n\n        Returns\n        -------\n        prefix: string\n                The prefix string set for this FN object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getIntervalEndpoints (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getOptionsPrefix (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getIntervalEndpoints", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getIntervalEndpoints", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_30getIntervalEndpoints(((struct PySlepcRGObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getOptionsPrefix", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getOptionsPrefix", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_14getOptionsPrefix(((struct PySlepcFNObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_30getIntervalEndpoints(struct PySlepcRGObject *__pyx_v_self) {
-  PetscReal __pyx_v_va;
-  PetscReal __pyx_v_vb;
-  PetscReal __pyx_v_vc;
-  PetscReal __pyx_v_vd;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_14getOptionsPrefix(struct PySlepcFNObject *__pyx_v_self) {
+  const char *__pyx_v_prefix;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  PyObject *__pyx_t_5 = NULL;
-  PyObject *__pyx_t_6 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getIntervalEndpoints", 0);
+  __Pyx_RefNannySetupContext("getOptionsPrefix", 0);
 
-  /* "SLEPc/RG.pyx":254
- *               The lower endpoint in the imaginary axis.
+  /* "SLEPc/FN.pyx":139
+ *                 The prefix string set for this FN object.
  *         """
- *         cdef PetscReal va = 0             # <<<<<<<<<<<<<<
- *         cdef PetscReal vb = 0
- *         cdef PetscReal vc = 0
+ *         cdef const_char *prefix = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( FNGetOptionsPrefix(self.fn, &prefix) )
+ *         return bytes2str(prefix)
  */
-  __pyx_v_va = 0.0;
+  __pyx_v_prefix = NULL;
 
-  /* "SLEPc/RG.pyx":255
+  /* "SLEPc/FN.pyx":140
  *         """
- *         cdef PetscReal va = 0
- *         cdef PetscReal vb = 0             # <<<<<<<<<<<<<<
- *         cdef PetscReal vc = 0
- *         cdef PetscReal vd = 0
- */
-  __pyx_v_vb = 0.0;
-
-  /* "SLEPc/RG.pyx":256
- *         cdef PetscReal va = 0
- *         cdef PetscReal vb = 0
- *         cdef PetscReal vc = 0             # <<<<<<<<<<<<<<
- *         cdef PetscReal vd = 0
- *         CHKERR( RGIntervalGetEndpoints(self.rg, &va, &vb, &vc, &vd) )
- */
-  __pyx_v_vc = 0.0;
-
-  /* "SLEPc/RG.pyx":257
- *         cdef PetscReal vb = 0
- *         cdef PetscReal vc = 0
- *         cdef PetscReal vd = 0             # <<<<<<<<<<<<<<
- *         CHKERR( RGIntervalGetEndpoints(self.rg, &va, &vb, &vc, &vd) )
- *         return (toReal(va), toReal(vb), toReal(vc), toReal(vd))
- */
-  __pyx_v_vd = 0.0;
-
-  /* "SLEPc/RG.pyx":258
- *         cdef PetscReal vc = 0
- *         cdef PetscReal vd = 0
- *         CHKERR( RGIntervalGetEndpoints(self.rg, &va, &vb, &vc, &vd) )             # <<<<<<<<<<<<<<
- *         return (toReal(va), toReal(vb), toReal(vc), toReal(vd))
+ *         cdef const_char *prefix = NULL
+ *         CHKERR( FNGetOptionsPrefix(self.fn, &prefix) )             # <<<<<<<<<<<<<<
+ *         return bytes2str(prefix)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGIntervalGetEndpoints(__pyx_v_self->rg, (&__pyx_v_va), (&__pyx_v_vb), (&__pyx_v_vc), (&__pyx_v_vd))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNGetOptionsPrefix(__pyx_v_self->fn, (&__pyx_v_prefix))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(11, 140, __pyx_L1_error)
 
-  /* "SLEPc/RG.pyx":259
- *         cdef PetscReal vd = 0
- *         CHKERR( RGIntervalGetEndpoints(self.rg, &va, &vb, &vc, &vd) )
- *         return (toReal(va), toReal(vb), toReal(vc), toReal(vd))             # <<<<<<<<<<<<<<
+  /* "SLEPc/FN.pyx":141
+ *         cdef const_char *prefix = NULL
+ *         CHKERR( FNGetOptionsPrefix(self.fn, &prefix) )
+ *         return bytes2str(prefix)             # <<<<<<<<<<<<<<
  * 
- * # -----------------------------------------------------------------------------
+ *     def setFromOptions(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_va); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_prefix); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 141, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_vb); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_vc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_vd); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-  __Pyx_GIVEREF(__pyx_t_2);
-  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_3);
-  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_4);
-  PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_4);
-  __Pyx_GIVEREF(__pyx_t_5);
-  PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_t_5);
+  __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
-  __pyx_t_3 = 0;
-  __pyx_t_4 = 0;
-  __pyx_t_5 = 0;
-  __pyx_r = __pyx_t_6;
-  __pyx_t_6 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/RG.pyx":239
- *         CHKERR( RGIntervalSetEndpoints(self.rg, va, vb, vc, vd) )
+  /* "SLEPc/FN.pyx":129
+ *         CHKERR( FNSetOptionsPrefix(self.fn, cval) )
  * 
- *     def getIntervalEndpoints(self):             # <<<<<<<<<<<<<<
+ *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the parameters that define the interval region.
+ *         Gets the prefix used for searching for all FN options in the
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_XDECREF(__pyx_t_6);
-  __Pyx_AddTraceback("slepc4py.SLEPc.RG.getIntervalEndpoints", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.FN.getOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -17371,90 +19100,85 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_30getIntervalEndpoints(struct PyS
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":223
- *     LanczosReorthogType = EPSLanczosReorthogType
+/* "SLEPc/FN.pyx":143
+ *         return bytes2str(prefix)
  * 
- *     def __cinit__(self):             # <<<<<<<<<<<<<<
- *         self.obj = <PetscObject*> &self.eps
- *         self.eps = NULL
+ *     def setFromOptions(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets FN options from the options database.
  */
 
 /* Python wrapper */
-static int __pyx_pw_8slepc4py_5SLEPc_3EPS_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_8slepc4py_5SLEPc_3EPS_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_r;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_17setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2FN_16setFromOptions[] = "FN.setFromOptions(self)\n\n        Sets FN options from the options database.\n\n        Notes\n        -----\n        To see all options, run your program with the ``-help``\n        option.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_17setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setFromOptions (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS___cinit__(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("setFromOptions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setFromOptions", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_16setFromOptions(((struct PySlepcFNObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_8slepc4py_5SLEPc_3EPS___cinit__(struct PySlepcEPSObject *__pyx_v_self) {
-  int __pyx_r;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_16setFromOptions(struct PySlepcFNObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__", 0);
-
-  /* "SLEPc/EPS.pyx":224
- * 
- *     def __cinit__(self):
- *         self.obj = <PetscObject*> &self.eps             # <<<<<<<<<<<<<<
- *         self.eps = NULL
- * 
- */
-  __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->eps));
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setFromOptions", 0);
 
-  /* "SLEPc/EPS.pyx":225
- *     def __cinit__(self):
- *         self.obj = <PetscObject*> &self.eps
- *         self.eps = NULL             # <<<<<<<<<<<<<<
+  /* "SLEPc/FN.pyx":152
+ *         option.
+ *         """
+ *         CHKERR( FNSetFromOptions(self.fn) )             # <<<<<<<<<<<<<<
  * 
- *     def view(self, Viewer viewer=None):
+ *     #
  */
-  __pyx_v_self->eps = NULL;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNSetFromOptions(__pyx_v_self->fn)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(11, 152, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":223
- *     LanczosReorthogType = EPSLanczosReorthogType
+  /* "SLEPc/FN.pyx":143
+ *         return bytes2str(prefix)
  * 
- *     def __cinit__(self):             # <<<<<<<<<<<<<<
- *         self.obj = <PetscObject*> &self.eps
- *         self.eps = NULL
+ *     def setFromOptions(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets FN options from the options database.
  */
 
   /* function exit code */
-  __pyx_r = 0;
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.FN.setFromOptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":227
- *         self.eps = NULL
+/* "SLEPc/FN.pyx":156
+ *     #
  * 
- *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *     def evaluateFunction(self, x):             # <<<<<<<<<<<<<<
  *         """
- *         Prints the EPS data structure.
+ *         Computes the value of the function f(x) for a given x.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_2view[] = "EPS.view(self, Viewer viewer=None)\n\n        Prints the EPS data structure.\n\n        Parameters\n        ----------\n        viewer: Viewer, optional.\n                Visualization context; if not provided, the standard\n                output is used.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscViewerObject *__pyx_v_viewer = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_19evaluateFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2FN_18evaluateFunction[] = "FN.evaluateFunction(self, x)\n\n        Computes the value of the function f(x) for a given x.\n\n        Parameters\n        ----------\n        x: scalar\n            Value where the function must be evaluated.\n\n        Returns\n        -------\n        y: scalar\n            The result of f(x).\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_19evaluateFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_x = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("view (wrapper)", 0);
+  __Pyx_RefNannySetupContext("evaluateFunction (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_viewer,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
     PyObject* values[1] = {0};
-    values[0] = (PyObject *)((struct PyPetscViewerObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
@@ -17466,248 +19190,88 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_3view(PyObject *__pyx_v_self, Py
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_viewer);
-          if (value) { values[0] = value; kw_args--; }
-        }
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "evaluateFunction") < 0)) __PYX_ERR(11, 156, __pyx_L3_error)
       }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
     } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_viewer = ((struct PyPetscViewerObject *)values[0]);
+    __pyx_v_x = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("evaluateFunction", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(11, 156, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.FN.evaluateFunction", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_2view(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_viewer);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_18evaluateFunction(((struct PySlepcFNObject *)__pyx_v_self), __pyx_v_x);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_2view(struct PySlepcEPSObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
-  PetscViewer __pyx_v_vwr;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_18evaluateFunction(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_x) {
+  PetscScalar __pyx_v_sval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PetscScalar __pyx_t_1;
   int __pyx_t_2;
-  PetscViewer __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("view", 0);
-
-  /* "SLEPc/EPS.pyx":237
- *                 output is used.
- *         """
- *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
- *         if viewer is not None: vwr = viewer.vwr
- *         CHKERR( EPSView(self.eps, vwr) )
- */
-  __pyx_v_vwr = NULL;
-
-  /* "SLEPc/EPS.pyx":238
- *         """
- *         cdef PetscViewer vwr = NULL
- *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
- *         CHKERR( EPSView(self.eps, vwr) )
- * 
- */
-  __pyx_t_1 = (((PyObject *)__pyx_v_viewer) != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_v_viewer->vwr;
-    __pyx_v_vwr = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "SLEPc/EPS.pyx":239
- *         cdef PetscViewer vwr = NULL
- *         if viewer is not None: vwr = viewer.vwr
- *         CHKERR( EPSView(self.eps, vwr) )             # <<<<<<<<<<<<<<
- * 
- *     def destroy(self):
- */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSView(__pyx_v_self->eps, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/EPS.pyx":227
- *         self.eps = NULL
- * 
- *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
- *         """
- *         Prints the EPS data structure.
- */
-
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "SLEPc/EPS.pyx":241
- *         CHKERR( EPSView(self.eps, vwr) )
- * 
- *     def destroy(self):             # <<<<<<<<<<<<<<
- *         """
- *         Destroys the EPS object.
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_4destroy[] = "EPS.destroy(self)\n\n        Destroys the EPS object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("destroy (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("destroy", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "destroy", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_4destroy(((struct PySlepcEPSObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_4destroy(struct PySlepcEPSObject *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("destroy", 0);
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("evaluateFunction", 0);
 
-  /* "SLEPc/EPS.pyx":245
- *         Destroys the EPS object.
+  /* "SLEPc/FN.pyx":170
+ *             The result of f(x).
  *         """
- *         CHKERR( EPSDestroy(&self.eps) )             # <<<<<<<<<<<<<<
- *         self.eps = NULL
- *         return self
+ *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( FNEvaluateFunction(self.fn, x, &sval) )
+ *         return toScalar(sval)
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSDestroy((&__pyx_v_self->eps))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_sval = 0.0;
 
-  /* "SLEPc/EPS.pyx":246
+  /* "SLEPc/FN.pyx":171
  *         """
- *         CHKERR( EPSDestroy(&self.eps) )
- *         self.eps = NULL             # <<<<<<<<<<<<<<
- *         return self
+ *         cdef PetscScalar sval = 0
+ *         CHKERR( FNEvaluateFunction(self.fn, x, &sval) )             # <<<<<<<<<<<<<<
+ *         return toScalar(sval)
  * 
  */
-  __pyx_v_self->eps = NULL;
+  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_x); if (unlikely((__pyx_t_1 == (PetscScalar)-1) && PyErr_Occurred())) __PYX_ERR(11, 171, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNEvaluateFunction(__pyx_v_self->fn, __pyx_t_1, (&__pyx_v_sval))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 171, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":247
- *         CHKERR( EPSDestroy(&self.eps) )
- *         self.eps = NULL
- *         return self             # <<<<<<<<<<<<<<
+  /* "SLEPc/FN.pyx":172
+ *         cdef PetscScalar sval = 0
+ *         CHKERR( FNEvaluateFunction(self.fn, x, &sval) )
+ *         return toScalar(sval)             # <<<<<<<<<<<<<<
  * 
- *     def reset(self):
+ *     def evaluateDerivative(self, x):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_r = ((PyObject *)__pyx_v_self);
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 172, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":241
- *         CHKERR( EPSView(self.eps, vwr) )
- * 
- *     def destroy(self):             # <<<<<<<<<<<<<<
- *         """
- *         Destroys the EPS object.
- */
-
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.destroy", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "SLEPc/EPS.pyx":249
- *         return self
- * 
- *     def reset(self):             # <<<<<<<<<<<<<<
- *         """
- *         Resets the EPS object.
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_7reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_6reset[] = "EPS.reset(self)\n\n        Resets the EPS object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_7reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("reset (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("reset", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "reset", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_6reset(((struct PySlepcEPSObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_6reset(struct PySlepcEPSObject *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("reset", 0);
-
-  /* "SLEPc/EPS.pyx":253
- *         Resets the EPS object.
- *         """
- *         CHKERR( EPSReset(self.eps) )             # <<<<<<<<<<<<<<
- * 
- *     def create(self, comm=None):
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSReset(__pyx_v_self->eps)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/EPS.pyx":249
- *         return self
+  /* "SLEPc/FN.pyx":156
+ *     #
  * 
- *     def reset(self):             # <<<<<<<<<<<<<<
+ *     def evaluateFunction(self, x):             # <<<<<<<<<<<<<<
  *         """
- *         Resets the EPS object.
+ *         Computes the value of the function f(x) for a given x.
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.reset", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.FN.evaluateFunction", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -17715,29 +19279,25 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_6reset(struct PySlepcEPSObject *
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":255
- *         CHKERR( EPSReset(self.eps) )
+/* "SLEPc/FN.pyx":174
+ *         return toScalar(sval)
  * 
- *     def create(self, comm=None):             # <<<<<<<<<<<<<<
+ *     def evaluateDerivative(self, x):             # <<<<<<<<<<<<<<
  *         """
- *         Creates the EPS object.
+ *         Computes the value of the derivative f'(x) for a given x.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_8create[] = "EPS.create(self, comm=None)\n\n        Creates the EPS object.\n\n        Parameters\n        ----------\n        comm: MPI_Comm, optional\n              MPI communicator; if not provided, it defaults to all\n              processes.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_comm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_21evaluateDerivative(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2FN_20evaluateDerivative[] = "FN.evaluateDerivative(self, x)\n\n        Computes the value of the derivative f'(x) for a given x.\n\n        Parameters\n        ----------\n        x: scalar\n            Value where the derivative must be evaluated.\n\n        Returns\n        -------\n        y: scalar\n            The result of f'(x).\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_21evaluateDerivative(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_x = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("create (wrapper)", 0);
+  __Pyx_RefNannySetupContext("evaluateDerivative (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
     PyObject* values[1] = {0};
-    values[0] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
@@ -17749,111 +19309,88 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_9create(PyObject *__pyx_v_self,
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
-          if (value) { values[0] = value; kw_args--; }
-        }
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "evaluateDerivative") < 0)) __PYX_ERR(11, 174, __pyx_L3_error)
       }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
     } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_comm = values[0];
+    __pyx_v_x = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("evaluateDerivative", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(11, 174, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.FN.evaluateDerivative", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_8create(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_comm);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_20evaluateDerivative(((struct PySlepcFNObject *)__pyx_v_self), __pyx_v_x);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_8create(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_comm) {
-  MPI_Comm __pyx_v_ccomm;
-  EPS __pyx_v_neweps;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_20evaluateDerivative(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_x) {
+  PetscScalar __pyx_v_sval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  MPI_Comm __pyx_t_1;
+  PetscScalar __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("create", 0);
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("evaluateDerivative", 0);
 
-  /* "SLEPc/EPS.pyx":265
- *               processes.
+  /* "SLEPc/FN.pyx":188
+ *             The result of f'(x).
  *         """
- *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())             # <<<<<<<<<<<<<<
- *         cdef SlepcEPS neweps = NULL
- *         CHKERR( EPSCreate(ccomm, &neweps) )
+ *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( FNEvaluateDerivative(self.fn, x, &sval) )
+ *         return toScalar(sval)
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_def_Comm(__pyx_v_comm, __pyx_f_8slepc4py_5SLEPc_SLEPC_COMM_DEFAULT()); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ccomm = __pyx_t_1;
+  __pyx_v_sval = 0.0;
 
-  /* "SLEPc/EPS.pyx":266
+  /* "SLEPc/FN.pyx":189
  *         """
- *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
- *         cdef SlepcEPS neweps = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( EPSCreate(ccomm, &neweps) )
- *         SlepcCLEAR(self.obj); self.eps = neweps
- */
-  __pyx_v_neweps = NULL;
-
-  /* "SLEPc/EPS.pyx":267
- *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
- *         cdef SlepcEPS neweps = NULL
- *         CHKERR( EPSCreate(ccomm, &neweps) )             # <<<<<<<<<<<<<<
- *         SlepcCLEAR(self.obj); self.eps = neweps
- *         return self
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSCreate(__pyx_v_ccomm, (&__pyx_v_neweps))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/EPS.pyx":268
- *         cdef SlepcEPS neweps = NULL
- *         CHKERR( EPSCreate(ccomm, &neweps) )
- *         SlepcCLEAR(self.obj); self.eps = neweps             # <<<<<<<<<<<<<<
- *         return self
+ *         cdef PetscScalar sval = 0
+ *         CHKERR( FNEvaluateDerivative(self.fn, x, &sval) )             # <<<<<<<<<<<<<<
+ *         return toScalar(sval)
  * 
  */
-  __pyx_f_8slepc4py_5SLEPc_SlepcCLEAR(__pyx_v_self->__pyx_base.obj);
-  __pyx_v_self->eps = __pyx_v_neweps;
+  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_x); if (unlikely((__pyx_t_1 == (PetscScalar)-1) && PyErr_Occurred())) __PYX_ERR(11, 189, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNEvaluateDerivative(__pyx_v_self->fn, __pyx_t_1, (&__pyx_v_sval))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 189, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":269
- *         CHKERR( EPSCreate(ccomm, &neweps) )
- *         SlepcCLEAR(self.obj); self.eps = neweps
- *         return self             # <<<<<<<<<<<<<<
+  /* "SLEPc/FN.pyx":190
+ *         cdef PetscScalar sval = 0
+ *         CHKERR( FNEvaluateDerivative(self.fn, x, &sval) )
+ *         return toScalar(sval)             # <<<<<<<<<<<<<<
  * 
- *     def setType(self, eps_type):
+ *     def setScale(self, alpha=None, beta=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_r = ((PyObject *)__pyx_v_self);
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 190, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":255
- *         CHKERR( EPSReset(self.eps) )
+  /* "SLEPc/FN.pyx":174
+ *         return toScalar(sval)
  * 
- *     def create(self, comm=None):             # <<<<<<<<<<<<<<
+ *     def evaluateDerivative(self, x):             # <<<<<<<<<<<<<<
  *         """
- *         Creates the EPS object.
+ *         Computes the value of the derivative f'(x) for a given x.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.FN.evaluateDerivative", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -17861,32 +19398,33 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_8create(struct PySlepcEPSObject
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":271
- *         return self
+/* "SLEPc/FN.pyx":192
+ *         return toScalar(sval)
  * 
- *     def setType(self, eps_type):             # <<<<<<<<<<<<<<
+ *     def setScale(self, alpha=None, beta=None):             # <<<<<<<<<<<<<<
  *         """
- *         Selects the particular solver to be used in the EPS object.
+ *         Sets the scaling parameters that define the matematical function.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_10setType[] = "EPS.setType(self, eps_type)\n\n        Selects the particular solver to be used in the EPS object.\n\n        Parameters\n        ----------\n        eps_type: `EPS.Type` enumerate\n                  The solver to be used.\n\n        Notes\n        -----\n        See `EPS.Type` for available methods. The default is\n        `EPS.Type.KRYLOVSCHUR`.  Normally, it is best to use\n        `setFromOptions()` and then set the EPS type  [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_eps_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_23setScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2FN_22setScale[] = "FN.setScale(self, alpha=None, beta=None)\n\n        Sets the scaling parameters that define the matematical function.\n\n        Parameters\n        ----------\n        alpha: scalar (possibly complex)\n               inner scaling (argument).\n        beta: scalar (possibly complex)\n               outer scaling (result).\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_23setScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_alpha = 0;
+  PyObject *__pyx_v_beta = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setType (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setScale (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_eps_type,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_alpha,&__pyx_n_s_beta,0};
+    PyObject* values[2] = {0,0};
+    values[0] = ((PyObject *)Py_None);
+    values[1] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -17894,178 +19432,224 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_11setType(PyObject *__pyx_v_self
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_eps_type)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha);
+          if (value) { values[0] = value; kw_args--; }
+        }
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_beta);
+          if (value) { values[1] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setScale") < 0)) __PYX_ERR(11, 192, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
     } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
     }
-    __pyx_v_eps_type = values[0];
+    __pyx_v_alpha = values[0];
+    __pyx_v_beta = values[1];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setScale", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(11, 192, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.FN.setScale", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_10setType(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_eps_type);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_22setScale(((struct PySlepcFNObject *)__pyx_v_self), __pyx_v_alpha, __pyx_v_beta);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_10setType(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_eps_type) {
-  const char* __pyx_v_cval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_22setScale(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_alpha, PyObject *__pyx_v_beta) {
+  PetscScalar __pyx_v_aval;
+  PetscScalar __pyx_v_bval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setType", 0);
-  __Pyx_INCREF(__pyx_v_eps_type);
+  PetscScalar __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("setScale", 0);
 
-  /* "SLEPc/EPS.pyx":289
- *         evaluating the different available methods.
+  /* "SLEPc/FN.pyx":203
+ *                outer scaling (result).
  *         """
- *         cdef SlepcEPSType cval = NULL             # <<<<<<<<<<<<<<
- *         eps_type = str2bytes(eps_type, &cval)
- *         CHKERR( EPSSetType(self.eps, cval) )
+ *         cdef PetscScalar aval = 1.0             # <<<<<<<<<<<<<<
+ *         cdef PetscScalar bval = 1.0
+ *         if alpha is not None: aval = asScalar(alpha)
  */
-  __pyx_v_cval = NULL;
+  __pyx_v_aval = 1.0;
 
-  /* "SLEPc/EPS.pyx":290
+  /* "SLEPc/FN.pyx":204
  *         """
- *         cdef SlepcEPSType cval = NULL
- *         eps_type = str2bytes(eps_type, &cval)             # <<<<<<<<<<<<<<
- *         CHKERR( EPSSetType(self.eps, cval) )
+ *         cdef PetscScalar aval = 1.0
+ *         cdef PetscScalar bval = 1.0             # <<<<<<<<<<<<<<
+ *         if alpha is not None: aval = asScalar(alpha)
+ *         if beta  is not None: bval = asScalar(beta)
+ */
+  __pyx_v_bval = 1.0;
+
+  /* "SLEPc/FN.pyx":205
+ *         cdef PetscScalar aval = 1.0
+ *         cdef PetscScalar bval = 1.0
+ *         if alpha is not None: aval = asScalar(alpha)             # <<<<<<<<<<<<<<
+ *         if beta  is not None: bval = asScalar(beta)
+ *         CHKERR( FNSetScale(self.fn, aval, bval) )
+ */
+  __pyx_t_1 = (__pyx_v_alpha != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) __PYX_ERR(11, 205, __pyx_L1_error)
+    __pyx_v_aval = __pyx_t_3;
+  }
+
+  /* "SLEPc/FN.pyx":206
+ *         cdef PetscScalar bval = 1.0
+ *         if alpha is not None: aval = asScalar(alpha)
+ *         if beta  is not None: bval = asScalar(beta)             # <<<<<<<<<<<<<<
+ *         CHKERR( FNSetScale(self.fn, aval, bval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_eps_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_eps_type, __pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_2 = (__pyx_v_beta != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asScalar(__pyx_v_beta); if (unlikely(PyErr_Occurred())) __PYX_ERR(11, 206, __pyx_L1_error)
+    __pyx_v_bval = __pyx_t_3;
+  }
 
-  /* "SLEPc/EPS.pyx":291
- *         cdef SlepcEPSType cval = NULL
- *         eps_type = str2bytes(eps_type, &cval)
- *         CHKERR( EPSSetType(self.eps, cval) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/FN.pyx":207
+ *         if alpha is not None: aval = asScalar(alpha)
+ *         if beta  is not None: bval = asScalar(beta)
+ *         CHKERR( FNSetScale(self.fn, aval, bval) )             # <<<<<<<<<<<<<<
  * 
- *     def getType(self):
+ *     def getScale(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetType(__pyx_v_self->eps, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNSetScale(__pyx_v_self->fn, __pyx_v_aval, __pyx_v_bval)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(11, 207, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":271
- *         return self
+  /* "SLEPc/FN.pyx":192
+ *         return toScalar(sval)
  * 
- *     def setType(self, eps_type):             # <<<<<<<<<<<<<<
+ *     def setScale(self, alpha=None, beta=None):             # <<<<<<<<<<<<<<
  *         """
- *         Selects the particular solver to be used in the EPS object.
+ *         Sets the scaling parameters that define the matematical function.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.FN.setScale", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_eps_type);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":293
- *         CHKERR( EPSSetType(self.eps, cval) )
+/* "SLEPc/FN.pyx":209
+ *         CHKERR( FNSetScale(self.fn, aval, bval) )
  * 
- *     def getType(self):             # <<<<<<<<<<<<<<
+ *     def getScale(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the EPS type of this object.
+ *         Gets the scaling parameters that define the matematical function.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_12getType[] = "EPS.getType(self)\n\n        Gets the EPS type of this object.\n\n        Returns\n        -------\n        type: `EPS.Type` enumerate\n              The solver currently being used.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_25getScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2FN_24getScale[] = "FN.getScale(self)\n\n        Gets the scaling parameters that define the matematical function.\n\n        Returns\n        -------\n        alpha: scalar (possibly complex)\n               inner scaling (argument).\n        beta: scalar (possibly complex)\n               outer scaling (result).\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_25getScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getType (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getScale (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getType", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_12getType(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getScale", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getScale", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_24getScale(((struct PySlepcFNObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_12getType(struct PySlepcEPSObject *__pyx_v_self) {
-  const char* __pyx_v_eps_type;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_24getScale(struct PySlepcFNObject *__pyx_v_self) {
+  PetscScalar __pyx_v_aval;
+  PetscScalar __pyx_v_bval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getType", 0);
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("getScale", 0);
 
-  /* "SLEPc/EPS.pyx":302
- *               The solver currently being used.
+  /* "SLEPc/FN.pyx":220
+ *                outer scaling (result).
  *         """
- *         cdef SlepcEPSType eps_type = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetType(self.eps, &eps_type) )
- *         return bytes2str(eps_type)
+ *         cdef PetscScalar aval = 0, bval = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( FNGetScale(self.fn, &aval, &bval) )
+ *         return (toScalar(aval), toScalar(bval))
  */
-  __pyx_v_eps_type = NULL;
+  __pyx_v_aval = 0.0;
+  __pyx_v_bval = 0.0;
 
-  /* "SLEPc/EPS.pyx":303
+  /* "SLEPc/FN.pyx":221
  *         """
- *         cdef SlepcEPSType eps_type = NULL
- *         CHKERR( EPSGetType(self.eps, &eps_type) )             # <<<<<<<<<<<<<<
- *         return bytes2str(eps_type)
+ *         cdef PetscScalar aval = 0, bval = 0
+ *         CHKERR( FNGetScale(self.fn, &aval, &bval) )             # <<<<<<<<<<<<<<
+ *         return (toScalar(aval), toScalar(bval))
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetType(__pyx_v_self->eps, (&__pyx_v_eps_type))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNGetScale(__pyx_v_self->fn, (&__pyx_v_aval), (&__pyx_v_bval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(11, 221, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":304
- *         cdef SlepcEPSType eps_type = NULL
- *         CHKERR( EPSGetType(self.eps, &eps_type) )
- *         return bytes2str(eps_type)             # <<<<<<<<<<<<<<
+  /* "SLEPc/FN.pyx":222
+ *         cdef PetscScalar aval = 0, bval = 0
+ *         CHKERR( FNGetScale(self.fn, &aval, &bval) )
+ *         return (toScalar(aval), toScalar(bval))             # <<<<<<<<<<<<<<
  * 
- *     def getOptionsPrefix(self):
+ *     #
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_eps_type); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_aval); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 222, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_bval); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 222, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 222, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
   __pyx_t_2 = 0;
+  __pyx_t_3 = 0;
+  __pyx_r = __pyx_t_4;
+  __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":293
- *         CHKERR( EPSSetType(self.eps, cval) )
+  /* "SLEPc/FN.pyx":209
+ *         CHKERR( FNSetScale(self.fn, aval, bval) )
  * 
- *     def getType(self):             # <<<<<<<<<<<<<<
+ *     def getScale(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the EPS type of this object.
+ *         Gets the scaling parameters that define the matematical function.
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("slepc4py.SLEPc.FN.getScale", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -18073,114 +19657,24 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_12getType(struct PySlepcEPSObjec
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":306
- *         return bytes2str(eps_type)
- * 
- *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the prefix used for searching for all EPS options in the
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_14getOptionsPrefix[] = "EPS.getOptionsPrefix(self)\n\n        Gets the prefix used for searching for all EPS options in the\n        database.\n\n        Returns\n        -------\n        prefix: string\n                The prefix string set for this EPS object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getOptionsPrefix (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getOptionsPrefix", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getOptionsPrefix", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_14getOptionsPrefix(((struct PySlepcEPSObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_14getOptionsPrefix(struct PySlepcEPSObject *__pyx_v_self) {
-  const char *__pyx_v_prefix;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getOptionsPrefix", 0);
-
-  /* "SLEPc/EPS.pyx":316
- *                 The prefix string set for this EPS object.
- *         """
- *         cdef const_char *prefix = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetOptionsPrefix(self.eps, &prefix) )
- *         return bytes2str(prefix)
- */
-  __pyx_v_prefix = NULL;
-
-  /* "SLEPc/EPS.pyx":317
- *         """
- *         cdef const_char *prefix = NULL
- *         CHKERR( EPSGetOptionsPrefix(self.eps, &prefix) )             # <<<<<<<<<<<<<<
- *         return bytes2str(prefix)
- * 
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetOptionsPrefix(__pyx_v_self->eps, (&__pyx_v_prefix))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/EPS.pyx":318
- *         cdef const_char *prefix = NULL
- *         CHKERR( EPSGetOptionsPrefix(self.eps, &prefix) )
- *         return bytes2str(prefix)             # <<<<<<<<<<<<<<
- * 
- *     def setOptionsPrefix(self, prefix):
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_prefix); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
-
-  /* "SLEPc/EPS.pyx":306
- *         return bytes2str(eps_type)
- * 
- *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the prefix used for searching for all EPS options in the
- */
-
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "SLEPc/EPS.pyx":320
- *         return bytes2str(prefix)
+/* "SLEPc/FN.pyx":226
+ *     #
  * 
- *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *     def setRationalNumerator(self, alpha not None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the prefix used for searching for all EPS options in the
+ *         Sets the coefficients of the numerator of the rational function.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_17setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_16setOptionsPrefix[] = "EPS.setOptionsPrefix(self, prefix)\n\n        Sets the prefix used for searching for all EPS options in the\n        database.\n\n        Parameters\n        ----------\n        prefix: string\n                The prefix string to prepend to all EPS option\n                requests.\n\n        Notes\n        -----\n        A hyphen (-) must NOT be given at the beginning of the prefix\n        name.  The first character o [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_17setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_prefix = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_27setRationalNumerator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2FN_26setRationalNumerator[] = "FN.setRationalNumerator(self, alpha)\n\n        Sets the coefficients of the numerator of the rational function.\n\n        Parameters\n        ----------\n        alpha: array of scalars\n            Coefficients.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_27setRationalNumerator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_alpha = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setOptionsPrefix (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setRationalNumerator (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_prefix,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_alpha,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -18193,82 +19687,96 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_17setOptionsPrefix(PyObject *__p
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_prefix)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRationalNumerator") < 0)) __PYX_ERR(11, 226, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_prefix = values[0];
+    __pyx_v_alpha = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setRationalNumerator", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(11, 226, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.FN.setRationalNumerator", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_16setOptionsPrefix(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_prefix);
+  if (unlikely(((PyObject *)__pyx_v_alpha) == Py_None)) {
+    PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "alpha"); __PYX_ERR(11, 226, __pyx_L1_error)
+  }
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_26setRationalNumerator(((struct PySlepcFNObject *)__pyx_v_self), __pyx_v_alpha);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_16setOptionsPrefix(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
-  const char *__pyx_v_cval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_26setRationalNumerator(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_alpha) {
+  PetscInt __pyx_v_na;
+  PetscScalar *__pyx_v_a;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setOptionsPrefix", 0);
-  __Pyx_INCREF(__pyx_v_prefix);
+  __Pyx_RefNannySetupContext("setRationalNumerator", 0);
 
-  /* "SLEPc/EPS.pyx":343
- *             E2.setOptionsPrefix("eig2_")
+  /* "SLEPc/FN.pyx":235
+ *             Coefficients.
  *         """
- *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
- *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( EPSSetOptionsPrefix(self.eps, cval) )
+ *         cdef PetscInt na = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscScalar *a = NULL
+ *         cdef object tmp1 = iarray_s(alpha, &na, &a)
  */
-  __pyx_v_cval = NULL;
+  __pyx_v_na = 0;
 
-  /* "SLEPc/EPS.pyx":344
+  /* "SLEPc/FN.pyx":236
  *         """
- *         cdef const_char *cval = NULL
- *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
- *         CHKERR( EPSSetOptionsPrefix(self.eps, cval) )
+ *         cdef PetscInt na = 0
+ *         cdef PetscScalar *a = NULL             # <<<<<<<<<<<<<<
+ *         cdef object tmp1 = iarray_s(alpha, &na, &a)
+ *         CHKERR( FNRationalSetNumerator(self.fn, na, a) )
+ */
+  __pyx_v_a = NULL;
+
+  /* "SLEPc/FN.pyx":237
+ *         cdef PetscInt na = 0
+ *         cdef PetscScalar *a = NULL
+ *         cdef object tmp1 = iarray_s(alpha, &na, &a)             # <<<<<<<<<<<<<<
+ *         CHKERR( FNRationalSetNumerator(self.fn, na, a) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_iarray_s(__pyx_v_alpha, (&__pyx_v_na), (&__pyx_v_a)); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 237, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
+  __pyx_v_tmp1 = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "SLEPc/EPS.pyx":345
- *         cdef const_char *cval = NULL
- *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( EPSSetOptionsPrefix(self.eps, cval) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/FN.pyx":238
+ *         cdef PetscScalar *a = NULL
+ *         cdef object tmp1 = iarray_s(alpha, &na, &a)
+ *         CHKERR( FNRationalSetNumerator(self.fn, na, a) )             # <<<<<<<<<<<<<<
  * 
- *     def appendOptionsPrefix(self, prefix):
+ *     def setRationalDenominator(self, alpha not None):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetOptionsPrefix(__pyx_v_self->eps, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNRationalSetNumerator(__pyx_v_self->fn, __pyx_v_na, __pyx_v_a)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 238, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":320
- *         return bytes2str(prefix)
+  /* "SLEPc/FN.pyx":226
+ *     #
  * 
- *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *     def setRationalNumerator(self, alpha not None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the prefix used for searching for all EPS options in the
+ *         Sets the coefficients of the numerator of the rational function.
  */
 
   /* function exit code */
@@ -18276,36 +19784,33 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_16setOptionsPrefix(struct PySlep
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.FN.setRationalNumerator", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_prefix);
+  __Pyx_XDECREF(__pyx_v_tmp1);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":347
- *         CHKERR( EPSSetOptionsPrefix(self.eps, cval) )
+/* "SLEPc/FN.pyx":240
+ *         CHKERR( FNRationalSetNumerator(self.fn, na, a) )
  * 
- *     def appendOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *     def setRationalDenominator(self, alpha not None):             # <<<<<<<<<<<<<<
  *         """
- *         Appends to the prefix used for searching for all EPS options
+ *         Sets the coefficients of the denominator of the rational function.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_19appendOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_18appendOptionsPrefix[] = "EPS.appendOptionsPrefix(self, prefix)\n\n        Appends to the prefix used for searching for all EPS options\n        in the database.\n\n        Parameters\n        ----------\n        prefix: string\n                The prefix string to prepend to all EPS option requests.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_19appendOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_prefix = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_29setRationalDenominator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2FN_28setRationalDenominator[] = "FN.setRationalDenominator(self, alpha)\n\n        Sets the coefficients of the denominator of the rational function.\n\n        Parameters\n        ----------\n        alpha: array of scalars\n            Coefficients.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2FN_29setRationalDenominator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_alpha = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("appendOptionsPrefix (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setRationalDenominator (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_prefix,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_alpha,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -18318,82 +19823,96 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_19appendOptionsPrefix(PyObject *
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_prefix)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "appendOptionsPrefix") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRationalDenominator") < 0)) __PYX_ERR(11, 240, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_prefix = values[0];
+    __pyx_v_alpha = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("appendOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setRationalDenominator", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(11, 240, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.appendOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.FN.setRationalDenominator", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_18appendOptionsPrefix(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_prefix);
+  if (unlikely(((PyObject *)__pyx_v_alpha) == Py_None)) {
+    PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "alpha"); __PYX_ERR(11, 240, __pyx_L1_error)
+  }
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2FN_28setRationalDenominator(((struct PySlepcFNObject *)__pyx_v_self), __pyx_v_alpha);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_18appendOptionsPrefix(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
-  const char *__pyx_v_cval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2FN_28setRationalDenominator(struct PySlepcFNObject *__pyx_v_self, PyObject *__pyx_v_alpha) {
+  PetscInt __pyx_v_na;
+  PetscScalar *__pyx_v_a;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("appendOptionsPrefix", 0);
-  __Pyx_INCREF(__pyx_v_prefix);
+  __Pyx_RefNannySetupContext("setRationalDenominator", 0);
 
-  /* "SLEPc/EPS.pyx":357
- *                 The prefix string to prepend to all EPS option requests.
+  /* "SLEPc/FN.pyx":249
+ *             Coefficients.
  *         """
- *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
- *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( EPSAppendOptionsPrefix(self.eps, cval) )
+ *         cdef PetscInt na = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscScalar *a = NULL
+ *         cdef object tmp1 = iarray_s(alpha, &na, &a)
  */
-  __pyx_v_cval = NULL;
+  __pyx_v_na = 0;
 
-  /* "SLEPc/EPS.pyx":358
+  /* "SLEPc/FN.pyx":250
  *         """
- *         cdef const_char *cval = NULL
- *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
- *         CHKERR( EPSAppendOptionsPrefix(self.eps, cval) )
+ *         cdef PetscInt na = 0
+ *         cdef PetscScalar *a = NULL             # <<<<<<<<<<<<<<
+ *         cdef object tmp1 = iarray_s(alpha, &na, &a)
+ *         CHKERR( FNRationalSetDenominator(self.fn, na, a) )
+ */
+  __pyx_v_a = NULL;
+
+  /* "SLEPc/FN.pyx":251
+ *         cdef PetscInt na = 0
+ *         cdef PetscScalar *a = NULL
+ *         cdef object tmp1 = iarray_s(alpha, &na, &a)             # <<<<<<<<<<<<<<
+ *         CHKERR( FNRationalSetDenominator(self.fn, na, a) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_iarray_s(__pyx_v_alpha, (&__pyx_v_na), (&__pyx_v_a)); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 251, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
+  __pyx_v_tmp1 = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "SLEPc/EPS.pyx":359
- *         cdef const_char *cval = NULL
- *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( EPSAppendOptionsPrefix(self.eps, cval) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/FN.pyx":252
+ *         cdef PetscScalar *a = NULL
+ *         cdef object tmp1 = iarray_s(alpha, &na, &a)
+ *         CHKERR( FNRationalSetDenominator(self.fn, na, a) )             # <<<<<<<<<<<<<<
  * 
- *     def setFromOptions(self):
+ * # -----------------------------------------------------------------------------
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSAppendOptionsPrefix(__pyx_v_self->eps, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(FNRationalSetDenominator(__pyx_v_self->fn, __pyx_v_na, __pyx_v_a)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 252, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":347
- *         CHKERR( EPSSetOptionsPrefix(self.eps, cval) )
+  /* "SLEPc/FN.pyx":240
+ *         CHKERR( FNRationalSetNumerator(self.fn, na, a) )
  * 
- *     def appendOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *     def setRationalDenominator(self, alpha not None):             # <<<<<<<<<<<<<<
  *         """
- *         Appends to the prefix used for searching for all EPS options
+ *         Sets the coefficients of the denominator of the rational function.
  */
 
   /* function exit code */
@@ -18401,187 +19920,96 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_18appendOptionsPrefix(struct PyS
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.appendOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.FN.setRationalDenominator", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_prefix);
+  __Pyx_XDECREF(__pyx_v_tmp1);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":361
- *         CHKERR( EPSAppendOptionsPrefix(self.eps, cval) )
+/* "SLEPc/RG.pyx":22
+ *     Type             = RGType
  * 
- *     def setFromOptions(self):             # <<<<<<<<<<<<<<
- *         """
- *         Sets EPS options from the options database. This routine must
+ *     def __cinit__(self):             # <<<<<<<<<<<<<<
+ *         self.obj = <PetscObject*> &self.rg
+ *         self.rg = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_21setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_20setFromOptions[] = "EPS.setFromOptions(self)\n\n        Sets EPS options from the options database. This routine must\n        be called before `setUp()` if the user is to be allowed to set\n        the solver type.\n\n        Notes\n        -----\n        To see all options, run your program with the ``-help``\n        option.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_21setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
+static int __pyx_pw_8slepc4py_5SLEPc_2RG_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pw_8slepc4py_5SLEPc_2RG_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setFromOptions (wrapper)", 0);
+  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("setFromOptions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setFromOptions", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_20setFromOptions(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG___cinit__(((struct PySlepcRGObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_20setFromOptions(struct PySlepcEPSObject *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
+static int __pyx_pf_8slepc4py_5SLEPc_2RG___cinit__(struct PySlepcRGObject *__pyx_v_self) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setFromOptions", 0);
-
-  /* "SLEPc/EPS.pyx":372
- *         option.
- *         """
- *         CHKERR( EPSSetFromOptions(self.eps) )             # <<<<<<<<<<<<<<
- * 
- *     #
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetFromOptions(__pyx_v_self->eps)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/EPS.pyx":361
- *         CHKERR( EPSAppendOptionsPrefix(self.eps, cval) )
- * 
- *     def setFromOptions(self):             # <<<<<<<<<<<<<<
- *         """
- *         Sets EPS options from the options database. This routine must
- */
-
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setFromOptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  __Pyx_RefNannySetupContext("__cinit__", 0);
 
-/* "SLEPc/EPS.pyx":376
- *     #
+  /* "SLEPc/RG.pyx":23
  * 
- *     def getProblemType(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the problem type from the EPS object.
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_23getProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_22getProblemType[] = "EPS.getProblemType(self)\n\n        Gets the problem type from the EPS object.\n\n        Returns\n        -------\n        problem_type: `EPS.ProblemType` enumerate\n                      The problem type that was previously set.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_23getProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getProblemType (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getProblemType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getProblemType", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_22getProblemType(((struct PySlepcEPSObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_22getProblemType(struct PySlepcEPSObject *__pyx_v_self) {
-  EPSProblemType __pyx_v_val;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getProblemType", 0);
-
-  /* "SLEPc/EPS.pyx":385
- *                       The problem type that was previously set.
- *         """
- *         cdef SlepcEPSProblemType val = EPS_NHEP             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetProblemType(self.eps, &val) )
- *         return val
- */
-  __pyx_v_val = EPS_NHEP;
-
-  /* "SLEPc/EPS.pyx":386
- *         """
- *         cdef SlepcEPSProblemType val = EPS_NHEP
- *         CHKERR( EPSGetProblemType(self.eps, &val) )             # <<<<<<<<<<<<<<
- *         return val
+ *     def __cinit__(self):
+ *         self.obj = <PetscObject*> &self.rg             # <<<<<<<<<<<<<<
+ *         self.rg = NULL
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetProblemType(__pyx_v_self->eps, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->rg));
 
-  /* "SLEPc/EPS.pyx":387
- *         cdef SlepcEPSProblemType val = EPS_NHEP
- *         CHKERR( EPSGetProblemType(self.eps, &val) )
- *         return val             # <<<<<<<<<<<<<<
+  /* "SLEPc/RG.pyx":24
+ *     def __cinit__(self):
+ *         self.obj = <PetscObject*> &self.rg
+ *         self.rg = NULL             # <<<<<<<<<<<<<<
  * 
- *     def setProblemType(self, problem_type):
+ *     def view(self, Viewer viewer=None):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __pyx_v_self->rg = NULL;
 
-  /* "SLEPc/EPS.pyx":376
- *     #
+  /* "SLEPc/RG.pyx":22
+ *     Type             = RGType
  * 
- *     def getProblemType(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the problem type from the EPS object.
+ *     def __cinit__(self):             # <<<<<<<<<<<<<<
+ *         self.obj = <PetscObject*> &self.rg
+ *         self.rg = NULL
  */
 
   /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getProblemType", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
+  __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":389
- *         return val
+/* "SLEPc/RG.pyx":26
+ *         self.rg = NULL
  * 
- *     def setProblemType(self, problem_type):             # <<<<<<<<<<<<<<
+ *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
  *         """
- *         Specifies the type of the eigenvalue problem.
+ *         Prints the RG data structure.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_25setProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_24setProblemType[] = "EPS.setProblemType(self, problem_type)\n\n        Specifies the type of the eigenvalue problem.\n\n        Parameters\n        ----------\n        problem_type: `EPS.ProblemType` enumerate\n               The problem type to be set.\n\n        Notes\n        -----\n        Allowed values are: Hermitian (HEP), non-Hermitian (NHEP),\n        generalized Hermitian (GHEP), generalized non-Hermitian\n        (GNHEP), and genera [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_25setProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_problem_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2RG_2view[] = "RG.view(self, Viewer viewer=None)\n\n        Prints the RG data structure.\n\n        Parameters\n        ----------\n        viewer: Viewer, optional\n                Visualization context; if not provided, the standard\n                output is used.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscViewerObject *__pyx_v_viewer = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setProblemType (wrapper)", 0);
+  __Pyx_RefNannySetupContext("view (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_problem_type,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_viewer,0};
     PyObject* values[1] = {0};
+    values[0] = (PyObject *)((struct PyPetscViewerObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
@@ -18593,77 +20021,98 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_25setProblemType(PyObject *__pyx
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_problem_type)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_viewer);
+          if (value) { values[0] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setProblemType") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(12, 26, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
     } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
     }
-    __pyx_v_problem_type = values[0];
+    __pyx_v_viewer = ((struct PyPetscViewerObject *)values[0]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setProblemType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(12, 26, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setProblemType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.RG.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_24setProblemType(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_problem_type);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) __PYX_ERR(12, 26, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_2view(((struct PySlepcRGObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_24setProblemType(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_problem_type) {
-  EPSProblemType __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_2view(struct PySlepcRGObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
+  PetscViewer __pyx_v_vwr;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  EPSProblemType __pyx_t_1;
+  int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setProblemType", 0);
+  PetscViewer __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("view", 0);
 
-  /* "SLEPc/EPS.pyx":414
- *         properties.
+  /* "SLEPc/RG.pyx":36
+ *                 output is used.
  *         """
- *         cdef SlepcEPSProblemType val = problem_type             # <<<<<<<<<<<<<<
- *         CHKERR( EPSSetProblemType(self.eps, val) )
- * 
+ *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( RGView(self.rg, vwr) )
  */
-  __pyx_t_1 = ((EPSProblemType)PyInt_AsLong(__pyx_v_problem_type)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_val = __pyx_t_1;
+  __pyx_v_vwr = NULL;
 
-  /* "SLEPc/EPS.pyx":415
+  /* "SLEPc/RG.pyx":37
  *         """
- *         cdef SlepcEPSProblemType val = problem_type
- *         CHKERR( EPSSetProblemType(self.eps, val) )             # <<<<<<<<<<<<<<
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
+ *         CHKERR( RGView(self.rg, vwr) )
  * 
- *     def isGeneralized(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetProblemType(__pyx_v_self->eps, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (((PyObject *)__pyx_v_viewer) != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_v_viewer->vwr;
+    __pyx_v_vwr = __pyx_t_3;
+  }
 
-  /* "SLEPc/EPS.pyx":389
- *         return val
+  /* "SLEPc/RG.pyx":38
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( RGView(self.rg, vwr) )             # <<<<<<<<<<<<<<
  * 
- *     def setProblemType(self, problem_type):             # <<<<<<<<<<<<<<
+ *     def destroy(self):
+ */
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGView(__pyx_v_self->rg, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(12, 38, __pyx_L1_error)
+
+  /* "SLEPc/RG.pyx":26
+ *         self.rg = NULL
+ * 
+ *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
  *         """
- *         Specifies the type of the eigenvalue problem.
+ *         Prints the RG data structure.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setProblemType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.RG.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -18671,86 +20120,78 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_24setProblemType(struct PySlepcE
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":417
- *         CHKERR( EPSSetProblemType(self.eps, val) )
+/* "SLEPc/RG.pyx":40
+ *         CHKERR( RGView(self.rg, vwr) )
  * 
- *     def isGeneralized(self):             # <<<<<<<<<<<<<<
+ *     def destroy(self):             # <<<<<<<<<<<<<<
  *         """
- *         Tells whether the EPS object corresponds to a generalized
+ *         Destroys the RG object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_27isGeneralized(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_26isGeneralized[] = "EPS.isGeneralized(self)\n\n        Tells whether the EPS object corresponds to a generalized\n        eigenvalue problem.\n\n        Returns\n        -------\n        flag: boolean\n              True if two matrices were set with `setOperators()`.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_27isGeneralized(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2RG_4destroy[] = "RG.destroy(self)\n\n        Destroys the RG object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("isGeneralized (wrapper)", 0);
+  __Pyx_RefNannySetupContext("destroy (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("isGeneralized", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "isGeneralized", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_26isGeneralized(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("destroy", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "destroy", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_4destroy(((struct PySlepcRGObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_26isGeneralized(struct PySlepcEPSObject *__pyx_v_self) {
-  PetscBool __pyx_v_tval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_4destroy(struct PySlepcRGObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("isGeneralized", 0);
+  __Pyx_RefNannySetupContext("destroy", 0);
 
-  /* "SLEPc/EPS.pyx":427
- *               True if two matrices were set with `setOperators()`.
+  /* "SLEPc/RG.pyx":44
+ *         Destroys the RG object.
  *         """
- *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( EPSIsGeneralized(self.eps, &tval) )
- *         return <bint> tval
+ *         CHKERR( RGDestroy(&self.rg) )             # <<<<<<<<<<<<<<
+ *         self.rg = NULL
+ *         return self
  */
-  __pyx_v_tval = PETSC_FALSE;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGDestroy((&__pyx_v_self->rg))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(12, 44, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":428
+  /* "SLEPc/RG.pyx":45
  *         """
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( EPSIsGeneralized(self.eps, &tval) )             # <<<<<<<<<<<<<<
- *         return <bint> tval
+ *         CHKERR( RGDestroy(&self.rg) )
+ *         self.rg = NULL             # <<<<<<<<<<<<<<
+ *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSIsGeneralized(__pyx_v_self->eps, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->rg = NULL;
 
-  /* "SLEPc/EPS.pyx":429
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( EPSIsGeneralized(self.eps, &tval) )
- *         return <bint> tval             # <<<<<<<<<<<<<<
+  /* "SLEPc/RG.pyx":46
+ *         CHKERR( RGDestroy(&self.rg) )
+ *         self.rg = NULL
+ *         return self             # <<<<<<<<<<<<<<
  * 
- *     def isHermitian(self):
+ *     def create(self, comm=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_tval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":417
- *         CHKERR( EPSSetProblemType(self.eps, val) )
+  /* "SLEPc/RG.pyx":40
+ *         CHKERR( RGView(self.rg, vwr) )
  * 
- *     def isGeneralized(self):             # <<<<<<<<<<<<<<
+ *     def destroy(self):             # <<<<<<<<<<<<<<
  *         """
- *         Tells whether the EPS object corresponds to a generalized
+ *         Destroys the RG object.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.isGeneralized", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.RG.destroy", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -18758,86 +20199,139 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_26isGeneralized(struct PySlepcEP
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":431
- *         return <bint> tval
+/* "SLEPc/RG.pyx":48
+ *         return self
  * 
- *     def isHermitian(self):             # <<<<<<<<<<<<<<
+ *     def create(self, comm=None):             # <<<<<<<<<<<<<<
  *         """
- *         Tells whether the EPS object corresponds to a Hermitian
+ *         Creates the RG object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_29isHermitian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_28isHermitian[] = "EPS.isHermitian(self)\n\n        Tells whether the EPS object corresponds to a Hermitian\n        eigenvalue problem.\n\n        Returns\n        -------\n        flag: boolean\n              True if the problem type set with `setProblemType()` was\n              Hermitian.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_29isHermitian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_7create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2RG_6create[] = "RG.create(self, comm=None)\n\n        Creates the RG object.\n\n        Parameters\n        ----------\n        comm: Comm, optional\n              MPI communicator; if not provided, it defaults to all\n              processes.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_7create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("isHermitian (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("isHermitian", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "isHermitian", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_28isHermitian(((struct PySlepcEPSObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("create (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,0};
+    PyObject* values[1] = {0};
+    values[0] = ((PyObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
+          if (value) { values[0] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(12, 48, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_comm = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(12, 48, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.RG.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_6create(((struct PySlepcRGObject *)__pyx_v_self), __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_28isHermitian(struct PySlepcEPSObject *__pyx_v_self) {
-  PetscBool __pyx_v_tval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_6create(struct PySlepcRGObject *__pyx_v_self, PyObject *__pyx_v_comm) {
+  MPI_Comm __pyx_v_ccomm;
+  RG __pyx_v_newrg;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("isHermitian", 0);
+  MPI_Comm __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("create", 0);
 
-  /* "SLEPc/EPS.pyx":442
- *               Hermitian.
+  /* "SLEPc/RG.pyx":58
+ *               processes.
  *         """
- *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( EPSIsHermitian(self.eps, &tval) )
- *         return <bint> tval
+ *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())             # <<<<<<<<<<<<<<
+ *         cdef SlepcRG newrg = NULL
+ *         CHKERR( RGCreate(ccomm, &newrg) )
  */
-  __pyx_v_tval = PETSC_FALSE;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_def_Comm(__pyx_v_comm, __pyx_f_8slepc4py_5SLEPc_SLEPC_COMM_DEFAULT()); if (unlikely(PyErr_Occurred())) __PYX_ERR(12, 58, __pyx_L1_error)
+  __pyx_v_ccomm = __pyx_t_1;
 
-  /* "SLEPc/EPS.pyx":443
+  /* "SLEPc/RG.pyx":59
  *         """
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( EPSIsHermitian(self.eps, &tval) )             # <<<<<<<<<<<<<<
- *         return <bint> tval
+ *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
+ *         cdef SlepcRG newrg = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( RGCreate(ccomm, &newrg) )
+ *         SlepcCLEAR(self.obj); self.rg = newrg
+ */
+  __pyx_v_newrg = NULL;
+
+  /* "SLEPc/RG.pyx":60
+ *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
+ *         cdef SlepcRG newrg = NULL
+ *         CHKERR( RGCreate(ccomm, &newrg) )             # <<<<<<<<<<<<<<
+ *         SlepcCLEAR(self.obj); self.rg = newrg
+ *         return self
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGCreate(__pyx_v_ccomm, (&__pyx_v_newrg))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(12, 60, __pyx_L1_error)
+
+  /* "SLEPc/RG.pyx":61
+ *         cdef SlepcRG newrg = NULL
+ *         CHKERR( RGCreate(ccomm, &newrg) )
+ *         SlepcCLEAR(self.obj); self.rg = newrg             # <<<<<<<<<<<<<<
+ *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSIsHermitian(__pyx_v_self->eps, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_f_8slepc4py_5SLEPc_SlepcCLEAR(__pyx_v_self->__pyx_base.obj);
+  __pyx_v_self->rg = __pyx_v_newrg;
 
-  /* "SLEPc/EPS.pyx":444
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( EPSIsHermitian(self.eps, &tval) )
- *         return <bint> tval             # <<<<<<<<<<<<<<
+  /* "SLEPc/RG.pyx":62
+ *         CHKERR( RGCreate(ccomm, &newrg) )
+ *         SlepcCLEAR(self.obj); self.rg = newrg
+ *         return self             # <<<<<<<<<<<<<<
  * 
- *     def isPositive(self):
+ *     def setType(self, rg_type):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_tval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":431
- *         return <bint> tval
+  /* "SLEPc/RG.pyx":48
+ *         return self
  * 
- *     def isHermitian(self):             # <<<<<<<<<<<<<<
+ *     def create(self, comm=None):             # <<<<<<<<<<<<<<
  *         """
- *         Tells whether the EPS object corresponds to a Hermitian
+ *         Creates the RG object.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.isHermitian", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.RG.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -18845,214 +20339,202 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_28isHermitian(struct PySlepcEPSO
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":446
- *         return <bint> tval
+/* "SLEPc/RG.pyx":64
+ *         return self
  * 
- *     def isPositive(self):             # <<<<<<<<<<<<<<
+ *     def setType(self, rg_type):             # <<<<<<<<<<<<<<
  *         """
- *         Tells whether the EPS object corresponds to an eigenvalue problem
+ *         Selects the type for the RG object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_31isPositive(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_30isPositive[] = "EPS.isPositive(self)\n\n        Tells whether the EPS object corresponds to an eigenvalue problem\n        type that requires a positive (semi-) definite matrix B.\n\n        Returns\n        -------\n        flag: boolean\n              True if the problem type set with `setProblemType()` was\n              positive.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_31isPositive(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_9setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2RG_8setType[] = "RG.setType(self, rg_type)\n\n        Selects the type for the RG object.\n\n        Parameters\n        ----------\n        rg_type: `RG.Type` enumerate\n                  The inner product type to be used.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_9setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_rg_type = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("isPositive (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("isPositive", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "isPositive", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_30isPositive(((struct PySlepcEPSObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("setType (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rg_type,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rg_type)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(12, 64, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_rg_type = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(12, 64, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.RG.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_8setType(((struct PySlepcRGObject *)__pyx_v_self), __pyx_v_rg_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_30isPositive(struct PySlepcEPSObject *__pyx_v_self) {
-  PetscBool __pyx_v_tval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_8setType(struct PySlepcRGObject *__pyx_v_self, PyObject *__pyx_v_rg_type) {
+  const char* __pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("isPositive", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setType", 0);
+  __Pyx_INCREF(__pyx_v_rg_type);
 
-  /* "SLEPc/EPS.pyx":457
- *               positive.
+  /* "SLEPc/RG.pyx":73
+ *                   The inner product type to be used.
  *         """
- *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( EPSIsPositive(self.eps, &tval) )
- *         return <bint> tval
+ *         cdef SlepcRGType cval = NULL             # <<<<<<<<<<<<<<
+ *         rg_type = str2bytes(rg_type, &cval)
+ *         CHKERR( RGSetType(self.rg, cval) )
  */
-  __pyx_v_tval = PETSC_FALSE;
+  __pyx_v_cval = NULL;
 
-  /* "SLEPc/EPS.pyx":458
+  /* "SLEPc/RG.pyx":74
  *         """
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( EPSIsPositive(self.eps, &tval) )             # <<<<<<<<<<<<<<
- *         return <bint> tval
+ *         cdef SlepcRGType cval = NULL
+ *         rg_type = str2bytes(rg_type, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( RGSetType(self.rg, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSIsPositive(__pyx_v_self->eps, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_rg_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 74, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_rg_type, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/EPS.pyx":459
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( EPSIsPositive(self.eps, &tval) )
- *         return <bint> tval             # <<<<<<<<<<<<<<
+  /* "SLEPc/RG.pyx":75
+ *         cdef SlepcRGType cval = NULL
+ *         rg_type = str2bytes(rg_type, &cval)
+ *         CHKERR( RGSetType(self.rg, cval) )             # <<<<<<<<<<<<<<
  * 
- *     def getBalance(self):
+ *     def getType(self):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_tval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGSetType(__pyx_v_self->rg, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(12, 75, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":446
- *         return <bint> tval
+  /* "SLEPc/RG.pyx":64
+ *         return self
  * 
- *     def isPositive(self):             # <<<<<<<<<<<<<<
+ *     def setType(self, rg_type):             # <<<<<<<<<<<<<<
  *         """
- *         Tells whether the EPS object corresponds to an eigenvalue problem
+ *         Selects the type for the RG object.
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.isPositive", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.RG.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_rg_type);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":461
- *         return <bint> tval
+/* "SLEPc/RG.pyx":77
+ *         CHKERR( RGSetType(self.rg, cval) )
  * 
- *     def getBalance(self):             # <<<<<<<<<<<<<<
+ *     def getType(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the balancing type used by the EPS object,
+ *         Gets the RG type of this object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_33getBalance(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_32getBalance[] = "EPS.getBalance(self)\n\n        Gets the balancing type used by the EPS object,\n        and the associated parameters.\n\n        Returns\n        -------\n        balance: `EPS.Balance` enumerate\n                 The balancing method\n        iterations: integer\n                    Number of iterations of the balancing algorithm\n        cutoff: real\n                Cutoff value\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_33getBalance(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_11getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2RG_10getType[] = "RG.getType(self)\n\n        Gets the RG type of this object.\n\n        Returns\n        -------\n        type: `RG.Type` enumerate\n              The inner product type currently being used.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_11getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getBalance (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getType (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getBalance", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getBalance", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_32getBalance(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getType", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_10getType(((struct PySlepcRGObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_32getBalance(struct PySlepcEPSObject *__pyx_v_self) {
-  EPSBalance __pyx_v_val;
-  PetscInt __pyx_v_ival;
-  PetscReal __pyx_v_rval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_10getType(struct PySlepcRGObject *__pyx_v_self) {
+  const char* __pyx_v_rg_type;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getBalance", 0);
+  __Pyx_RefNannySetupContext("getType", 0);
 
-  /* "SLEPc/EPS.pyx":475
- *                 Cutoff value
+  /* "SLEPc/RG.pyx":86
+ *               The inner product type currently being used.
  *         """
- *         cdef SlepcEPSBalance val = EPS_BALANCE_ONESIDE             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival = 0
- *         cdef PetscReal rval = 0
+ *         cdef SlepcRGType rg_type = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( RGGetType(self.rg, &rg_type) )
+ *         return bytes2str(rg_type)
  */
-  __pyx_v_val = EPS_BALANCE_ONESIDE;
+  __pyx_v_rg_type = NULL;
 
-  /* "SLEPc/EPS.pyx":476
+  /* "SLEPc/RG.pyx":87
  *         """
- *         cdef SlepcEPSBalance val = EPS_BALANCE_ONESIDE
- *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval = 0
- *         CHKERR( EPSGetBalance(self.eps, &val, &ival, &rval) )
- */
-  __pyx_v_ival = 0;
-
-  /* "SLEPc/EPS.pyx":477
- *         cdef SlepcEPSBalance val = EPS_BALANCE_ONESIDE
- *         cdef PetscInt ival = 0
- *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetBalance(self.eps, &val, &ival, &rval) )
- *         return (val, toInt(ival), toReal(rval))
- */
-  __pyx_v_rval = 0.0;
-
-  /* "SLEPc/EPS.pyx":478
- *         cdef PetscInt ival = 0
- *         cdef PetscReal rval = 0
- *         CHKERR( EPSGetBalance(self.eps, &val, &ival, &rval) )             # <<<<<<<<<<<<<<
- *         return (val, toInt(ival), toReal(rval))
+ *         cdef SlepcRGType rg_type = NULL
+ *         CHKERR( RGGetType(self.rg, &rg_type) )             # <<<<<<<<<<<<<<
+ *         return bytes2str(rg_type)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetBalance(__pyx_v_self->eps, (&__pyx_v_val), (&__pyx_v_ival), (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGGetType(__pyx_v_self->rg, (&__pyx_v_rg_type))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(12, 87, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":479
- *         cdef PetscReal rval = 0
- *         CHKERR( EPSGetBalance(self.eps, &val, &ival, &rval) )
- *         return (val, toInt(ival), toReal(rval))             # <<<<<<<<<<<<<<
+  /* "SLEPc/RG.pyx":88
+ *         cdef SlepcRGType rg_type = NULL
+ *         CHKERR( RGGetType(self.rg, &rg_type) )
+ *         return bytes2str(rg_type)             # <<<<<<<<<<<<<<
  * 
- *     def setBalance(self, balance=None, iterations=None, cutoff=None):
+ *     def setOptionsPrefix(self, prefix):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_rg_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 88, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __Pyx_GIVEREF(__pyx_t_2);
-  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_3);
-  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_4);
-  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
+  __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
-  __pyx_t_3 = 0;
-  __pyx_t_4 = 0;
-  __pyx_r = __pyx_t_5;
-  __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":461
- *         return <bint> tval
+  /* "SLEPc/RG.pyx":77
+ *         CHKERR( RGSetType(self.rg, cval) )
  * 
- *     def getBalance(self):             # <<<<<<<<<<<<<<
+ *     def getType(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the balancing type used by the EPS object,
+ *         Gets the RG type of this object.
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getBalance", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.RG.getType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -19060,39 +20542,29 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_32getBalance(struct PySlepcEPSOb
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":481
- *         return (val, toInt(ival), toReal(rval))
+/* "SLEPc/RG.pyx":90
+ *         return bytes2str(rg_type)
  * 
- *     def setBalance(self, balance=None, iterations=None, cutoff=None):             # <<<<<<<<<<<<<<
+ *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
  *         """
- *         Specifies the balancing technique to be employed by the
+ *         Sets the prefix used for searching for all RG options in the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_35setBalance(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_34setBalance[] = "EPS.setBalance(self, balance=None, iterations=None, cutoff=None)\n\n        Specifies the balancing technique to be employed by the\n        eigensolver, and some parameters associated to it.\n\n        Parameters\n        ----------\n        balance: `EPS.Balance` enumerate\n                 The balancing method\n        iterations: integer\n                    Number of iterations of the balancing algorithm\n        cutoff:  [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_35setBalance(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_balance = 0;
-  PyObject *__pyx_v_iterations = 0;
-  PyObject *__pyx_v_cutoff = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_13setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2RG_12setOptionsPrefix[] = "RG.setOptionsPrefix(self, prefix)\n\n        Sets the prefix used for searching for all RG options in the\n        database.\n\n        Parameters\n        ----------\n        prefix: string\n                The prefix string to prepend to all RG option\n                requests.\n\n        Notes\n        -----\n        A hyphen (``-``) must NOT be given at the beginning of the\n        prefix name.  The first character o [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_13setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_prefix = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setBalance (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setOptionsPrefix (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_balance,&__pyx_n_s_iterations,&__pyx_n_s_cutoff,0};
-    PyObject* values[3] = {0,0,0};
-    values[0] = ((PyObject *)Py_None);
-    values[1] = ((PyObject *)Py_None);
-    values[2] = ((PyObject *)Py_None);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_prefix,0};
+    PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -19100,253 +20572,172 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_35setBalance(PyObject *__pyx_v_s
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_balance);
-          if (value) { values[0] = value; kw_args--; }
-        }
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_iterations);
-          if (value) { values[1] = value; kw_args--; }
-        }
-        case  2:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cutoff);
-          if (value) { values[2] = value; kw_args--; }
-        }
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_prefix)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setBalance") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) __PYX_ERR(12, 90, __pyx_L3_error)
       }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
     } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_balance = values[0];
-    __pyx_v_iterations = values[1];
-    __pyx_v_cutoff = values[2];
+    __pyx_v_prefix = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setBalance", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(12, 90, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setBalance", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.RG.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_34setBalance(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_balance, __pyx_v_iterations, __pyx_v_cutoff);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_12setOptionsPrefix(((struct PySlepcRGObject *)__pyx_v_self), __pyx_v_prefix);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_34setBalance(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_balance, PyObject *__pyx_v_iterations, PyObject *__pyx_v_cutoff) {
-  EPSBalance __pyx_v_val;
-  PetscInt __pyx_v_ival;
-  PetscReal __pyx_v_rval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_12setOptionsPrefix(struct PySlepcRGObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
+  const char *__pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  EPSBalance __pyx_t_3;
-  PetscInt __pyx_t_4;
-  PetscReal __pyx_t_5;
-  int __pyx_t_6;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setBalance", 0);
+  __Pyx_RefNannySetupContext("setOptionsPrefix", 0);
+  __Pyx_INCREF(__pyx_v_prefix);
 
-  /* "SLEPc/EPS.pyx":495
- *                 Cutoff value
+  /* "SLEPc/RG.pyx":107
+ *         AUTOMATICALLY the hyphen.
  *         """
- *         cdef SlepcEPSBalance val = <SlepcEPSBalance>PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscInt  ival = PETSC_DEFAULT
- *         cdef PetscReal rval = PETSC_DEFAULT
+ *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
+ *         prefix = str2bytes(prefix, &cval)
+ *         CHKERR( RGSetOptionsPrefix(self.rg, cval) )
  */
-  __pyx_v_val = ((EPSBalance)PETSC_DEFAULT);
+  __pyx_v_cval = NULL;
 
-  /* "SLEPc/EPS.pyx":496
+  /* "SLEPc/RG.pyx":108
  *         """
- *         cdef SlepcEPSBalance val = <SlepcEPSBalance>PETSC_DEFAULT
- *         cdef PetscInt  ival = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval = PETSC_DEFAULT
- *         if balance    is not None: val  = balance
+ *         cdef const_char *cval = NULL
+ *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( RGSetOptionsPrefix(self.rg, cval) )
+ * 
  */
-  __pyx_v_ival = PETSC_DEFAULT;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 108, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/EPS.pyx":497
- *         cdef SlepcEPSBalance val = <SlepcEPSBalance>PETSC_DEFAULT
- *         cdef PetscInt  ival = PETSC_DEFAULT
- *         cdef PetscReal rval = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         if balance    is not None: val  = balance
- *         if iterations is not None: ival = asInt(iterations)
+  /* "SLEPc/RG.pyx":109
+ *         cdef const_char *cval = NULL
+ *         prefix = str2bytes(prefix, &cval)
+ *         CHKERR( RGSetOptionsPrefix(self.rg, cval) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getOptionsPrefix(self):
  */
-  __pyx_v_rval = PETSC_DEFAULT;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGSetOptionsPrefix(__pyx_v_self->rg, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(12, 109, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":498
- *         cdef PetscInt  ival = PETSC_DEFAULT
- *         cdef PetscReal rval = PETSC_DEFAULT
- *         if balance    is not None: val  = balance             # <<<<<<<<<<<<<<
- *         if iterations is not None: ival = asInt(iterations)
- *         if cutoff     is not None: rval = asReal(cutoff)
- */
-  __pyx_t_1 = (__pyx_v_balance != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = ((EPSBalance)PyInt_AsLong(__pyx_v_balance)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 498; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_val = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "SLEPc/EPS.pyx":499
- *         cdef PetscReal rval = PETSC_DEFAULT
- *         if balance    is not None: val  = balance
- *         if iterations is not None: ival = asInt(iterations)             # <<<<<<<<<<<<<<
- *         if cutoff     is not None: rval = asReal(cutoff)
- *         CHKERR( EPSSetBalance(self.eps, val, ival, rval) )
- */
-  __pyx_t_2 = (__pyx_v_iterations != Py_None);
-  __pyx_t_1 = (__pyx_t_2 != 0);
-  if (__pyx_t_1) {
-    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_iterations); if (unlikely(__pyx_t_4 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival = __pyx_t_4;
-    goto __pyx_L4;
-  }
-  __pyx_L4:;
-
-  /* "SLEPc/EPS.pyx":500
- *         if balance    is not None: val  = balance
- *         if iterations is not None: ival = asInt(iterations)
- *         if cutoff     is not None: rval = asReal(cutoff)             # <<<<<<<<<<<<<<
- *         CHKERR( EPSSetBalance(self.eps, val, ival, rval) )
- * 
- */
-  __pyx_t_1 = (__pyx_v_cutoff != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_cutoff); if (unlikely(__pyx_t_5 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_rval = __pyx_t_5;
-    goto __pyx_L5;
-  }
-  __pyx_L5:;
-
-  /* "SLEPc/EPS.pyx":501
- *         if iterations is not None: ival = asInt(iterations)
- *         if cutoff     is not None: rval = asReal(cutoff)
- *         CHKERR( EPSSetBalance(self.eps, val, ival, rval) )             # <<<<<<<<<<<<<<
- * 
- *     def getExtraction(self):
- */
-  __pyx_t_6 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetBalance(__pyx_v_self->eps, __pyx_v_val, __pyx_v_ival, __pyx_v_rval)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/EPS.pyx":481
- *         return (val, toInt(ival), toReal(rval))
+  /* "SLEPc/RG.pyx":90
+ *         return bytes2str(rg_type)
  * 
- *     def setBalance(self, balance=None, iterations=None, cutoff=None):             # <<<<<<<<<<<<<<
+ *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
  *         """
- *         Specifies the balancing technique to be employed by the
+ *         Sets the prefix used for searching for all RG options in the
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setBalance", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.RG.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_prefix);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":503
- *         CHKERR( EPSSetBalance(self.eps, val, ival, rval) )
+/* "SLEPc/RG.pyx":111
+ *         CHKERR( RGSetOptionsPrefix(self.rg, cval) )
  * 
- *     def getExtraction(self):             # <<<<<<<<<<<<<<
+ *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the extraction type used by the EPS object.
+ *         Gets the prefix used for searching for all RG options in the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_37getExtraction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_36getExtraction[] = "EPS.getExtraction(self)\n\n        Gets the extraction type used by the EPS object.\n\n        Returns\n        -------\n        extraction: `EPS.Extraction` enumerate\n                    The method of extraction.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_37getExtraction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2RG_14getOptionsPrefix[] = "RG.getOptionsPrefix(self)\n\n        Gets the prefix used for searching for all RG options in the\n        database.\n\n        Returns\n        -------\n        prefix: string\n                The prefix string set for this RG object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getExtraction (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getOptionsPrefix (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getExtraction", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getExtraction", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_36getExtraction(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getOptionsPrefix", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getOptionsPrefix", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_14getOptionsPrefix(((struct PySlepcRGObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_36getExtraction(struct PySlepcEPSObject *__pyx_v_self) {
-  EPSExtraction __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_14getOptionsPrefix(struct PySlepcRGObject *__pyx_v_self) {
+  const char *__pyx_v_prefix;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getExtraction", 0);
+  __Pyx_RefNannySetupContext("getOptionsPrefix", 0);
 
-  /* "SLEPc/EPS.pyx":512
- *                     The method of extraction.
+  /* "SLEPc/RG.pyx":121
+ *                 The prefix string set for this RG object.
  *         """
- *         cdef SlepcEPSExtraction val = EPS_RITZ             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetExtraction(self.eps, &val) )
- *         return val
+ *         cdef const_char *prefix = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( RGGetOptionsPrefix(self.rg, &prefix) )
+ *         return bytes2str(prefix)
  */
-  __pyx_v_val = EPS_RITZ;
+  __pyx_v_prefix = NULL;
 
-  /* "SLEPc/EPS.pyx":513
+  /* "SLEPc/RG.pyx":122
  *         """
- *         cdef SlepcEPSExtraction val = EPS_RITZ
- *         CHKERR( EPSGetExtraction(self.eps, &val) )             # <<<<<<<<<<<<<<
- *         return val
+ *         cdef const_char *prefix = NULL
+ *         CHKERR( RGGetOptionsPrefix(self.rg, &prefix) )             # <<<<<<<<<<<<<<
+ *         return bytes2str(prefix)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetExtraction(__pyx_v_self->eps, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGGetOptionsPrefix(__pyx_v_self->rg, (&__pyx_v_prefix))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(12, 122, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":514
- *         cdef SlepcEPSExtraction val = EPS_RITZ
- *         CHKERR( EPSGetExtraction(self.eps, &val) )
- *         return val             # <<<<<<<<<<<<<<
+  /* "SLEPc/RG.pyx":123
+ *         cdef const_char *prefix = NULL
+ *         CHKERR( RGGetOptionsPrefix(self.rg, &prefix) )
+ *         return bytes2str(prefix)             # <<<<<<<<<<<<<<
  * 
- *     def setExtraction(self, extraction):
+ *     def setFromOptions(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_prefix); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 123, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":503
- *         CHKERR( EPSSetBalance(self.eps, val, ival, rval) )
+  /* "SLEPc/RG.pyx":111
+ *         CHKERR( RGSetOptionsPrefix(self.rg, cval) )
  * 
- *     def getExtraction(self):             # <<<<<<<<<<<<<<
+ *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the extraction type used by the EPS object.
+ *         Gets the prefix used for searching for all RG options in the
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getExtraction", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.RG.getOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -19354,110 +20745,59 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_36getExtraction(struct PySlepcEP
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":516
- *         return val
+/* "SLEPc/RG.pyx":125
+ *         return bytes2str(prefix)
  * 
- *     def setExtraction(self, extraction):             # <<<<<<<<<<<<<<
+ *     def setFromOptions(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the extraction type used by the EPS object.
+ *         Sets RG options from the options database.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_39setExtraction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_38setExtraction[] = "EPS.setExtraction(self, extraction)\n\n        Sets the extraction type used by the EPS object.\n\n        Parameters\n        ----------\n        extraction: `EPS.Extraction` enumerate\n                    The extraction method to be used by the solver.\n\n        Notes\n        -----\n        Not all eigensolvers support all types of extraction. See the\n        SLEPc documentation for details.\n\n        By default, a st [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_39setExtraction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_extraction = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_17setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2RG_16setFromOptions[] = "RG.setFromOptions(self)\n\n        Sets RG options from the options database.\n\n        Notes\n        -----\n        To see all options, run your program with the ``-help``\n        option.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_17setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setExtraction (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_extraction,0};
-    PyObject* values[1] = {0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_extraction)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setExtraction") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-    }
-    __pyx_v_extraction = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setExtraction", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setExtraction", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_38setExtraction(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_extraction);
+  __Pyx_RefNannySetupContext("setFromOptions (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("setFromOptions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setFromOptions", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_16setFromOptions(((struct PySlepcRGObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_38setExtraction(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_extraction) {
-  EPSExtraction __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_16setFromOptions(struct PySlepcRGObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  EPSExtraction __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setExtraction", 0);
-
-  /* "SLEPc/EPS.pyx":536
- *         *target*. See `setTarget()`.
- *         """
- *         cdef SlepcEPSExtraction val = extraction             # <<<<<<<<<<<<<<
- *         CHKERR( EPSSetExtraction(self.eps, val) )
- * 
- */
-  __pyx_t_1 = ((EPSExtraction)PyInt_AsLong(__pyx_v_extraction)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_val = __pyx_t_1;
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setFromOptions", 0);
 
-  /* "SLEPc/EPS.pyx":537
+  /* "SLEPc/RG.pyx":134
+ *         option.
  *         """
- *         cdef SlepcEPSExtraction val = extraction
- *         CHKERR( EPSSetExtraction(self.eps, val) )             # <<<<<<<<<<<<<<
+ *         CHKERR( RGSetFromOptions(self.rg) )             # <<<<<<<<<<<<<<
  * 
- *     def getWhichEigenpairs(self):
+ *     #
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetExtraction(__pyx_v_self->eps, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGSetFromOptions(__pyx_v_self->rg)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(12, 134, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":516
- *         return val
+  /* "SLEPc/RG.pyx":125
+ *         return bytes2str(prefix)
  * 
- *     def setExtraction(self, extraction):             # <<<<<<<<<<<<<<
+ *     def setFromOptions(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the extraction type used by the EPS object.
+ *         Sets RG options from the options database.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setExtraction", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.RG.setFromOptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -19465,197 +20805,83 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_38setExtraction(struct PySlepcEP
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":539
- *         CHKERR( EPSSetExtraction(self.eps, val) )
+/* "SLEPc/RG.pyx":138
+ *     #
  * 
- *     def getWhichEigenpairs(self):             # <<<<<<<<<<<<<<
+ *     def isTrivial(self):             # <<<<<<<<<<<<<<
  *         """
- *         Returns which portion of the spectrum is to be sought.
+ *         Tells whether it is the trivial region (whole complex plane).
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_41getWhichEigenpairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_40getWhichEigenpairs[] = "EPS.getWhichEigenpairs(self)\n\n        Returns which portion of the spectrum is to be sought.\n\n        Returns\n        -------\n        which: `EPS.Which` enumerate\n               The portion of the spectrum to be sought by the solver.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_41getWhichEigenpairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_19isTrivial(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2RG_18isTrivial[] = "RG.isTrivial(self)\n\n        Tells whether it is the trivial region (whole complex plane).\n\n        Returns\n        -------\n        flag: boolean\n             True if the region is equal to the whole complex plane, e.g.,\n             an interval region with all four endpoints unbounded or an\n             ellipse with infinite radius.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_19isTrivial(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getWhichEigenpairs (wrapper)", 0);
+  __Pyx_RefNannySetupContext("isTrivial (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getWhichEigenpairs", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getWhichEigenpairs", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_40getWhichEigenpairs(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("isTrivial", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "isTrivial", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_18isTrivial(((struct PySlepcRGObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_40getWhichEigenpairs(struct PySlepcEPSObject *__pyx_v_self) {
-  EPSWhich __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_18isTrivial(struct PySlepcRGObject *__pyx_v_self) {
+  PetscBool __pyx_v_tval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getWhichEigenpairs", 0);
+  __Pyx_RefNannySetupContext("isTrivial", 0);
 
-  /* "SLEPc/EPS.pyx":548
- *                The portion of the spectrum to be sought by the solver.
+  /* "SLEPc/RG.pyx":149
+ *              ellipse with infinite radius.
  *         """
- *         cdef SlepcEPSWhich val = EPS_LARGEST_MAGNITUDE             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetWhichEigenpairs(self.eps, &val) )
- *         return val
+ *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( RGIsTrivial(self.rg, &tval) )
+ *         return <bint> tval
  */
-  __pyx_v_val = EPS_LARGEST_MAGNITUDE;
+  __pyx_v_tval = PETSC_FALSE;
 
-  /* "SLEPc/EPS.pyx":549
+  /* "SLEPc/RG.pyx":150
  *         """
- *         cdef SlepcEPSWhich val = EPS_LARGEST_MAGNITUDE
- *         CHKERR( EPSGetWhichEigenpairs(self.eps, &val) )             # <<<<<<<<<<<<<<
- *         return val
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( RGIsTrivial(self.rg, &tval) )             # <<<<<<<<<<<<<<
+ *         return <bint> tval
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetWhichEigenpairs(__pyx_v_self->eps, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGIsTrivial(__pyx_v_self->rg, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(12, 150, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":550
- *         cdef SlepcEPSWhich val = EPS_LARGEST_MAGNITUDE
- *         CHKERR( EPSGetWhichEigenpairs(self.eps, &val) )
- *         return val             # <<<<<<<<<<<<<<
+  /* "SLEPc/RG.pyx":151
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( RGIsTrivial(self.rg, &tval) )
+ *         return <bint> tval             # <<<<<<<<<<<<<<
  * 
- *     def setWhichEigenpairs(self, which):
+ *     def getComplement(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_tval); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 151, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":539
- *         CHKERR( EPSSetExtraction(self.eps, val) )
+  /* "SLEPc/RG.pyx":138
+ *     #
  * 
- *     def getWhichEigenpairs(self):             # <<<<<<<<<<<<<<
+ *     def isTrivial(self):             # <<<<<<<<<<<<<<
  *         """
- *         Returns which portion of the spectrum is to be sought.
+ *         Tells whether it is the trivial region (whole complex plane).
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getWhichEigenpairs", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "SLEPc/EPS.pyx":552
- *         return val
- * 
- *     def setWhichEigenpairs(self, which):             # <<<<<<<<<<<<<<
- *         """
- *         Specifies which portion of the spectrum is to be sought.
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_43setWhichEigenpairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_42setWhichEigenpairs[] = "EPS.setWhichEigenpairs(self, which)\n\n        Specifies which portion of the spectrum is to be sought.\n\n        Parameters\n        ----------\n        which: `EPS.Which` enumerate\n               The portion of the spectrum to be sought by the solver.\n\n        Notes\n        -----\n        Not all eigensolvers implemented in EPS account for all the\n        possible values. Also, some values make sense only for c [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_43setWhichEigenpairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_which = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setWhichEigenpairs (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_which,0};
-    PyObject* values[1] = {0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_which)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setWhichEigenpairs") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-    }
-    __pyx_v_which = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setWhichEigenpairs", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setWhichEigenpairs", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_42setWhichEigenpairs(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_which);
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_42setWhichEigenpairs(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_which) {
-  EPSWhich __pyx_v_val;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  EPSWhich __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setWhichEigenpairs", 0);
-
-  /* "SLEPc/EPS.pyx":570
- *         imaginary part for eigenvalue selection.
- *         """
- *         cdef SlepcEPSWhich val = which             # <<<<<<<<<<<<<<
- *         CHKERR( EPSSetWhichEigenpairs(self.eps, val) )
- * 
- */
-  __pyx_t_1 = ((EPSWhich)PyInt_AsLong(__pyx_v_which)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_val = __pyx_t_1;
-
-  /* "SLEPc/EPS.pyx":571
- *         """
- *         cdef SlepcEPSWhich val = which
- *         CHKERR( EPSSetWhichEigenpairs(self.eps, val) )             # <<<<<<<<<<<<<<
- * 
- *     def getTarget(self):
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetWhichEigenpairs(__pyx_v_self->eps, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/EPS.pyx":552
- *         return val
- * 
- *     def setWhichEigenpairs(self, which):             # <<<<<<<<<<<<<<
- *         """
- *         Specifies which portion of the spectrum is to be sought.
- */
-
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setWhichEigenpairs", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.RG.isTrivial", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -19663,86 +20889,83 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_42setWhichEigenpairs(struct PySl
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":573
- *         CHKERR( EPSSetWhichEigenpairs(self.eps, val) )
+/* "SLEPc/RG.pyx":153
+ *         return <bint> tval
  * 
- *     def getTarget(self):             # <<<<<<<<<<<<<<
+ *     def getComplement(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the value of the target.
+ *         Returns the flag indicating whether the region is complemented or not.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_45getTarget(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_44getTarget[] = "EPS.getTarget(self)\n\n        Gets the value of the target.\n\n        Returns\n        -------\n        target: float (real or complex)\n                The value of the target.\n\n        Notes\n        -----\n        If the target was not set by the user, then zero is returned.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_45getTarget(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_21getComplement(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2RG_20getComplement[] = "RG.getComplement(self)\n\n        Returns the flag indicating whether the region is complemented or not.\n\n        Returns\n        -------\n        flg: bool\n            Whether the region is complemented or not.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_21getComplement(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getTarget (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getComplement (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getTarget", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTarget", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_44getTarget(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getComplement", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getComplement", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_20getComplement(((struct PySlepcRGObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_44getTarget(struct PySlepcEPSObject *__pyx_v_self) {
-  PetscScalar __pyx_v_sval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_20getComplement(struct PySlepcRGObject *__pyx_v_self) {
+  PetscBool __pyx_v_tval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getTarget", 0);
+  __Pyx_RefNannySetupContext("getComplement", 0);
 
-  /* "SLEPc/EPS.pyx":586
- *         If the target was not set by the user, then zero is returned.
+  /* "SLEPc/RG.pyx":162
+ *             Whether the region is complemented or not.
  *         """
- *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetTarget(self.eps, &sval) )
- *         return toScalar(sval)
+ *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( RGGetComplement(self.rg, &tval) )
+ *         return <bint>tval
  */
-  __pyx_v_sval = 0.0;
+  __pyx_v_tval = PETSC_FALSE;
 
-  /* "SLEPc/EPS.pyx":587
+  /* "SLEPc/RG.pyx":163
  *         """
- *         cdef PetscScalar sval = 0
- *         CHKERR( EPSGetTarget(self.eps, &sval) )             # <<<<<<<<<<<<<<
- *         return toScalar(sval)
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( RGGetComplement(self.rg, &tval) )             # <<<<<<<<<<<<<<
+ *         return <bint>tval
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetTarget(__pyx_v_self->eps, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGGetComplement(__pyx_v_self->rg, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(12, 163, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":588
- *         cdef PetscScalar sval = 0
- *         CHKERR( EPSGetTarget(self.eps, &sval) )
- *         return toScalar(sval)             # <<<<<<<<<<<<<<
+  /* "SLEPc/RG.pyx":164
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( RGGetComplement(self.rg, &tval) )
+ *         return <bint>tval             # <<<<<<<<<<<<<<
  * 
- *     def setTarget(self, target):
+ *     def setComplement(self, comp):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_tval); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 164, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":573
- *         CHKERR( EPSSetWhichEigenpairs(self.eps, val) )
+  /* "SLEPc/RG.pyx":153
+ *         return <bint> tval
  * 
- *     def getTarget(self):             # <<<<<<<<<<<<<<
+ *     def getComplement(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the value of the target.
+ *         Returns the flag indicating whether the region is complemented or not.
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getTarget", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.RG.getComplement", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -19750,27 +20973,24 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_44getTarget(struct PySlepcEPSObj
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":590
- *         return toScalar(sval)
+/* "SLEPc/RG.pyx":166
+ *         return <bint>tval
  * 
- *     def setTarget(self, target):             # <<<<<<<<<<<<<<
+ *     def setComplement(self, comp):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the value of the target.
+ *         Sets a flag to indicate that the region is the complement
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_47setTarget(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_46setTarget[] = "EPS.setTarget(self, target)\n\n        Sets the value of the target.\n\n        Parameters\n        ----------\n        target: float (real or complex)\n                The value of the target.\n\n        Notes\n        -----\n        The target is a scalar value used to determine the portion of\n        the spectrum of interest. It is used in combination with\n        `setWhichEigenpairs()`.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_47setTarget(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_target = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_23setComplement(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2RG_22setComplement[] = "RG.setComplement(self, comp)\n\n        Sets a flag to indicate that the region is the complement\n        of the specified one.\n\n        Parameters\n        ----------\n        comp: bool\n            Activate/deactivate the complementation of the region.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_23setComplement(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_comp = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setTarget (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setComplement (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_target,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comp,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -19783,77 +21003,74 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_47setTarget(PyObject *__pyx_v_se
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_target)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comp)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTarget") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setComplement") < 0)) __PYX_ERR(12, 166, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_target = values[0];
+    __pyx_v_comp = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTarget", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setComplement", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(12, 166, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setTarget", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.RG.setComplement", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_46setTarget(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_target);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_22setComplement(((struct PySlepcRGObject *)__pyx_v_self), __pyx_v_comp);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_46setTarget(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_target) {
-  PetscScalar __pyx_v_sval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_22setComplement(struct PySlepcRGObject *__pyx_v_self, PyObject *__pyx_v_comp) {
+  PetscBool __pyx_v_tval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscScalar __pyx_t_1;
+  PetscBool __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setTarget", 0);
+  __Pyx_RefNannySetupContext("setComplement", 0);
 
-  /* "SLEPc/EPS.pyx":605
- *         `setWhichEigenpairs()`.
+  /* "SLEPc/RG.pyx":176
+ *             Activate/deactivate the complementation of the region.
  *         """
- *         cdef PetscScalar sval = asScalar(target)             # <<<<<<<<<<<<<<
- *         CHKERR( EPSSetTarget(self.eps, sval) )
+ *         cdef PetscBool tval = comp             # <<<<<<<<<<<<<<
+ *         CHKERR( RGSetComplement(self.rg, tval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_asScalar(__pyx_v_target); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_sval = __pyx_t_1;
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_comp)); if (unlikely(PyErr_Occurred())) __PYX_ERR(12, 176, __pyx_L1_error)
+  __pyx_v_tval = __pyx_t_1;
 
-  /* "SLEPc/EPS.pyx":606
+  /* "SLEPc/RG.pyx":177
  *         """
- *         cdef PetscScalar sval = asScalar(target)
- *         CHKERR( EPSSetTarget(self.eps, sval) )             # <<<<<<<<<<<<<<
+ *         cdef PetscBool tval = comp
+ *         CHKERR( RGSetComplement(self.rg, tval) )             # <<<<<<<<<<<<<<
  * 
- *     def getInterval(self):
+ *     #
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetTarget(__pyx_v_self->eps, __pyx_v_sval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGSetComplement(__pyx_v_self->rg, __pyx_v_tval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(12, 177, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":590
- *         return toScalar(sval)
+  /* "SLEPc/RG.pyx":166
+ *         return <bint>tval
  * 
- *     def setTarget(self, target):             # <<<<<<<<<<<<<<
+ *     def setComplement(self, comp):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the value of the target.
+ *         Sets a flag to indicate that the region is the complement
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setTarget", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.RG.setComplement", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -19861,144 +21078,32 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_46setTarget(struct PySlepcEPSObj
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":608
- *         CHKERR( EPSSetTarget(self.eps, sval) )
+/* "SLEPc/RG.pyx":181
+ *     #
  * 
- *     def getInterval(self):             # <<<<<<<<<<<<<<
+ *     def setEllipseParameters(self, center, radius, vscale):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the computational interval for spectrum slicing.
+ *         Sets the parameters defining the ellipse region.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_49getInterval(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_48getInterval[] = "EPS.getInterval(self)\n\n        Gets the computational interval for spectrum slicing.\n\n        Returns\n        -------\n        inta: float\n                The left end of the interval.\n        intb: float\n                The right end of the interval.\n\n        Notes\n        -----\n        If the interval was not set by the user, then zeros are returned.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_49getInterval(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_25setEllipseParameters(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2RG_24setEllipseParameters[] = "RG.setEllipseParameters(self, center, radius, vscale)\n\n        Sets the parameters defining the ellipse region.\n\n        Parameters\n        ----------\n        center: float (real or complex)\n              The center.\n        radius: float\n              The radius.\n        vscale: float\n              The vertical scale.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_25setEllipseParameters(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_center = 0;
+  PyObject *__pyx_v_radius = 0;
+  PyObject *__pyx_v_vscale = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getInterval (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getInterval", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getInterval", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_48getInterval(((struct PySlepcEPSObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_48getInterval(struct PySlepcEPSObject *__pyx_v_self) {
-  PetscReal __pyx_v_inta;
-  PetscReal __pyx_v_intb;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getInterval", 0);
-
-  /* "SLEPc/EPS.pyx":623
- *         If the interval was not set by the user, then zeros are returned.
- *         """
- *         cdef PetscReal inta = 0             # <<<<<<<<<<<<<<
- *         cdef PetscReal intb = 0
- *         CHKERR( EPSGetInterval(self.eps, &inta, &intb) )
- */
-  __pyx_v_inta = 0.0;
-
-  /* "SLEPc/EPS.pyx":624
- *         """
- *         cdef PetscReal inta = 0
- *         cdef PetscReal intb = 0             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetInterval(self.eps, &inta, &intb) )
- *         return (toReal(inta), toReal(intb))
- */
-  __pyx_v_intb = 0.0;
-
-  /* "SLEPc/EPS.pyx":625
- *         cdef PetscReal inta = 0
- *         cdef PetscReal intb = 0
- *         CHKERR( EPSGetInterval(self.eps, &inta, &intb) )             # <<<<<<<<<<<<<<
- *         return (toReal(inta), toReal(intb))
- * 
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetInterval(__pyx_v_self->eps, (&__pyx_v_inta), (&__pyx_v_intb))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/EPS.pyx":626
- *         cdef PetscReal intb = 0
- *         CHKERR( EPSGetInterval(self.eps, &inta, &intb) )
- *         return (toReal(inta), toReal(intb))             # <<<<<<<<<<<<<<
- * 
- *     def setInterval(self, inta, intb):
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_inta); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_intb); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __Pyx_GIVEREF(__pyx_t_2);
-  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_3);
-  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
-  __pyx_t_2 = 0;
-  __pyx_t_3 = 0;
-  __pyx_r = __pyx_t_4;
-  __pyx_t_4 = 0;
-  goto __pyx_L0;
-
-  /* "SLEPc/EPS.pyx":608
- *         CHKERR( EPSSetTarget(self.eps, sval) )
- * 
- *     def getInterval(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the computational interval for spectrum slicing.
- */
-
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getInterval", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "SLEPc/EPS.pyx":628
- *         return (toReal(inta), toReal(intb))
- * 
- *     def setInterval(self, inta, intb):             # <<<<<<<<<<<<<<
- *         """
- *         Defines the computational interval for spectrum slicing.
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_51setInterval(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_50setInterval[] = "EPS.setInterval(self, inta, intb)\n\n        Defines the computational interval for spectrum slicing.\n\n        Parameters\n        ----------\n        inta: float\n                The left end of the interval.\n        intb: float\n                The right end of the interval.\n\n        Notes\n        -----\n        Spectrum slicing is a technique employed for computing all\n        eigenvalues of symmetric eigenproblems  [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_51setInterval(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_inta = 0;
-  PyObject *__pyx_v_intb = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setInterval (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setEllipseParameters (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_inta,&__pyx_n_s_intb,0};
-    PyObject* values[2] = {0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_center,&__pyx_n_s_radius,&__pyx_n_s_vscale,0};
+    PyObject* values[3] = {0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
@@ -20007,95 +21112,111 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_51setInterval(PyObject *__pyx_v_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_inta)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_center)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_intb)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_radius)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setEllipseParameters", 1, 3, 3, 1); __PYX_ERR(12, 181, __pyx_L3_error)
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vscale)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setInterval", 1, 2, 2, 1); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("setEllipseParameters", 1, 3, 3, 2); __PYX_ERR(12, 181, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInterval") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setEllipseParameters") < 0)) __PYX_ERR(12, 181, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_inta = values[0];
-    __pyx_v_intb = values[1];
+    __pyx_v_center = values[0];
+    __pyx_v_radius = values[1];
+    __pyx_v_vscale = values[2];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setInterval", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setEllipseParameters", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(12, 181, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setInterval", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.RG.setEllipseParameters", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_50setInterval(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_inta, __pyx_v_intb);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_24setEllipseParameters(((struct PySlepcRGObject *)__pyx_v_self), __pyx_v_center, __pyx_v_radius, __pyx_v_vscale);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_50setInterval(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_inta, PyObject *__pyx_v_intb) {
-  PetscReal __pyx_v_rval1;
-  PetscReal __pyx_v_rval2;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_24setEllipseParameters(struct PySlepcRGObject *__pyx_v_self, PyObject *__pyx_v_center, PyObject *__pyx_v_radius, PyObject *__pyx_v_vscale) {
+  PetscScalar __pyx_v_sval;
+  PetscReal __pyx_v_val1;
+  PetscReal __pyx_v_val2;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscReal __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setInterval", 0);
+  PetscScalar __pyx_t_1;
+  PetscReal __pyx_t_2;
+  int __pyx_t_3;
+  __Pyx_RefNannySetupContext("setEllipseParameters", 0);
 
-  /* "SLEPc/EPS.pyx":647
- *         `setWhichEigenpairs()`.
+  /* "SLEPc/RG.pyx":194
+ *               The vertical scale.
  *         """
- *         cdef PetscReal rval1 = asReal(inta)             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval2 = asReal(intb)
- *         CHKERR( EPSSetInterval(self.eps, rval1, rval2) )
+ *         cdef PetscScalar sval = asScalar(center)             # <<<<<<<<<<<<<<
+ *         cdef PetscReal val1 = radius
+ *         cdef PetscReal val2 = vscale
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_inta); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_rval1 = __pyx_t_1;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_asScalar(__pyx_v_center); if (unlikely(PyErr_Occurred())) __PYX_ERR(12, 194, __pyx_L1_error)
+  __pyx_v_sval = __pyx_t_1;
 
-  /* "SLEPc/EPS.pyx":648
+  /* "SLEPc/RG.pyx":195
  *         """
- *         cdef PetscReal rval1 = asReal(inta)
- *         cdef PetscReal rval2 = asReal(intb)             # <<<<<<<<<<<<<<
- *         CHKERR( EPSSetInterval(self.eps, rval1, rval2) )
+ *         cdef PetscScalar sval = asScalar(center)
+ *         cdef PetscReal val1 = radius             # <<<<<<<<<<<<<<
+ *         cdef PetscReal val2 = vscale
+ *         CHKERR( RGEllipseSetParameters(self.rg, sval, val1, val2) )
+ */
+  __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_radius); if (unlikely((__pyx_t_2 == (PetscReal)-1) && PyErr_Occurred())) __PYX_ERR(12, 195, __pyx_L1_error)
+  __pyx_v_val1 = __pyx_t_2;
+
+  /* "SLEPc/RG.pyx":196
+ *         cdef PetscScalar sval = asScalar(center)
+ *         cdef PetscReal val1 = radius
+ *         cdef PetscReal val2 = vscale             # <<<<<<<<<<<<<<
+ *         CHKERR( RGEllipseSetParameters(self.rg, sval, val1, val2) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_intb); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 648; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_rval2 = __pyx_t_1;
+  __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_vscale); if (unlikely((__pyx_t_2 == (PetscReal)-1) && PyErr_Occurred())) __PYX_ERR(12, 196, __pyx_L1_error)
+  __pyx_v_val2 = __pyx_t_2;
 
-  /* "SLEPc/EPS.pyx":649
- *         cdef PetscReal rval1 = asReal(inta)
- *         cdef PetscReal rval2 = asReal(intb)
- *         CHKERR( EPSSetInterval(self.eps, rval1, rval2) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/RG.pyx":197
+ *         cdef PetscReal val1 = radius
+ *         cdef PetscReal val2 = vscale
+ *         CHKERR( RGEllipseSetParameters(self.rg, sval, val1, val2) )             # <<<<<<<<<<<<<<
  * 
- *     #
+ *     def getEllipseParameters(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetInterval(__pyx_v_self->eps, __pyx_v_rval1, __pyx_v_rval2)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGEllipseSetParameters(__pyx_v_self->rg, __pyx_v_sval, __pyx_v_val1, __pyx_v_val2)); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(12, 197, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":628
- *         return (toReal(inta), toReal(intb))
+  /* "SLEPc/RG.pyx":181
+ *     #
  * 
- *     def setInterval(self, inta, intb):             # <<<<<<<<<<<<<<
+ *     def setEllipseParameters(self, center, radius, vscale):             # <<<<<<<<<<<<<<
  *         """
- *         Defines the computational interval for spectrum slicing.
+ *         Sets the parameters defining the ellipse region.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setInterval", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.RG.setEllipseParameters", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -20103,102 +21224,115 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_50setInterval(struct PySlepcEPSO
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":653
- *     #
+/* "SLEPc/RG.pyx":199
+ *         CHKERR( RGEllipseSetParameters(self.rg, sval, val1, val2) )
  * 
- *     def getTolerances(self):             # <<<<<<<<<<<<<<
+ *     def getEllipseParameters(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the tolerance and maximum iteration count used by the
+ *         Gets the parameters that define the ellipse region.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_53getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_52getTolerances[] = "EPS.getTolerances(self)\n\n        Gets the tolerance and maximum iteration count used by the\n        default EPS convergence tests.\n\n        Returns\n        -------\n        tol: float\n             The convergence tolerance.\n        max_it: int\n             The maximum number of iterations\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_53getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_27getEllipseParameters(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2RG_26getEllipseParameters[] = "RG.getEllipseParameters(self)\n\n        Gets the parameters that define the ellipse region.\n\n        Returns\n        -------\n        center: float (real or complex)\n              The center.\n        radius: float\n              The radius.\n        vscale: float\n              The vertical scale.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_27getEllipseParameters(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getTolerances (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getEllipseParameters (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getTolerances", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTolerances", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_52getTolerances(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getEllipseParameters", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getEllipseParameters", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_26getEllipseParameters(((struct PySlepcRGObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_52getTolerances(struct PySlepcEPSObject *__pyx_v_self) {
-  PetscReal __pyx_v_rval;
-  PetscInt __pyx_v_ival;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_26getEllipseParameters(struct PySlepcRGObject *__pyx_v_self) {
+  PetscScalar __pyx_v_sval;
+  PetscReal __pyx_v_val1;
+  PetscReal __pyx_v_val2;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getTolerances", 0);
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("getEllipseParameters", 0);
 
-  /* "SLEPc/EPS.pyx":665
- *              The maximum number of iterations
+  /* "SLEPc/RG.pyx":212
+ *               The vertical scale.
  *         """
- *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt  ival = 0
- *         CHKERR( EPSGetTolerances(self.eps, &rval, &ival) )
+ *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscReal val1 = 0
+ *         cdef PetscReal val2 = 0
  */
-  __pyx_v_rval = 0.0;
+  __pyx_v_sval = 0.0;
 
-  /* "SLEPc/EPS.pyx":666
+  /* "SLEPc/RG.pyx":213
  *         """
- *         cdef PetscReal rval = 0
- *         cdef PetscInt  ival = 0             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetTolerances(self.eps, &rval, &ival) )
- *         return (toReal(rval), toInt(ival))
+ *         cdef PetscScalar sval = 0
+ *         cdef PetscReal val1 = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscReal val2 = 0
+ *         CHKERR( RGEllipseGetParameters(self.rg, &sval, &val1, &val2) )
  */
-  __pyx_v_ival = 0;
+  __pyx_v_val1 = 0.0;
 
-  /* "SLEPc/EPS.pyx":667
- *         cdef PetscReal rval = 0
- *         cdef PetscInt  ival = 0
- *         CHKERR( EPSGetTolerances(self.eps, &rval, &ival) )             # <<<<<<<<<<<<<<
- *         return (toReal(rval), toInt(ival))
+  /* "SLEPc/RG.pyx":214
+ *         cdef PetscScalar sval = 0
+ *         cdef PetscReal val1 = 0
+ *         cdef PetscReal val2 = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( RGEllipseGetParameters(self.rg, &sval, &val1, &val2) )
+ *         return (toScalar(sval), toReal(val1), toReal(val2))
+ */
+  __pyx_v_val2 = 0.0;
+
+  /* "SLEPc/RG.pyx":215
+ *         cdef PetscReal val1 = 0
+ *         cdef PetscReal val2 = 0
+ *         CHKERR( RGEllipseGetParameters(self.rg, &sval, &val1, &val2) )             # <<<<<<<<<<<<<<
+ *         return (toScalar(sval), toReal(val1), toReal(val2))
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetTolerances(__pyx_v_self->eps, (&__pyx_v_rval), (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 667; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGEllipseGetParameters(__pyx_v_self->rg, (&__pyx_v_sval), (&__pyx_v_val1), (&__pyx_v_val2))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(12, 215, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":668
- *         cdef PetscInt  ival = 0
- *         CHKERR( EPSGetTolerances(self.eps, &rval, &ival) )
- *         return (toReal(rval), toInt(ival))             # <<<<<<<<<<<<<<
+  /* "SLEPc/RG.pyx":216
+ *         cdef PetscReal val2 = 0
+ *         CHKERR( RGEllipseGetParameters(self.rg, &sval, &val1, &val2) )
+ *         return (toScalar(sval), toReal(val1), toReal(val2))             # <<<<<<<<<<<<<<
  * 
- *     def setTolerances(self, tol=None, max_it=None):
+ *     def setIntervalEndpoints(self, a, b, c, d):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 216, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_val1); if (unlikely(!__pyx_t_3)) __PYX_ERR(12, 216, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_val2); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 216, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(12, 216, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_2);
-  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_3);
-  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_4);
+  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
   __pyx_t_2 = 0;
   __pyx_t_3 = 0;
-  __pyx_r = __pyx_t_4;
   __pyx_t_4 = 0;
+  __pyx_r = __pyx_t_5;
+  __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":653
- *     #
+  /* "SLEPc/RG.pyx":199
+ *         CHKERR( RGEllipseSetParameters(self.rg, sval, val1, val2) )
  * 
- *     def getTolerances(self):             # <<<<<<<<<<<<<<
+ *     def getEllipseParameters(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the tolerance and maximum iteration count used by the
+ *         Gets the parameters that define the ellipse region.
  */
 
   /* function exit code */
@@ -20206,7 +21340,8 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_52getTolerances(struct PySlepcEP
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("slepc4py.SLEPc.RG.getEllipseParameters", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -20214,35 +21349,34 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_52getTolerances(struct PySlepcEP
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":670
- *         return (toReal(rval), toInt(ival))
+/* "SLEPc/RG.pyx":218
+ *         return (toScalar(sval), toReal(val1), toReal(val2))
  * 
- *     def setTolerances(self, tol=None, max_it=None):             # <<<<<<<<<<<<<<
+ *     def setIntervalEndpoints(self, a, b, c, d):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the tolerance and maximum iteration count used by the
+ *         Sets the parameters defining the interval region.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_55setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_54setTolerances[] = "EPS.setTolerances(self, tol=None, max_it=None)\n\n        Sets the tolerance and maximum iteration count used by the\n        default EPS convergence tests.\n\n        Parameters\n        ----------\n        tol: float, optional\n             The convergence tolerance.\n        max_it: int, optional\n             The maximum number of iterations\n\n        Notes\n        -----\n        Use `DECIDE` for maxits to assign a re [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_55setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_tol = 0;
-  PyObject *__pyx_v_max_it = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_29setIntervalEndpoints(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2RG_28setIntervalEndpoints[] = "RG.setIntervalEndpoints(self, a, b, c, d)\n\n        Sets the parameters defining the interval region.\n\n        Parameters\n        ----------\n        a: float\n              The left endpoint in the real axis.\n        b: float\n              The right endpoint in the real axis.\n        c: float\n              The upper endpoint in the imaginary axis.\n        d: float\n              The lower endpoint in the ima [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_29setIntervalEndpoints(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_a = 0;
+  PyObject *__pyx_v_b = 0;
+  PyObject *__pyx_v_c = 0;
+  PyObject *__pyx_v_d = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setTolerances (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setIntervalEndpoints (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_tol,&__pyx_n_s_max_it,0};
-    PyObject* values[2] = {0,0};
-    values[0] = ((PyObject *)Py_None);
-    values[1] = ((PyObject *)Py_None);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_a,&__pyx_n_s_b,&__pyx_n_s_c,&__pyx_n_s_d,0};
+    PyObject* values[4] = {0,0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
@@ -20251,132 +21385,128 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_55setTolerances(PyObject *__pyx_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_tol);
-          if (value) { values[0] = value; kw_args--; }
-        }
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_a)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
         case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_max_it);
-          if (value) { values[1] = value; kw_args--; }
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_b)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setIntervalEndpoints", 1, 4, 4, 1); __PYX_ERR(12, 218, __pyx_L3_error)
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_c)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setIntervalEndpoints", 1, 4, 4, 2); __PYX_ERR(12, 218, __pyx_L3_error)
+        }
+        case  3:
+        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_d)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setIntervalEndpoints", 1, 4, 4, 3); __PYX_ERR(12, 218, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTolerances") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 670; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setIntervalEndpoints") < 0)) __PYX_ERR(12, 218, __pyx_L3_error)
       }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
+      goto __pyx_L5_argtuple_error;
     } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
     }
-    __pyx_v_tol = values[0];
-    __pyx_v_max_it = values[1];
+    __pyx_v_a = values[0];
+    __pyx_v_b = values[1];
+    __pyx_v_c = values[2];
+    __pyx_v_d = values[3];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTolerances", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 670; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setIntervalEndpoints", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(12, 218, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.RG.setIntervalEndpoints", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_54setTolerances(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_tol, __pyx_v_max_it);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_28setIntervalEndpoints(((struct PySlepcRGObject *)__pyx_v_self), __pyx_v_a, __pyx_v_b, __pyx_v_c, __pyx_v_d);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_54setTolerances(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_tol, PyObject *__pyx_v_max_it) {
-  PetscReal __pyx_v_rval;
-  PetscInt __pyx_v_ival;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_28setIntervalEndpoints(struct PySlepcRGObject *__pyx_v_self, PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) {
+  PetscReal __pyx_v_va;
+  PetscReal __pyx_v_vb;
+  PetscReal __pyx_v_vc;
+  PetscReal __pyx_v_vd;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PetscReal __pyx_t_1;
   int __pyx_t_2;
-  PetscReal __pyx_t_3;
-  PetscInt __pyx_t_4;
-  int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setTolerances", 0);
+  __Pyx_RefNannySetupContext("setIntervalEndpoints", 0);
 
-  /* "SLEPc/EPS.pyx":687
- *         which is dependent on the solution method.
+  /* "SLEPc/RG.pyx":233
+ *               The lower endpoint in the imaginary axis.
  *         """
- *         cdef PetscReal rval = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscInt  ival = PETSC_DEFAULT
- *         if tol    is not None: rval = asReal(tol)
+ *         cdef PetscReal va = a             # <<<<<<<<<<<<<<
+ *         cdef PetscReal vb = b
+ *         cdef PetscReal vc = c
  */
-  __pyx_v_rval = PETSC_DEFAULT;
+  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_a); if (unlikely((__pyx_t_1 == (PetscReal)-1) && PyErr_Occurred())) __PYX_ERR(12, 233, __pyx_L1_error)
+  __pyx_v_va = __pyx_t_1;
 
-  /* "SLEPc/EPS.pyx":688
+  /* "SLEPc/RG.pyx":234
  *         """
- *         cdef PetscReal rval = PETSC_DEFAULT
- *         cdef PetscInt  ival = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         if tol    is not None: rval = asReal(tol)
- *         if max_it is not None: ival = asInt(max_it)
+ *         cdef PetscReal va = a
+ *         cdef PetscReal vb = b             # <<<<<<<<<<<<<<
+ *         cdef PetscReal vc = c
+ *         cdef PetscReal vd = d
  */
-  __pyx_v_ival = PETSC_DEFAULT;
+  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_b); if (unlikely((__pyx_t_1 == (PetscReal)-1) && PyErr_Occurred())) __PYX_ERR(12, 234, __pyx_L1_error)
+  __pyx_v_vb = __pyx_t_1;
 
-  /* "SLEPc/EPS.pyx":689
- *         cdef PetscReal rval = PETSC_DEFAULT
- *         cdef PetscInt  ival = PETSC_DEFAULT
- *         if tol    is not None: rval = asReal(tol)             # <<<<<<<<<<<<<<
- *         if max_it is not None: ival = asInt(max_it)
- *         CHKERR( EPSSetTolerances(self.eps, rval, ival) )
+  /* "SLEPc/RG.pyx":235
+ *         cdef PetscReal va = a
+ *         cdef PetscReal vb = b
+ *         cdef PetscReal vc = c             # <<<<<<<<<<<<<<
+ *         cdef PetscReal vd = d
+ *         CHKERR( RGIntervalSetEndpoints(self.rg, va, vb, vc, vd) )
  */
-  __pyx_t_1 = (__pyx_v_tol != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 689; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_rval = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_c); if (unlikely((__pyx_t_1 == (PetscReal)-1) && PyErr_Occurred())) __PYX_ERR(12, 235, __pyx_L1_error)
+  __pyx_v_vc = __pyx_t_1;
 
-  /* "SLEPc/EPS.pyx":690
- *         cdef PetscInt  ival = PETSC_DEFAULT
- *         if tol    is not None: rval = asReal(tol)
- *         if max_it is not None: ival = asInt(max_it)             # <<<<<<<<<<<<<<
- *         CHKERR( EPSSetTolerances(self.eps, rval, ival) )
+  /* "SLEPc/RG.pyx":236
+ *         cdef PetscReal vb = b
+ *         cdef PetscReal vc = c
+ *         cdef PetscReal vd = d             # <<<<<<<<<<<<<<
+ *         CHKERR( RGIntervalSetEndpoints(self.rg, va, vb, vc, vd) )
  * 
  */
-  __pyx_t_2 = (__pyx_v_max_it != Py_None);
-  __pyx_t_1 = (__pyx_t_2 != 0);
-  if (__pyx_t_1) {
-    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_max_it); if (unlikely(__pyx_t_4 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 690; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival = __pyx_t_4;
-    goto __pyx_L4;
-  }
-  __pyx_L4:;
+  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_d); if (unlikely((__pyx_t_1 == (PetscReal)-1) && PyErr_Occurred())) __PYX_ERR(12, 236, __pyx_L1_error)
+  __pyx_v_vd = __pyx_t_1;
 
-  /* "SLEPc/EPS.pyx":691
- *         if tol    is not None: rval = asReal(tol)
- *         if max_it is not None: ival = asInt(max_it)
- *         CHKERR( EPSSetTolerances(self.eps, rval, ival) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/RG.pyx":237
+ *         cdef PetscReal vc = c
+ *         cdef PetscReal vd = d
+ *         CHKERR( RGIntervalSetEndpoints(self.rg, va, vb, vc, vd) )             # <<<<<<<<<<<<<<
  * 
- *     def getConvergenceTest(self):
+ *     def getIntervalEndpoints(self):
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetTolerances(__pyx_v_self->eps, __pyx_v_rval, __pyx_v_ival)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 691; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGIntervalSetEndpoints(__pyx_v_self->rg, __pyx_v_va, __pyx_v_vb, __pyx_v_vc, __pyx_v_vd)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(12, 237, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":670
- *         return (toReal(rval), toInt(ival))
+  /* "SLEPc/RG.pyx":218
+ *         return (toScalar(sval), toReal(val1), toReal(val2))
  * 
- *     def setTolerances(self, tol=None, max_it=None):             # <<<<<<<<<<<<<<
+ *     def setIntervalEndpoints(self, a, b, c, d):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the tolerance and maximum iteration count used by the
+ *         Sets the parameters defining the interval region.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.RG.setIntervalEndpoints", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -20384,86 +21514,141 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_54setTolerances(struct PySlepcEP
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":693
- *         CHKERR( EPSSetTolerances(self.eps, rval, ival) )
+/* "SLEPc/RG.pyx":239
+ *         CHKERR( RGIntervalSetEndpoints(self.rg, va, vb, vc, vd) )
  * 
- *     def getConvergenceTest(self):             # <<<<<<<<<<<<<<
+ *     def getIntervalEndpoints(self):             # <<<<<<<<<<<<<<
  *         """
- *         Return the method used to compute the error estimate
+ *         Gets the parameters that define the interval region.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_57getConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_56getConvergenceTest[] = "EPS.getConvergenceTest(self)\n\n        Return the method used to compute the error estimate \n        used in the convergence test. \n\n        Returns\n        -------\n        conv: EPS.Conv\n            The method used to compute the error estimate \n            used in the convergence test. \n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_57getConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_31getIntervalEndpoints(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2RG_30getIntervalEndpoints[] = "RG.getIntervalEndpoints(self)\n\n        Gets the parameters that define the interval region.\n\n        Returns\n        -------\n        a: float\n              The left endpoint in the real axis.\n        b: float\n              The right endpoint in the real axis.\n        c: float\n              The upper endpoint in the imaginary axis.\n        d: float\n              The lower endpoint in the imaginary axis.\n  [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_2RG_31getIntervalEndpoints(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getConvergenceTest (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getIntervalEndpoints (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getConvergenceTest", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getConvergenceTest", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_56getConvergenceTest(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getIntervalEndpoints", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getIntervalEndpoints", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2RG_30getIntervalEndpoints(((struct PySlepcRGObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_56getConvergenceTest(struct PySlepcEPSObject *__pyx_v_self) {
-  EPSConv __pyx_v_conv;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2RG_30getIntervalEndpoints(struct PySlepcRGObject *__pyx_v_self) {
+  PetscReal __pyx_v_va;
+  PetscReal __pyx_v_vb;
+  PetscReal __pyx_v_vc;
+  PetscReal __pyx_v_vd;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getConvergenceTest", 0);
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  __Pyx_RefNannySetupContext("getIntervalEndpoints", 0);
 
-  /* "SLEPc/EPS.pyx":704
- *             used in the convergence test.
+  /* "SLEPc/RG.pyx":254
+ *               The lower endpoint in the imaginary axis.
  *         """
- *         cdef SlepcEPSConv conv = EPS_CONV_EIG             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetConvergenceTest(self.eps, &conv) )
- *         return conv
+ *         cdef PetscReal va = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscReal vb = 0
+ *         cdef PetscReal vc = 0
  */
-  __pyx_v_conv = EPS_CONV_EIG;
+  __pyx_v_va = 0.0;
 
-  /* "SLEPc/EPS.pyx":705
+  /* "SLEPc/RG.pyx":255
  *         """
- *         cdef SlepcEPSConv conv = EPS_CONV_EIG
- *         CHKERR( EPSGetConvergenceTest(self.eps, &conv) )             # <<<<<<<<<<<<<<
- *         return conv
- * 
+ *         cdef PetscReal va = 0
+ *         cdef PetscReal vb = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscReal vc = 0
+ *         cdef PetscReal vd = 0
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetConvergenceTest(__pyx_v_self->eps, (&__pyx_v_conv))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 705; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_vb = 0.0;
 
-  /* "SLEPc/EPS.pyx":706
- *         cdef SlepcEPSConv conv = EPS_CONV_EIG
- *         CHKERR( EPSGetConvergenceTest(self.eps, &conv) )
- *         return conv             # <<<<<<<<<<<<<<
- * 
- *     def setConvergenceTest(self, conv):
+  /* "SLEPc/RG.pyx":256
+ *         cdef PetscReal va = 0
+ *         cdef PetscReal vb = 0
+ *         cdef PetscReal vc = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscReal vd = 0
+ *         CHKERR( RGIntervalGetEndpoints(self.rg, &va, &vb, &vc, &vd) )
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_conv); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 706; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
+  __pyx_v_vc = 0.0;
+
+  /* "SLEPc/RG.pyx":257
+ *         cdef PetscReal vb = 0
+ *         cdef PetscReal vc = 0
+ *         cdef PetscReal vd = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( RGIntervalGetEndpoints(self.rg, &va, &vb, &vc, &vd) )
+ *         return (toReal(va), toReal(vb), toReal(vc), toReal(vd))
+ */
+  __pyx_v_vd = 0.0;
+
+  /* "SLEPc/RG.pyx":258
+ *         cdef PetscReal vc = 0
+ *         cdef PetscReal vd = 0
+ *         CHKERR( RGIntervalGetEndpoints(self.rg, &va, &vb, &vc, &vd) )             # <<<<<<<<<<<<<<
+ *         return (toReal(va), toReal(vb), toReal(vc), toReal(vd))
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(RGIntervalGetEndpoints(__pyx_v_self->rg, (&__pyx_v_va), (&__pyx_v_vb), (&__pyx_v_vc), (&__pyx_v_vd))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(12, 258, __pyx_L1_error)
+
+  /* "SLEPc/RG.pyx":259
+ *         cdef PetscReal vd = 0
+ *         CHKERR( RGIntervalGetEndpoints(self.rg, &va, &vb, &vc, &vd) )
+ *         return (toReal(va), toReal(vb), toReal(vc), toReal(vd))             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_va); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 259, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_vb); if (unlikely(!__pyx_t_3)) __PYX_ERR(12, 259, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_vc); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 259, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_vd); if (unlikely(!__pyx_t_5)) __PYX_ERR(12, 259, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(12, 259, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_4);
+  PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_4);
+  __Pyx_GIVEREF(__pyx_t_5);
+  PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_t_5);
   __pyx_t_2 = 0;
+  __pyx_t_3 = 0;
+  __pyx_t_4 = 0;
+  __pyx_t_5 = 0;
+  __pyx_r = __pyx_t_6;
+  __pyx_t_6 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":693
- *         CHKERR( EPSSetTolerances(self.eps, rval, ival) )
+  /* "SLEPc/RG.pyx":239
+ *         CHKERR( RGIntervalSetEndpoints(self.rg, va, vb, vc, vd) )
  * 
- *     def getConvergenceTest(self):             # <<<<<<<<<<<<<<
+ *     def getIntervalEndpoints(self):             # <<<<<<<<<<<<<<
  *         """
- *         Return the method used to compute the error estimate
+ *         Gets the parameters that define the interval region.
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getConvergenceTest", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_AddTraceback("slepc4py.SLEPc.RG.getIntervalEndpoints", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -20471,28 +21656,87 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_56getConvergenceTest(struct PySl
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":708
- *         return conv
+/* "SLEPc/EPS.pyx":227
+ *     LanczosReorthogType = EPSLanczosReorthogType
  * 
- *     def setConvergenceTest(self, conv):             # <<<<<<<<<<<<<<
+ *     def __cinit__(self):             # <<<<<<<<<<<<<<
+ *         self.obj = <PetscObject*> &self.eps
+ *         self.eps = NULL
+ */
+
+/* Python wrapper */
+static int __pyx_pw_8slepc4py_5SLEPc_3EPS_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pw_8slepc4py_5SLEPc_3EPS_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS___cinit__(((struct PySlepcEPSObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_8slepc4py_5SLEPc_3EPS___cinit__(struct PySlepcEPSObject *__pyx_v_self) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__cinit__", 0);
+
+  /* "SLEPc/EPS.pyx":228
+ * 
+ *     def __cinit__(self):
+ *         self.obj = <PetscObject*> &self.eps             # <<<<<<<<<<<<<<
+ *         self.eps = NULL
+ * 
+ */
+  __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->eps));
+
+  /* "SLEPc/EPS.pyx":229
+ *     def __cinit__(self):
+ *         self.obj = <PetscObject*> &self.eps
+ *         self.eps = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     def view(self, Viewer viewer=None):
+ */
+  __pyx_v_self->eps = NULL;
+
+  /* "SLEPc/EPS.pyx":227
+ *     LanczosReorthogType = EPSLanczosReorthogType
+ * 
+ *     def __cinit__(self):             # <<<<<<<<<<<<<<
+ *         self.obj = <PetscObject*> &self.eps
+ *         self.eps = NULL
+ */
+
+  /* function exit code */
+  __pyx_r = 0;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/EPS.pyx":231
+ *         self.eps = NULL
+ * 
+ *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
  *         """
- *         Specifies how to compute the error estimate
+ *         Prints the EPS data structure.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_59setConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_58setConvergenceTest[] = "EPS.setConvergenceTest(self, conv)\n\n        Specifies how to compute the error estimate \n        used in the convergence test. \n\n        Parameters\n        ----------\n        conv: EPS.Conv\n            The method used to compute the error estimate \n            used in the convergence test.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_59setConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_conv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_2view[] = "EPS.view(self, Viewer viewer=None)\n\n        Prints the EPS data structure.\n\n        Parameters\n        ----------\n        viewer: Viewer, optional.\n                Visualization context; if not provided, the standard\n                output is used.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscViewerObject *__pyx_v_viewer = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setConvergenceTest (wrapper)", 0);
+  __Pyx_RefNannySetupContext("view (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_conv,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_viewer,0};
     PyObject* values[1] = {0};
+    values[0] = (PyObject *)((struct PyPetscViewerObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
@@ -20504,77 +21748,98 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_59setConvergenceTest(PyObject *_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_conv)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_viewer);
+          if (value) { values[0] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergenceTest") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(13, 231, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
     } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
     }
-    __pyx_v_conv = values[0];
+    __pyx_v_viewer = ((struct PyPetscViewerObject *)values[0]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setConvergenceTest", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 231, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setConvergenceTest", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_58setConvergenceTest(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_conv);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) __PYX_ERR(13, 231, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_2view(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_58setConvergenceTest(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_conv) {
-  EPSConv __pyx_v_tconv;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_2view(struct PySlepcEPSObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
+  PetscViewer __pyx_v_vwr;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  EPSConv __pyx_t_1;
+  int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setConvergenceTest", 0);
+  PetscViewer __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("view", 0);
 
-  /* "SLEPc/EPS.pyx":719
- *             used in the convergence test.
+  /* "SLEPc/EPS.pyx":241
+ *                 output is used.
  *         """
- *         cdef SlepcEPSConv tconv = conv             # <<<<<<<<<<<<<<
- *         CHKERR( EPSSetConvergenceTest(self.eps, tconv) )
- * 
+ *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( EPSView(self.eps, vwr) )
  */
-  __pyx_t_1 = ((EPSConv)PyInt_AsLong(__pyx_v_conv)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_tconv = __pyx_t_1;
+  __pyx_v_vwr = NULL;
 
-  /* "SLEPc/EPS.pyx":720
+  /* "SLEPc/EPS.pyx":242
  *         """
- *         cdef SlepcEPSConv tconv = conv
- *         CHKERR( EPSSetConvergenceTest(self.eps, tconv) )             # <<<<<<<<<<<<<<
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSView(self.eps, vwr) )
  * 
- *     def getTrueResidual(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetConvergenceTest(__pyx_v_self->eps, __pyx_v_tconv)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (((PyObject *)__pyx_v_viewer) != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_v_viewer->vwr;
+    __pyx_v_vwr = __pyx_t_3;
+  }
+
+  /* "SLEPc/EPS.pyx":243
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( EPSView(self.eps, vwr) )             # <<<<<<<<<<<<<<
+ * 
+ *     def destroy(self):
+ */
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSView(__pyx_v_self->eps, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(13, 243, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":708
- *         return conv
+  /* "SLEPc/EPS.pyx":231
+ *         self.eps = NULL
  * 
- *     def setConvergenceTest(self, conv):             # <<<<<<<<<<<<<<
+ *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
  *         """
- *         Specifies how to compute the error estimate
+ *         Prints the EPS data structure.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setConvergenceTest", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -20582,86 +21847,78 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_58setConvergenceTest(struct PySl
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":722
- *         CHKERR( EPSSetConvergenceTest(self.eps, tconv) )
+/* "SLEPc/EPS.pyx":245
+ *         CHKERR( EPSView(self.eps, vwr) )
  * 
- *     def getTrueResidual(self):             # <<<<<<<<<<<<<<
+ *     def destroy(self):             # <<<<<<<<<<<<<<
  *         """
- *         Returns the flag indicating whether true residual must be
+ *         Destroys the EPS object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_61getTrueResidual(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_60getTrueResidual[] = "EPS.getTrueResidual(self)\n\n        Returns the flag indicating whether true residual must be\n        computed explicitly or not.\n\n        Returns\n        -------\n        trueres: bool\n            Whether the solver compute all residuals or not.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_61getTrueResidual(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_4destroy[] = "EPS.destroy(self)\n\n        Destroys the EPS object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getTrueResidual (wrapper)", 0);
+  __Pyx_RefNannySetupContext("destroy (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getTrueResidual", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTrueResidual", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_60getTrueResidual(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("destroy", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "destroy", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_4destroy(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_60getTrueResidual(struct PySlepcEPSObject *__pyx_v_self) {
-  PetscBool __pyx_v_tval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_4destroy(struct PySlepcEPSObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getTrueResidual", 0);
+  __Pyx_RefNannySetupContext("destroy", 0);
 
-  /* "SLEPc/EPS.pyx":732
- *             Whether the solver compute all residuals or not.
+  /* "SLEPc/EPS.pyx":249
+ *         Destroys the EPS object.
  *         """
- *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetTrueResidual(self.eps, &tval) )
- *         return <bint> tval
+ *         CHKERR( EPSDestroy(&self.eps) )             # <<<<<<<<<<<<<<
+ *         self.eps = NULL
+ *         return self
  */
-  __pyx_v_tval = PETSC_FALSE;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSDestroy((&__pyx_v_self->eps))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 249, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":733
+  /* "SLEPc/EPS.pyx":250
  *         """
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( EPSGetTrueResidual(self.eps, &tval) )             # <<<<<<<<<<<<<<
- *         return <bint> tval
+ *         CHKERR( EPSDestroy(&self.eps) )
+ *         self.eps = NULL             # <<<<<<<<<<<<<<
+ *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetTrueResidual(__pyx_v_self->eps, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->eps = NULL;
 
-  /* "SLEPc/EPS.pyx":734
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( EPSGetTrueResidual(self.eps, &tval) )
- *         return <bint> tval             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":251
+ *         CHKERR( EPSDestroy(&self.eps) )
+ *         self.eps = NULL
+ *         return self             # <<<<<<<<<<<<<<
  * 
- *     def setTrueResidual(self, trueres):
+ *     def reset(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_tval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":722
- *         CHKERR( EPSSetConvergenceTest(self.eps, tconv) )
+  /* "SLEPc/EPS.pyx":245
+ *         CHKERR( EPSView(self.eps, vwr) )
  * 
- *     def getTrueResidual(self):             # <<<<<<<<<<<<<<
+ *     def destroy(self):             # <<<<<<<<<<<<<<
  *         """
- *         Returns the flag indicating whether true residual must be
+ *         Destroys the EPS object.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getTrueResidual", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.destroy", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -20669,110 +21926,59 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_60getTrueResidual(struct PySlepc
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":736
- *         return <bint> tval
+/* "SLEPc/EPS.pyx":253
+ *         return self
  * 
- *     def setTrueResidual(self, trueres):             # <<<<<<<<<<<<<<
+ *     def reset(self):             # <<<<<<<<<<<<<<
  *         """
- *         Specifies if the solver must compute the true residual
+ *         Resets the EPS object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_63setTrueResidual(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_62setTrueResidual[] = "EPS.setTrueResidual(self, trueres)\n\n        Specifies if the solver must compute the true residual \n        explicitly or not.\n\n        Parameters\n        ----------\n        trueres: bool\n            Whether compute the true residual or not.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_63setTrueResidual(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_trueres = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_7reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_6reset[] = "EPS.reset(self)\n\n        Resets the EPS object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_7reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setTrueResidual (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_trueres,0};
-    PyObject* values[1] = {0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_trueres)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTrueResidual") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-    }
-    __pyx_v_trueres = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTrueResidual", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setTrueResidual", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_62setTrueResidual(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_trueres);
+  __Pyx_RefNannySetupContext("reset (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("reset", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "reset", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_6reset(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_62setTrueResidual(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_trueres) {
-  PetscBool __pyx_v_tval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_6reset(struct PySlepcEPSObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscBool __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setTrueResidual", 0);
-
-  /* "SLEPc/EPS.pyx":746
- *             Whether compute the true residual or not.
- *         """
- *         cdef PetscBool tval = trueres             # <<<<<<<<<<<<<<
- *         CHKERR( EPSSetTrueResidual(self.eps, tval) )
- * 
- */
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_trueres)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_tval = __pyx_t_1;
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("reset", 0);
 
-  /* "SLEPc/EPS.pyx":747
+  /* "SLEPc/EPS.pyx":257
+ *         Resets the EPS object.
  *         """
- *         cdef PetscBool tval = trueres
- *         CHKERR( EPSSetTrueResidual(self.eps, tval) )             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSReset(self.eps) )             # <<<<<<<<<<<<<<
  * 
- *     def getTrackAll(self):
+ *     def create(self, comm=None):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetTrueResidual(__pyx_v_self->eps, __pyx_v_tval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSReset(__pyx_v_self->eps)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 257, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":736
- *         return <bint> tval
+  /* "SLEPc/EPS.pyx":253
+ *         return self
  * 
- *     def setTrueResidual(self, trueres):             # <<<<<<<<<<<<<<
+ *     def reset(self):             # <<<<<<<<<<<<<<
  *         """
- *         Specifies if the solver must compute the true residual
+ *         Resets the EPS object.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setTrueResidual", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.reset", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -20780,86 +21986,139 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_62setTrueResidual(struct PySlepc
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":749
- *         CHKERR( EPSSetTrueResidual(self.eps, tval) )
+/* "SLEPc/EPS.pyx":259
+ *         CHKERR( EPSReset(self.eps) )
  * 
- *     def getTrackAll(self):             # <<<<<<<<<<<<<<
+ *     def create(self, comm=None):             # <<<<<<<<<<<<<<
  *         """
- *         Returns the flag indicating whether all residual norms must be
+ *         Creates the EPS object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_65getTrackAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_64getTrackAll[] = "EPS.getTrackAll(self)\n\n        Returns the flag indicating whether all residual norms must be\n        computed or not.\n\n        Returns\n        -------\n        trackall: bool\n            Whether the solver compute all residuals or not.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_65getTrackAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_8create[] = "EPS.create(self, comm=None)\n\n        Creates the EPS object.\n\n        Parameters\n        ----------\n        comm: MPI_Comm, optional\n              MPI communicator; if not provided, it defaults to all\n              processes.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getTrackAll (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getTrackAll", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTrackAll", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_64getTrackAll(((struct PySlepcEPSObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("create (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,0};
+    PyObject* values[1] = {0};
+    values[0] = ((PyObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
+          if (value) { values[0] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(13, 259, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_comm = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 259, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_8create(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_64getTrackAll(struct PySlepcEPSObject *__pyx_v_self) {
-  PetscBool __pyx_v_tval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_8create(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_comm) {
+  MPI_Comm __pyx_v_ccomm;
+  EPS __pyx_v_neweps;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getTrackAll", 0);
+  MPI_Comm __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("create", 0);
 
-  /* "SLEPc/EPS.pyx":759
- *             Whether the solver compute all residuals or not.
+  /* "SLEPc/EPS.pyx":269
+ *               processes.
  *         """
- *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetTrackAll(self.eps, &tval) )
- *         return <bint> tval
+ *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())             # <<<<<<<<<<<<<<
+ *         cdef SlepcEPS neweps = NULL
+ *         CHKERR( EPSCreate(ccomm, &neweps) )
  */
-  __pyx_v_tval = PETSC_FALSE;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_def_Comm(__pyx_v_comm, __pyx_f_8slepc4py_5SLEPc_SLEPC_COMM_DEFAULT()); if (unlikely(PyErr_Occurred())) __PYX_ERR(13, 269, __pyx_L1_error)
+  __pyx_v_ccomm = __pyx_t_1;
 
-  /* "SLEPc/EPS.pyx":760
+  /* "SLEPc/EPS.pyx":270
  *         """
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( EPSGetTrackAll(self.eps, &tval) )             # <<<<<<<<<<<<<<
- *         return <bint> tval
+ *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
+ *         cdef SlepcEPS neweps = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSCreate(ccomm, &neweps) )
+ *         SlepcCLEAR(self.obj); self.eps = neweps
+ */
+  __pyx_v_neweps = NULL;
+
+  /* "SLEPc/EPS.pyx":271
+ *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
+ *         cdef SlepcEPS neweps = NULL
+ *         CHKERR( EPSCreate(ccomm, &neweps) )             # <<<<<<<<<<<<<<
+ *         SlepcCLEAR(self.obj); self.eps = neweps
+ *         return self
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSCreate(__pyx_v_ccomm, (&__pyx_v_neweps))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 271, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":272
+ *         cdef SlepcEPS neweps = NULL
+ *         CHKERR( EPSCreate(ccomm, &neweps) )
+ *         SlepcCLEAR(self.obj); self.eps = neweps             # <<<<<<<<<<<<<<
+ *         return self
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetTrackAll(__pyx_v_self->eps, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 760; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_f_8slepc4py_5SLEPc_SlepcCLEAR(__pyx_v_self->__pyx_base.obj);
+  __pyx_v_self->eps = __pyx_v_neweps;
 
-  /* "SLEPc/EPS.pyx":761
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( EPSGetTrackAll(self.eps, &tval) )
- *         return <bint> tval             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":273
+ *         CHKERR( EPSCreate(ccomm, &neweps) )
+ *         SlepcCLEAR(self.obj); self.eps = neweps
+ *         return self             # <<<<<<<<<<<<<<
  * 
- *     def setTrackAll(self, trackall):
+ *     def setType(self, eps_type):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_tval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 761; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":749
- *         CHKERR( EPSSetTrueResidual(self.eps, tval) )
+  /* "SLEPc/EPS.pyx":259
+ *         CHKERR( EPSReset(self.eps) )
  * 
- *     def getTrackAll(self):             # <<<<<<<<<<<<<<
+ *     def create(self, comm=None):             # <<<<<<<<<<<<<<
  *         """
- *         Returns the flag indicating whether all residual norms must be
+ *         Creates the EPS object.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getTrackAll", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -20867,27 +22126,24 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_64getTrackAll(struct PySlepcEPSO
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":763
- *         return <bint> tval
+/* "SLEPc/EPS.pyx":275
+ *         return self
  * 
- *     def setTrackAll(self, trackall):             # <<<<<<<<<<<<<<
+ *     def setType(self, eps_type):             # <<<<<<<<<<<<<<
  *         """
- *         Specifies if the solver must compute the residual of all
+ *         Selects the particular solver to be used in the EPS object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_67setTrackAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_66setTrackAll[] = "EPS.setTrackAll(self, trackall)\n\n        Specifies if the solver must compute the residual of all\n        approximate eigenpairs or not.\n\n        Parameters\n        ----------\n        trackall: bool\n            Whether compute all residuals or not.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_67setTrackAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_trackall = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_10setType[] = "EPS.setType(self, eps_type)\n\n        Selects the particular solver to be used in the EPS object.\n\n        Parameters\n        ----------\n        eps_type: `EPS.Type` enumerate\n                  The solver to be used.\n\n        Notes\n        -----\n        See `EPS.Type` for available methods. The default is\n        `EPS.Type.KRYLOVSCHUR`.  Normally, it is best to use\n        `setFromOptions()` and then set the EPS type  [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_eps_type = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setTrackAll (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setType (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_trackall,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_eps_type,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -20900,205 +22156,172 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_67setTrackAll(PyObject *__pyx_v_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_trackall)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_eps_type)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTrackAll") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(13, 275, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_trackall = values[0];
+    __pyx_v_eps_type = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTrackAll", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 763; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 275, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setTrackAll", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_66setTrackAll(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_trackall);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_10setType(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_eps_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_66setTrackAll(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_trackall) {
-  PetscBool __pyx_v_tval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_10setType(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_eps_type) {
+  const char* __pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscBool __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setTrackAll", 0);
+  __Pyx_RefNannySetupContext("setType", 0);
+  __Pyx_INCREF(__pyx_v_eps_type);
 
-  /* "SLEPc/EPS.pyx":773
- *             Whether compute all residuals or not.
+  /* "SLEPc/EPS.pyx":293
+ *         evaluating the different available methods.
  *         """
- *         cdef PetscBool tval = trackall             # <<<<<<<<<<<<<<
- *         CHKERR( EPSSetTrackAll(self.eps, tval) )
- * 
+ *         cdef SlepcEPSType cval = NULL             # <<<<<<<<<<<<<<
+ *         eps_type = str2bytes(eps_type, &cval)
+ *         CHKERR( EPSSetType(self.eps, cval) )
  */
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_trackall)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 773; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_tval = __pyx_t_1;
+  __pyx_v_cval = NULL;
 
-  /* "SLEPc/EPS.pyx":774
+  /* "SLEPc/EPS.pyx":294
  *         """
- *         cdef PetscBool tval = trackall
- *         CHKERR( EPSSetTrackAll(self.eps, tval) )             # <<<<<<<<<<<<<<
+ *         cdef SlepcEPSType cval = NULL
+ *         eps_type = str2bytes(eps_type, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSSetType(self.eps, cval) )
  * 
- *     def getDimensions(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetTrackAll(__pyx_v_self->eps, __pyx_v_tval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_eps_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 294, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_eps_type, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/EPS.pyx":763
- *         return <bint> tval
+  /* "SLEPc/EPS.pyx":295
+ *         cdef SlepcEPSType cval = NULL
+ *         eps_type = str2bytes(eps_type, &cval)
+ *         CHKERR( EPSSetType(self.eps, cval) )             # <<<<<<<<<<<<<<
  * 
- *     def setTrackAll(self, trackall):             # <<<<<<<<<<<<<<
+ *     def getType(self):
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetType(__pyx_v_self->eps, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 295, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":275
+ *         return self
+ * 
+ *     def setType(self, eps_type):             # <<<<<<<<<<<<<<
  *         """
- *         Specifies if the solver must compute the residual of all
+ *         Selects the particular solver to be used in the EPS object.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setTrackAll", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_eps_type);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":776
- *         CHKERR( EPSSetTrackAll(self.eps, tval) )
+/* "SLEPc/EPS.pyx":297
+ *         CHKERR( EPSSetType(self.eps, cval) )
  * 
- *     def getDimensions(self):             # <<<<<<<<<<<<<<
+ *     def getType(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the number of eigenvalues to compute and the dimension of
+ *         Gets the EPS type of this object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_69getDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_68getDimensions[] = "EPS.getDimensions(self)\n\n        Gets the number of eigenvalues to compute and the dimension of\n        the subspace.\n\n        Returns\n        -------\n        nev: int\n             Number of eigenvalues to compute.\n        ncv: int\n             Maximum dimension of the subspace to be used by the\n             solver.\n        mpd: int\n             Maximum dimension allowed for the projected problem.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_69getDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_12getType[] = "EPS.getType(self)\n\n        Gets the EPS type of this object.\n\n        Returns\n        -------\n        type: `EPS.Type` enumerate\n              The solver currently being used.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getDimensions (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getType (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getDimensions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDimensions", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_68getDimensions(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getType", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_12getType(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_68getDimensions(struct PySlepcEPSObject *__pyx_v_self) {
-  PetscInt __pyx_v_ival1;
-  PetscInt __pyx_v_ival2;
-  PetscInt __pyx_v_ival3;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_12getType(struct PySlepcEPSObject *__pyx_v_self) {
+  const char* __pyx_v_eps_type;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getDimensions", 0);
+  __Pyx_RefNannySetupContext("getType", 0);
 
-  /* "SLEPc/EPS.pyx":791
- *              Maximum dimension allowed for the projected problem.
+  /* "SLEPc/EPS.pyx":306
+ *               The solver currently being used.
  *         """
- *         cdef PetscInt ival1 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival2 = 0
- *         cdef PetscInt ival3 = 0
+ *         cdef SlepcEPSType eps_type = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetType(self.eps, &eps_type) )
+ *         return bytes2str(eps_type)
  */
-  __pyx_v_ival1 = 0;
+  __pyx_v_eps_type = NULL;
 
-  /* "SLEPc/EPS.pyx":792
+  /* "SLEPc/EPS.pyx":307
  *         """
- *         cdef PetscInt ival1 = 0
- *         cdef PetscInt ival2 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival3 = 0
- *         CHKERR( EPSGetDimensions(self.eps, &ival1, &ival2, &ival3) )
- */
-  __pyx_v_ival2 = 0;
-
-  /* "SLEPc/EPS.pyx":793
- *         cdef PetscInt ival1 = 0
- *         cdef PetscInt ival2 = 0
- *         cdef PetscInt ival3 = 0             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetDimensions(self.eps, &ival1, &ival2, &ival3) )
- *         return (toInt(ival1), toInt(ival2), toInt(ival3))
- */
-  __pyx_v_ival3 = 0;
-
-  /* "SLEPc/EPS.pyx":794
- *         cdef PetscInt ival2 = 0
- *         cdef PetscInt ival3 = 0
- *         CHKERR( EPSGetDimensions(self.eps, &ival1, &ival2, &ival3) )             # <<<<<<<<<<<<<<
- *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+ *         cdef SlepcEPSType eps_type = NULL
+ *         CHKERR( EPSGetType(self.eps, &eps_type) )             # <<<<<<<<<<<<<<
+ *         return bytes2str(eps_type)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetDimensions(__pyx_v_self->eps, (&__pyx_v_ival1), (&__pyx_v_ival2), (&__pyx_v_ival3))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetType(__pyx_v_self->eps, (&__pyx_v_eps_type))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 307, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":795
- *         cdef PetscInt ival3 = 0
- *         CHKERR( EPSGetDimensions(self.eps, &ival1, &ival2, &ival3) )
- *         return (toInt(ival1), toInt(ival2), toInt(ival3))             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":308
+ *         cdef SlepcEPSType eps_type = NULL
+ *         CHKERR( EPSGetType(self.eps, &eps_type) )
+ *         return bytes2str(eps_type)             # <<<<<<<<<<<<<<
  * 
- *     def setDimensions(self, nev=None, ncv=None, mpd=None):
+ *     def getOptionsPrefix(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_eps_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 308, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __Pyx_GIVEREF(__pyx_t_2);
-  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_3);
-  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_4);
-  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
+  __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
-  __pyx_t_3 = 0;
-  __pyx_t_4 = 0;
-  __pyx_r = __pyx_t_5;
-  __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":776
- *         CHKERR( EPSSetTrackAll(self.eps, tval) )
+  /* "SLEPc/EPS.pyx":297
+ *         CHKERR( EPSSetType(self.eps, cval) )
  * 
- *     def getDimensions(self):             # <<<<<<<<<<<<<<
+ *     def getType(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the number of eigenvalues to compute and the dimension of
+ *         Gets the EPS type of this object.
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -21106,204 +22329,83 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_68getDimensions(struct PySlepcEP
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":797
- *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+/* "SLEPc/EPS.pyx":310
+ *         return bytes2str(eps_type)
  * 
- *     def setDimensions(self, nev=None, ncv=None, mpd=None):             # <<<<<<<<<<<<<<
+ *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the number of eigenvalues to compute and the dimension of
+ *         Gets the prefix used for searching for all EPS options in the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_71setDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_70setDimensions[] = "EPS.setDimensions(self, nev=None, ncv=None, mpd=None)\n\n        Sets the number of eigenvalues to compute and the dimension of\n        the subspace.\n\n        Parameters\n        ----------\n        nev: int, optional\n             Number of eigenvalues to compute.\n        ncv: int, optional\n             Maximum dimension of the subspace to be used by the\n             solver.\n        mpd: int, optional\n              [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_71setDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_nev = 0;
-  PyObject *__pyx_v_ncv = 0;
-  PyObject *__pyx_v_mpd = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_14getOptionsPrefix[] = "EPS.getOptionsPrefix(self)\n\n        Gets the prefix used for searching for all EPS options in the\n        database.\n\n        Returns\n        -------\n        prefix: string\n                The prefix string set for this EPS object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setDimensions (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nev,&__pyx_n_s_ncv,&__pyx_n_s_mpd,0};
-    PyObject* values[3] = {0,0,0};
-    values[0] = ((PyObject *)Py_None);
-    values[1] = ((PyObject *)Py_None);
-    values[2] = ((PyObject *)Py_None);
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nev);
-          if (value) { values[0] = value; kw_args--; }
-        }
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ncv);
-          if (value) { values[1] = value; kw_args--; }
-        }
-        case  2:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mpd);
-          if (value) { values[2] = value; kw_args--; }
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDimensions") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 797; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-    }
-    __pyx_v_nev = values[0];
-    __pyx_v_ncv = values[1];
-    __pyx_v_mpd = values[2];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDimensions", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 797; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_70setDimensions(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_nev, __pyx_v_ncv, __pyx_v_mpd);
+  __Pyx_RefNannySetupContext("getOptionsPrefix (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getOptionsPrefix", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getOptionsPrefix", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_14getOptionsPrefix(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_70setDimensions(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_nev, PyObject *__pyx_v_ncv, PyObject *__pyx_v_mpd) {
-  PetscInt __pyx_v_ival1;
-  PetscInt __pyx_v_ival2;
-  PetscInt __pyx_v_ival3;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_14getOptionsPrefix(struct PySlepcEPSObject *__pyx_v_self) {
+  const char *__pyx_v_prefix;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_t_2;
-  PetscInt __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setDimensions", 0);
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getOptionsPrefix", 0);
 
-  /* "SLEPc/EPS.pyx":831
- *         smaller value should be used.
+  /* "SLEPc/EPS.pyx":320
+ *                 The prefix string set for this EPS object.
  *         """
- *         cdef PetscInt ival1 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival2 = PETSC_DEFAULT
- *         cdef PetscInt ival3 = PETSC_DEFAULT
+ *         cdef const_char *prefix = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetOptionsPrefix(self.eps, &prefix) )
+ *         return bytes2str(prefix)
  */
-  __pyx_v_ival1 = PETSC_DEFAULT;
+  __pyx_v_prefix = NULL;
 
-  /* "SLEPc/EPS.pyx":832
+  /* "SLEPc/EPS.pyx":321
  *         """
- *         cdef PetscInt ival1 = PETSC_DEFAULT
- *         cdef PetscInt ival2 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival3 = PETSC_DEFAULT
- *         if nev is not None: ival1 = asInt(nev)
- */
-  __pyx_v_ival2 = PETSC_DEFAULT;
-
-  /* "SLEPc/EPS.pyx":833
- *         cdef PetscInt ival1 = PETSC_DEFAULT
- *         cdef PetscInt ival2 = PETSC_DEFAULT
- *         cdef PetscInt ival3 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         if nev is not None: ival1 = asInt(nev)
- *         if ncv is not None: ival2 = asInt(ncv)
- */
-  __pyx_v_ival3 = PETSC_DEFAULT;
-
-  /* "SLEPc/EPS.pyx":834
- *         cdef PetscInt ival2 = PETSC_DEFAULT
- *         cdef PetscInt ival3 = PETSC_DEFAULT
- *         if nev is not None: ival1 = asInt(nev)             # <<<<<<<<<<<<<<
- *         if ncv is not None: ival2 = asInt(ncv)
- *         if mpd is not None: ival3 = asInt(mpd)
- */
-  __pyx_t_1 = (__pyx_v_nev != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_nev); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival1 = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "SLEPc/EPS.pyx":835
- *         cdef PetscInt ival3 = PETSC_DEFAULT
- *         if nev is not None: ival1 = asInt(nev)
- *         if ncv is not None: ival2 = asInt(ncv)             # <<<<<<<<<<<<<<
- *         if mpd is not None: ival3 = asInt(mpd)
- *         CHKERR( EPSSetDimensions(self.eps, ival1, ival2, ival3) )
- */
-  __pyx_t_2 = (__pyx_v_ncv != Py_None);
-  __pyx_t_1 = (__pyx_t_2 != 0);
-  if (__pyx_t_1) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_ncv); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival2 = __pyx_t_3;
-    goto __pyx_L4;
-  }
-  __pyx_L4:;
-
-  /* "SLEPc/EPS.pyx":836
- *         if nev is not None: ival1 = asInt(nev)
- *         if ncv is not None: ival2 = asInt(ncv)
- *         if mpd is not None: ival3 = asInt(mpd)             # <<<<<<<<<<<<<<
- *         CHKERR( EPSSetDimensions(self.eps, ival1, ival2, ival3) )
+ *         cdef const_char *prefix = NULL
+ *         CHKERR( EPSGetOptionsPrefix(self.eps, &prefix) )             # <<<<<<<<<<<<<<
+ *         return bytes2str(prefix)
  * 
  */
-  __pyx_t_1 = (__pyx_v_mpd != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_mpd); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival3 = __pyx_t_3;
-    goto __pyx_L5;
-  }
-  __pyx_L5:;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetOptionsPrefix(__pyx_v_self->eps, (&__pyx_v_prefix))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 321, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":837
- *         if ncv is not None: ival2 = asInt(ncv)
- *         if mpd is not None: ival3 = asInt(mpd)
- *         CHKERR( EPSSetDimensions(self.eps, ival1, ival2, ival3) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":322
+ *         cdef const_char *prefix = NULL
+ *         CHKERR( EPSGetOptionsPrefix(self.eps, &prefix) )
+ *         return bytes2str(prefix)             # <<<<<<<<<<<<<<
  * 
- *     def getST(self):
+ *     def setOptionsPrefix(self, prefix):
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetDimensions(__pyx_v_self->eps, __pyx_v_ival1, __pyx_v_ival2, __pyx_v_ival3)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_prefix); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 322, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":797
- *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+  /* "SLEPc/EPS.pyx":310
+ *         return bytes2str(eps_type)
  * 
- *     def setDimensions(self, nev=None, ncv=None, mpd=None):             # <<<<<<<<<<<<<<
+ *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the number of eigenvalues to compute and the dimension of
+ *         Gets the prefix used for searching for all EPS options in the
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -21311,125 +22413,143 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_70setDimensions(struct PySlepcEP
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":839
- *         CHKERR( EPSSetDimensions(self.eps, ival1, ival2, ival3) )
+/* "SLEPc/EPS.pyx":324
+ *         return bytes2str(prefix)
  * 
- *     def getST(self):             # <<<<<<<<<<<<<<
+ *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
  *         """
- *         Obtain the spectral transformation (`ST`) object associated to
+ *         Sets the prefix used for searching for all EPS options in the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_73getST(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_72getST[] = "EPS.getST(self)\n\n        Obtain the spectral transformation (`ST`) object associated to\n        the eigensolver object.\n\n        Returns\n        -------\n        st: ST\n            The spectral transformation.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_73getST(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_17setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_16setOptionsPrefix[] = "EPS.setOptionsPrefix(self, prefix)\n\n        Sets the prefix used for searching for all EPS options in the\n        database.\n\n        Parameters\n        ----------\n        prefix: string\n                The prefix string to prepend to all EPS option\n                requests.\n\n        Notes\n        -----\n        A hyphen (-) must NOT be given at the beginning of the prefix\n        name.  The first character o [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_17setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_prefix = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getST (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getST", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getST", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_72getST(((struct PySlepcEPSObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("setOptionsPrefix (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_prefix,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_prefix)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) __PYX_ERR(13, 324, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_prefix = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 324, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_16setOptionsPrefix(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_prefix);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_72getST(struct PySlepcEPSObject *__pyx_v_self) {
-  struct PySlepcSTObject *__pyx_v_st = 0;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_16setOptionsPrefix(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
+  const char *__pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getST", 0);
+  __Pyx_RefNannySetupContext("setOptionsPrefix", 0);
+  __Pyx_INCREF(__pyx_v_prefix);
 
-  /* "SLEPc/EPS.pyx":849
- *             The spectral transformation.
+  /* "SLEPc/EPS.pyx":347
+ *             E2.setOptionsPrefix("eig2_")
  *         """
- *         cdef ST st = ST()             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetST(self.eps, &st.st) )
- *         PetscINCREF(st.obj)
+ *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
+ *         prefix = str2bytes(prefix, &cval)
+ *         CHKERR( EPSSetOptionsPrefix(self.eps, cval) )
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_ST)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_st = ((struct PySlepcSTObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_cval = NULL;
 
-  /* "SLEPc/EPS.pyx":850
+  /* "SLEPc/EPS.pyx":348
  *         """
- *         cdef ST st = ST()
- *         CHKERR( EPSGetST(self.eps, &st.st) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(st.obj)
- *         return st
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetST(__pyx_v_self->eps, (&__pyx_v_st->st))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 850; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/EPS.pyx":851
- *         cdef ST st = ST()
- *         CHKERR( EPSGetST(self.eps, &st.st) )
- *         PetscINCREF(st.obj)             # <<<<<<<<<<<<<<
- *         return st
+ *         cdef const_char *cval = NULL
+ *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSSetOptionsPrefix(self.eps, cval) )
  * 
  */
-  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_st->__pyx_base.obj);
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 348, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/EPS.pyx":852
- *         CHKERR( EPSGetST(self.eps, &st.st) )
- *         PetscINCREF(st.obj)
- *         return st             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":349
+ *         cdef const_char *cval = NULL
+ *         prefix = str2bytes(prefix, &cval)
+ *         CHKERR( EPSSetOptionsPrefix(self.eps, cval) )             # <<<<<<<<<<<<<<
  * 
- *     def setST(self, ST st not None):
+ *     def appendOptionsPrefix(self, prefix):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_st));
-  __pyx_r = ((PyObject *)__pyx_v_st);
-  goto __pyx_L0;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetOptionsPrefix(__pyx_v_self->eps, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 349, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":839
- *         CHKERR( EPSSetDimensions(self.eps, ival1, ival2, ival3) )
+  /* "SLEPc/EPS.pyx":324
+ *         return bytes2str(prefix)
  * 
- *     def getST(self):             # <<<<<<<<<<<<<<
+ *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
  *         """
- *         Obtain the spectral transformation (`ST`) object associated to
+ *         Sets the prefix used for searching for all EPS options in the
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getST", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_st);
+  __Pyx_XDECREF(__pyx_v_prefix);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":854
- *         return st
+/* "SLEPc/EPS.pyx":351
+ *         CHKERR( EPSSetOptionsPrefix(self.eps, cval) )
  * 
- *     def setST(self, ST st not None):             # <<<<<<<<<<<<<<
+ *     def appendOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
  *         """
- *         Associates a spectral transformation object to the
+ *         Appends to the prefix used for searching for all EPS options
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_75setST(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_74setST[] = "EPS.setST(self, ST st)\n\n        Associates a spectral transformation object to the\n        eigensolver.\n\n        Parameters\n        ----------\n        st: ST\n            The spectral transformation.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_75setST(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PySlepcSTObject *__pyx_v_st = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_19appendOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_18appendOptionsPrefix[] = "EPS.appendOptionsPrefix(self, prefix)\n\n        Appends to the prefix used for searching for all EPS options\n        in the database.\n\n        Parameters\n        ----------\n        prefix: string\n                The prefix string to prepend to all EPS option requests.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_19appendOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_prefix = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setST (wrapper)", 0);
+  __Pyx_RefNannySetupContext("appendOptionsPrefix (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_st,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_prefix,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -21442,196 +22562,257 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_75setST(PyObject *__pyx_v_self,
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_st)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_prefix)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setST") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 854; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "appendOptionsPrefix") < 0)) __PYX_ERR(13, 351, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_st = ((struct PySlepcSTObject *)values[0]);
+    __pyx_v_prefix = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setST", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 854; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("appendOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 351, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setST", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.appendOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_st), __pyx_ptype_8slepc4py_5SLEPc_ST, 0, "st", 0))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 854; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_74setST(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_st);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_18appendOptionsPrefix(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_prefix);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_74setST(struct PySlepcEPSObject *__pyx_v_self, struct PySlepcSTObject *__pyx_v_st) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_18appendOptionsPrefix(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
+  const char *__pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setST", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("appendOptionsPrefix", 0);
+  __Pyx_INCREF(__pyx_v_prefix);
 
-  /* "SLEPc/EPS.pyx":864
- *             The spectral transformation.
+  /* "SLEPc/EPS.pyx":361
+ *                 The prefix string to prepend to all EPS option requests.
  *         """
- *         CHKERR( EPSSetST(self.eps, st.st) )             # <<<<<<<<<<<<<<
+ *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
+ *         prefix = str2bytes(prefix, &cval)
+ *         CHKERR( EPSAppendOptionsPrefix(self.eps, cval) )
+ */
+  __pyx_v_cval = NULL;
+
+  /* "SLEPc/EPS.pyx":362
+ *         """
+ *         cdef const_char *cval = NULL
+ *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSAppendOptionsPrefix(self.eps, cval) )
  * 
- *     def getBV(self):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetST(__pyx_v_self->eps, __pyx_v_st->st)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 864; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 362, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/EPS.pyx":854
- *         return st
+  /* "SLEPc/EPS.pyx":363
+ *         cdef const_char *cval = NULL
+ *         prefix = str2bytes(prefix, &cval)
+ *         CHKERR( EPSAppendOptionsPrefix(self.eps, cval) )             # <<<<<<<<<<<<<<
  * 
- *     def setST(self, ST st not None):             # <<<<<<<<<<<<<<
- *         """
- *         Associates a spectral transformation object to the
+ *     def setFromOptions(self):
  */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSAppendOptionsPrefix(__pyx_v_self->eps, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 363, __pyx_L1_error)
 
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  /* "SLEPc/EPS.pyx":351
+ *         CHKERR( EPSSetOptionsPrefix(self.eps, cval) )
+ * 
+ *     def appendOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *         """
+ *         Appends to the prefix used for searching for all EPS options
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setST", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.appendOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_prefix);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":866
- *         CHKERR( EPSSetST(self.eps, st.st) )
+/* "SLEPc/EPS.pyx":365
+ *         CHKERR( EPSAppendOptionsPrefix(self.eps, cval) )
  * 
- *     def getBV(self):             # <<<<<<<<<<<<<<
+ *     def setFromOptions(self):             # <<<<<<<<<<<<<<
  *         """
- *         Obtain the basis vector objects associated to the eigensolver.
+ *         Sets EPS options from the options database. This routine must
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_77getBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_76getBV[] = "EPS.getBV(self)\n\n        Obtain the basis vector objects associated to the eigensolver.\n\n        Returns\n        -------\n        bv: BV\n            The basis vectors context.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_77getBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_21setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_20setFromOptions[] = "EPS.setFromOptions(self)\n\n        Sets EPS options from the options database. This routine must\n        be called before `setUp()` if the user is to be allowed to set\n        the solver type.\n\n        Notes\n        -----\n        To see all options, run your program with the ``-help``\n        option.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_21setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getBV (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setFromOptions (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getBV", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getBV", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_76getBV(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("setFromOptions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setFromOptions", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_20setFromOptions(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_76getBV(struct PySlepcEPSObject *__pyx_v_self) {
-  struct PySlepcBVObject *__pyx_v_bv = 0;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_20setFromOptions(struct PySlepcEPSObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getBV", 0);
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setFromOptions", 0);
 
-  /* "SLEPc/EPS.pyx":875
- *             The basis vectors context.
+  /* "SLEPc/EPS.pyx":376
+ *         option.
  *         """
- *         cdef BV bv = BV()             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetBV(self.eps, &bv.bv) )
- *         PetscINCREF(bv.obj)
+ *         CHKERR( EPSSetFromOptions(self.eps) )             # <<<<<<<<<<<<<<
+ * 
+ *     #
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_BV)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 875; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_bv = ((struct PySlepcBVObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetFromOptions(__pyx_v_self->eps)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 376, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":876
+  /* "SLEPc/EPS.pyx":365
+ *         CHKERR( EPSAppendOptionsPrefix(self.eps, cval) )
+ * 
+ *     def setFromOptions(self):             # <<<<<<<<<<<<<<
  *         """
- *         cdef BV bv = BV()
- *         CHKERR( EPSGetBV(self.eps, &bv.bv) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(bv.obj)
- *         return bv
+ *         Sets EPS options from the options database. This routine must
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetBV(__pyx_v_self->eps, (&__pyx_v_bv->bv))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "SLEPc/EPS.pyx":877
- *         cdef BV bv = BV()
- *         CHKERR( EPSGetBV(self.eps, &bv.bv) )
- *         PetscINCREF(bv.obj)             # <<<<<<<<<<<<<<
- *         return bv
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setFromOptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/EPS.pyx":380
+ *     #
  * 
+ *     def getProblemType(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the problem type from the EPS object.
  */
-  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_bv->__pyx_base.obj);
 
-  /* "SLEPc/EPS.pyx":878
- *         CHKERR( EPSGetBV(self.eps, &bv.bv) )
- *         PetscINCREF(bv.obj)
- *         return bv             # <<<<<<<<<<<<<<
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_23getProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_22getProblemType[] = "EPS.getProblemType(self)\n\n        Gets the problem type from the EPS object.\n\n        Returns\n        -------\n        problem_type: `EPS.ProblemType` enumerate\n                      The problem type that was previously set.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_23getProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getProblemType (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getProblemType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getProblemType", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_22getProblemType(((struct PySlepcEPSObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_22getProblemType(struct PySlepcEPSObject *__pyx_v_self) {
+  EPSProblemType __pyx_v_val;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getProblemType", 0);
+
+  /* "SLEPc/EPS.pyx":389
+ *                       The problem type that was previously set.
+ *         """
+ *         cdef SlepcEPSProblemType val = EPS_NHEP             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetProblemType(self.eps, &val) )
+ *         return val
+ */
+  __pyx_v_val = EPS_NHEP;
+
+  /* "SLEPc/EPS.pyx":390
+ *         """
+ *         cdef SlepcEPSProblemType val = EPS_NHEP
+ *         CHKERR( EPSGetProblemType(self.eps, &val) )             # <<<<<<<<<<<<<<
+ *         return val
  * 
- *     def setBV(self, BV bv not None):
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetProblemType(__pyx_v_self->eps, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 390, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":391
+ *         cdef SlepcEPSProblemType val = EPS_NHEP
+ *         CHKERR( EPSGetProblemType(self.eps, &val) )
+ *         return val             # <<<<<<<<<<<<<<
+ * 
+ *     def setProblemType(self, problem_type):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_bv));
-  __pyx_r = ((PyObject *)__pyx_v_bv);
+  __pyx_t_2 = __Pyx_PyInt_From_EPSProblemType(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 391, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":866
- *         CHKERR( EPSSetST(self.eps, st.st) )
+  /* "SLEPc/EPS.pyx":380
+ *     #
  * 
- *     def getBV(self):             # <<<<<<<<<<<<<<
+ *     def getProblemType(self):             # <<<<<<<<<<<<<<
  *         """
- *         Obtain the basis vector objects associated to the eigensolver.
+ *         Gets the problem type from the EPS object.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getProblemType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_bv);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":880
- *         return bv
+/* "SLEPc/EPS.pyx":393
+ *         return val
  * 
- *     def setBV(self, BV bv not None):             # <<<<<<<<<<<<<<
+ *     def setProblemType(self, problem_type):             # <<<<<<<<<<<<<<
  *         """
- *         Associates a basis vectors object to the eigensolver.
+ *         Specifies the type of the eigenvalue problem.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_79setBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_78setBV[] = "EPS.setBV(self, BV bv)\n\n        Associates a basis vectors object to the eigensolver.\n\n        Parameters\n        ----------\n        bv: BV\n            The basis vectors context.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_79setBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PySlepcBVObject *__pyx_v_bv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_25setProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_24setProblemType[] = "EPS.setProblemType(self, problem_type)\n\n        Specifies the type of the eigenvalue problem.\n\n        Parameters\n        ----------\n        problem_type: `EPS.ProblemType` enumerate\n               The problem type to be set.\n\n        Notes\n        -----\n        Allowed values are: Hermitian (HEP), non-Hermitian (NHEP),\n        generalized Hermitian (GHEP), generalized non-Hermitian\n        (GNHEP), and genera [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_25setProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_problem_type = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setBV (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setProblemType (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_bv,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_problem_type,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -21644,70 +22825,74 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_79setBV(PyObject *__pyx_v_self,
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_bv)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_problem_type)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setBV") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 880; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setProblemType") < 0)) __PYX_ERR(13, 393, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_bv = ((struct PySlepcBVObject *)values[0]);
+    __pyx_v_problem_type = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setBV", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 880; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setProblemType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 393, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setProblemType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_bv), __pyx_ptype_8slepc4py_5SLEPc_BV, 0, "bv", 0))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 880; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_78setBV(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_bv);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_24setProblemType(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_problem_type);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_78setBV(struct PySlepcEPSObject *__pyx_v_self, struct PySlepcBVObject *__pyx_v_bv) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_24setProblemType(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_problem_type) {
+  EPSProblemType __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setBV", 0);
+  EPSProblemType __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setProblemType", 0);
 
-  /* "SLEPc/EPS.pyx":889
- *             The basis vectors context.
+  /* "SLEPc/EPS.pyx":418
+ *         properties.
  *         """
- *         CHKERR( EPSSetBV(self.eps, bv.bv) )             # <<<<<<<<<<<<<<
+ *         cdef SlepcEPSProblemType val = problem_type             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSSetProblemType(self.eps, val) )
  * 
- *     def getDS(self):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetBV(__pyx_v_self->eps, __pyx_v_bv->bv)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 889; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((EPSProblemType)__Pyx_PyInt_As_EPSProblemType(__pyx_v_problem_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(13, 418, __pyx_L1_error)
+  __pyx_v_val = __pyx_t_1;
+
+  /* "SLEPc/EPS.pyx":419
+ *         """
+ *         cdef SlepcEPSProblemType val = problem_type
+ *         CHKERR( EPSSetProblemType(self.eps, val) )             # <<<<<<<<<<<<<<
+ * 
+ *     def isGeneralized(self):
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetProblemType(__pyx_v_self->eps, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 419, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":880
- *         return bv
+  /* "SLEPc/EPS.pyx":393
+ *         return val
  * 
- *     def setBV(self, BV bv not None):             # <<<<<<<<<<<<<<
+ *     def setProblemType(self, problem_type):             # <<<<<<<<<<<<<<
  *         """
- *         Associates a basis vectors object to the eigensolver.
+ *         Specifies the type of the eigenvalue problem.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setProblemType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -21715,201 +22900,167 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_78setBV(struct PySlepcEPSObject
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":891
- *         CHKERR( EPSSetBV(self.eps, bv.bv) )
+/* "SLEPc/EPS.pyx":421
+ *         CHKERR( EPSSetProblemType(self.eps, val) )
  * 
- *     def getDS(self):             # <<<<<<<<<<<<<<
+ *     def isGeneralized(self):             # <<<<<<<<<<<<<<
  *         """
- *         Obtain the direct solver associated to the eigensolver.
+ *         Tells whether the EPS object corresponds to a generalized
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_81getDS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_80getDS[] = "EPS.getDS(self)\n\n        Obtain the direct solver associated to the eigensolver.\n\n        Returns\n        -------\n        ds: DS\n            The direct solver context.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_81getDS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_27isGeneralized(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_26isGeneralized[] = "EPS.isGeneralized(self)\n\n        Tells whether the EPS object corresponds to a generalized\n        eigenvalue problem.\n\n        Returns\n        -------\n        flag: boolean\n              True if two matrices were set with `setOperators()`.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_27isGeneralized(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getDS (wrapper)", 0);
+  __Pyx_RefNannySetupContext("isGeneralized (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getDS", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDS", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_80getDS(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("isGeneralized", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "isGeneralized", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_26isGeneralized(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_80getDS(struct PySlepcEPSObject *__pyx_v_self) {
-  struct PySlepcDSObject *__pyx_v_ds = 0;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_26isGeneralized(struct PySlepcEPSObject *__pyx_v_self) {
+  PetscBool __pyx_v_tval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getDS", 0);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("isGeneralized", 0);
 
-  /* "SLEPc/EPS.pyx":900
- *             The direct solver context.
+  /* "SLEPc/EPS.pyx":431
+ *               True if two matrices were set with `setOperators()`.
  *         """
- *         cdef DS ds = DS()             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetDS(self.eps, &ds.ds) )
- *         PetscINCREF(ds.obj)
+ *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSIsGeneralized(self.eps, &tval) )
+ *         return <bint> tval
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_DS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 900; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_ds = ((struct PySlepcDSObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_tval = PETSC_FALSE;
 
-  /* "SLEPc/EPS.pyx":901
+  /* "SLEPc/EPS.pyx":432
  *         """
- *         cdef DS ds = DS()
- *         CHKERR( EPSGetDS(self.eps, &ds.ds) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(ds.obj)
- *         return ds
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetDS(__pyx_v_self->eps, (&__pyx_v_ds->ds))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 901; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/EPS.pyx":902
- *         cdef DS ds = DS()
- *         CHKERR( EPSGetDS(self.eps, &ds.ds) )
- *         PetscINCREF(ds.obj)             # <<<<<<<<<<<<<<
- *         return ds
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( EPSIsGeneralized(self.eps, &tval) )             # <<<<<<<<<<<<<<
+ *         return <bint> tval
  * 
  */
-  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_ds->__pyx_base.obj);
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSIsGeneralized(__pyx_v_self->eps, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 432, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":903
- *         CHKERR( EPSGetDS(self.eps, &ds.ds) )
- *         PetscINCREF(ds.obj)
- *         return ds             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":433
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( EPSIsGeneralized(self.eps, &tval) )
+ *         return <bint> tval             # <<<<<<<<<<<<<<
  * 
- *     def setDS(self, DS ds not None):
+ *     def isHermitian(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_ds));
-  __pyx_r = ((PyObject *)__pyx_v_ds);
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_tval); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 433, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":891
- *         CHKERR( EPSSetBV(self.eps, bv.bv) )
+  /* "SLEPc/EPS.pyx":421
+ *         CHKERR( EPSSetProblemType(self.eps, val) )
  * 
- *     def getDS(self):             # <<<<<<<<<<<<<<
+ *     def isGeneralized(self):             # <<<<<<<<<<<<<<
  *         """
- *         Obtain the direct solver associated to the eigensolver.
+ *         Tells whether the EPS object corresponds to a generalized
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getDS", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.isGeneralized", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_ds);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":905
- *         return ds
+/* "SLEPc/EPS.pyx":435
+ *         return <bint> tval
  * 
- *     def setDS(self, DS ds not None):             # <<<<<<<<<<<<<<
+ *     def isHermitian(self):             # <<<<<<<<<<<<<<
  *         """
- *         Associates a direct solver object to the eigensolver.
+ *         Tells whether the EPS object corresponds to a Hermitian
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_83setDS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_82setDS[] = "EPS.setDS(self, DS ds)\n\n        Associates a direct solver object to the eigensolver.\n\n        Parameters\n        ----------\n        ds: DS\n            The direct solver context.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_83setDS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PySlepcDSObject *__pyx_v_ds = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_29isHermitian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_28isHermitian[] = "EPS.isHermitian(self)\n\n        Tells whether the EPS object corresponds to a Hermitian\n        eigenvalue problem.\n\n        Returns\n        -------\n        flag: boolean\n              True if the problem type set with `setProblemType()` was\n              Hermitian.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_29isHermitian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setDS (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ds,0};
-    PyObject* values[1] = {0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ds)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDS") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 905; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-    }
-    __pyx_v_ds = ((struct PySlepcDSObject *)values[0]);
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDS", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 905; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setDS", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ds), __pyx_ptype_8slepc4py_5SLEPc_DS, 0, "ds", 0))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 905; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_82setDS(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_ds);
+  __Pyx_RefNannySetupContext("isHermitian (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("isHermitian", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "isHermitian", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_28isHermitian(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_82setDS(struct PySlepcEPSObject *__pyx_v_self, struct PySlepcDSObject *__pyx_v_ds) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_28isHermitian(struct PySlepcEPSObject *__pyx_v_self) {
+  PetscBool __pyx_v_tval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setDS", 0);
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("isHermitian", 0);
 
-  /* "SLEPc/EPS.pyx":914
- *             The direct solver context.
+  /* "SLEPc/EPS.pyx":446
+ *               Hermitian.
  *         """
- *         CHKERR( EPSSetDS(self.eps, ds.ds) )             # <<<<<<<<<<<<<<
+ *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSIsHermitian(self.eps, &tval) )
+ *         return <bint> tval
+ */
+  __pyx_v_tval = PETSC_FALSE;
+
+  /* "SLEPc/EPS.pyx":447
+ *         """
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( EPSIsHermitian(self.eps, &tval) )             # <<<<<<<<<<<<<<
+ *         return <bint> tval
  * 
- *     def getOperators(self):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetDS(__pyx_v_self->eps, __pyx_v_ds->ds)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 914; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSIsHermitian(__pyx_v_self->eps, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 447, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":905
- *         return ds
+  /* "SLEPc/EPS.pyx":448
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( EPSIsHermitian(self.eps, &tval) )
+ *         return <bint> tval             # <<<<<<<<<<<<<<
  * 
- *     def setDS(self, DS ds not None):             # <<<<<<<<<<<<<<
+ *     def isPositive(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_tval); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 448, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "SLEPc/EPS.pyx":435
+ *         return <bint> tval
+ * 
+ *     def isHermitian(self):             # <<<<<<<<<<<<<<
  *         """
- *         Associates a direct solver object to the eigensolver.
+ *         Tells whether the EPS object corresponds to a Hermitian
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setDS", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.isHermitian", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -21917,163 +23068,244 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_82setDS(struct PySlepcEPSObject
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":916
- *         CHKERR( EPSSetDS(self.eps, ds.ds) )
+/* "SLEPc/EPS.pyx":450
+ *         return <bint> tval
  * 
- *     def getOperators(self):             # <<<<<<<<<<<<<<
+ *     def isPositive(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the matrices associated with the eigenvalue problem.
+ *         Tells whether the EPS object corresponds to an eigenvalue problem
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_85getOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_84getOperators[] = "EPS.getOperators(self)\n\n        Gets the matrices associated with the eigenvalue problem.\n\n        Returns\n        -------\n        A: Mat\n           The matrix associated with the eigensystem.\n        B: Mat\n           The second matrix in the case of generalized eigenproblems.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_85getOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_31isPositive(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_30isPositive[] = "EPS.isPositive(self)\n\n        Tells whether the EPS object corresponds to an eigenvalue problem\n        type that requires a positive (semi-) definite matrix B.\n\n        Returns\n        -------\n        flag: boolean\n              True if the problem type set with `setProblemType()` was\n              positive.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_31isPositive(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getOperators (wrapper)", 0);
+  __Pyx_RefNannySetupContext("isPositive (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getOperators", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getOperators", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_84getOperators(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("isPositive", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "isPositive", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_30isPositive(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_84getOperators(struct PySlepcEPSObject *__pyx_v_self) {
-  struct PyPetscMatObject *__pyx_v_A = 0;
-  struct PyPetscMatObject *__pyx_v_B = 0;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_30isPositive(struct PySlepcEPSObject *__pyx_v_self) {
+  PetscBool __pyx_v_tval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getOperators", 0);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("isPositive", 0);
 
-  /* "SLEPc/EPS.pyx":927
- *            The second matrix in the case of generalized eigenproblems.
+  /* "SLEPc/EPS.pyx":461
+ *               positive.
  *         """
- *         cdef Mat A = Mat()             # <<<<<<<<<<<<<<
- *         cdef Mat B = Mat()
- *         CHKERR( EPSGetOperators(self.eps, &A.mat, &B.mat) )
+ *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSIsPositive(self.eps, &tval) )
+ *         return <bint> tval
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Mat)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 927; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_A = ((struct PyPetscMatObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_tval = PETSC_FALSE;
 
-  /* "SLEPc/EPS.pyx":928
+  /* "SLEPc/EPS.pyx":462
  *         """
- *         cdef Mat A = Mat()
- *         cdef Mat B = Mat()             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetOperators(self.eps, &A.mat, &B.mat) )
- *         PetscINCREF(A.obj)
- */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Mat)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_B = ((struct PyPetscMatObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "SLEPc/EPS.pyx":929
- *         cdef Mat A = Mat()
- *         cdef Mat B = Mat()
- *         CHKERR( EPSGetOperators(self.eps, &A.mat, &B.mat) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(A.obj)
- *         PetscINCREF(B.obj)
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetOperators(__pyx_v_self->eps, (&__pyx_v_A->mat), (&__pyx_v_B->mat))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 929; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/EPS.pyx":930
- *         cdef Mat B = Mat()
- *         CHKERR( EPSGetOperators(self.eps, &A.mat, &B.mat) )
- *         PetscINCREF(A.obj)             # <<<<<<<<<<<<<<
- *         PetscINCREF(B.obj)
- *         return (A, B)
- */
-  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_A->__pyx_base.obj);
-
-  /* "SLEPc/EPS.pyx":931
- *         CHKERR( EPSGetOperators(self.eps, &A.mat, &B.mat) )
- *         PetscINCREF(A.obj)
- *         PetscINCREF(B.obj)             # <<<<<<<<<<<<<<
- *         return (A, B)
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( EPSIsPositive(self.eps, &tval) )             # <<<<<<<<<<<<<<
+ *         return <bint> tval
  * 
  */
-  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_B->__pyx_base.obj);
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSIsPositive(__pyx_v_self->eps, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 462, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":932
- *         PetscINCREF(A.obj)
- *         PetscINCREF(B.obj)
- *         return (A, B)             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":463
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( EPSIsPositive(self.eps, &tval) )
+ *         return <bint> tval             # <<<<<<<<<<<<<<
  * 
- *     def setOperators(self, Mat A not None, Mat B=None):
+ *     def getBalance(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 932; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_INCREF(((PyObject *)__pyx_v_A));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_A));
-  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_A));
-  __Pyx_INCREF(((PyObject *)__pyx_v_B));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_B));
-  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_B));
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_tval); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 463, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":916
- *         CHKERR( EPSSetDS(self.eps, ds.ds) )
+  /* "SLEPc/EPS.pyx":450
+ *         return <bint> tval
  * 
- *     def getOperators(self):             # <<<<<<<<<<<<<<
+ *     def isPositive(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the matrices associated with the eigenvalue problem.
+ *         Tells whether the EPS object corresponds to an eigenvalue problem
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getOperators", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.isPositive", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_A);
-  __Pyx_XDECREF((PyObject *)__pyx_v_B);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":934
- *         return (A, B)
+/* "SLEPc/EPS.pyx":465
+ *         return <bint> tval
  * 
- *     def setOperators(self, Mat A not None, Mat B=None):             # <<<<<<<<<<<<<<
+ *     def getBalance(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the matrices associated with the eigenvalue problem.
+ *         Gets the balancing type used by the EPS object,
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_87setOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_86setOperators[] = "EPS.setOperators(self, Mat A, Mat B=None)\n\n        Sets the matrices associated with the eigenvalue problem.\n\n        Parameters\n        ----------\n        A: Mat\n           The matrix associated with the eigensystem.\n        B: Mat, optional\n           The second matrix in the case of generalized eigenproblems;\n           if not provided, a standard eigenproblem is assumed.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_87setOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscMatObject *__pyx_v_A = 0;
-  struct PyPetscMatObject *__pyx_v_B = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_33getBalance(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_32getBalance[] = "EPS.getBalance(self)\n\n        Gets the balancing type used by the EPS object,\n        and the associated parameters.\n\n        Returns\n        -------\n        balance: `EPS.Balance` enumerate\n                 The balancing method\n        iterations: integer\n                    Number of iterations of the balancing algorithm\n        cutoff: real\n                Cutoff value\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_33getBalance(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setOperators (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_A,&__pyx_n_s_B,0};
-    PyObject* values[2] = {0,0};
-    values[1] = (PyObject *)((struct PyPetscMatObject *)Py_None);
+  __Pyx_RefNannySetupContext("getBalance (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getBalance", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getBalance", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_32getBalance(((struct PySlepcEPSObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_32getBalance(struct PySlepcEPSObject *__pyx_v_self) {
+  EPSBalance __pyx_v_val;
+  PetscInt __pyx_v_ival;
+  PetscReal __pyx_v_rval;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("getBalance", 0);
+
+  /* "SLEPc/EPS.pyx":479
+ *                 Cutoff value
+ *         """
+ *         cdef SlepcEPSBalance val = EPS_BALANCE_ONESIDE             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival = 0
+ *         cdef PetscReal rval = 0
+ */
+  __pyx_v_val = EPS_BALANCE_ONESIDE;
+
+  /* "SLEPc/EPS.pyx":480
+ *         """
+ *         cdef SlepcEPSBalance val = EPS_BALANCE_ONESIDE
+ *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = 0
+ *         CHKERR( EPSGetBalance(self.eps, &val, &ival, &rval) )
+ */
+  __pyx_v_ival = 0;
+
+  /* "SLEPc/EPS.pyx":481
+ *         cdef SlepcEPSBalance val = EPS_BALANCE_ONESIDE
+ *         cdef PetscInt ival = 0
+ *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetBalance(self.eps, &val, &ival, &rval) )
+ *         return (val, toInt(ival), toReal(rval))
+ */
+  __pyx_v_rval = 0.0;
+
+  /* "SLEPc/EPS.pyx":482
+ *         cdef PetscInt ival = 0
+ *         cdef PetscReal rval = 0
+ *         CHKERR( EPSGetBalance(self.eps, &val, &ival, &rval) )             # <<<<<<<<<<<<<<
+ *         return (val, toInt(ival), toReal(rval))
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetBalance(__pyx_v_self->eps, (&__pyx_v_val), (&__pyx_v_ival), (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 482, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":483
+ *         cdef PetscReal rval = 0
+ *         CHKERR( EPSGetBalance(self.eps, &val, &ival, &rval) )
+ *         return (val, toInt(ival), toReal(rval))             # <<<<<<<<<<<<<<
+ * 
+ *     def setBalance(self, balance=None, iterations=None, cutoff=None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyInt_From_EPSBalance(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 483, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 483, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 483, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 483, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_4);
+  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
+  __pyx_t_2 = 0;
+  __pyx_t_3 = 0;
+  __pyx_t_4 = 0;
+  __pyx_r = __pyx_t_5;
+  __pyx_t_5 = 0;
+  goto __pyx_L0;
+
+  /* "SLEPc/EPS.pyx":465
+ *         return <bint> tval
+ * 
+ *     def getBalance(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the balancing type used by the EPS object,
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getBalance", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/EPS.pyx":485
+ *         return (val, toInt(ival), toReal(rval))
+ * 
+ *     def setBalance(self, balance=None, iterations=None, cutoff=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Specifies the balancing technique to be employed by the
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_35setBalance(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_34setBalance[] = "EPS.setBalance(self, balance=None, iterations=None, cutoff=None)\n\n        Specifies the balancing technique to be employed by the\n        eigensolver, and some parameters associated to it.\n\n        Parameters\n        ----------\n        balance: `EPS.Balance` enumerate\n                 The balancing method\n        iterations: integer\n                    Number of iterations of the balancing algorithm\n        cutoff:  [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_35setBalance(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_balance = 0;
+  PyObject *__pyx_v_iterations = 0;
+  PyObject *__pyx_v_cutoff = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setBalance (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_balance,&__pyx_n_s_iterations,&__pyx_n_s_cutoff,0};
+    PyObject* values[3] = {0,0,0};
+    values[0] = ((PyObject *)Py_None);
+    values[1] = ((PyObject *)Py_None);
+    values[2] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
@@ -22082,109 +23314,157 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_87setOperators(PyObject *__pyx_v
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_balance);
+          if (value) { values[0] = value; kw_args--; }
+        }
         case  1:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_B);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_iterations);
           if (value) { values[1] = value; kw_args--; }
         }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cutoff);
+          if (value) { values[2] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOperators") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 934; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setBalance") < 0)) __PYX_ERR(13, 485, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        break;
+        case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_A = ((struct PyPetscMatObject *)values[0]);
-    __pyx_v_B = ((struct PyPetscMatObject *)values[1]);
+    __pyx_v_balance = values[0];
+    __pyx_v_iterations = values[1];
+    __pyx_v_cutoff = values[2];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setOperators", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 934; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setBalance", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 485, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setOperators", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setBalance", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_A), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "A", 0))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 934; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_B), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "B", 0))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 934; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_86setOperators(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_A, __pyx_v_B);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_34setBalance(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_balance, __pyx_v_iterations, __pyx_v_cutoff);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_86setOperators(struct PySlepcEPSObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A, struct PyPetscMatObject *__pyx_v_B) {
-  Mat __pyx_v_Bmat;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_34setBalance(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_balance, PyObject *__pyx_v_iterations, PyObject *__pyx_v_cutoff) {
+  EPSBalance __pyx_v_val;
+  PetscInt __pyx_v_ival;
+  PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
-  Mat __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setOperators", 0);
+  EPSBalance __pyx_t_3;
+  PetscInt __pyx_t_4;
+  PetscReal __pyx_t_5;
+  int __pyx_t_6;
+  __Pyx_RefNannySetupContext("setBalance", 0);
 
-  /* "SLEPc/EPS.pyx":946
- *            if not provided, a standard eigenproblem is assumed.
+  /* "SLEPc/EPS.pyx":499
+ *                 Cutoff value
  *         """
- *         cdef PetscMat Bmat = NULL             # <<<<<<<<<<<<<<
- *         if B is not None: Bmat = B.mat
- *         CHKERR( EPSSetOperators(self.eps, A.mat, Bmat) )
+ *         cdef SlepcEPSBalance val = <SlepcEPSBalance>PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         cdef PetscInt  ival = PETSC_DEFAULT
+ *         cdef PetscReal rval = PETSC_DEFAULT
  */
-  __pyx_v_Bmat = NULL;
+  __pyx_v_val = ((EPSBalance)PETSC_DEFAULT);
 
-  /* "SLEPc/EPS.pyx":947
+  /* "SLEPc/EPS.pyx":500
  *         """
- *         cdef PetscMat Bmat = NULL
- *         if B is not None: Bmat = B.mat             # <<<<<<<<<<<<<<
- *         CHKERR( EPSSetOperators(self.eps, A.mat, Bmat) )
+ *         cdef SlepcEPSBalance val = <SlepcEPSBalance>PETSC_DEFAULT
+ *         cdef PetscInt  ival = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = PETSC_DEFAULT
+ *         if balance    is not None: val  = balance
+ */
+  __pyx_v_ival = PETSC_DEFAULT;
+
+  /* "SLEPc/EPS.pyx":501
+ *         cdef SlepcEPSBalance val = <SlepcEPSBalance>PETSC_DEFAULT
+ *         cdef PetscInt  ival = PETSC_DEFAULT
+ *         cdef PetscReal rval = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         if balance    is not None: val  = balance
+ *         if iterations is not None: ival = asInt(iterations)
+ */
+  __pyx_v_rval = PETSC_DEFAULT;
+
+  /* "SLEPc/EPS.pyx":502
+ *         cdef PetscInt  ival = PETSC_DEFAULT
+ *         cdef PetscReal rval = PETSC_DEFAULT
+ *         if balance    is not None: val  = balance             # <<<<<<<<<<<<<<
+ *         if iterations is not None: ival = asInt(iterations)
+ *         if cutoff     is not None: rval = asReal(cutoff)
+ */
+  __pyx_t_1 = (__pyx_v_balance != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = ((EPSBalance)__Pyx_PyInt_As_EPSBalance(__pyx_v_balance)); if (unlikely(PyErr_Occurred())) __PYX_ERR(13, 502, __pyx_L1_error)
+    __pyx_v_val = __pyx_t_3;
+  }
+
+  /* "SLEPc/EPS.pyx":503
+ *         cdef PetscReal rval = PETSC_DEFAULT
+ *         if balance    is not None: val  = balance
+ *         if iterations is not None: ival = asInt(iterations)             # <<<<<<<<<<<<<<
+ *         if cutoff     is not None: rval = asReal(cutoff)
+ *         CHKERR( EPSSetBalance(self.eps, val, ival, rval) )
+ */
+  __pyx_t_2 = (__pyx_v_iterations != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_iterations); if (unlikely(__pyx_t_4 == -1L && PyErr_Occurred())) __PYX_ERR(13, 503, __pyx_L1_error)
+    __pyx_v_ival = __pyx_t_4;
+  }
+
+  /* "SLEPc/EPS.pyx":504
+ *         if balance    is not None: val  = balance
+ *         if iterations is not None: ival = asInt(iterations)
+ *         if cutoff     is not None: rval = asReal(cutoff)             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSSetBalance(self.eps, val, ival, rval) )
  * 
  */
-  __pyx_t_1 = (((PyObject *)__pyx_v_B) != Py_None);
+  __pyx_t_1 = (__pyx_v_cutoff != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_v_B->mat;
-    __pyx_v_Bmat = __pyx_t_3;
-    goto __pyx_L3;
+    __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_cutoff); if (unlikely(__pyx_t_5 == -1.0 && PyErr_Occurred())) __PYX_ERR(13, 504, __pyx_L1_error)
+    __pyx_v_rval = __pyx_t_5;
   }
-  __pyx_L3:;
 
-  /* "SLEPc/EPS.pyx":948
- *         cdef PetscMat Bmat = NULL
- *         if B is not None: Bmat = B.mat
- *         CHKERR( EPSSetOperators(self.eps, A.mat, Bmat) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":505
+ *         if iterations is not None: ival = asInt(iterations)
+ *         if cutoff     is not None: rval = asReal(cutoff)
+ *         CHKERR( EPSSetBalance(self.eps, val, ival, rval) )             # <<<<<<<<<<<<<<
  * 
- *     def setDeflationSpace(self, space):
+ *     def getExtraction(self):
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetOperators(__pyx_v_self->eps, __pyx_v_A->mat, __pyx_v_Bmat)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 948; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetBalance(__pyx_v_self->eps, __pyx_v_val, __pyx_v_ival, __pyx_v_rval)); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(13, 505, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":934
- *         return (A, B)
+  /* "SLEPc/EPS.pyx":485
+ *         return (val, toInt(ival), toReal(rval))
  * 
- *     def setOperators(self, Mat A not None, Mat B=None):             # <<<<<<<<<<<<<<
+ *     def setBalance(self, balance=None, iterations=None, cutoff=None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the matrices associated with the eigenvalue problem.
+ *         Specifies the balancing technique to be employed by the
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setOperators", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setBalance", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -22192,211 +23472,108 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_86setOperators(struct PySlepcEPS
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":950
- *         CHKERR( EPSSetOperators(self.eps, A.mat, Bmat) )
+/* "SLEPc/EPS.pyx":507
+ *         CHKERR( EPSSetBalance(self.eps, val, ival, rval) )
  * 
- *     def setDeflationSpace(self, space):             # <<<<<<<<<<<<<<
+ *     def getExtraction(self):             # <<<<<<<<<<<<<<
  *         """
- *         Add vectors to the basis of the deflation space.
+ *         Gets the extraction type used by the EPS object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_89setDeflationSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_88setDeflationSpace[] = "EPS.setDeflationSpace(self, space)\n\n        Add vectors to the basis of the deflation space.\n\n        Parameters\n        ----------\n        space: a Vec or an array of Vec\n               Set of basis vectors to be added to the deflation\n               space.\n\n        Notes\n        -----\n        When a deflation space is given, the eigensolver seeks the\n        eigensolution in the restriction of the problem [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_89setDeflationSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_space = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_37getExtraction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_36getExtraction[] = "EPS.getExtraction(self)\n\n        Gets the extraction type used by the EPS object.\n\n        Returns\n        -------\n        extraction: `EPS.Extraction` enumerate\n                    The method of extraction.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_37getExtraction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setDeflationSpace (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_space,0};
-    PyObject* values[1] = {0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_space)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDeflationSpace") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 950; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-    }
-    __pyx_v_space = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDeflationSpace", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 950; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setDeflationSpace", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_88setDeflationSpace(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_space);
+  __Pyx_RefNannySetupContext("getExtraction (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getExtraction", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getExtraction", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_36getExtraction(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_88setDeflationSpace(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_space) {
-  Vec *__pyx_v_vs;
-  Py_ssize_t __pyx_v_i;
-  Py_ssize_t __pyx_v_ns;
-  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_36getExtraction(struct PySlepcEPSObject *__pyx_v_self) {
+  EPSExtraction __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  Py_ssize_t __pyx_t_4;
-  Py_ssize_t __pyx_t_5;
-  Vec __pyx_t_6;
-  int __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setDeflationSpace", 0);
-  __Pyx_INCREF(__pyx_v_space);
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getExtraction", 0);
 
-  /* "SLEPc/EPS.pyx":974
- *         so the deflation space should be set every time.
+  /* "SLEPc/EPS.pyx":516
+ *                     The method of extraction.
  *         """
- *         if isinstance(space, Vec): space = [space]             # <<<<<<<<<<<<<<
- *         cdef PetscVec* vs = NULL
- *         cdef Py_ssize_t i = 0, ns = len(space)
+ *         cdef SlepcEPSExtraction val = EPS_RITZ             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetExtraction(self.eps, &val) )
+ *         return val
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_space, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)); 
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 974; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_INCREF(__pyx_v_space);
-    __Pyx_GIVEREF(__pyx_v_space);
-    PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_space);
-    __Pyx_DECREF_SET(__pyx_v_space, __pyx_t_3);
-    __pyx_t_3 = 0;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+  __pyx_v_val = EPS_RITZ;
 
-  /* "SLEPc/EPS.pyx":975
+  /* "SLEPc/EPS.pyx":517
  *         """
- *         if isinstance(space, Vec): space = [space]
- *         cdef PetscVec* vs = NULL             # <<<<<<<<<<<<<<
- *         cdef Py_ssize_t i = 0, ns = len(space)
- *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
- */
-  __pyx_v_vs = NULL;
-
-  /* "SLEPc/EPS.pyx":976
- *         if isinstance(space, Vec): space = [space]
- *         cdef PetscVec* vs = NULL
- *         cdef Py_ssize_t i = 0, ns = len(space)             # <<<<<<<<<<<<<<
- *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
- *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
- */
-  __pyx_v_i = 0;
-  __pyx_t_4 = PyObject_Length(__pyx_v_space); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 976; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ns = __pyx_t_4;
-
-  /* "SLEPc/EPS.pyx":977
- *         cdef PetscVec* vs = NULL
- *         cdef Py_ssize_t i = 0, ns = len(space)
- *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)             # <<<<<<<<<<<<<<
- *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
- *         CHKERR( EPSSetDeflationSpace(self.eps, <PetscInt>ns, vs) )
- */
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_allocate((((size_t)__pyx_v_ns) * (sizeof(struct PyPetscVecObject))), ((void **)(&__pyx_v_vs))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 977; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_v_tmp = __pyx_t_3;
-  __pyx_t_3 = 0;
-
-  /* "SLEPc/EPS.pyx":978
- *         cdef Py_ssize_t i = 0, ns = len(space)
- *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
- *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec             # <<<<<<<<<<<<<<
- *         CHKERR( EPSSetDeflationSpace(self.eps, <PetscInt>ns, vs) )
+ *         cdef SlepcEPSExtraction val = EPS_RITZ
+ *         CHKERR( EPSGetExtraction(self.eps, &val) )             # <<<<<<<<<<<<<<
+ *         return val
  * 
  */
-  __pyx_t_4 = __pyx_v_ns;
-  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
-    __pyx_v_i = __pyx_t_5;
-    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_space, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 978; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-    __Pyx_GOTREF(__pyx_t_3);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_Vec)))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 978; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_6 = ((struct PyPetscVecObject *)__pyx_t_3)->vec;
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    (__pyx_v_vs[__pyx_v_i]) = __pyx_t_6;
-  }
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetExtraction(__pyx_v_self->eps, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 517, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":979
- *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
- *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
- *         CHKERR( EPSSetDeflationSpace(self.eps, <PetscInt>ns, vs) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":518
+ *         cdef SlepcEPSExtraction val = EPS_RITZ
+ *         CHKERR( EPSGetExtraction(self.eps, &val) )
+ *         return val             # <<<<<<<<<<<<<<
  * 
- *     #
+ *     def setExtraction(self, extraction):
  */
-  __pyx_t_7 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetDeflationSpace(__pyx_v_self->eps, ((PetscInt)__pyx_v_ns), __pyx_v_vs)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 979; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyInt_From_EPSExtraction(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 518, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":950
- *         CHKERR( EPSSetOperators(self.eps, A.mat, Bmat) )
+  /* "SLEPc/EPS.pyx":507
+ *         CHKERR( EPSSetBalance(self.eps, val, ival, rval) )
  * 
- *     def setDeflationSpace(self, space):             # <<<<<<<<<<<<<<
+ *     def getExtraction(self):             # <<<<<<<<<<<<<<
  *         """
- *         Add vectors to the basis of the deflation space.
+ *         Gets the extraction type used by the EPS object.
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setDeflationSpace", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getExtraction", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_tmp);
-  __Pyx_XDECREF(__pyx_v_space);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":983
- *     #
+/* "SLEPc/EPS.pyx":520
+ *         return val
  * 
- *     def setInitialSpace(self, space):             # <<<<<<<<<<<<<<
+ *     def setExtraction(self, extraction):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the initial space from which the eigensolver starts to
+ *         Sets the extraction type used by the EPS object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_91setInitialSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_90setInitialSpace[] = "EPS.setInitialSpace(self, space)\n\n        Sets the initial space from which the eigensolver starts to\n        iterate.\n\n        Parameters\n        ----------\n        space: Vec or sequence of Vec\n           The initial space\n\n        Notes\n        -----\n        Some solvers start to iterate on a single vector (initial vector).\n        In that case, the other vectors are ignored.\n\n        In contrast to `set [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_91setInitialSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_space = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_39setExtraction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_38setExtraction[] = "EPS.setExtraction(self, extraction)\n\n        Sets the extraction type used by the EPS object.\n\n        Parameters\n        ----------\n        extraction: `EPS.Extraction` enumerate\n                    The extraction method to be used by the solver.\n\n        Notes\n        -----\n        Not all eigensolvers support all types of extraction. See the\n        SLEPc documentation for details.\n\n        By default, a st [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_39setExtraction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_extraction = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setInitialSpace (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setExtraction (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_space,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_extraction,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -22409,276 +23586,158 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_91setInitialSpace(PyObject *__py
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_space)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_extraction)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInitialSpace") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setExtraction") < 0)) __PYX_ERR(13, 520, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_space = values[0];
+    __pyx_v_extraction = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setInitialSpace", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setExtraction", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 520, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setInitialSpace", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setExtraction", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_90setInitialSpace(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_space);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_38setExtraction(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_extraction);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_90setInitialSpace(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_space) {
-  Vec *__pyx_v_vs;
-  Py_ssize_t __pyx_v_i;
-  Py_ssize_t __pyx_v_ns;
-  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_38setExtraction(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_extraction) {
+  EPSExtraction __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  EPSExtraction __pyx_t_1;
   int __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  Py_ssize_t __pyx_t_4;
-  Py_ssize_t __pyx_t_5;
-  Vec __pyx_t_6;
-  int __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setInitialSpace", 0);
-  __Pyx_INCREF(__pyx_v_space);
+  __Pyx_RefNannySetupContext("setExtraction", 0);
 
-  /* "SLEPc/EPS.pyx":1008
- *         approximation of the wanted eigenspace. Then, convergence may be faster.
+  /* "SLEPc/EPS.pyx":540
+ *         *target*. See `setTarget()`.
  *         """
- *         if isinstance(space, Vec): space = [space]             # <<<<<<<<<<<<<<
- *         cdef PetscVec *vs = NULL
- *         cdef Py_ssize_t i = 0, ns = len(space)
+ *         cdef SlepcEPSExtraction val = extraction             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSSetExtraction(self.eps, val) )
+ * 
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_space, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)); 
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1008; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_INCREF(__pyx_v_space);
-    __Pyx_GIVEREF(__pyx_v_space);
-    PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_space);
-    __Pyx_DECREF_SET(__pyx_v_space, __pyx_t_3);
-    __pyx_t_3 = 0;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+  __pyx_t_1 = ((EPSExtraction)__Pyx_PyInt_As_EPSExtraction(__pyx_v_extraction)); if (unlikely(PyErr_Occurred())) __PYX_ERR(13, 540, __pyx_L1_error)
+  __pyx_v_val = __pyx_t_1;
 
-  /* "SLEPc/EPS.pyx":1009
+  /* "SLEPc/EPS.pyx":541
  *         """
- *         if isinstance(space, Vec): space = [space]
- *         cdef PetscVec *vs = NULL             # <<<<<<<<<<<<<<
- *         cdef Py_ssize_t i = 0, ns = len(space)
- *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
+ *         cdef SlepcEPSExtraction val = extraction
+ *         CHKERR( EPSSetExtraction(self.eps, val) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getWhichEigenpairs(self):
  */
-  __pyx_v_vs = NULL;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetExtraction(__pyx_v_self->eps, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 541, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":1010
- *         if isinstance(space, Vec): space = [space]
- *         cdef PetscVec *vs = NULL
- *         cdef Py_ssize_t i = 0, ns = len(space)             # <<<<<<<<<<<<<<
- *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
- *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
+  /* "SLEPc/EPS.pyx":520
+ *         return val
+ * 
+ *     def setExtraction(self, extraction):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the extraction type used by the EPS object.
  */
-  __pyx_v_i = 0;
-  __pyx_t_4 = PyObject_Length(__pyx_v_space); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1010; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ns = __pyx_t_4;
 
-  /* "SLEPc/EPS.pyx":1011
- *         cdef PetscVec *vs = NULL
- *         cdef Py_ssize_t i = 0, ns = len(space)
- *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)             # <<<<<<<<<<<<<<
- *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
- *         CHKERR( EPSSetInitialSpace(self.eps, <PetscInt>ns, vs) )
- */
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_allocate((((size_t)__pyx_v_ns) * (sizeof(struct PyPetscVecObject))), ((void **)(&__pyx_v_vs))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1011; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_v_tmp = __pyx_t_3;
-  __pyx_t_3 = 0;
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setExtraction", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-  /* "SLEPc/EPS.pyx":1012
- *         cdef Py_ssize_t i = 0, ns = len(space)
- *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
- *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec             # <<<<<<<<<<<<<<
- *         CHKERR( EPSSetInitialSpace(self.eps, <PetscInt>ns, vs) )
- * 
- */
-  __pyx_t_4 = __pyx_v_ns;
-  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
-    __pyx_v_i = __pyx_t_5;
-    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_space, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1012; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-    __Pyx_GOTREF(__pyx_t_3);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_Vec)))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1012; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_6 = ((struct PyPetscVecObject *)__pyx_t_3)->vec;
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    (__pyx_v_vs[__pyx_v_i]) = __pyx_t_6;
-  }
-
-  /* "SLEPc/EPS.pyx":1013
- *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
- *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
- *         CHKERR( EPSSetInitialSpace(self.eps, <PetscInt>ns, vs) )             # <<<<<<<<<<<<<<
- * 
- *     #
- */
-  __pyx_t_7 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetInitialSpace(__pyx_v_self->eps, ((PetscInt)__pyx_v_ns), __pyx_v_vs)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1013; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/EPS.pyx":983
- *     #
- * 
- *     def setInitialSpace(self, space):             # <<<<<<<<<<<<<<
- *         """
- *         Sets the initial space from which the eigensolver starts to
- */
-
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setInitialSpace", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_tmp);
-  __Pyx_XDECREF(__pyx_v_space);
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "SLEPc/EPS.pyx":1017
- *     #
+/* "SLEPc/EPS.pyx":543
+ *         CHKERR( EPSSetExtraction(self.eps, val) )
  * 
- *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
+ *     def getWhichEigenpairs(self):             # <<<<<<<<<<<<<<
  *         """
- *         Clears all monitors for an EPS object.
+ *         Returns which portion of the spectrum is to be sought.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_93cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_92cancelMonitor[] = "EPS.cancelMonitor(self)\n\n        Clears all monitors for an EPS object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_93cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_41getWhichEigenpairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_40getWhichEigenpairs[] = "EPS.getWhichEigenpairs(self)\n\n        Returns which portion of the spectrum is to be sought.\n\n        Returns\n        -------\n        which: `EPS.Which` enumerate\n               The portion of the spectrum to be sought by the solver.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_41getWhichEigenpairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("cancelMonitor (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getWhichEigenpairs (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("cancelMonitor", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "cancelMonitor", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_92cancelMonitor(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getWhichEigenpairs", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getWhichEigenpairs", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_40getWhichEigenpairs(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_92cancelMonitor(struct PySlepcEPSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_40getWhichEigenpairs(struct PySlepcEPSObject *__pyx_v_self) {
+  EPSWhich __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("cancelMonitor", 0);
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getWhichEigenpairs", 0);
 
-  /* "SLEPc/EPS.pyx":1021
- *         Clears all monitors for an EPS object.
+  /* "SLEPc/EPS.pyx":552
+ *                The portion of the spectrum to be sought by the solver.
  *         """
- *         CHKERR( EPSMonitorCancel(self.eps) )             # <<<<<<<<<<<<<<
- * 
- *     #
+ *         cdef SlepcEPSWhich val = EPS_LARGEST_MAGNITUDE             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetWhichEigenpairs(self.eps, &val) )
+ *         return val
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSMonitorCancel(__pyx_v_self->eps)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1021; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_val = EPS_LARGEST_MAGNITUDE;
 
-  /* "SLEPc/EPS.pyx":1017
- *     #
- * 
- *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":553
  *         """
- *         Clears all monitors for an EPS object.
- */
-
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.cancelMonitor", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "SLEPc/EPS.pyx":1025
- *     #
+ *         cdef SlepcEPSWhich val = EPS_LARGEST_MAGNITUDE
+ *         CHKERR( EPSGetWhichEigenpairs(self.eps, &val) )             # <<<<<<<<<<<<<<
+ *         return val
  * 
- *     def setUp(self):             # <<<<<<<<<<<<<<
- *         """
- *         Sets up all the internal data structures necessary for the
  */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetWhichEigenpairs(__pyx_v_self->eps, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 553, __pyx_L1_error)
 
-/* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_95setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_94setUp[] = "EPS.setUp(self)\n\n        Sets up all the internal data structures necessary for the\n        execution of the eigensolver.\n\n        Notes\n        -----\n        This function need not be called explicitly in most cases,\n        since `solve()` calls it. It can be useful when one wants to\n        measure the set-up time separately from the solve time.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_95setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setUp (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("setUp", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setUp", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_94setUp(((struct PySlepcEPSObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_94setUp(struct PySlepcEPSObject *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setUp", 0);
-
-  /* "SLEPc/EPS.pyx":1036
- *         measure the set-up time separately from the solve time.
- *         """
- *         CHKERR( EPSSetUp(self.eps) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":554
+ *         cdef SlepcEPSWhich val = EPS_LARGEST_MAGNITUDE
+ *         CHKERR( EPSGetWhichEigenpairs(self.eps, &val) )
+ *         return val             # <<<<<<<<<<<<<<
  * 
- *     def solve(self):
+ *     def setWhichEigenpairs(self, which):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetUp(__pyx_v_self->eps)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1036; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyInt_From_EPSWhich(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 554, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":1025
- *     #
+  /* "SLEPc/EPS.pyx":543
+ *         CHKERR( EPSSetExtraction(self.eps, val) )
  * 
- *     def setUp(self):             # <<<<<<<<<<<<<<
+ *     def getWhichEigenpairs(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets up all the internal data structures necessary for the
+ *         Returns which portion of the spectrum is to be sought.
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setUp", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getWhichEigenpairs", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -22686,62 +23745,104 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_94setUp(struct PySlepcEPSObject
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1038
- *         CHKERR( EPSSetUp(self.eps) )
+/* "SLEPc/EPS.pyx":556
+ *         return val
  * 
- *     def solve(self):             # <<<<<<<<<<<<<<
+ *     def setWhichEigenpairs(self, which):             # <<<<<<<<<<<<<<
  *         """
- *         Solves the eigensystem.
+ *         Specifies which portion of the spectrum is to be sought.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_97solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_96solve[] = "EPS.solve(self)\n\n        Solves the eigensystem.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_97solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_43setWhichEigenpairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_42setWhichEigenpairs[] = "EPS.setWhichEigenpairs(self, which)\n\n        Specifies which portion of the spectrum is to be sought.\n\n        Parameters\n        ----------\n        which: `EPS.Which` enumerate\n               The portion of the spectrum to be sought by the solver.\n\n        Notes\n        -----\n        Not all eigensolvers implemented in EPS account for all the\n        possible values. Also, some values make sense only for c [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_43setWhichEigenpairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_which = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("solve (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("solve", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "solve", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_96solve(((struct PySlepcEPSObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("setWhichEigenpairs (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_which,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_which)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setWhichEigenpairs") < 0)) __PYX_ERR(13, 556, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_which = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setWhichEigenpairs", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 556, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setWhichEigenpairs", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_42setWhichEigenpairs(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_which);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_96solve(struct PySlepcEPSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_42setWhichEigenpairs(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_which) {
+  EPSWhich __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("solve", 0);
+  EPSWhich __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setWhichEigenpairs", 0);
 
-  /* "SLEPc/EPS.pyx":1042
- *         Solves the eigensystem.
+  /* "SLEPc/EPS.pyx":574
+ *         imaginary part for eigenvalue selection.
  *         """
- *         CHKERR( EPSSolve(self.eps) )             # <<<<<<<<<<<<<<
+ *         cdef SlepcEPSWhich val = which             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSSetWhichEigenpairs(self.eps, val) )
  * 
- *     def getIterationNumber(self):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSolve(__pyx_v_self->eps)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((EPSWhich)__Pyx_PyInt_As_EPSWhich(__pyx_v_which)); if (unlikely(PyErr_Occurred())) __PYX_ERR(13, 574, __pyx_L1_error)
+  __pyx_v_val = __pyx_t_1;
 
-  /* "SLEPc/EPS.pyx":1038
- *         CHKERR( EPSSetUp(self.eps) )
+  /* "SLEPc/EPS.pyx":575
+ *         """
+ *         cdef SlepcEPSWhich val = which
+ *         CHKERR( EPSSetWhichEigenpairs(self.eps, val) )             # <<<<<<<<<<<<<<
  * 
- *     def solve(self):             # <<<<<<<<<<<<<<
+ *     def getTarget(self):
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetWhichEigenpairs(__pyx_v_self->eps, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 575, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":556
+ *         return val
+ * 
+ *     def setWhichEigenpairs(self, which):             # <<<<<<<<<<<<<<
  *         """
- *         Solves the eigensystem.
+ *         Specifies which portion of the spectrum is to be sought.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.solve", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setWhichEigenpairs", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -22749,86 +23850,83 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_96solve(struct PySlepcEPSObject
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1044
- *         CHKERR( EPSSolve(self.eps) )
+/* "SLEPc/EPS.pyx":577
+ *         CHKERR( EPSSetWhichEigenpairs(self.eps, val) )
  * 
- *     def getIterationNumber(self):             # <<<<<<<<<<<<<<
+ *     def getTarget(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the current iteration number. If the call to `solve()` is
+ *         Gets the value of the target.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_99getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_98getIterationNumber[] = "EPS.getIterationNumber(self)\n\n        Gets the current iteration number. If the call to `solve()` is\n        complete, then it returns the number of iterations carried out\n        by the solution method.\n\n        Returns\n        -------\n        its: int\n             Iteration number.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_99getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_45getTarget(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_44getTarget[] = "EPS.getTarget(self)\n\n        Gets the value of the target.\n\n        Returns\n        -------\n        target: float (real or complex)\n                The value of the target.\n\n        Notes\n        -----\n        If the target was not set by the user, then zero is returned.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_45getTarget(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getIterationNumber (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getTarget (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getIterationNumber", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getIterationNumber", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_98getIterationNumber(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getTarget", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTarget", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_44getTarget(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_98getIterationNumber(struct PySlepcEPSObject *__pyx_v_self) {
-  PetscInt __pyx_v_ival;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_44getTarget(struct PySlepcEPSObject *__pyx_v_self) {
+  PetscScalar __pyx_v_sval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getIterationNumber", 0);
+  __Pyx_RefNannySetupContext("getTarget", 0);
 
-  /* "SLEPc/EPS.pyx":1055
- *              Iteration number.
+  /* "SLEPc/EPS.pyx":590
+ *         If the target was not set by the user, then zero is returned.
  *         """
- *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetIterationNumber(self.eps, &ival) )
- *         return toInt(ival)
+ *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetTarget(self.eps, &sval) )
+ *         return toScalar(sval)
  */
-  __pyx_v_ival = 0;
+  __pyx_v_sval = 0.0;
 
-  /* "SLEPc/EPS.pyx":1056
+  /* "SLEPc/EPS.pyx":591
  *         """
- *         cdef PetscInt ival = 0
- *         CHKERR( EPSGetIterationNumber(self.eps, &ival) )             # <<<<<<<<<<<<<<
- *         return toInt(ival)
+ *         cdef PetscScalar sval = 0
+ *         CHKERR( EPSGetTarget(self.eps, &sval) )             # <<<<<<<<<<<<<<
+ *         return toScalar(sval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetIterationNumber(__pyx_v_self->eps, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1056; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetTarget(__pyx_v_self->eps, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 591, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":1057
- *         cdef PetscInt ival = 0
- *         CHKERR( EPSGetIterationNumber(self.eps, &ival) )
- *         return toInt(ival)             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":592
+ *         cdef PetscScalar sval = 0
+ *         CHKERR( EPSGetTarget(self.eps, &sval) )
+ *         return toScalar(sval)             # <<<<<<<<<<<<<<
  * 
- *     def getConvergedReason(self):
+ *     def setTarget(self, target):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1057; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 592, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":1044
- *         CHKERR( EPSSolve(self.eps) )
+  /* "SLEPc/EPS.pyx":577
+ *         CHKERR( EPSSetWhichEigenpairs(self.eps, val) )
  * 
- *     def getIterationNumber(self):             # <<<<<<<<<<<<<<
+ *     def getTarget(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the current iteration number. If the call to `solve()` is
+ *         Gets the value of the target.
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getIterationNumber", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getTarget", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -22836,86 +23934,104 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_98getIterationNumber(struct PySl
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1059
- *         return toInt(ival)
+/* "SLEPc/EPS.pyx":594
+ *         return toScalar(sval)
  * 
- *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
+ *     def setTarget(self, target):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the reason why the `solve()` iteration was stopped.
+ *         Sets the value of the target.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_101getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_100getConvergedReason[] = "EPS.getConvergedReason(self)\n\n        Gets the reason why the `solve()` iteration was stopped.\n\n        Returns\n        -------\n        reason: `EPS.ConvergedReason` enumerate\n                Negative value indicates diverged, positive value\n                converged.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_101getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_47setTarget(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_46setTarget[] = "EPS.setTarget(self, target)\n\n        Sets the value of the target.\n\n        Parameters\n        ----------\n        target: float (real or complex)\n                The value of the target.\n\n        Notes\n        -----\n        The target is a scalar value used to determine the portion of\n        the spectrum of interest. It is used in combination with\n        `setWhichEigenpairs()`.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_47setTarget(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_target = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getConvergedReason (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getConvergedReason", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getConvergedReason", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_100getConvergedReason(((struct PySlepcEPSObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("setTarget (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_target,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_target)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTarget") < 0)) __PYX_ERR(13, 594, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_target = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setTarget", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 594, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setTarget", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_46setTarget(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_target);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_100getConvergedReason(struct PySlepcEPSObject *__pyx_v_self) {
-  EPSConvergedReason __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_46setTarget(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_target) {
+  PetscScalar __pyx_v_sval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getConvergedReason", 0);
-
-  /* "SLEPc/EPS.pyx":1069
- *                 converged.
- *         """
- *         cdef SlepcEPSConvergedReason val = EPS_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetConvergedReason(self.eps, &val) )
- *         return val
- */
-  __pyx_v_val = EPS_CONVERGED_ITERATING;
+  PetscScalar __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setTarget", 0);
 
-  /* "SLEPc/EPS.pyx":1070
+  /* "SLEPc/EPS.pyx":609
+ *         `setWhichEigenpairs()`.
  *         """
- *         cdef SlepcEPSConvergedReason val = EPS_CONVERGED_ITERATING
- *         CHKERR( EPSGetConvergedReason(self.eps, &val) )             # <<<<<<<<<<<<<<
- *         return val
+ *         cdef PetscScalar sval = asScalar(target)             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSSetTarget(self.eps, sval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetConvergedReason(__pyx_v_self->eps, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1070; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_asScalar(__pyx_v_target); if (unlikely(PyErr_Occurred())) __PYX_ERR(13, 609, __pyx_L1_error)
+  __pyx_v_sval = __pyx_t_1;
 
-  /* "SLEPc/EPS.pyx":1071
- *         cdef SlepcEPSConvergedReason val = EPS_CONVERGED_ITERATING
- *         CHKERR( EPSGetConvergedReason(self.eps, &val) )
- *         return val             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":610
+ *         """
+ *         cdef PetscScalar sval = asScalar(target)
+ *         CHKERR( EPSSetTarget(self.eps, sval) )             # <<<<<<<<<<<<<<
  * 
- *     def getConverged(self):
+ *     def getInterval(self):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1071; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetTarget(__pyx_v_self->eps, __pyx_v_sval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 610, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":1059
- *         return toInt(ival)
+  /* "SLEPc/EPS.pyx":594
+ *         return toScalar(sval)
  * 
- *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
+ *     def setTarget(self, target):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the reason why the `solve()` iteration was stopped.
+ *         Sets the value of the target.
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getConvergedReason", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setTarget", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -22923,86 +24039,107 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_100getConvergedReason(struct PyS
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1073
- *         return val
+/* "SLEPc/EPS.pyx":612
+ *         CHKERR( EPSSetTarget(self.eps, sval) )
  * 
- *     def getConverged(self):             # <<<<<<<<<<<<<<
+ *     def getInterval(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the number of converged eigenpairs.
+ *         Gets the computational interval for spectrum slicing.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_103getConverged(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_102getConverged[] = "EPS.getConverged(self)\n\n        Gets the number of converged eigenpairs.\n\n        Returns\n        -------\n        nconv: int\n               Number of converged eigenpairs.\n\n        Notes\n        -----\n        This function should be called after `solve()` has finished.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_103getConverged(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_49getInterval(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_48getInterval[] = "EPS.getInterval(self)\n\n        Gets the computational interval for spectrum slicing.\n\n        Returns\n        -------\n        inta: float\n                The left end of the interval.\n        intb: float\n                The right end of the interval.\n\n        Notes\n        -----\n        If the interval was not set by the user, then zeros are returned.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_49getInterval(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getConverged (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getInterval (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getConverged", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getConverged", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_102getConverged(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getInterval", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getInterval", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_48getInterval(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_102getConverged(struct PySlepcEPSObject *__pyx_v_self) {
-  PetscInt __pyx_v_ival;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_48getInterval(struct PySlepcEPSObject *__pyx_v_self) {
+  PetscReal __pyx_v_inta;
+  PetscReal __pyx_v_intb;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getConverged", 0);
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("getInterval", 0);
 
-  /* "SLEPc/EPS.pyx":1086
- *         This function should be called after `solve()` has finished.
+  /* "SLEPc/EPS.pyx":627
+ *         If the interval was not set by the user, then zeros are returned.
  *         """
- *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetConverged(self.eps, &ival) )
- *         return toInt(ival)
+ *         cdef PetscReal inta = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscReal intb = 0
+ *         CHKERR( EPSGetInterval(self.eps, &inta, &intb) )
  */
-  __pyx_v_ival = 0;
+  __pyx_v_inta = 0.0;
 
-  /* "SLEPc/EPS.pyx":1087
+  /* "SLEPc/EPS.pyx":628
  *         """
- *         cdef PetscInt ival = 0
- *         CHKERR( EPSGetConverged(self.eps, &ival) )             # <<<<<<<<<<<<<<
- *         return toInt(ival)
+ *         cdef PetscReal inta = 0
+ *         cdef PetscReal intb = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetInterval(self.eps, &inta, &intb) )
+ *         return (toReal(inta), toReal(intb))
+ */
+  __pyx_v_intb = 0.0;
+
+  /* "SLEPc/EPS.pyx":629
+ *         cdef PetscReal inta = 0
+ *         cdef PetscReal intb = 0
+ *         CHKERR( EPSGetInterval(self.eps, &inta, &intb) )             # <<<<<<<<<<<<<<
+ *         return (toReal(inta), toReal(intb))
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetConverged(__pyx_v_self->eps, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1087; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetInterval(__pyx_v_self->eps, (&__pyx_v_inta), (&__pyx_v_intb))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 629, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":1088
- *         cdef PetscInt ival = 0
- *         CHKERR( EPSGetConverged(self.eps, &ival) )
- *         return toInt(ival)             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":630
+ *         cdef PetscReal intb = 0
+ *         CHKERR( EPSGetInterval(self.eps, &inta, &intb) )
+ *         return (toReal(inta), toReal(intb))             # <<<<<<<<<<<<<<
  * 
- *     def getEigenvalue(self, int i):
+ *     def setInterval(self, inta, intb):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1088; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_inta); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 630, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_intb); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 630, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 630, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
   __pyx_t_2 = 0;
+  __pyx_t_3 = 0;
+  __pyx_r = __pyx_t_4;
+  __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":1073
- *         return val
+  /* "SLEPc/EPS.pyx":612
+ *         CHKERR( EPSSetTarget(self.eps, sval) )
  * 
- *     def getConverged(self):             # <<<<<<<<<<<<<<
+ *     def getInterval(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the number of converged eigenpairs.
+ *         Gets the computational interval for spectrum slicing.
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getConverged", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getInterval", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -23010,32 +24147,31 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_102getConverged(struct PySlepcEP
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1090
- *         return toInt(ival)
+/* "SLEPc/EPS.pyx":632
+ *         return (toReal(inta), toReal(intb))
  * 
- *     def getEigenvalue(self, int i):             # <<<<<<<<<<<<<<
+ *     def setInterval(self, inta, intb):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the i-th eigenvalue as computed by `solve()`.
+ *         Defines the computational interval for spectrum slicing.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_105getEigenvalue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_104getEigenvalue[] = "EPS.getEigenvalue(self, int i)\n\n        Gets the i-th eigenvalue as computed by `solve()`.\n\n        Parameters\n        ----------\n        i: int\n           Index of the solution to be obtained.\n\n        Returns\n        -------\n        e: scalar (possibly complex)\n           The computed eigenvalue.\n\n        Notes\n        -----\n        The index ``i`` should be a value between ``0`` and\n        ``nconv-1``  [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_105getEigenvalue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_v_i;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_51setInterval(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_50setInterval[] = "EPS.setInterval(self, inta, intb)\n\n        Defines the computational interval for spectrum slicing.\n\n        Parameters\n        ----------\n        inta: float\n                The left end of the interval.\n        intb: float\n                The right end of the interval.\n\n        Notes\n        -----\n        Spectrum slicing is a technique employed for computing all\n        eigenvalues of symmetric eigenproblems  [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_51setInterval(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_inta = 0;
+  PyObject *__pyx_v_intb = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getEigenvalue (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setInterval (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_inta,&__pyx_n_s_intb,0};
+    PyObject* values[2] = {0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -23043,88 +24179,175 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_105getEigenvalue(PyObject *__pyx
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_inta)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_intb)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setInterval", 1, 2, 2, 1); __PYX_ERR(13, 632, __pyx_L3_error)
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getEigenvalue") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1090; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInterval") < 0)) __PYX_ERR(13, 632, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1090; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_inta = values[0];
+    __pyx_v_intb = values[1];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getEigenvalue", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1090; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setInterval", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 632, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getEigenvalue", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setInterval", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_104getEigenvalue(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_i);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_50setInterval(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_inta, __pyx_v_intb);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_104getEigenvalue(struct PySlepcEPSObject *__pyx_v_self, int __pyx_v_i) {
-  PetscScalar __pyx_v_sval1;
-  PetscScalar __pyx_v_sval2;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_50setInterval(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_inta, PyObject *__pyx_v_intb) {
+  PetscReal __pyx_v_rval1;
+  PetscReal __pyx_v_rval2;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getEigenvalue", 0);
+  PetscReal __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setInterval", 0);
 
-  /* "SLEPc/EPS.pyx":1111
+  /* "SLEPc/EPS.pyx":651
  *         `setWhichEigenpairs()`.
  *         """
- *         cdef PetscScalar sval1 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscScalar sval2 = 0
- *         CHKERR( EPSGetEigenvalue(self.eps, i, &sval1, &sval2) )
+ *         cdef PetscReal rval1 = asReal(inta)             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval2 = asReal(intb)
+ *         CHKERR( EPSSetInterval(self.eps, rval1, rval2) )
  */
-  __pyx_v_sval1 = 0.0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_inta); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(13, 651, __pyx_L1_error)
+  __pyx_v_rval1 = __pyx_t_1;
 
-  /* "SLEPc/EPS.pyx":1112
+  /* "SLEPc/EPS.pyx":652
  *         """
- *         cdef PetscScalar sval1 = 0
- *         cdef PetscScalar sval2 = 0             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetEigenvalue(self.eps, i, &sval1, &sval2) )
- *         return complex(toScalar(sval1), toScalar(sval2))
+ *         cdef PetscReal rval1 = asReal(inta)
+ *         cdef PetscReal rval2 = asReal(intb)             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSSetInterval(self.eps, rval1, rval2) )
+ * 
  */
-  __pyx_v_sval2 = 0.0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_intb); if (unlikely(__pyx_t_1 == -1.0 && PyErr_Occurred())) __PYX_ERR(13, 652, __pyx_L1_error)
+  __pyx_v_rval2 = __pyx_t_1;
 
-  /* "SLEPc/EPS.pyx":1113
- *         cdef PetscScalar sval1 = 0
- *         cdef PetscScalar sval2 = 0
- *         CHKERR( EPSGetEigenvalue(self.eps, i, &sval1, &sval2) )             # <<<<<<<<<<<<<<
- *         return complex(toScalar(sval1), toScalar(sval2))
+  /* "SLEPc/EPS.pyx":653
+ *         cdef PetscReal rval1 = asReal(inta)
+ *         cdef PetscReal rval2 = asReal(intb)
+ *         CHKERR( EPSSetInterval(self.eps, rval1, rval2) )             # <<<<<<<<<<<<<<
  * 
+ *     #
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetEigenvalue(__pyx_v_self->eps, __pyx_v_i, (&__pyx_v_sval1), (&__pyx_v_sval2))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetInterval(__pyx_v_self->eps, __pyx_v_rval1, __pyx_v_rval2)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 653, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":1114
- *         cdef PetscScalar sval2 = 0
- *         CHKERR( EPSGetEigenvalue(self.eps, i, &sval1, &sval2) )
- *         return complex(toScalar(sval1), toScalar(sval2))             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":632
+ *         return (toReal(inta), toReal(intb))
+ * 
+ *     def setInterval(self, inta, intb):             # <<<<<<<<<<<<<<
+ *         """
+ *         Defines the computational interval for spectrum slicing.
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setInterval", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/EPS.pyx":657
+ *     #
+ * 
+ *     def getTolerances(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the tolerance and maximum iteration count used by the
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_53getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_52getTolerances[] = "EPS.getTolerances(self)\n\n        Gets the tolerance and maximum iteration count used by the\n        default EPS convergence tests.\n\n        Returns\n        -------\n        tol: float\n             The convergence tolerance.\n        max_it: int\n             The maximum number of iterations\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_53getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getTolerances (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getTolerances", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTolerances", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_52getTolerances(((struct PySlepcEPSObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_52getTolerances(struct PySlepcEPSObject *__pyx_v_self) {
+  PetscReal __pyx_v_rval;
+  PetscInt __pyx_v_ival;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("getTolerances", 0);
+
+  /* "SLEPc/EPS.pyx":669
+ *              The maximum number of iterations
+ *         """
+ *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt  ival = 0
+ *         CHKERR( EPSGetTolerances(self.eps, &rval, &ival) )
+ */
+  __pyx_v_rval = 0.0;
+
+  /* "SLEPc/EPS.pyx":670
+ *         """
+ *         cdef PetscReal rval = 0
+ *         cdef PetscInt  ival = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetTolerances(self.eps, &rval, &ival) )
+ *         return (toReal(rval), toInt(ival))
+ */
+  __pyx_v_ival = 0;
+
+  /* "SLEPc/EPS.pyx":671
+ *         cdef PetscReal rval = 0
+ *         cdef PetscInt  ival = 0
+ *         CHKERR( EPSGetTolerances(self.eps, &rval, &ival) )             # <<<<<<<<<<<<<<
+ *         return (toReal(rval), toInt(ival))
  * 
- *     def getEigenvector(self, int i, Vec Vr not None, Vec Vi=None):
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetTolerances(__pyx_v_self->eps, (&__pyx_v_rval), (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 671, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":672
+ *         cdef PetscInt  ival = 0
+ *         CHKERR( EPSGetTolerances(self.eps, &rval, &ival) )
+ *         return (toReal(rval), toInt(ival))             # <<<<<<<<<<<<<<
+ * 
+ *     def setTolerances(self, tol=None, max_it=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 672, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 672, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 672, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -23132,19 +24355,16 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_104getEigenvalue(struct PySlepcE
   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
   __pyx_t_2 = 0;
   __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyComplex_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_r = __pyx_t_3;
-  __pyx_t_3 = 0;
+  __pyx_r = __pyx_t_4;
+  __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":1090
- *         return toInt(ival)
+  /* "SLEPc/EPS.pyx":657
+ *     #
  * 
- *     def getEigenvalue(self, int i):             # <<<<<<<<<<<<<<
+ *     def getTolerances(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the i-th eigenvalue as computed by `solve()`.
+ *         Gets the tolerance and maximum iteration count used by the
  */
 
   /* function exit code */
@@ -23152,7 +24372,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_104getEigenvalue(struct PySlepcE
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getEigenvalue", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -23160,36 +24380,32 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_104getEigenvalue(struct PySlepcE
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1116
- *         return complex(toScalar(sval1), toScalar(sval2))
+/* "SLEPc/EPS.pyx":674
+ *         return (toReal(rval), toInt(ival))
  * 
- *     def getEigenvector(self, int i, Vec Vr not None, Vec Vi=None):             # <<<<<<<<<<<<<<
+ *     def setTolerances(self, tol=None, max_it=None):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the i-th eigenvector as computed by `solve()`.
+ *         Sets the tolerance and maximum iteration count used by the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_107getEigenvector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_106getEigenvector[] = "EPS.getEigenvector(self, int i, Vec Vr, Vec Vi=None)\n\n        Gets the i-th eigenvector as computed by `solve()`.\n\n        Parameters\n        ----------\n        i: int\n           Index of the solution to be obtained.\n        Vr: Vec\n            Placeholder for the returned eigenvector (real part).\n        Vi: Vec, optional\n            Placeholder for the returned eigenvector (imaginary part).\n\n        Notes\n [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_107getEigenvector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_v_i;
-  struct PyPetscVecObject *__pyx_v_Vr = 0;
-  struct PyPetscVecObject *__pyx_v_Vi = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_55setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_54setTolerances[] = "EPS.setTolerances(self, tol=None, max_it=None)\n\n        Sets the tolerance and maximum iteration count used by the\n        default EPS convergence tests.\n\n        Parameters\n        ----------\n        tol: float, optional\n             The convergence tolerance.\n        max_it: int, optional\n             The maximum number of iterations\n\n        Notes\n        -----\n        Use `DECIDE` for maxits to assign a re [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_55setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_tol = 0;
+  PyObject *__pyx_v_max_it = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getEigenvector (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setTolerances (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,&__pyx_n_s_Vr,&__pyx_n_s_Vi,0};
-    PyObject* values[3] = {0,0,0};
-    values[2] = (PyObject *)((struct PyPetscVecObject *)Py_None);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_tol,&__pyx_n_s_max_it,0};
+    PyObject* values[2] = {0,0};
+    values[0] = ((PyObject *)Py_None);
+    values[1] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
@@ -23198,142 +24414,125 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_107getEigenvector(PyObject *__py
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Vr)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("getEigenvector", 0, 2, 3, 1); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1116; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_tol);
+          if (value) { values[0] = value; kw_args--; }
         }
-        case  2:
+        case  1:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Vi);
-          if (value) { values[2] = value; kw_args--; }
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_max_it);
+          if (value) { values[1] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getEigenvector") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1116; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTolerances") < 0)) __PYX_ERR(13, 674, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        break;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1116; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_Vr = ((struct PyPetscVecObject *)values[1]);
-    __pyx_v_Vi = ((struct PyPetscVecObject *)values[2]);
+    __pyx_v_tol = values[0];
+    __pyx_v_max_it = values[1];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getEigenvector", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1116; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setTolerances", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 674, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getEigenvector", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Vr), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "Vr", 0))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Vi), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "Vi", 0))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_106getEigenvector(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_i, __pyx_v_Vr, __pyx_v_Vi);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_54setTolerances(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_tol, __pyx_v_max_it);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_106getEigenvector(struct PySlepcEPSObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_Vr, struct PyPetscVecObject *__pyx_v_Vi) {
-  Vec __pyx_v_vecr;
-  Vec __pyx_v_veci;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_54setTolerances(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_tol, PyObject *__pyx_v_max_it) {
+  PetscReal __pyx_v_rval;
+  PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
-  Vec __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getEigenvector", 0);
+  PetscReal __pyx_t_3;
+  PetscInt __pyx_t_4;
+  int __pyx_t_5;
+  __Pyx_RefNannySetupContext("setTolerances", 0);
 
-  /* "SLEPc/EPS.pyx":1136
- *         `setWhichEigenpairs()`.
+  /* "SLEPc/EPS.pyx":691
+ *         which is dependent on the solution method.
  *         """
- *         cdef PetscVec vecr = NULL             # <<<<<<<<<<<<<<
- *         cdef PetscVec veci = NULL
- *         if Vr is not None: vecr = Vr.vec
+ *         cdef PetscReal rval = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         cdef PetscInt  ival = PETSC_DEFAULT
+ *         if tol    is not None: rval = asReal(tol)
  */
-  __pyx_v_vecr = NULL;
+  __pyx_v_rval = PETSC_DEFAULT;
 
-  /* "SLEPc/EPS.pyx":1137
+  /* "SLEPc/EPS.pyx":692
  *         """
- *         cdef PetscVec vecr = NULL
- *         cdef PetscVec veci = NULL             # <<<<<<<<<<<<<<
- *         if Vr is not None: vecr = Vr.vec
- *         if Vi is not None: veci = Vi.vec
+ *         cdef PetscReal rval = PETSC_DEFAULT
+ *         cdef PetscInt  ival = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         if tol    is not None: rval = asReal(tol)
+ *         if max_it is not None: ival = asInt(max_it)
  */
-  __pyx_v_veci = NULL;
+  __pyx_v_ival = PETSC_DEFAULT;
 
-  /* "SLEPc/EPS.pyx":1138
- *         cdef PetscVec vecr = NULL
- *         cdef PetscVec veci = NULL
- *         if Vr is not None: vecr = Vr.vec             # <<<<<<<<<<<<<<
- *         if Vi is not None: veci = Vi.vec
- *         CHKERR( EPSGetEigenvector(self.eps, i, vecr, veci) )
+  /* "SLEPc/EPS.pyx":693
+ *         cdef PetscReal rval = PETSC_DEFAULT
+ *         cdef PetscInt  ival = PETSC_DEFAULT
+ *         if tol    is not None: rval = asReal(tol)             # <<<<<<<<<<<<<<
+ *         if max_it is not None: ival = asInt(max_it)
+ *         CHKERR( EPSSetTolerances(self.eps, rval, ival) )
  */
-  __pyx_t_1 = (((PyObject *)__pyx_v_Vr) != Py_None);
+  __pyx_t_1 = (__pyx_v_tol != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_v_Vr->vec;
-    __pyx_v_vecr = __pyx_t_3;
-    goto __pyx_L3;
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) __PYX_ERR(13, 693, __pyx_L1_error)
+    __pyx_v_rval = __pyx_t_3;
   }
-  __pyx_L3:;
 
-  /* "SLEPc/EPS.pyx":1139
- *         cdef PetscVec veci = NULL
- *         if Vr is not None: vecr = Vr.vec
- *         if Vi is not None: veci = Vi.vec             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetEigenvector(self.eps, i, vecr, veci) )
+  /* "SLEPc/EPS.pyx":694
+ *         cdef PetscInt  ival = PETSC_DEFAULT
+ *         if tol    is not None: rval = asReal(tol)
+ *         if max_it is not None: ival = asInt(max_it)             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSSetTolerances(self.eps, rval, ival) )
  * 
  */
-  __pyx_t_2 = (((PyObject *)__pyx_v_Vi) != Py_None);
+  __pyx_t_2 = (__pyx_v_max_it != Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
-    __pyx_t_3 = __pyx_v_Vi->vec;
-    __pyx_v_veci = __pyx_t_3;
-    goto __pyx_L4;
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_max_it); if (unlikely(__pyx_t_4 == -1L && PyErr_Occurred())) __PYX_ERR(13, 694, __pyx_L1_error)
+    __pyx_v_ival = __pyx_t_4;
   }
-  __pyx_L4:;
 
-  /* "SLEPc/EPS.pyx":1140
- *         if Vr is not None: vecr = Vr.vec
- *         if Vi is not None: veci = Vi.vec
- *         CHKERR( EPSGetEigenvector(self.eps, i, vecr, veci) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":695
+ *         if tol    is not None: rval = asReal(tol)
+ *         if max_it is not None: ival = asInt(max_it)
+ *         CHKERR( EPSSetTolerances(self.eps, rval, ival) )             # <<<<<<<<<<<<<<
  * 
- *     def getEigenpair(self, int i, Vec Vr=None, Vec Vi=None):
+ *     def getConvergenceTest(self):
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetEigenvector(__pyx_v_self->eps, __pyx_v_i, __pyx_v_vecr, __pyx_v_veci)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetTolerances(__pyx_v_self->eps, __pyx_v_rval, __pyx_v_ival)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(13, 695, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":1116
- *         return complex(toScalar(sval1), toScalar(sval2))
+  /* "SLEPc/EPS.pyx":674
+ *         return (toReal(rval), toInt(ival))
  * 
- *     def getEigenvector(self, int i, Vec Vr not None, Vec Vi=None):             # <<<<<<<<<<<<<<
+ *     def setTolerances(self, tol=None, max_it=None):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the i-th eigenvector as computed by `solve()`.
+ *         Sets the tolerance and maximum iteration count used by the
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getEigenvector", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -23341,38 +24540,113 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_106getEigenvector(struct PySlepc
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1142
- *         CHKERR( EPSGetEigenvector(self.eps, i, vecr, veci) )
+/* "SLEPc/EPS.pyx":697
+ *         CHKERR( EPSSetTolerances(self.eps, rval, ival) )
  * 
- *     def getEigenpair(self, int i, Vec Vr=None, Vec Vi=None):             # <<<<<<<<<<<<<<
+ *     def getConvergenceTest(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the i-th solution of the eigenproblem as computed by
+ *         Return the method used to compute the error estimate
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_109getEigenpair(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_108getEigenpair[] = "EPS.getEigenpair(self, int i, Vec Vr=None, Vec Vi=None)\n\n        Gets the i-th solution of the eigenproblem as computed by\n        `solve()`.  The solution consists of both the eigenvalue and\n        the eigenvector.\n\n        Parameters\n        ----------\n        i: int\n           Index of the solution to be obtained.\n        Vr: Vec\n            Placeholder for the returned eigenvector (real part).\n        Vi: V [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_109getEigenpair(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_v_i;
-  struct PyPetscVecObject *__pyx_v_Vr = 0;
-  struct PyPetscVecObject *__pyx_v_Vi = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_57getConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_56getConvergenceTest[] = "EPS.getConvergenceTest(self)\n\n        Return the method used to compute the error estimate \n        used in the convergence test. \n\n        Returns\n        -------\n        conv: EPS.Conv\n            The method used to compute the error estimate \n            used in the convergence test. \n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_57getConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getEigenpair (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getConvergenceTest (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getConvergenceTest", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getConvergenceTest", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_56getConvergenceTest(((struct PySlepcEPSObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_56getConvergenceTest(struct PySlepcEPSObject *__pyx_v_self) {
+  EPSConv __pyx_v_conv;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getConvergenceTest", 0);
+
+  /* "SLEPc/EPS.pyx":708
+ *             used in the convergence test.
+ *         """
+ *         cdef SlepcEPSConv conv = EPS_CONV_REL             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetConvergenceTest(self.eps, &conv) )
+ *         return conv
+ */
+  __pyx_v_conv = EPS_CONV_REL;
+
+  /* "SLEPc/EPS.pyx":709
+ *         """
+ *         cdef SlepcEPSConv conv = EPS_CONV_REL
+ *         CHKERR( EPSGetConvergenceTest(self.eps, &conv) )             # <<<<<<<<<<<<<<
+ *         return conv
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetConvergenceTest(__pyx_v_self->eps, (&__pyx_v_conv))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 709, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":710
+ *         cdef SlepcEPSConv conv = EPS_CONV_REL
+ *         CHKERR( EPSGetConvergenceTest(self.eps, &conv) )
+ *         return conv             # <<<<<<<<<<<<<<
+ * 
+ *     def setConvergenceTest(self, conv):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyInt_From_EPSConv(__pyx_v_conv); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 710, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "SLEPc/EPS.pyx":697
+ *         CHKERR( EPSSetTolerances(self.eps, rval, ival) )
+ * 
+ *     def getConvergenceTest(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Return the method used to compute the error estimate
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getConvergenceTest", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/EPS.pyx":712
+ *         return conv
+ * 
+ *     def setConvergenceTest(self, conv):             # <<<<<<<<<<<<<<
+ *         """
+ *         Specifies how to compute the error estimate
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_59setConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_58setConvergenceTest[] = "EPS.setConvergenceTest(self, conv)\n\n        Specifies how to compute the error estimate \n        used in the convergence test. \n\n        Parameters\n        ----------\n        conv: EPS.Conv\n            The method used to compute the error estimate \n            used in the convergence test.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_59setConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_conv = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setConvergenceTest (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,&__pyx_n_s_Vr,&__pyx_n_s_Vi,0};
-    PyObject* values[3] = {0,0,0};
-    values[1] = (PyObject *)((struct PyPetscVecObject *)Py_None);
-    values[2] = (PyObject *)((struct PyPetscVecObject *)Py_None);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_conv,0};
+    PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -23380,193 +24654,74 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_109getEigenpair(PyObject *__pyx_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_conv)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Vr);
-          if (value) { values[1] = value; kw_args--; }
-        }
-        case  2:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Vi);
-          if (value) { values[2] = value; kw_args--; }
-        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getEigenpair") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1142; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergenceTest") < 0)) __PYX_ERR(13, 712, __pyx_L3_error)
       }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
     } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        break;
-        default: goto __pyx_L5_argtuple_error;
-      }
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1142; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_Vr = ((struct PyPetscVecObject *)values[1]);
-    __pyx_v_Vi = ((struct PyPetscVecObject *)values[2]);
+    __pyx_v_conv = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getEigenpair", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1142; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setConvergenceTest", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 712, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getEigenpair", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setConvergenceTest", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Vr), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "Vr", 0))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Vi), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "Vi", 0))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_108getEigenpair(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_i, __pyx_v_Vr, __pyx_v_Vi);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_58setConvergenceTest(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_conv);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_108getEigenpair(struct PySlepcEPSObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_Vr, struct PyPetscVecObject *__pyx_v_Vi) {
-  PetscScalar __pyx_v_sval1;
-  PetscScalar __pyx_v_sval2;
-  Vec __pyx_v_vecr;
-  Vec __pyx_v_veci;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_58setConvergenceTest(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_conv) {
+  EPSConv __pyx_v_tconv;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  EPSConv __pyx_t_1;
   int __pyx_t_2;
-  Vec __pyx_t_3;
-  int __pyx_t_4;
-  PyObject *__pyx_t_5 = NULL;
-  PyObject *__pyx_t_6 = NULL;
-  PyObject *__pyx_t_7 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getEigenpair", 0);
-
-  /* "SLEPc/EPS.pyx":1169
- *         `setWhichEigenpairs()`.
- *         """
- *         cdef PetscScalar sval1 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscScalar sval2 = 0
- *         cdef PetscVec vecr = NULL
- */
-  __pyx_v_sval1 = 0.0;
+  __Pyx_RefNannySetupContext("setConvergenceTest", 0);
 
-  /* "SLEPc/EPS.pyx":1170
+  /* "SLEPc/EPS.pyx":723
+ *             used in the convergence test.
  *         """
- *         cdef PetscScalar sval1 = 0
- *         cdef PetscScalar sval2 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscVec vecr = NULL
- *         cdef PetscVec veci = NULL
- */
-  __pyx_v_sval2 = 0.0;
-
-  /* "SLEPc/EPS.pyx":1171
- *         cdef PetscScalar sval1 = 0
- *         cdef PetscScalar sval2 = 0
- *         cdef PetscVec vecr = NULL             # <<<<<<<<<<<<<<
- *         cdef PetscVec veci = NULL
- *         if Vr is not None: vecr = Vr.vec
- */
-  __pyx_v_vecr = NULL;
-
-  /* "SLEPc/EPS.pyx":1172
- *         cdef PetscScalar sval2 = 0
- *         cdef PetscVec vecr = NULL
- *         cdef PetscVec veci = NULL             # <<<<<<<<<<<<<<
- *         if Vr is not None: vecr = Vr.vec
- *         if Vi is not None: veci = Vi.vec
- */
-  __pyx_v_veci = NULL;
-
-  /* "SLEPc/EPS.pyx":1173
- *         cdef PetscVec vecr = NULL
- *         cdef PetscVec veci = NULL
- *         if Vr is not None: vecr = Vr.vec             # <<<<<<<<<<<<<<
- *         if Vi is not None: veci = Vi.vec
- *         CHKERR( EPSGetEigenpair(self.eps, i, &sval1, &sval2, vecr, veci) )
- */
-  __pyx_t_1 = (((PyObject *)__pyx_v_Vr) != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_v_Vr->vec;
-    __pyx_v_vecr = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "SLEPc/EPS.pyx":1174
- *         cdef PetscVec veci = NULL
- *         if Vr is not None: vecr = Vr.vec
- *         if Vi is not None: veci = Vi.vec             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetEigenpair(self.eps, i, &sval1, &sval2, vecr, veci) )
- *         return complex(toScalar(sval1), toScalar(sval2))
- */
-  __pyx_t_2 = (((PyObject *)__pyx_v_Vi) != Py_None);
-  __pyx_t_1 = (__pyx_t_2 != 0);
-  if (__pyx_t_1) {
-    __pyx_t_3 = __pyx_v_Vi->vec;
-    __pyx_v_veci = __pyx_t_3;
-    goto __pyx_L4;
-  }
-  __pyx_L4:;
-
-  /* "SLEPc/EPS.pyx":1175
- *         if Vr is not None: vecr = Vr.vec
- *         if Vi is not None: veci = Vi.vec
- *         CHKERR( EPSGetEigenpair(self.eps, i, &sval1, &sval2, vecr, veci) )             # <<<<<<<<<<<<<<
- *         return complex(toScalar(sval1), toScalar(sval2))
+ *         cdef SlepcEPSConv tconv = conv             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSSetConvergenceTest(self.eps, tconv) )
  * 
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetEigenpair(__pyx_v_self->eps, __pyx_v_i, (&__pyx_v_sval1), (&__pyx_v_sval2), __pyx_v_vecr, __pyx_v_veci)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((EPSConv)__Pyx_PyInt_As_EPSConv(__pyx_v_conv)); if (unlikely(PyErr_Occurred())) __PYX_ERR(13, 723, __pyx_L1_error)
+  __pyx_v_tconv = __pyx_t_1;
 
-  /* "SLEPc/EPS.pyx":1176
- *         if Vi is not None: veci = Vi.vec
- *         CHKERR( EPSGetEigenpair(self.eps, i, &sval1, &sval2, vecr, veci) )
- *         return complex(toScalar(sval1), toScalar(sval2))             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":724
+ *         """
+ *         cdef SlepcEPSConv tconv = conv
+ *         CHKERR( EPSSetConvergenceTest(self.eps, tconv) )             # <<<<<<<<<<<<<<
  * 
- *     def getInvariantSubspace(self):
+ *     def getTrueResidual(self):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
-  __Pyx_GIVEREF(__pyx_t_5);
-  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5);
-  __Pyx_GIVEREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
-  __pyx_t_5 = 0;
-  __pyx_t_6 = 0;
-  __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyComplex_Type))), __pyx_t_7, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_r = __pyx_t_6;
-  __pyx_t_6 = 0;
-  goto __pyx_L0;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetConvergenceTest(__pyx_v_self->eps, __pyx_v_tconv)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 724, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":1142
- *         CHKERR( EPSGetEigenvector(self.eps, i, vecr, veci) )
+  /* "SLEPc/EPS.pyx":712
+ *         return conv
  * 
- *     def getEigenpair(self, int i, Vec Vr=None, Vec Vi=None):             # <<<<<<<<<<<<<<
+ *     def setConvergenceTest(self, conv):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the i-th solution of the eigenproblem as computed by
+ *         Specifies how to compute the error estimate
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_XDECREF(__pyx_t_6);
-  __Pyx_XDECREF(__pyx_t_7);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getEigenpair", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setConvergenceTest", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -23574,276 +24729,108 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_108getEigenpair(struct PySlepcEP
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1178
- *         return complex(toScalar(sval1), toScalar(sval2))
+/* "SLEPc/EPS.pyx":726
+ *         CHKERR( EPSSetConvergenceTest(self.eps, tconv) )
  * 
- *     def getInvariantSubspace(self):             # <<<<<<<<<<<<<<
+ *     def getTrueResidual(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets an orthonormal basis of the computed invariant subspace.
+ *         Returns the flag indicating whether true residual must be
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_111getInvariantSubspace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_110getInvariantSubspace[] = "EPS.getInvariantSubspace(self)\n\n        Gets an orthonormal basis of the computed invariant subspace.\n\n        Returns\n        -------\n        subspace: list of Vec\n           Basis of the invariant subspace.\n\n        Notes\n        -----\n        This function should be called after `solve()` has finished.\n\n        The returned vectors span an invariant subspace associated\n        with the computed eige [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_111getInvariantSubspace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_61getTrueResidual(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_60getTrueResidual[] = "EPS.getTrueResidual(self)\n\n        Returns the flag indicating whether true residual must be\n        computed explicitly or not.\n\n        Returns\n        -------\n        trueres: bool\n            Whether the solver compute all residuals or not.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_61getTrueResidual(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getInvariantSubspace (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getTrueResidual (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getInvariantSubspace", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getInvariantSubspace", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_110getInvariantSubspace(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getTrueResidual", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTrueResidual", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_60getTrueResidual(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_110getInvariantSubspace(struct PySlepcEPSObject *__pyx_v_self) {
-  PetscInt __pyx_v_i;
-  PetscInt __pyx_v_ncv;
-  Vec __pyx_v_v;
-  Vec *__pyx_v_isp;
-  PyObject *__pyx_v_subspace = 0;
-  Mat __pyx_v_A;
-  struct PyPetscVecObject *__pyx_v_V = 0;
-  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_60getTrueResidual(struct PySlepcEPSObject *__pyx_v_self) {
+  PetscBool __pyx_v_tval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_t_3;
-  PetscInt __pyx_t_4;
-  PetscInt __pyx_t_5;
-  int __pyx_t_6;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getInvariantSubspace", 0);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getTrueResidual", 0);
 
-  /* "SLEPc/EPS.pyx":1196
- *         similar definition applies for generalized eigenproblems).
+  /* "SLEPc/EPS.pyx":736
+ *             Whether the solver compute all residuals or not.
  *         """
- *         cdef PetscInt i = 0, ncv = 0             # <<<<<<<<<<<<<<
- *         cdef PetscVec v = NULL, *isp = NULL
- *         cdef list subspace = []
+ *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetTrueResidual(self.eps, &tval) )
+ *         return <bint> tval
  */
-  __pyx_v_i = 0;
-  __pyx_v_ncv = 0;
+  __pyx_v_tval = PETSC_FALSE;
 
-  /* "SLEPc/EPS.pyx":1197
+  /* "SLEPc/EPS.pyx":737
  *         """
- *         cdef PetscInt i = 0, ncv = 0
- *         cdef PetscVec v = NULL, *isp = NULL             # <<<<<<<<<<<<<<
- *         cdef list subspace = []
- *         CHKERR( EPSGetConverged(self.eps, &ncv) )
- */
-  __pyx_v_v = NULL;
-  __pyx_v_isp = NULL;
-
-  /* "SLEPc/EPS.pyx":1198
- *         cdef PetscInt i = 0, ncv = 0
- *         cdef PetscVec v = NULL, *isp = NULL
- *         cdef list subspace = []             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetConverged(self.eps, &ncv) )
- *         if ncv == 0: return subspace
- */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_subspace = ((PyObject*)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "SLEPc/EPS.pyx":1199
- *         cdef PetscVec v = NULL, *isp = NULL
- *         cdef list subspace = []
- *         CHKERR( EPSGetConverged(self.eps, &ncv) )             # <<<<<<<<<<<<<<
- *         if ncv == 0: return subspace
- *         cdef PetscMat A = NULL
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetConverged(__pyx_v_self->eps, (&__pyx_v_ncv))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/EPS.pyx":1200
- *         cdef list subspace = []
- *         CHKERR( EPSGetConverged(self.eps, &ncv) )
- *         if ncv == 0: return subspace             # <<<<<<<<<<<<<<
- *         cdef PetscMat A = NULL
- *         CHKERR( EPSGetOperators(self.eps, &A, NULL) )
- */
-  __pyx_t_3 = ((__pyx_v_ncv == 0) != 0);
-  if (__pyx_t_3) {
-    __Pyx_XDECREF(__pyx_r);
-    __Pyx_INCREF(__pyx_v_subspace);
-    __pyx_r = __pyx_v_subspace;
-    goto __pyx_L0;
-  }
-
-  /* "SLEPc/EPS.pyx":1201
- *         CHKERR( EPSGetConverged(self.eps, &ncv) )
- *         if ncv == 0: return subspace
- *         cdef PetscMat A = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetOperators(self.eps, &A, NULL) )
- *         CHKERR( MatCreateVecs(A, &v, NULL) )
- */
-  __pyx_v_A = NULL;
-
-  /* "SLEPc/EPS.pyx":1202
- *         if ncv == 0: return subspace
- *         cdef PetscMat A = NULL
- *         CHKERR( EPSGetOperators(self.eps, &A, NULL) )             # <<<<<<<<<<<<<<
- *         CHKERR( MatCreateVecs(A, &v, NULL) )
- *         cdef Vec V = None
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetOperators(__pyx_v_self->eps, (&__pyx_v_A), NULL)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/EPS.pyx":1203
- *         cdef PetscMat A = NULL
- *         CHKERR( EPSGetOperators(self.eps, &A, NULL) )
- *         CHKERR( MatCreateVecs(A, &v, NULL) )             # <<<<<<<<<<<<<<
- *         cdef Vec V = None
- *         cdef object tmp = allocate(ncv*sizeof(Vec),<void**>&isp)
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MatCreateVecs(__pyx_v_A, (&__pyx_v_v), NULL)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/EPS.pyx":1204
- *         CHKERR( EPSGetOperators(self.eps, &A, NULL) )
- *         CHKERR( MatCreateVecs(A, &v, NULL) )
- *         cdef Vec V = None             # <<<<<<<<<<<<<<
- *         cdef object tmp = allocate(ncv*sizeof(Vec),<void**>&isp)
- *         for i in range(ncv):
- */
-  __Pyx_INCREF(Py_None);
-  __pyx_v_V = ((struct PyPetscVecObject *)Py_None);
-
-  /* "SLEPc/EPS.pyx":1205
- *         CHKERR( MatCreateVecs(A, &v, NULL) )
- *         cdef Vec V = None
- *         cdef object tmp = allocate(ncv*sizeof(Vec),<void**>&isp)             # <<<<<<<<<<<<<<
- *         for i in range(ncv):
- *             if i == 0: isp[0] = v
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_allocate((__pyx_v_ncv * (sizeof(struct PyPetscVecObject))), ((void **)(&__pyx_v_isp))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_tmp = __pyx_t_1;
-  __pyx_t_1 = 0;
-
-  /* "SLEPc/EPS.pyx":1206
- *         cdef Vec V = None
- *         cdef object tmp = allocate(ncv*sizeof(Vec),<void**>&isp)
- *         for i in range(ncv):             # <<<<<<<<<<<<<<
- *             if i == 0: isp[0] = v
- *             if i >= 1: CHKERR( VecDuplicate(v, &isp[i]) )
- */
-  __pyx_t_4 = __pyx_v_ncv;
-  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
-    __pyx_v_i = __pyx_t_5;
-
-    /* "SLEPc/EPS.pyx":1207
- *         cdef object tmp = allocate(ncv*sizeof(Vec),<void**>&isp)
- *         for i in range(ncv):
- *             if i == 0: isp[0] = v             # <<<<<<<<<<<<<<
- *             if i >= 1: CHKERR( VecDuplicate(v, &isp[i]) )
- *             V = Vec(); V.vec = isp[i]; subspace.append(V)
- */
-    __pyx_t_3 = ((__pyx_v_i == 0) != 0);
-    if (__pyx_t_3) {
-      (__pyx_v_isp[0]) = __pyx_v_v;
-      goto __pyx_L6;
-    }
-    __pyx_L6:;
-
-    /* "SLEPc/EPS.pyx":1208
- *         for i in range(ncv):
- *             if i == 0: isp[0] = v
- *             if i >= 1: CHKERR( VecDuplicate(v, &isp[i]) )             # <<<<<<<<<<<<<<
- *             V = Vec(); V.vec = isp[i]; subspace.append(V)
- *         CHKERR( EPSGetInvariantSubspace(self.eps, isp) )
- */
-    __pyx_t_3 = ((__pyx_v_i >= 1) != 0);
-    if (__pyx_t_3) {
-      __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(VecDuplicate(__pyx_v_v, (&(__pyx_v_isp[__pyx_v_i])))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      goto __pyx_L7;
-    }
-    __pyx_L7:;
-
-    /* "SLEPc/EPS.pyx":1209
- *             if i == 0: isp[0] = v
- *             if i >= 1: CHKERR( VecDuplicate(v, &isp[i]) )
- *             V = Vec(); V.vec = isp[i]; subspace.append(V)             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetInvariantSubspace(self.eps, isp) )
- *         return subspace
- */
-    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF_SET(__pyx_v_V, ((struct PyPetscVecObject *)__pyx_t_1));
-    __pyx_t_1 = 0;
-    __pyx_v_V->vec = (__pyx_v_isp[__pyx_v_i]);
-    __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_subspace, ((PyObject *)__pyx_v_V)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-
-  /* "SLEPc/EPS.pyx":1210
- *             if i >= 1: CHKERR( VecDuplicate(v, &isp[i]) )
- *             V = Vec(); V.vec = isp[i]; subspace.append(V)
- *         CHKERR( EPSGetInvariantSubspace(self.eps, isp) )             # <<<<<<<<<<<<<<
- *         return subspace
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( EPSGetTrueResidual(self.eps, &tval) )             # <<<<<<<<<<<<<<
+ *         return <bint> tval
  * 
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetInvariantSubspace(__pyx_v_self->eps, __pyx_v_isp)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetTrueResidual(__pyx_v_self->eps, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 737, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":1211
- *             V = Vec(); V.vec = isp[i]; subspace.append(V)
- *         CHKERR( EPSGetInvariantSubspace(self.eps, isp) )
- *         return subspace             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":738
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( EPSGetTrueResidual(self.eps, &tval) )
+ *         return <bint> tval             # <<<<<<<<<<<<<<
  * 
- *     #
+ *     def setTrueResidual(self, trueres):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(__pyx_v_subspace);
-  __pyx_r = __pyx_v_subspace;
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_tval); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 738, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":1178
- *         return complex(toScalar(sval1), toScalar(sval2))
+  /* "SLEPc/EPS.pyx":726
+ *         CHKERR( EPSSetConvergenceTest(self.eps, tconv) )
  * 
- *     def getInvariantSubspace(self):             # <<<<<<<<<<<<<<
+ *     def getTrueResidual(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets an orthonormal basis of the computed invariant subspace.
+ *         Returns the flag indicating whether true residual must be
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getInvariantSubspace", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getTrueResidual", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_subspace);
-  __Pyx_XDECREF((PyObject *)__pyx_v_V);
-  __Pyx_XDECREF(__pyx_v_tmp);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1215
- *     #
+/* "SLEPc/EPS.pyx":740
+ *         return <bint> tval
  * 
- *     def getErrorEstimate(self, int i):             # <<<<<<<<<<<<<<
+ *     def setTrueResidual(self, trueres):             # <<<<<<<<<<<<<<
  *         """
- *         Returns the error estimate associated to the i-th computed
+ *         Specifies if the solver must compute the true residual
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_113getErrorEstimate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_112getErrorEstimate[] = "EPS.getErrorEstimate(self, int i)\n\n        Returns the error estimate associated to the i-th computed\n        eigenpair.\n\n        Parameters\n        ----------\n        i: int\n           Index of the solution to be considered.\n\n        Returns\n        -------\n        e: real\n           Error estimate.\n\n        Notes\n        -----\n        This is the error estimate used internally by the\n        eigensol [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_113getErrorEstimate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_v_i;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_63setTrueResidual(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_62setTrueResidual[] = "EPS.setTrueResidual(self, trueres)\n\n        Specifies if the solver must compute the true residual \n        explicitly or not.\n\n        Parameters\n        ----------\n        trueres: bool\n            Whether compute the true residual or not.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_63setTrueResidual(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_trueres = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getErrorEstimate (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setTrueResidual (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_trueres,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -23856,89 +24843,74 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_113getErrorEstimate(PyObject *__
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_trueres)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getErrorEstimate") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1215; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTrueResidual") < 0)) __PYX_ERR(13, 740, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1215; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_trueres = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getErrorEstimate", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1215; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setTrueResidual", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 740, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getErrorEstimate", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setTrueResidual", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_112getErrorEstimate(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_i);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_62setTrueResidual(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_trueres);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_112getErrorEstimate(struct PySlepcEPSObject *__pyx_v_self, int __pyx_v_i) {
-  PetscReal __pyx_v_rval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_62setTrueResidual(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_trueres) {
+  PetscBool __pyx_v_tval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getErrorEstimate", 0);
-
-  /* "SLEPc/EPS.pyx":1236
- *         `computeError()`.
- *         """
- *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
- *         CHKERR( EPSGetErrorEstimate(self.eps, i, &rval) )
- *         return toReal(rval)
- */
-  __pyx_v_rval = 0.0;
+  PetscBool __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setTrueResidual", 0);
 
-  /* "SLEPc/EPS.pyx":1237
+  /* "SLEPc/EPS.pyx":750
+ *             Whether compute the true residual or not.
  *         """
- *         cdef PetscReal rval = 0
- *         CHKERR( EPSGetErrorEstimate(self.eps, i, &rval) )             # <<<<<<<<<<<<<<
- *         return toReal(rval)
+ *         cdef PetscBool tval = trueres             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSSetTrueResidual(self.eps, tval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetErrorEstimate(__pyx_v_self->eps, __pyx_v_i, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_trueres)); if (unlikely(PyErr_Occurred())) __PYX_ERR(13, 750, __pyx_L1_error)
+  __pyx_v_tval = __pyx_t_1;
 
-  /* "SLEPc/EPS.pyx":1238
- *         cdef PetscReal rval = 0
- *         CHKERR( EPSGetErrorEstimate(self.eps, i, &rval) )
- *         return toReal(rval)             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":751
+ *         """
+ *         cdef PetscBool tval = trueres
+ *         CHKERR( EPSSetTrueResidual(self.eps, tval) )             # <<<<<<<<<<<<<<
  * 
- *     def computeError(self, int i, etype=None):
+ *     def getTrackAll(self):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetTrueResidual(__pyx_v_self->eps, __pyx_v_tval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 751, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":1215
- *     #
+  /* "SLEPc/EPS.pyx":740
+ *         return <bint> tval
  * 
- *     def getErrorEstimate(self, int i):             # <<<<<<<<<<<<<<
+ *     def setTrueResidual(self, trueres):             # <<<<<<<<<<<<<<
  *         """
- *         Returns the error estimate associated to the i-th computed
+ *         Specifies if the solver must compute the true residual
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getErrorEstimate", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setTrueResidual", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -23946,163 +24918,83 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_112getErrorEstimate(struct PySle
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1240
- *         return toReal(rval)
+/* "SLEPc/EPS.pyx":753
+ *         CHKERR( EPSSetTrueResidual(self.eps, tval) )
  * 
- *     def computeError(self, int i, etype=None):             # <<<<<<<<<<<<<<
+ *     def getTrackAll(self):             # <<<<<<<<<<<<<<
  *         """
- *         Computes the error (based on the residual norm) associated with the i-th
+ *         Returns the flag indicating whether all residual norms must be
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_115computeError(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_114computeError[] = "EPS.computeError(self, int i, etype=None)\n\n        Computes the error (based on the residual norm) associated with the i-th\n        computed eigenpair.\n\n        Parameters\n        ----------\n        i: int\n           Index of the solution to be considered.\n        etype: `EPS.ErrorType` enumerate\n           The error type to compute.\n\n        Returns\n        -------\n        e: real\n           The error bound, [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_115computeError(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_v_i;
-  PyObject *__pyx_v_etype = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_65getTrackAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_64getTrackAll[] = "EPS.getTrackAll(self)\n\n        Returns the flag indicating whether all residual norms must be\n        computed or not.\n\n        Returns\n        -------\n        trackall: bool\n            Whether the solver compute all residuals or not.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_65getTrackAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("computeError (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,&__pyx_n_s_etype,0};
-    PyObject* values[2] = {0,0};
-    values[1] = ((PyObject *)Py_None);
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_etype);
-          if (value) { values[1] = value; kw_args--; }
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeError") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1240; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-    }
-    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1240; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_etype = values[1];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeError", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1240; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.computeError", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_114computeError(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_i, __pyx_v_etype);
+  __Pyx_RefNannySetupContext("getTrackAll (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getTrackAll", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTrackAll", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_64getTrackAll(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_114computeError(struct PySlepcEPSObject *__pyx_v_self, int __pyx_v_i, PyObject *__pyx_v_etype) {
-  EPSErrorType __pyx_v_et;
-  PetscReal __pyx_v_rval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_64getTrackAll(struct PySlepcEPSObject *__pyx_v_self) {
+  PetscBool __pyx_v_tval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_t_2;
-  EPSErrorType __pyx_t_3;
-  int __pyx_t_4;
-  PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("computeError", 0);
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getTrackAll", 0);
 
-  /* "SLEPc/EPS.pyx":1264
- *         ``nconv-1`` (see `getConverged()`).
+  /* "SLEPc/EPS.pyx":763
+ *             Whether the solver compute all residuals or not.
  *         """
- *         cdef SlepcEPSErrorType et = EPS_ERROR_RELATIVE             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval = 0
- *         if etype is not None: et = etype
+ *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetTrackAll(self.eps, &tval) )
+ *         return <bint> tval
  */
-  __pyx_v_et = EPS_ERROR_RELATIVE;
+  __pyx_v_tval = PETSC_FALSE;
 
-  /* "SLEPc/EPS.pyx":1265
+  /* "SLEPc/EPS.pyx":764
  *         """
- *         cdef SlepcEPSErrorType et = EPS_ERROR_RELATIVE
- *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
- *         if etype is not None: et = etype
- *         CHKERR( EPSComputeError(self.eps, i, et, &rval) )
- */
-  __pyx_v_rval = 0.0;
-
-  /* "SLEPc/EPS.pyx":1266
- *         cdef SlepcEPSErrorType et = EPS_ERROR_RELATIVE
- *         cdef PetscReal rval = 0
- *         if etype is not None: et = etype             # <<<<<<<<<<<<<<
- *         CHKERR( EPSComputeError(self.eps, i, et, &rval) )
- *         return toReal(rval)
- */
-  __pyx_t_1 = (__pyx_v_etype != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = ((EPSErrorType)PyInt_AsLong(__pyx_v_etype)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_et = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "SLEPc/EPS.pyx":1267
- *         cdef PetscReal rval = 0
- *         if etype is not None: et = etype
- *         CHKERR( EPSComputeError(self.eps, i, et, &rval) )             # <<<<<<<<<<<<<<
- *         return toReal(rval)
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( EPSGetTrackAll(self.eps, &tval) )             # <<<<<<<<<<<<<<
+ *         return <bint> tval
  * 
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSComputeError(__pyx_v_self->eps, __pyx_v_i, __pyx_v_et, (&__pyx_v_rval))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetTrackAll(__pyx_v_self->eps, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 764, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":1268
- *         if etype is not None: et = etype
- *         CHKERR( EPSComputeError(self.eps, i, et, &rval) )
- *         return toReal(rval)             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":765
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( EPSGetTrackAll(self.eps, &tval) )
+ *         return <bint> tval             # <<<<<<<<<<<<<<
  * 
- *     #
+ *     def setTrackAll(self, trackall):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __pyx_r = __pyx_t_5;
-  __pyx_t_5 = 0;
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_tval); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 765, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":1240
- *         return toReal(rval)
+  /* "SLEPc/EPS.pyx":753
+ *         CHKERR( EPSSetTrueResidual(self.eps, tval) )
  * 
- *     def computeError(self, int i, etype=None):             # <<<<<<<<<<<<<<
+ *     def getTrackAll(self):             # <<<<<<<<<<<<<<
  *         """
- *         Computes the error (based on the residual norm) associated with the i-th
+ *         Returns the flag indicating whether all residual norms must be
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.computeError", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getTrackAll", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -24110,27 +25002,24 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_114computeError(struct PySlepcEP
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1272
- *     #
+/* "SLEPc/EPS.pyx":767
+ *         return <bint> tval
  * 
- *     def setPowerShiftType(self, shift):             # <<<<<<<<<<<<<<
+ *     def setTrackAll(self, trackall):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the type of shifts used during the power iteration. This
+ *         Specifies if the solver must compute the residual of all
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_117setPowerShiftType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_116setPowerShiftType[] = "EPS.setPowerShiftType(self, shift)\n\n        Sets the type of shifts used during the power iteration. This\n        can be used to emulate the Rayleigh Quotient Iteration (RQI)\n        method.\n\n        Parameters\n        ----------\n        shift: `EPS.PowerShiftType` enumerate\n               The type of shift.\n\n        Notes\n        -----\n        This call is only relevant if the type was set to\n        `EP [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_117setPowerShiftType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_shift = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_67setTrackAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_66setTrackAll[] = "EPS.setTrackAll(self, trackall)\n\n        Specifies if the solver must compute the residual of all\n        approximate eigenpairs or not.\n\n        Parameters\n        ----------\n        trackall: bool\n            Whether compute all residuals or not.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_67setTrackAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_trackall = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setPowerShiftType (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setTrackAll (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_shift,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_trackall,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -24143,77 +25032,74 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_117setPowerShiftType(PyObject *_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_shift)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_trackall)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPowerShiftType") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1272; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTrackAll") < 0)) __PYX_ERR(13, 767, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_shift = values[0];
+    __pyx_v_trackall = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPowerShiftType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1272; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setTrackAll", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 767, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setPowerShiftType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setTrackAll", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_116setPowerShiftType(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_shift);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_66setTrackAll(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_trackall);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_116setPowerShiftType(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_shift) {
-  EPSPowerShiftType __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_66setTrackAll(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_trackall) {
+  PetscBool __pyx_v_tval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  EPSPowerShiftType __pyx_t_1;
+  PetscBool __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setPowerShiftType", 0);
+  __Pyx_RefNannySetupContext("setTrackAll", 0);
 
-  /* "SLEPc/EPS.pyx":1298
- *         behaves rather like a cubic converging method as RQI.
+  /* "SLEPc/EPS.pyx":777
+ *             Whether compute all residuals or not.
  *         """
- *         cdef SlepcEPSPowerShiftType val = shift             # <<<<<<<<<<<<<<
- *         CHKERR( EPSPowerSetShiftType(self.eps, val) )
+ *         cdef PetscBool tval = trackall             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSSetTrackAll(self.eps, tval) )
  * 
  */
-  __pyx_t_1 = ((EPSPowerShiftType)PyInt_AsLong(__pyx_v_shift)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1298; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_val = __pyx_t_1;
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_trackall)); if (unlikely(PyErr_Occurred())) __PYX_ERR(13, 777, __pyx_L1_error)
+  __pyx_v_tval = __pyx_t_1;
 
-  /* "SLEPc/EPS.pyx":1299
+  /* "SLEPc/EPS.pyx":778
  *         """
- *         cdef SlepcEPSPowerShiftType val = shift
- *         CHKERR( EPSPowerSetShiftType(self.eps, val) )             # <<<<<<<<<<<<<<
+ *         cdef PetscBool tval = trackall
+ *         CHKERR( EPSSetTrackAll(self.eps, tval) )             # <<<<<<<<<<<<<<
  * 
- *     def getPowerShiftType(self):
+ *     def getDimensions(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSPowerSetShiftType(__pyx_v_self->eps, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetTrackAll(__pyx_v_self->eps, __pyx_v_tval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 778, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":1272
- *     #
+  /* "SLEPc/EPS.pyx":767
+ *         return <bint> tval
  * 
- *     def setPowerShiftType(self, shift):             # <<<<<<<<<<<<<<
+ *     def setTrackAll(self, trackall):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the type of shifts used during the power iteration. This
+ *         Specifies if the solver must compute the residual of all
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setPowerShiftType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setTrackAll", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -24221,86 +25107,124 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_116setPowerShiftType(struct PySl
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1301
- *         CHKERR( EPSPowerSetShiftType(self.eps, val) )
+/* "SLEPc/EPS.pyx":780
+ *         CHKERR( EPSSetTrackAll(self.eps, tval) )
  * 
- *     def getPowerShiftType(self):             # <<<<<<<<<<<<<<
+ *     def getDimensions(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the type of shifts used during the power iteration.
+ *         Gets the number of eigenvalues to compute and the dimension of
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_119getPowerShiftType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_118getPowerShiftType[] = "EPS.getPowerShiftType(self)\n\n        Gets the type of shifts used during the power iteration.\n\n        Returns\n        -------\n        shift: `EPS.PowerShiftType` enumerate\n               The type of shift.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_119getPowerShiftType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_69getDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_68getDimensions[] = "EPS.getDimensions(self)\n\n        Gets the number of eigenvalues to compute and the dimension of\n        the subspace.\n\n        Returns\n        -------\n        nev: int\n             Number of eigenvalues to compute.\n        ncv: int\n             Maximum dimension of the subspace to be used by the\n             solver.\n        mpd: int\n             Maximum dimension allowed for the projected problem.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_69getDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getPowerShiftType (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getDimensions (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getPowerShiftType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getPowerShiftType", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_118getPowerShiftType(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getDimensions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDimensions", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_68getDimensions(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_118getPowerShiftType(struct PySlepcEPSObject *__pyx_v_self) {
-  EPSPowerShiftType __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_68getDimensions(struct PySlepcEPSObject *__pyx_v_self) {
+  PetscInt __pyx_v_ival1;
+  PetscInt __pyx_v_ival2;
+  PetscInt __pyx_v_ival3;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getPowerShiftType", 0);
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("getDimensions", 0);
 
-  /* "SLEPc/EPS.pyx":1310
- *                The type of shift.
+  /* "SLEPc/EPS.pyx":795
+ *              Maximum dimension allowed for the projected problem.
  *         """
- *         cdef SlepcEPSPowerShiftType val = EPS_POWER_SHIFT_CONSTANT             # <<<<<<<<<<<<<<
- *         CHKERR( EPSPowerGetShiftType(self.eps, &val) )
- *         return val
+ *         cdef PetscInt ival1 = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival2 = 0
+ *         cdef PetscInt ival3 = 0
  */
-  __pyx_v_val = EPS_POWER_SHIFT_CONSTANT;
+  __pyx_v_ival1 = 0;
 
-  /* "SLEPc/EPS.pyx":1311
+  /* "SLEPc/EPS.pyx":796
  *         """
- *         cdef SlepcEPSPowerShiftType val = EPS_POWER_SHIFT_CONSTANT
- *         CHKERR( EPSPowerGetShiftType(self.eps, &val) )             # <<<<<<<<<<<<<<
- *         return val
- * 
+ *         cdef PetscInt ival1 = 0
+ *         cdef PetscInt ival2 = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival3 = 0
+ *         CHKERR( EPSGetDimensions(self.eps, &ival1, &ival2, &ival3) )
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSPowerGetShiftType(__pyx_v_self->eps, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_ival2 = 0;
 
-  /* "SLEPc/EPS.pyx":1312
- *         cdef SlepcEPSPowerShiftType val = EPS_POWER_SHIFT_CONSTANT
- *         CHKERR( EPSPowerGetShiftType(self.eps, &val) )
- *         return val             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":797
+ *         cdef PetscInt ival1 = 0
+ *         cdef PetscInt ival2 = 0
+ *         cdef PetscInt ival3 = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetDimensions(self.eps, &ival1, &ival2, &ival3) )
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+ */
+  __pyx_v_ival3 = 0;
+
+  /* "SLEPc/EPS.pyx":798
+ *         cdef PetscInt ival2 = 0
+ *         cdef PetscInt ival3 = 0
+ *         CHKERR( EPSGetDimensions(self.eps, &ival1, &ival2, &ival3) )             # <<<<<<<<<<<<<<
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3))
  * 
- *     def setArnoldiDelayed(self, delayed):
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetDimensions(__pyx_v_self->eps, (&__pyx_v_ival1), (&__pyx_v_ival2), (&__pyx_v_ival3))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 798, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":799
+ *         cdef PetscInt ival3 = 0
+ *         CHKERR( EPSGetDimensions(self.eps, &ival1, &ival2, &ival3) )
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3))             # <<<<<<<<<<<<<<
+ * 
+ *     def setDimensions(self, nev=None, ncv=None, mpd=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival1); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 799, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 799, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival3); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 799, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 799, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_4);
+  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
   __pyx_t_2 = 0;
+  __pyx_t_3 = 0;
+  __pyx_t_4 = 0;
+  __pyx_r = __pyx_t_5;
+  __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":1301
- *         CHKERR( EPSPowerSetShiftType(self.eps, val) )
+  /* "SLEPc/EPS.pyx":780
+ *         CHKERR( EPSSetTrackAll(self.eps, tval) )
  * 
- *     def getPowerShiftType(self):             # <<<<<<<<<<<<<<
+ *     def getDimensions(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the type of shifts used during the power iteration.
+ *         Gets the number of eigenvalues to compute and the dimension of
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getPowerShiftType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -24308,32 +25232,36 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_118getPowerShiftType(struct PySl
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1314
- *         return val
+/* "SLEPc/EPS.pyx":801
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3))
  * 
- *     def setArnoldiDelayed(self, delayed):             # <<<<<<<<<<<<<<
+ *     def setDimensions(self, nev=None, ncv=None, mpd=None):             # <<<<<<<<<<<<<<
  *         """
- *         Activates or deactivates delayed reorthogonalization in the
+ *         Sets the number of eigenvalues to compute and the dimension of
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_121setArnoldiDelayed(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_120setArnoldiDelayed[] = "EPS.setArnoldiDelayed(self, delayed)\n\n        Activates or deactivates delayed reorthogonalization in the\n        Arnoldi iteration.\n\n        Parameters\n        ----------\n        delayed: boolean\n                 True if delayed reorthogonalization is to be used.\n\n        Notes\n        -----\n        This call is only relevant if the type was set to\n        `EPS.Type.ARNOLDI` with `setType()`.\n\n        D [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_121setArnoldiDelayed(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_delayed = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_71setDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_70setDimensions[] = "EPS.setDimensions(self, nev=None, ncv=None, mpd=None)\n\n        Sets the number of eigenvalues to compute and the dimension of\n        the subspace.\n\n        Parameters\n        ----------\n        nev: int, optional\n             Number of eigenvalues to compute.\n        ncv: int, optional\n             Maximum dimension of the subspace to be used by the\n             solver.\n        mpd: int, optional\n              [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_71setDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_nev = 0;
+  PyObject *__pyx_v_ncv = 0;
+  PyObject *__pyx_v_mpd = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setArnoldiDelayed (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setDimensions (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_delayed,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nev,&__pyx_n_s_ncv,&__pyx_n_s_mpd,0};
+    PyObject* values[3] = {0,0,0};
+    values[0] = ((PyObject *)Py_None);
+    values[1] = ((PyObject *)Py_None);
+    values[2] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -24341,90 +25269,155 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_121setArnoldiDelayed(PyObject *_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_delayed)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nev);
+          if (value) { values[0] = value; kw_args--; }
+        }
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ncv);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mpd);
+          if (value) { values[2] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setArnoldiDelayed") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1314; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDimensions") < 0)) __PYX_ERR(13, 801, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
     } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
     }
-    __pyx_v_delayed = values[0];
+    __pyx_v_nev = values[0];
+    __pyx_v_ncv = values[1];
+    __pyx_v_mpd = values[2];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setArnoldiDelayed", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1314; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setDimensions", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 801, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setArnoldiDelayed", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_120setArnoldiDelayed(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_delayed);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_70setDimensions(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_nev, __pyx_v_ncv, __pyx_v_mpd);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_120setArnoldiDelayed(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_delayed) {
-  PetscBool __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_70setDimensions(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_nev, PyObject *__pyx_v_ncv, PyObject *__pyx_v_mpd) {
+  PetscInt __pyx_v_ival1;
+  PetscInt __pyx_v_ival2;
+  PetscInt __pyx_v_ival3;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setArnoldiDelayed", 0);
+  PetscInt __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("setDimensions", 0);
 
-  /* "SLEPc/EPS.pyx":1334
- *         algorithm.
+  /* "SLEPc/EPS.pyx":835
+ *         smaller value should be used.
  *         """
- *         cdef PetscBool val = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         if delayed: val = PETSC_TRUE
- *         CHKERR( EPSArnoldiSetDelayed(self.eps, val) )
+ *         cdef PetscInt ival1 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival2 = PETSC_DEFAULT
+ *         cdef PetscInt ival3 = PETSC_DEFAULT
  */
-  __pyx_v_val = PETSC_FALSE;
+  __pyx_v_ival1 = PETSC_DEFAULT;
 
-  /* "SLEPc/EPS.pyx":1335
+  /* "SLEPc/EPS.pyx":836
  *         """
- *         cdef PetscBool val = PETSC_FALSE
- *         if delayed: val = PETSC_TRUE             # <<<<<<<<<<<<<<
- *         CHKERR( EPSArnoldiSetDelayed(self.eps, val) )
- * 
+ *         cdef PetscInt ival1 = PETSC_DEFAULT
+ *         cdef PetscInt ival2 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival3 = PETSC_DEFAULT
+ *         if nev is not None: ival1 = asInt(nev)
+ */
+  __pyx_v_ival2 = PETSC_DEFAULT;
+
+  /* "SLEPc/EPS.pyx":837
+ *         cdef PetscInt ival1 = PETSC_DEFAULT
+ *         cdef PetscInt ival2 = PETSC_DEFAULT
+ *         cdef PetscInt ival3 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         if nev is not None: ival1 = asInt(nev)
+ *         if ncv is not None: ival2 = asInt(ncv)
+ */
+  __pyx_v_ival3 = PETSC_DEFAULT;
+
+  /* "SLEPc/EPS.pyx":838
+ *         cdef PetscInt ival2 = PETSC_DEFAULT
+ *         cdef PetscInt ival3 = PETSC_DEFAULT
+ *         if nev is not None: ival1 = asInt(nev)             # <<<<<<<<<<<<<<
+ *         if ncv is not None: ival2 = asInt(ncv)
+ *         if mpd is not None: ival3 = asInt(mpd)
+ */
+  __pyx_t_1 = (__pyx_v_nev != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_nev); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(13, 838, __pyx_L1_error)
+    __pyx_v_ival1 = __pyx_t_3;
+  }
+
+  /* "SLEPc/EPS.pyx":839
+ *         cdef PetscInt ival3 = PETSC_DEFAULT
+ *         if nev is not None: ival1 = asInt(nev)
+ *         if ncv is not None: ival2 = asInt(ncv)             # <<<<<<<<<<<<<<
+ *         if mpd is not None: ival3 = asInt(mpd)
+ *         CHKERR( EPSSetDimensions(self.eps, ival1, ival2, ival3) )
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_delayed); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = (__pyx_v_ncv != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
-    __pyx_v_val = PETSC_TRUE;
-    goto __pyx_L3;
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_ncv); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(13, 839, __pyx_L1_error)
+    __pyx_v_ival2 = __pyx_t_3;
   }
-  __pyx_L3:;
 
-  /* "SLEPc/EPS.pyx":1336
- *         cdef PetscBool val = PETSC_FALSE
- *         if delayed: val = PETSC_TRUE
- *         CHKERR( EPSArnoldiSetDelayed(self.eps, val) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":840
+ *         if nev is not None: ival1 = asInt(nev)
+ *         if ncv is not None: ival2 = asInt(ncv)
+ *         if mpd is not None: ival3 = asInt(mpd)             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSSetDimensions(self.eps, ival1, ival2, ival3) )
  * 
- *     def getArnoldiDelayed(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSArnoldiSetDelayed(__pyx_v_self->eps, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1336; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__pyx_v_mpd != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_mpd); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(13, 840, __pyx_L1_error)
+    __pyx_v_ival3 = __pyx_t_3;
+  }
 
-  /* "SLEPc/EPS.pyx":1314
- *         return val
+  /* "SLEPc/EPS.pyx":841
+ *         if ncv is not None: ival2 = asInt(ncv)
+ *         if mpd is not None: ival3 = asInt(mpd)
+ *         CHKERR( EPSSetDimensions(self.eps, ival1, ival2, ival3) )             # <<<<<<<<<<<<<<
  * 
- *     def setArnoldiDelayed(self, delayed):             # <<<<<<<<<<<<<<
+ *     def getST(self):
+ */
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetDimensions(__pyx_v_self->eps, __pyx_v_ival1, __pyx_v_ival2, __pyx_v_ival3)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(13, 841, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":801
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+ * 
+ *     def setDimensions(self, nev=None, ncv=None, mpd=None):             # <<<<<<<<<<<<<<
  *         """
- *         Activates or deactivates delayed reorthogonalization in the
+ *         Sets the number of eigenvalues to compute and the dimension of
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setArnoldiDelayed", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -24432,114 +25425,119 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_120setArnoldiDelayed(struct PySl
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1338
- *         CHKERR( EPSArnoldiSetDelayed(self.eps, val) )
+/* "SLEPc/EPS.pyx":843
+ *         CHKERR( EPSSetDimensions(self.eps, ival1, ival2, ival3) )
  * 
- *     def getArnoldiDelayed(self):             # <<<<<<<<<<<<<<
+ *     def getST(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the type of reorthogonalization used during the Arnoldi
+ *         Obtain the spectral transformation (`ST`) object associated to
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_123getArnoldiDelayed(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_122getArnoldiDelayed[] = "EPS.getArnoldiDelayed(self)\n\n        Gets the type of reorthogonalization used during the Arnoldi\n        iteration.\n\n        Returns\n        -------\n        delayed: boolean\n                 True if delayed reorthogonalization is to be used.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_123getArnoldiDelayed(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_73getST(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_72getST[] = "EPS.getST(self)\n\n        Obtain the spectral transformation (`ST`) object associated to\n        the eigensolver object.\n\n        Returns\n        -------\n        st: ST\n            The spectral transformation.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_73getST(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getArnoldiDelayed (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getST (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getArnoldiDelayed", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getArnoldiDelayed", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_122getArnoldiDelayed(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getST", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getST", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_72getST(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_122getArnoldiDelayed(struct PySlepcEPSObject *__pyx_v_self) {
-  PetscBool __pyx_v_tval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_72getST(struct PySlepcEPSObject *__pyx_v_self) {
+  struct PySlepcSTObject *__pyx_v_st = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getArnoldiDelayed", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getST", 0);
 
-  /* "SLEPc/EPS.pyx":1348
- *                  True if delayed reorthogonalization is to be used.
+  /* "SLEPc/EPS.pyx":853
+ *             The spectral transformation.
  *         """
- *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( EPSArnoldiGetDelayed(self.eps, &tval) )
- *         return <bint> tval
+ *         cdef ST st = ST()             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetST(self.eps, &st.st) )
+ *         PetscINCREF(st.obj)
  */
-  __pyx_v_tval = PETSC_FALSE;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_ST), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 853, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_st = ((struct PySlepcSTObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/EPS.pyx":1349
+  /* "SLEPc/EPS.pyx":854
  *         """
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( EPSArnoldiGetDelayed(self.eps, &tval) )             # <<<<<<<<<<<<<<
- *         return <bint> tval
+ *         cdef ST st = ST()
+ *         CHKERR( EPSGetST(self.eps, &st.st) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(st.obj)
+ *         return st
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetST(__pyx_v_self->eps, (&__pyx_v_st->st))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 854, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":855
+ *         cdef ST st = ST()
+ *         CHKERR( EPSGetST(self.eps, &st.st) )
+ *         PetscINCREF(st.obj)             # <<<<<<<<<<<<<<
+ *         return st
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSArnoldiGetDelayed(__pyx_v_self->eps, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1349; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_st->__pyx_base.obj);
 
-  /* "SLEPc/EPS.pyx":1350
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( EPSArnoldiGetDelayed(self.eps, &tval) )
- *         return <bint> tval             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":856
+ *         CHKERR( EPSGetST(self.eps, &st.st) )
+ *         PetscINCREF(st.obj)
+ *         return st             # <<<<<<<<<<<<<<
  * 
- *     def setLanczosReorthogType(self, reorthog):
+ *     def setST(self, ST st not None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_tval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __Pyx_INCREF(((PyObject *)__pyx_v_st));
+  __pyx_r = ((PyObject *)__pyx_v_st);
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":1338
- *         CHKERR( EPSArnoldiSetDelayed(self.eps, val) )
+  /* "SLEPc/EPS.pyx":843
+ *         CHKERR( EPSSetDimensions(self.eps, ival1, ival2, ival3) )
  * 
- *     def getArnoldiDelayed(self):             # <<<<<<<<<<<<<<
+ *     def getST(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the type of reorthogonalization used during the Arnoldi
+ *         Obtain the spectral transformation (`ST`) object associated to
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getArnoldiDelayed", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getST", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_st);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1352
- *         return <bint> tval
+/* "SLEPc/EPS.pyx":858
+ *         return st
  * 
- *     def setLanczosReorthogType(self, reorthog):             # <<<<<<<<<<<<<<
+ *     def setST(self, ST st not None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the type of reorthogonalization used during the Lanczos
+ *         Associates a spectral transformation object to the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_125setLanczosReorthogType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_124setLanczosReorthogType[] = "EPS.setLanczosReorthogType(self, reorthog)\n\n        Sets the type of reorthogonalization used during the Lanczos\n        iteration.\n\n        Parameters\n        ----------\n        reorthog: `EPS.LanczosReorthogType` enumerate\n                  The type of reorthogonalization.\n\n        Notes\n        -----\n        This call is only relevant if the type was set to\n        `EPS.Type.LANCZOS` with `setType( [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_125setLanczosReorthogType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_reorthog = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_75setST(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_74setST[] = "EPS.setST(self, ST st)\n\n        Associates a spectral transformation object to the\n        eigensolver.\n\n        Parameters\n        ----------\n        st: ST\n            The spectral transformation.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_75setST(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PySlepcSTObject *__pyx_v_st = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setLanczosReorthogType (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setST (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_reorthog,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_st,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -24552,77 +25550,67 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_125setLanczosReorthogType(PyObje
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_reorthog)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_st)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLanczosReorthogType") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1352; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setST") < 0)) __PYX_ERR(13, 858, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_reorthog = values[0];
+    __pyx_v_st = ((struct PySlepcSTObject *)values[0]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setLanczosReorthogType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1352; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setST", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 858, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setLanczosReorthogType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setST", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_124setLanczosReorthogType(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_reorthog);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_st), __pyx_ptype_8slepc4py_5SLEPc_ST, 0, "st", 0))) __PYX_ERR(13, 858, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_74setST(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_st);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_124setLanczosReorthogType(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_reorthog) {
-  EPSLanczosReorthogType __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_74setST(struct PySlepcEPSObject *__pyx_v_self, struct PySlepcSTObject *__pyx_v_st) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  EPSLanczosReorthogType __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setLanczosReorthogType", 0);
-
-  /* "SLEPc/EPS.pyx":1367
- *         `EPS.Type.LANCZOS` with `setType()`.
- *         """
- *         cdef SlepcEPSLanczosReorthogType val = reorthog             # <<<<<<<<<<<<<<
- *         CHKERR( EPSLanczosSetReorthog(self.eps, val) )
- * 
- */
-  __pyx_t_1 = ((EPSLanczosReorthogType)PyInt_AsLong(__pyx_v_reorthog)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_val = __pyx_t_1;
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setST", 0);
 
-  /* "SLEPc/EPS.pyx":1368
+  /* "SLEPc/EPS.pyx":868
+ *             The spectral transformation.
  *         """
- *         cdef SlepcEPSLanczosReorthogType val = reorthog
- *         CHKERR( EPSLanczosSetReorthog(self.eps, val) )             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSSetST(self.eps, st.st) )             # <<<<<<<<<<<<<<
  * 
- *     def getLanczosReorthogType(self):
+ *     def getBV(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSLanczosSetReorthog(__pyx_v_self->eps, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetST(__pyx_v_self->eps, __pyx_v_st->st)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 868, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":1352
- *         return <bint> tval
+  /* "SLEPc/EPS.pyx":858
+ *         return st
  * 
- *     def setLanczosReorthogType(self, reorthog):             # <<<<<<<<<<<<<<
+ *     def setST(self, ST st not None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the type of reorthogonalization used during the Lanczos
+ *         Associates a spectral transformation object to the
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setLanczosReorthogType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setST", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -24630,114 +25618,119 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_124setLanczosReorthogType(struct
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1370
- *         CHKERR( EPSLanczosSetReorthog(self.eps, val) )
+/* "SLEPc/EPS.pyx":870
+ *         CHKERR( EPSSetST(self.eps, st.st) )
  * 
- *     def getLanczosReorthogType(self):             # <<<<<<<<<<<<<<
+ *     def getBV(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the type of reorthogonalization used during the Lanczos
+ *         Obtain the basis vector objects associated to the eigensolver.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_127getLanczosReorthogType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_126getLanczosReorthogType[] = "EPS.getLanczosReorthogType(self)\n\n        Gets the type of reorthogonalization used during the Lanczos\n        iteration.\n\n        Returns\n        -------\n        reorthog: `EPS.LanczosReorthogType` enumerate\n                  The type of reorthogonalization.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_127getLanczosReorthogType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_77getBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_76getBV[] = "EPS.getBV(self)\n\n        Obtain the basis vector objects associated to the eigensolver.\n\n        Returns\n        -------\n        bv: BV\n            The basis vectors context.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_77getBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getLanczosReorthogType (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getBV (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getLanczosReorthogType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getLanczosReorthogType", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_126getLanczosReorthogType(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getBV", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getBV", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_76getBV(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_126getLanczosReorthogType(struct PySlepcEPSObject *__pyx_v_self) {
-  EPSLanczosReorthogType __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_76getBV(struct PySlepcEPSObject *__pyx_v_self) {
+  struct PySlepcBVObject *__pyx_v_bv = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getLanczosReorthogType", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getBV", 0);
 
-  /* "SLEPc/EPS.pyx":1381
+  /* "SLEPc/EPS.pyx":879
+ *             The basis vectors context.
  *         """
- *         cdef SlepcEPSLanczosReorthogType val = \
- *             EPS_LANCZOS_REORTHOG_LOCAL             # <<<<<<<<<<<<<<
- *         CHKERR( EPSLanczosGetReorthog(self.eps, &val) )
- *         return val
+ *         cdef BV bv = BV()             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetBV(self.eps, &bv.bv) )
+ *         PetscINCREF(bv.obj)
  */
-  __pyx_v_val = EPS_LANCZOS_REORTHOG_LOCAL;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_BV), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 879, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_bv = ((struct PySlepcBVObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/EPS.pyx":1382
- *         cdef SlepcEPSLanczosReorthogType val = \
- *             EPS_LANCZOS_REORTHOG_LOCAL
- *         CHKERR( EPSLanczosGetReorthog(self.eps, &val) )             # <<<<<<<<<<<<<<
- *         return val
+  /* "SLEPc/EPS.pyx":880
+ *         """
+ *         cdef BV bv = BV()
+ *         CHKERR( EPSGetBV(self.eps, &bv.bv) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(bv.obj)
+ *         return bv
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetBV(__pyx_v_self->eps, (&__pyx_v_bv->bv))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 880, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":881
+ *         cdef BV bv = BV()
+ *         CHKERR( EPSGetBV(self.eps, &bv.bv) )
+ *         PetscINCREF(bv.obj)             # <<<<<<<<<<<<<<
+ *         return bv
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSLanczosGetReorthog(__pyx_v_self->eps, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_bv->__pyx_base.obj);
 
-  /* "SLEPc/EPS.pyx":1383
- *             EPS_LANCZOS_REORTHOG_LOCAL
- *         CHKERR( EPSLanczosGetReorthog(self.eps, &val) )
- *         return val             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":882
+ *         CHKERR( EPSGetBV(self.eps, &bv.bv) )
+ *         PetscINCREF(bv.obj)
+ *         return bv             # <<<<<<<<<<<<<<
  * 
- *     #
+ *     def setBV(self, BV bv not None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __Pyx_INCREF(((PyObject *)__pyx_v_bv));
+  __pyx_r = ((PyObject *)__pyx_v_bv);
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":1370
- *         CHKERR( EPSLanczosSetReorthog(self.eps, val) )
+  /* "SLEPc/EPS.pyx":870
+ *         CHKERR( EPSSetST(self.eps, st.st) )
  * 
- *     def getLanczosReorthogType(self):             # <<<<<<<<<<<<<<
+ *     def getBV(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the type of reorthogonalization used during the Lanczos
+ *         Obtain the basis vector objects associated to the eigensolver.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getLanczosReorthogType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_bv);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1387
- *     #
+/* "SLEPc/EPS.pyx":884
+ *         return bv
  * 
- *     def setKrylovSchurRestart(self, keep):             # <<<<<<<<<<<<<<
+ *     def setBV(self, BV bv not None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the restart parameter for the Krylov-Schur method, in
+ *         Associates a basis vectors object to the eigensolver.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_129setKrylovSchurRestart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_128setKrylovSchurRestart[] = "EPS.setKrylovSchurRestart(self, keep)\n\n        Sets the restart parameter for the Krylov-Schur method, in\n        particular the proportion of basis vectors that must be kept\n        after restart.\n\n        Parameters\n        ----------\n        keep: float\n              The number of vectors to be kept at restart.\n\n        Notes\n        -----\n        Allowed values are in the range [0.1,0.9]. The defau [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_129setKrylovSchurRestart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_keep = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_79setBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_78setBV[] = "EPS.setBV(self, BV bv)\n\n        Associates a basis vectors object to the eigensolver.\n\n        Parameters\n        ----------\n        bv: BV\n            The basis vectors context.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_79setBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PySlepcBVObject *__pyx_v_bv = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setKrylovSchurRestart (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setBV (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_keep,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_bv,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -24750,77 +25743,67 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_129setKrylovSchurRestart(PyObjec
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_keep)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_bv)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setKrylovSchurRestart") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1387; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setBV") < 0)) __PYX_ERR(13, 884, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_keep = values[0];
+    __pyx_v_bv = ((struct PySlepcBVObject *)values[0]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setKrylovSchurRestart", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1387; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setBV", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 884, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setKrylovSchurRestart", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_128setKrylovSchurRestart(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_keep);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_bv), __pyx_ptype_8slepc4py_5SLEPc_BV, 0, "bv", 0))) __PYX_ERR(13, 884, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_78setBV(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_bv);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_128setKrylovSchurRestart(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_keep) {
-  PetscReal __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_78setBV(struct PySlepcEPSObject *__pyx_v_self, struct PySlepcBVObject *__pyx_v_bv) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscReal __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setKrylovSchurRestart", 0);
-
-  /* "SLEPc/EPS.pyx":1402
- *         Allowed values are in the range [0.1,0.9]. The default is 0.5.
- *         """
- *         cdef PetscReal val = keep             # <<<<<<<<<<<<<<
- *         CHKERR( EPSKrylovSchurSetRestart(self.eps, val) )
- * 
- */
-  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_keep); if (unlikely((__pyx_t_1 == (PetscReal)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_val = __pyx_t_1;
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setBV", 0);
 
-  /* "SLEPc/EPS.pyx":1403
+  /* "SLEPc/EPS.pyx":893
+ *             The basis vectors context.
  *         """
- *         cdef PetscReal val = keep
- *         CHKERR( EPSKrylovSchurSetRestart(self.eps, val) )             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSSetBV(self.eps, bv.bv) )             # <<<<<<<<<<<<<<
  * 
- *     def getKrylovSchurRestart(self):
+ *     def getDS(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurSetRestart(__pyx_v_self->eps, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetBV(__pyx_v_self->eps, __pyx_v_bv->bv)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 893, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":1387
- *     #
+  /* "SLEPc/EPS.pyx":884
+ *         return bv
  * 
- *     def setKrylovSchurRestart(self, keep):             # <<<<<<<<<<<<<<
+ *     def setBV(self, BV bv not None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the restart parameter for the Krylov-Schur method, in
+ *         Associates a basis vectors object to the eigensolver.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setKrylovSchurRestart", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -24828,114 +25811,119 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_128setKrylovSchurRestart(struct
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1405
- *         CHKERR( EPSKrylovSchurSetRestart(self.eps, val) )
+/* "SLEPc/EPS.pyx":895
+ *         CHKERR( EPSSetBV(self.eps, bv.bv) )
  * 
- *     def getKrylovSchurRestart(self):             # <<<<<<<<<<<<<<
+ *     def getDS(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the restart parameter used in the Krylov-Schur method.
+ *         Obtain the direct solver associated to the eigensolver.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_131getKrylovSchurRestart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_130getKrylovSchurRestart[] = "EPS.getKrylovSchurRestart(self)\n\n        Gets the restart parameter used in the Krylov-Schur method.\n\n        Returns\n        -------\n        keep: float\n              The number of vectors to be kept at restart.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_131getKrylovSchurRestart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_81getDS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_80getDS[] = "EPS.getDS(self)\n\n        Obtain the direct solver associated to the eigensolver.\n\n        Returns\n        -------\n        ds: DS\n            The direct solver context.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_81getDS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getKrylovSchurRestart (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getDS (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getKrylovSchurRestart", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getKrylovSchurRestart", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_130getKrylovSchurRestart(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getDS", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDS", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_80getDS(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_130getKrylovSchurRestart(struct PySlepcEPSObject *__pyx_v_self) {
-  PetscReal __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_80getDS(struct PySlepcEPSObject *__pyx_v_self) {
+  struct PySlepcDSObject *__pyx_v_ds = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getKrylovSchurRestart", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getDS", 0);
 
-  /* "SLEPc/EPS.pyx":1414
- *               The number of vectors to be kept at restart.
+  /* "SLEPc/EPS.pyx":904
+ *             The direct solver context.
  *         """
- *         cdef PetscReal val = 0             # <<<<<<<<<<<<<<
- *         CHKERR( EPSKrylovSchurGetRestart(self.eps, &val) )
- *         return val
+ *         cdef DS ds = DS()             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetDS(self.eps, &ds.ds) )
+ *         PetscINCREF(ds.obj)
  */
-  __pyx_v_val = 0.0;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_DS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 904, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_ds = ((struct PySlepcDSObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/EPS.pyx":1415
+  /* "SLEPc/EPS.pyx":905
  *         """
- *         cdef PetscReal val = 0
- *         CHKERR( EPSKrylovSchurGetRestart(self.eps, &val) )             # <<<<<<<<<<<<<<
- *         return val
- * 
+ *         cdef DS ds = DS()
+ *         CHKERR( EPSGetDS(self.eps, &ds.ds) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(ds.obj)
+ *         return ds
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurGetRestart(__pyx_v_self->eps, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetDS(__pyx_v_self->eps, (&__pyx_v_ds->ds))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 905, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":1416
- *         cdef PetscReal val = 0
- *         CHKERR( EPSKrylovSchurGetRestart(self.eps, &val) )
- *         return val             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":906
+ *         cdef DS ds = DS()
+ *         CHKERR( EPSGetDS(self.eps, &ds.ds) )
+ *         PetscINCREF(ds.obj)             # <<<<<<<<<<<<<<
+ *         return ds
  * 
- *     def setKrylovSchurLocking(self, lock):
+ */
+  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_ds->__pyx_base.obj);
+
+  /* "SLEPc/EPS.pyx":907
+ *         CHKERR( EPSGetDS(self.eps, &ds.ds) )
+ *         PetscINCREF(ds.obj)
+ *         return ds             # <<<<<<<<<<<<<<
+ * 
+ *     def setDS(self, DS ds not None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __Pyx_INCREF(((PyObject *)__pyx_v_ds));
+  __pyx_r = ((PyObject *)__pyx_v_ds);
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":1405
- *         CHKERR( EPSKrylovSchurSetRestart(self.eps, val) )
+  /* "SLEPc/EPS.pyx":895
+ *         CHKERR( EPSSetBV(self.eps, bv.bv) )
  * 
- *     def getKrylovSchurRestart(self):             # <<<<<<<<<<<<<<
+ *     def getDS(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the restart parameter used in the Krylov-Schur method.
+ *         Obtain the direct solver associated to the eigensolver.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getKrylovSchurRestart", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getDS", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_ds);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1418
- *         return val
+/* "SLEPc/EPS.pyx":909
+ *         return ds
  * 
- *     def setKrylovSchurLocking(self, lock):             # <<<<<<<<<<<<<<
+ *     def setDS(self, DS ds not None):             # <<<<<<<<<<<<<<
  *         """
- *         Choose between locking and non-locking variants of the
+ *         Associates a direct solver object to the eigensolver.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_133setKrylovSchurLocking(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_132setKrylovSchurLocking[] = "EPS.setKrylovSchurLocking(self, lock)\n\n        Choose between locking and non-locking variants of the\n        Krylov-Schur method.\n\n        Parameters\n        ----------\n        lock: bool\n              True if the locking variant must be selected.\n\n        Notes\n        -----\n        The default is to lock converged eigenpairs when the method restarts.\n        This behaviour can be changed so that all [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_133setKrylovSchurLocking(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_lock = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_83setDS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_82setDS[] = "EPS.setDS(self, DS ds)\n\n        Associates a direct solver object to the eigensolver.\n\n        Parameters\n        ----------\n        ds: DS\n            The direct solver context.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_83setDS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PySlepcDSObject *__pyx_v_ds = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setKrylovSchurLocking (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setDS (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_lock,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ds,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -24948,77 +25936,67 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_133setKrylovSchurLocking(PyObjec
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_lock)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ds)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setKrylovSchurLocking") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1418; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDS") < 0)) __PYX_ERR(13, 909, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_lock = values[0];
+    __pyx_v_ds = ((struct PySlepcDSObject *)values[0]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setKrylovSchurLocking", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1418; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setDS", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 909, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setKrylovSchurLocking", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setDS", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_132setKrylovSchurLocking(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_lock);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ds), __pyx_ptype_8slepc4py_5SLEPc_DS, 0, "ds", 0))) __PYX_ERR(13, 909, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_82setDS(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_ds);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_132setKrylovSchurLocking(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_lock) {
-  PetscBool __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_82setDS(struct PySlepcEPSObject *__pyx_v_self, struct PySlepcDSObject *__pyx_v_ds) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscBool __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setKrylovSchurLocking", 0);
-
-  /* "SLEPc/EPS.pyx":1435
- *         non-locking variant).
- *         """
- *         cdef PetscBool val = lock             # <<<<<<<<<<<<<<
- *         CHKERR( EPSKrylovSchurSetLocking(self.eps, val) )
- * 
- */
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_lock)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_val = __pyx_t_1;
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setDS", 0);
 
-  /* "SLEPc/EPS.pyx":1436
+  /* "SLEPc/EPS.pyx":918
+ *             The direct solver context.
  *         """
- *         cdef PetscBool val = lock
- *         CHKERR( EPSKrylovSchurSetLocking(self.eps, val) )             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSSetDS(self.eps, ds.ds) )             # <<<<<<<<<<<<<<
  * 
- *     def getKrylovSchurLocking(self):
+ *     def getRG(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurSetLocking(__pyx_v_self->eps, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetDS(__pyx_v_self->eps, __pyx_v_ds->ds)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 918, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":1418
- *         return val
+  /* "SLEPc/EPS.pyx":909
+ *         return ds
  * 
- *     def setKrylovSchurLocking(self, lock):             # <<<<<<<<<<<<<<
+ *     def setDS(self, DS ds not None):             # <<<<<<<<<<<<<<
  *         """
- *         Choose between locking and non-locking variants of the
+ *         Associates a direct solver object to the eigensolver.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setKrylovSchurLocking", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setDS", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -25026,114 +26004,119 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_132setKrylovSchurLocking(struct
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1438
- *         CHKERR( EPSKrylovSchurSetLocking(self.eps, val) )
+/* "SLEPc/EPS.pyx":920
+ *         CHKERR( EPSSetDS(self.eps, ds.ds) )
  * 
- *     def getKrylovSchurLocking(self):             # <<<<<<<<<<<<<<
+ *     def getRG(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the locking flag used in the Krylov-Schur method.
+ *         Obtain the region object associated to the eigensolver.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_135getKrylovSchurLocking(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_134getKrylovSchurLocking[] = "EPS.getKrylovSchurLocking(self)\n\n        Gets the locking flag used in the Krylov-Schur method.\n\n        Returns\n        -------\n        lock: bool\n              The locking flag.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_135getKrylovSchurLocking(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_85getRG(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_84getRG[] = "EPS.getRG(self)\n\n        Obtain the region object associated to the eigensolver.\n\n        Returns\n        -------\n        rg: RG\n            The region context.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_85getRG(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getKrylovSchurLocking (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getRG (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getKrylovSchurLocking", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getKrylovSchurLocking", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_134getKrylovSchurLocking(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getRG", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getRG", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_84getRG(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_134getKrylovSchurLocking(struct PySlepcEPSObject *__pyx_v_self) {
-  PetscBool __pyx_v_tval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_84getRG(struct PySlepcEPSObject *__pyx_v_self) {
+  struct PySlepcRGObject *__pyx_v_rg = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getKrylovSchurLocking", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getRG", 0);
 
-  /* "SLEPc/EPS.pyx":1447
- *               The locking flag.
+  /* "SLEPc/EPS.pyx":929
+ *             The region context.
  *         """
- *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( EPSKrylovSchurGetLocking(self.eps, &tval) )
- *         return <bint> tval
+ *         cdef RG rg = RG()             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetRG(self.eps, &rg.rg) )
+ *         PetscINCREF(rg.obj)
  */
-  __pyx_v_tval = PETSC_FALSE;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_RG), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 929, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_rg = ((struct PySlepcRGObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/EPS.pyx":1448
+  /* "SLEPc/EPS.pyx":930
  *         """
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( EPSKrylovSchurGetLocking(self.eps, &tval) )             # <<<<<<<<<<<<<<
- *         return <bint> tval
+ *         cdef RG rg = RG()
+ *         CHKERR( EPSGetRG(self.eps, &rg.rg) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(rg.obj)
+ *         return rg
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetRG(__pyx_v_self->eps, (&__pyx_v_rg->rg))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 930, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":931
+ *         cdef RG rg = RG()
+ *         CHKERR( EPSGetRG(self.eps, &rg.rg) )
+ *         PetscINCREF(rg.obj)             # <<<<<<<<<<<<<<
+ *         return rg
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurGetLocking(__pyx_v_self->eps, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_rg->__pyx_base.obj);
 
-  /* "SLEPc/EPS.pyx":1449
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( EPSKrylovSchurGetLocking(self.eps, &tval) )
- *         return <bint> tval             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":932
+ *         CHKERR( EPSGetRG(self.eps, &rg.rg) )
+ *         PetscINCREF(rg.obj)
+ *         return rg             # <<<<<<<<<<<<<<
  * 
- *     def setKrylovSchurPartitions(self, npart):
+ *     def setRG(self, RG rg not None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_tval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __Pyx_INCREF(((PyObject *)__pyx_v_rg));
+  __pyx_r = ((PyObject *)__pyx_v_rg);
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":1438
- *         CHKERR( EPSKrylovSchurSetLocking(self.eps, val) )
+  /* "SLEPc/EPS.pyx":920
+ *         CHKERR( EPSSetDS(self.eps, ds.ds) )
  * 
- *     def getKrylovSchurLocking(self):             # <<<<<<<<<<<<<<
+ *     def getRG(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the locking flag used in the Krylov-Schur method.
+ *         Obtain the region object associated to the eigensolver.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getKrylovSchurLocking", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getRG", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_rg);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1451
- *         return <bint> tval
+/* "SLEPc/EPS.pyx":934
+ *         return rg
  * 
- *     def setKrylovSchurPartitions(self, npart):             # <<<<<<<<<<<<<<
+ *     def setRG(self, RG rg not None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the number of partitions for the case of doing spectrum
+ *         Associates a region object to the eigensolver.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_137setKrylovSchurPartitions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_136setKrylovSchurPartitions[] = "EPS.setKrylovSchurPartitions(self, npart)\n\n        Sets the number of partitions for the case of doing spectrum\n        slicing for a computational interval with the communicator split\n        in several sub-communicators.\n\n        Parameters\n        ----------\n        npart: int\n              The number of partitions.\n\n        Notes\n        -----\n        By default, npart=1 so all processes in the  [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_137setKrylovSchurPartitions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_npart = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_87setRG(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_86setRG[] = "EPS.setRG(self, RG rg)\n\n        Associates a region object to the eigensolver.\n\n        Parameters\n        ----------\n        rg: RG\n            The region context.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_87setRG(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PySlepcRGObject *__pyx_v_rg = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setKrylovSchurPartitions (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setRG (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_npart,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rg,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -25146,77 +26129,67 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_137setKrylovSchurPartitions(PyOb
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_npart)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rg)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setKrylovSchurPartitions") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1451; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRG") < 0)) __PYX_ERR(13, 934, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_npart = values[0];
+    __pyx_v_rg = ((struct PySlepcRGObject *)values[0]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setKrylovSchurPartitions", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1451; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setRG", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 934, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setKrylovSchurPartitions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setRG", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_136setKrylovSchurPartitions(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_npart);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rg), __pyx_ptype_8slepc4py_5SLEPc_RG, 0, "rg", 0))) __PYX_ERR(13, 934, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_86setRG(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_rg);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_136setKrylovSchurPartitions(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_npart) {
-  PetscInt __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_86setRG(struct PySlepcEPSObject *__pyx_v_self, struct PySlepcRGObject *__pyx_v_rg) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscInt __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setKrylovSchurPartitions", 0);
-
-  /* "SLEPc/EPS.pyx":1469
- *         subset of processes.
- *         """
- *         cdef PetscInt val = npart             # <<<<<<<<<<<<<<
- *         CHKERR( EPSKrylovSchurSetPartitions(self.eps, val) )
- * 
- */
-  __pyx_t_1 = __Pyx_PyInt_As_PetscInt(__pyx_v_npart); if (unlikely((__pyx_t_1 == (PetscInt)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_val = __pyx_t_1;
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setRG", 0);
 
-  /* "SLEPc/EPS.pyx":1470
+  /* "SLEPc/EPS.pyx":943
+ *             The region context.
  *         """
- *         cdef PetscInt val = npart
- *         CHKERR( EPSKrylovSchurSetPartitions(self.eps, val) )             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSSetRG(self.eps, rg.rg) )             # <<<<<<<<<<<<<<
  * 
- *     def getKrylovSchurPartitions(self):
+ *     def getOperators(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurSetPartitions(__pyx_v_self->eps, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetRG(__pyx_v_self->eps, __pyx_v_rg->rg)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 943, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":1451
- *         return <bint> tval
+  /* "SLEPc/EPS.pyx":934
+ *         return rg
  * 
- *     def setKrylovSchurPartitions(self, npart):             # <<<<<<<<<<<<<<
+ *     def setRG(self, RG rg not None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the number of partitions for the case of doing spectrum
+ *         Associates a region object to the eigensolver.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setKrylovSchurPartitions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setRG", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -25224,119 +26197,158 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_136setKrylovSchurPartitions(stru
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1472
- *         CHKERR( EPSKrylovSchurSetPartitions(self.eps, val) )
+/* "SLEPc/EPS.pyx":945
+ *         CHKERR( EPSSetRG(self.eps, rg.rg) )
  * 
- *     def getKrylovSchurPartitions(self):             # <<<<<<<<<<<<<<
+ *     def getOperators(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the number of partitions of the communicator in case of
+ *         Gets the matrices associated with the eigenvalue problem.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_139getKrylovSchurPartitions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_138getKrylovSchurPartitions[] = "EPS.getKrylovSchurPartitions(self)\n\n        Gets the number of partitions of the communicator in case of\n        spectrum slicing.\n\n        Returns\n        -------\n        npart: int\n              The number of partitions.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_139getKrylovSchurPartitions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_89getOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_88getOperators[] = "EPS.getOperators(self)\n\n        Gets the matrices associated with the eigenvalue problem.\n\n        Returns\n        -------\n        A: Mat\n           The matrix associated with the eigensystem.\n        B: Mat\n           The second matrix in the case of generalized eigenproblems.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_89getOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getKrylovSchurPartitions (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getOperators (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getKrylovSchurPartitions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getKrylovSchurPartitions", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_138getKrylovSchurPartitions(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getOperators", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getOperators", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_88getOperators(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_138getKrylovSchurPartitions(struct PySlepcEPSObject *__pyx_v_self) {
-  PetscInt __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_88getOperators(struct PySlepcEPSObject *__pyx_v_self) {
+  struct PyPetscMatObject *__pyx_v_A = 0;
+  struct PyPetscMatObject *__pyx_v_B = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getKrylovSchurPartitions", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getOperators", 0);
 
-  /* "SLEPc/EPS.pyx":1482
- *               The number of partitions.
+  /* "SLEPc/EPS.pyx":956
+ *            The second matrix in the case of generalized eigenproblems.
  *         """
- *         cdef PetscInt val = 0             # <<<<<<<<<<<<<<
- *         CHKERR( EPSKrylovSchurGetPartitions(self.eps, &val) )
- *         return val
+ *         cdef Mat A = Mat()             # <<<<<<<<<<<<<<
+ *         cdef Mat B = Mat()
+ *         CHKERR( EPSGetOperators(self.eps, &A.mat, &B.mat) )
  */
-  __pyx_v_val = 0;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 956, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_A = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/EPS.pyx":1483
+  /* "SLEPc/EPS.pyx":957
  *         """
- *         cdef PetscInt val = 0
- *         CHKERR( EPSKrylovSchurGetPartitions(self.eps, &val) )             # <<<<<<<<<<<<<<
- *         return val
+ *         cdef Mat A = Mat()
+ *         cdef Mat B = Mat()             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetOperators(self.eps, &A.mat, &B.mat) )
+ *         PetscINCREF(A.obj)
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 957, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_B = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "SLEPc/EPS.pyx":958
+ *         cdef Mat A = Mat()
+ *         cdef Mat B = Mat()
+ *         CHKERR( EPSGetOperators(self.eps, &A.mat, &B.mat) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(A.obj)
+ *         PetscINCREF(B.obj)
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetOperators(__pyx_v_self->eps, (&__pyx_v_A->mat), (&__pyx_v_B->mat))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 958, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":959
+ *         cdef Mat B = Mat()
+ *         CHKERR( EPSGetOperators(self.eps, &A.mat, &B.mat) )
+ *         PetscINCREF(A.obj)             # <<<<<<<<<<<<<<
+ *         PetscINCREF(B.obj)
+ *         return (A, B)
+ */
+  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_A->__pyx_base.obj);
+
+  /* "SLEPc/EPS.pyx":960
+ *         CHKERR( EPSGetOperators(self.eps, &A.mat, &B.mat) )
+ *         PetscINCREF(A.obj)
+ *         PetscINCREF(B.obj)             # <<<<<<<<<<<<<<
+ *         return (A, B)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurGetPartitions(__pyx_v_self->eps, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1483; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_B->__pyx_base.obj);
 
-  /* "SLEPc/EPS.pyx":1484
- *         cdef PetscInt val = 0
- *         CHKERR( EPSKrylovSchurGetPartitions(self.eps, &val) )
- *         return val             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":961
+ *         PetscINCREF(A.obj)
+ *         PetscINCREF(B.obj)
+ *         return (A, B)             # <<<<<<<<<<<<<<
  * 
- *     def setKrylovSchurDetectZeros(self, detect):
+ *     def setOperators(self, Mat A not None, Mat B=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscInt(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 961, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_INCREF(((PyObject *)__pyx_v_A));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_A));
+  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_A));
+  __Pyx_INCREF(((PyObject *)__pyx_v_B));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_B));
+  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_B));
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":1472
- *         CHKERR( EPSKrylovSchurSetPartitions(self.eps, val) )
+  /* "SLEPc/EPS.pyx":945
+ *         CHKERR( EPSSetRG(self.eps, rg.rg) )
  * 
- *     def getKrylovSchurPartitions(self):             # <<<<<<<<<<<<<<
+ *     def getOperators(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the number of partitions of the communicator in case of
+ *         Gets the matrices associated with the eigenvalue problem.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getKrylovSchurPartitions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getOperators", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_A);
+  __Pyx_XDECREF((PyObject *)__pyx_v_B);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1486
- *         return val
+/* "SLEPc/EPS.pyx":963
+ *         return (A, B)
  * 
- *     def setKrylovSchurDetectZeros(self, detect):             # <<<<<<<<<<<<<<
+ *     def setOperators(self, Mat A not None, Mat B=None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets a flag to enforce detection of zeros during the factorizations
+ *         Sets the matrices associated with the eigenvalue problem.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_141setKrylovSchurDetectZeros(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_140setKrylovSchurDetectZeros[] = "EPS.setKrylovSchurDetectZeros(self, detect)\n\n        Sets a flag to enforce detection of zeros during the factorizations\n        throughout the spectrum slicing computation.\n\n        Parameters\n        ----------\n        detect: bool\n              True if zeros must checked for.\n\n        Notes\n        -----\n        A zero in the factorization indicates that a shift coincides with\n        an eigenva [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_141setKrylovSchurDetectZeros(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_detect = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_91setOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_90setOperators[] = "EPS.setOperators(self, Mat A, Mat B=None)\n\n        Sets the matrices associated with the eigenvalue problem.\n\n        Parameters\n        ----------\n        A: Mat\n           The matrix associated with the eigensystem.\n        B: Mat, optional\n           The second matrix in the case of generalized eigenproblems;\n           if not provided, a standard eigenproblem is assumed.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_91setOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscMatObject *__pyx_v_A = 0;
+  struct PyPetscMatObject *__pyx_v_B = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setKrylovSchurDetectZeros (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setOperators (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_detect,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_A,&__pyx_n_s_B,0};
+    PyObject* values[2] = {0,0};
+    values[1] = (PyObject *)((struct PyPetscMatObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -25344,164 +26356,104 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_141setKrylovSchurDetectZeros(PyO
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_detect)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_B);
+          if (value) { values[1] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setKrylovSchurDetectZeros") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1486; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOperators") < 0)) __PYX_ERR(13, 963, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
     } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
     }
-    __pyx_v_detect = values[0];
+    __pyx_v_A = ((struct PyPetscMatObject *)values[0]);
+    __pyx_v_B = ((struct PyPetscMatObject *)values[1]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setKrylovSchurDetectZeros", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1486; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setOperators", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 963, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setKrylovSchurDetectZeros", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setOperators", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_140setKrylovSchurDetectZeros(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_detect);
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_140setKrylovSchurDetectZeros(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_detect) {
-  PetscBool __pyx_v_val;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PetscBool __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setKrylovSchurDetectZeros", 0);
-
-  /* "SLEPc/EPS.pyx":1506
- *         detection, e.g. MUMPS.
- *         """
- *         cdef PetscBool val = detect             # <<<<<<<<<<<<<<
- *         CHKERR( EPSKrylovSchurSetDetectZeros(self.eps, val) )
- * 
- */
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_detect)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_val = __pyx_t_1;
-
-  /* "SLEPc/EPS.pyx":1507
- *         """
- *         cdef PetscBool val = detect
- *         CHKERR( EPSKrylovSchurSetDetectZeros(self.eps, val) )             # <<<<<<<<<<<<<<
- * 
- *     def getKrylovSchurDetectZeros(self):
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurSetDetectZeros(__pyx_v_self->eps, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/EPS.pyx":1486
- *         return val
- * 
- *     def setKrylovSchurDetectZeros(self, detect):             # <<<<<<<<<<<<<<
- *         """
- *         Sets a flag to enforce detection of zeros during the factorizations
- */
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_A), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "A", 0))) __PYX_ERR(13, 963, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_B), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "B", 0))) __PYX_ERR(13, 963, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_90setOperators(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_A, __pyx_v_B);
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setKrylovSchurDetectZeros", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "SLEPc/EPS.pyx":1509
- *         CHKERR( EPSKrylovSchurSetDetectZeros(self.eps, val) )
- * 
- *     def getKrylovSchurDetectZeros(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the flag that enforces zero detection in spectrum slicing.
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_143getKrylovSchurDetectZeros(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_142getKrylovSchurDetectZeros[] = "EPS.getKrylovSchurDetectZeros(self)\n\n        Gets the flag that enforces zero detection in spectrum slicing.\n\n        Returns\n        -------\n        detect: bool\n              The zero detection flag.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_143getKrylovSchurDetectZeros(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getKrylovSchurDetectZeros (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getKrylovSchurDetectZeros", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getKrylovSchurDetectZeros", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_142getKrylovSchurDetectZeros(((struct PySlepcEPSObject *)__pyx_v_self));
-
-  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_142getKrylovSchurDetectZeros(struct PySlepcEPSObject *__pyx_v_self) {
-  PetscBool __pyx_v_tval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_90setOperators(struct PySlepcEPSObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A, struct PyPetscMatObject *__pyx_v_B) {
+  Mat __pyx_v_Bmat;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getKrylovSchurDetectZeros", 0);
+  int __pyx_t_2;
+  Mat __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("setOperators", 0);
 
-  /* "SLEPc/EPS.pyx":1518
- *               The zero detection flag.
+  /* "SLEPc/EPS.pyx":975
+ *            if not provided, a standard eigenproblem is assumed.
  *         """
- *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( EPSKrylovSchurGetDetectZeros(self.eps, &tval) )
- *         return <bint> tval
+ *         cdef PetscMat Bmat = NULL             # <<<<<<<<<<<<<<
+ *         if B is not None: Bmat = B.mat
+ *         CHKERR( EPSSetOperators(self.eps, A.mat, Bmat) )
  */
-  __pyx_v_tval = PETSC_FALSE;
+  __pyx_v_Bmat = NULL;
 
-  /* "SLEPc/EPS.pyx":1519
+  /* "SLEPc/EPS.pyx":976
  *         """
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( EPSKrylovSchurGetDetectZeros(self.eps, &tval) )             # <<<<<<<<<<<<<<
- *         return <bint> tval
+ *         cdef PetscMat Bmat = NULL
+ *         if B is not None: Bmat = B.mat             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSSetOperators(self.eps, A.mat, Bmat) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurGetDetectZeros(__pyx_v_self->eps, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (((PyObject *)__pyx_v_B) != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_v_B->mat;
+    __pyx_v_Bmat = __pyx_t_3;
+  }
 
-  /* "SLEPc/EPS.pyx":1520
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( EPSKrylovSchurGetDetectZeros(self.eps, &tval) )
- *         return <bint> tval             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":977
+ *         cdef PetscMat Bmat = NULL
+ *         if B is not None: Bmat = B.mat
+ *         CHKERR( EPSSetOperators(self.eps, A.mat, Bmat) )             # <<<<<<<<<<<<<<
  * 
- *     def setKrylovSchurDimensions(self, nev=None, ncv=None, mpd=None):
+ *     def setDeflationSpace(self, space):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_tval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetOperators(__pyx_v_self->eps, __pyx_v_A->mat, __pyx_v_Bmat)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(13, 977, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":1509
- *         CHKERR( EPSKrylovSchurSetDetectZeros(self.eps, val) )
+  /* "SLEPc/EPS.pyx":963
+ *         return (A, B)
  * 
- *     def getKrylovSchurDetectZeros(self):             # <<<<<<<<<<<<<<
+ *     def setOperators(self, Mat A not None, Mat B=None):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the flag that enforces zero detection in spectrum slicing.
+ *         Sets the matrices associated with the eigenvalue problem.
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getKrylovSchurDetectZeros", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setOperators", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -25509,39 +26461,29 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_142getKrylovSchurDetectZeros(str
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1522
- *         return <bint> tval
+/* "SLEPc/EPS.pyx":979
+ *         CHKERR( EPSSetOperators(self.eps, A.mat, Bmat) )
  * 
- *     def setKrylovSchurDimensions(self, nev=None, ncv=None, mpd=None):             # <<<<<<<<<<<<<<
+ *     def setDeflationSpace(self, space):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the dimensions used for each subsolve step in case of doing
+ *         Add vectors to the basis of the deflation space.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_145setKrylovSchurDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_144setKrylovSchurDimensions[] = "EPS.setKrylovSchurDimensions(self, nev=None, ncv=None, mpd=None)\n\n        Sets the dimensions used for each subsolve step in case of doing\n        spectrum slicing for a computational interval. The meaning of the\n        parameters is the same as in `setDimensions()`.\n\n        Parameters\n        ----------\n        nev: int, optional\n             Number of eigenvalues to compute.\n        ncv: int, optio [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_145setKrylovSchurDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_nev = 0;
-  PyObject *__pyx_v_ncv = 0;
-  PyObject *__pyx_v_mpd = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_93setDeflationSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_92setDeflationSpace[] = "EPS.setDeflationSpace(self, space)\n\n        Add vectors to the basis of the deflation space.\n\n        Parameters\n        ----------\n        space: a Vec or an array of Vec\n               Set of basis vectors to be added to the deflation\n               space.\n\n        Notes\n        -----\n        When a deflation space is given, the eigensolver seeks the\n        eigensolution in the restriction of the problem [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_93setDeflationSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_space = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setKrylovSchurDimensions (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setDeflationSpace (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nev,&__pyx_n_s_ncv,&__pyx_n_s_mpd,0};
-    PyObject* values[3] = {0,0,0};
-    values[0] = ((PyObject *)Py_None);
-    values[1] = ((PyObject *)Py_None);
-    values[2] = ((PyObject *)Py_None);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_space,0};
+    PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -25549,586 +26491,441 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_145setKrylovSchurDimensions(PyOb
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nev);
-          if (value) { values[0] = value; kw_args--; }
-        }
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ncv);
-          if (value) { values[1] = value; kw_args--; }
-        }
-        case  2:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mpd);
-          if (value) { values[2] = value; kw_args--; }
-        }
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_space)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setKrylovSchurDimensions") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1522; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDeflationSpace") < 0)) __PYX_ERR(13, 979, __pyx_L3_error)
       }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
     } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_nev = values[0];
-    __pyx_v_ncv = values[1];
-    __pyx_v_mpd = values[2];
+    __pyx_v_space = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setKrylovSchurDimensions", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1522; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setDeflationSpace", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 979, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setKrylovSchurDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setDeflationSpace", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_144setKrylovSchurDimensions(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_nev, __pyx_v_ncv, __pyx_v_mpd);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_92setDeflationSpace(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_space);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_144setKrylovSchurDimensions(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_nev, PyObject *__pyx_v_ncv, PyObject *__pyx_v_mpd) {
-  PetscInt __pyx_v_ival1;
-  PetscInt __pyx_v_ival2;
-  PetscInt __pyx_v_ival3;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_92setDeflationSpace(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_space) {
+  Vec *__pyx_v_vs;
+  Py_ssize_t __pyx_v_i;
+  Py_ssize_t __pyx_v_ns;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
-  PetscInt __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setKrylovSchurDimensions", 0);
+  PyObject *__pyx_t_3 = NULL;
+  Py_ssize_t __pyx_t_4;
+  Py_ssize_t __pyx_t_5;
+  Vec __pyx_t_6;
+  int __pyx_t_7;
+  __Pyx_RefNannySetupContext("setDeflationSpace", 0);
+  __Pyx_INCREF(__pyx_v_space);
 
-  /* "SLEPc/EPS.pyx":1537
- *              Maximum dimension allowed for the projected problem.
+  /* "SLEPc/EPS.pyx":1003
+ *         so the deflation space should be set every time.
  *         """
- *         cdef PetscInt ival1 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival2 = PETSC_DEFAULT
- *         cdef PetscInt ival3 = PETSC_DEFAULT
+ *         if isinstance(space, Vec): space = [space]             # <<<<<<<<<<<<<<
+ *         cdef PetscVec* vs = NULL
+ *         cdef Py_ssize_t i = 0, ns = len(space)
  */
-  __pyx_v_ival1 = PETSC_DEFAULT;
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_space, __pyx_ptype_8petsc4py_5PETSc_Vec); 
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 1003, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_v_space);
+    __Pyx_GIVEREF(__pyx_v_space);
+    PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_space);
+    __Pyx_DECREF_SET(__pyx_v_space, __pyx_t_3);
+    __pyx_t_3 = 0;
+  }
 
-  /* "SLEPc/EPS.pyx":1538
+  /* "SLEPc/EPS.pyx":1004
  *         """
- *         cdef PetscInt ival1 = PETSC_DEFAULT
- *         cdef PetscInt ival2 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival3 = PETSC_DEFAULT
- *         if nev is not None: ival1 = asInt(nev)
- */
-  __pyx_v_ival2 = PETSC_DEFAULT;
-
-  /* "SLEPc/EPS.pyx":1539
- *         cdef PetscInt ival1 = PETSC_DEFAULT
- *         cdef PetscInt ival2 = PETSC_DEFAULT
- *         cdef PetscInt ival3 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         if nev is not None: ival1 = asInt(nev)
- *         if ncv is not None: ival2 = asInt(ncv)
+ *         if isinstance(space, Vec): space = [space]
+ *         cdef PetscVec* vs = NULL             # <<<<<<<<<<<<<<
+ *         cdef Py_ssize_t i = 0, ns = len(space)
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
  */
-  __pyx_v_ival3 = PETSC_DEFAULT;
+  __pyx_v_vs = NULL;
 
-  /* "SLEPc/EPS.pyx":1540
- *         cdef PetscInt ival2 = PETSC_DEFAULT
- *         cdef PetscInt ival3 = PETSC_DEFAULT
- *         if nev is not None: ival1 = asInt(nev)             # <<<<<<<<<<<<<<
- *         if ncv is not None: ival2 = asInt(ncv)
- *         if mpd is not None: ival3 = asInt(mpd)
+  /* "SLEPc/EPS.pyx":1005
+ *         if isinstance(space, Vec): space = [space]
+ *         cdef PetscVec* vs = NULL
+ *         cdef Py_ssize_t i = 0, ns = len(space)             # <<<<<<<<<<<<<<
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
+ *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
  */
-  __pyx_t_1 = (__pyx_v_nev != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_nev); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival1 = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+  __pyx_v_i = 0;
+  __pyx_t_4 = PyObject_Length(__pyx_v_space); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(13, 1005, __pyx_L1_error)
+  __pyx_v_ns = __pyx_t_4;
 
-  /* "SLEPc/EPS.pyx":1541
- *         cdef PetscInt ival3 = PETSC_DEFAULT
- *         if nev is not None: ival1 = asInt(nev)
- *         if ncv is not None: ival2 = asInt(ncv)             # <<<<<<<<<<<<<<
- *         if mpd is not None: ival3 = asInt(mpd)
- *         CHKERR( EPSKrylovSchurSetDimensions(self.eps, ival1, ival2, ival3) )
+  /* "SLEPc/EPS.pyx":1006
+ *         cdef PetscVec* vs = NULL
+ *         cdef Py_ssize_t i = 0, ns = len(space)
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)             # <<<<<<<<<<<<<<
+ *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
+ *         CHKERR( EPSSetDeflationSpace(self.eps, <PetscInt>ns, vs) )
  */
-  __pyx_t_2 = (__pyx_v_ncv != Py_None);
-  __pyx_t_1 = (__pyx_t_2 != 0);
-  if (__pyx_t_1) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_ncv); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival2 = __pyx_t_3;
-    goto __pyx_L4;
-  }
-  __pyx_L4:;
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_allocate((((size_t)__pyx_v_ns) * (sizeof(struct PyPetscVecObject))), ((void **)(&__pyx_v_vs))); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 1006, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_v_tmp = __pyx_t_3;
+  __pyx_t_3 = 0;
 
-  /* "SLEPc/EPS.pyx":1542
- *         if nev is not None: ival1 = asInt(nev)
- *         if ncv is not None: ival2 = asInt(ncv)
- *         if mpd is not None: ival3 = asInt(mpd)             # <<<<<<<<<<<<<<
- *         CHKERR( EPSKrylovSchurSetDimensions(self.eps, ival1, ival2, ival3) )
+  /* "SLEPc/EPS.pyx":1007
+ *         cdef Py_ssize_t i = 0, ns = len(space)
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
+ *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSSetDeflationSpace(self.eps, <PetscInt>ns, vs) )
  * 
  */
-  __pyx_t_1 = (__pyx_v_mpd != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_mpd); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival3 = __pyx_t_3;
-    goto __pyx_L5;
+  __pyx_t_4 = __pyx_v_ns;
+  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
+    __pyx_v_i = __pyx_t_5;
+    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_space, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 1007, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(13, 1007, __pyx_L1_error)
+    __pyx_t_6 = ((struct PyPetscVecObject *)__pyx_t_3)->vec;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    (__pyx_v_vs[__pyx_v_i]) = __pyx_t_6;
   }
-  __pyx_L5:;
 
-  /* "SLEPc/EPS.pyx":1543
- *         if ncv is not None: ival2 = asInt(ncv)
- *         if mpd is not None: ival3 = asInt(mpd)
- *         CHKERR( EPSKrylovSchurSetDimensions(self.eps, ival1, ival2, ival3) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1008
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
+ *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
+ *         CHKERR( EPSSetDeflationSpace(self.eps, <PetscInt>ns, vs) )             # <<<<<<<<<<<<<<
  * 
- *     def getKrylovSchurDimensions(self):
+ *     #
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurSetDimensions(__pyx_v_self->eps, __pyx_v_ival1, __pyx_v_ival2, __pyx_v_ival3)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetDeflationSpace(__pyx_v_self->eps, ((PetscInt)__pyx_v_ns), __pyx_v_vs)); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(13, 1008, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":1522
- *         return <bint> tval
+  /* "SLEPc/EPS.pyx":979
+ *         CHKERR( EPSSetOperators(self.eps, A.mat, Bmat) )
  * 
- *     def setKrylovSchurDimensions(self, nev=None, ncv=None, mpd=None):             # <<<<<<<<<<<<<<
+ *     def setDeflationSpace(self, space):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the dimensions used for each subsolve step in case of doing
+ *         Add vectors to the basis of the deflation space.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setKrylovSchurDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setDeflationSpace", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_tmp);
+  __Pyx_XDECREF(__pyx_v_space);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1545
- *         CHKERR( EPSKrylovSchurSetDimensions(self.eps, ival1, ival2, ival3) )
+/* "SLEPc/EPS.pyx":1012
+ *     #
  * 
- *     def getKrylovSchurDimensions(self):             # <<<<<<<<<<<<<<
+ *     def setInitialSpace(self, space):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the dimensions used for each subsolve step in case of doing
+ *         Sets the initial space from which the eigensolver starts to
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_147getKrylovSchurDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_146getKrylovSchurDimensions[] = "EPS.getKrylovSchurDimensions(self)\n\n        Gets the dimensions used for each subsolve step in case of doing\n        spectrum slicing for a computational interval.\n\n        Returns\n        -------\n        nev: int\n             Number of eigenvalues to compute.\n        ncv: int\n             Maximum dimension of the subspace to be used by the solver.\n        mpd: int\n             Maximum dimension allo [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_147getKrylovSchurDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_95setInitialSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_94setInitialSpace[] = "EPS.setInitialSpace(self, space)\n\n        Sets the initial space from which the eigensolver starts to\n        iterate.\n\n        Parameters\n        ----------\n        space: Vec or sequence of Vec\n           The initial space\n\n        Notes\n        -----\n        Some solvers start to iterate on a single vector (initial vector).\n        In that case, the other vectors are ignored.\n\n        In contrast to `set [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_95setInitialSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_space = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getKrylovSchurDimensions (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getKrylovSchurDimensions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getKrylovSchurDimensions", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_146getKrylovSchurDimensions(((struct PySlepcEPSObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("setInitialSpace (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_space,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_space)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInitialSpace") < 0)) __PYX_ERR(13, 1012, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_space = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setInitialSpace", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 1012, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setInitialSpace", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_94setInitialSpace(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_space);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_146getKrylovSchurDimensions(struct PySlepcEPSObject *__pyx_v_self) {
-  PetscInt __pyx_v_ival1;
-  PetscInt __pyx_v_ival2;
-  PetscInt __pyx_v_ival3;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_94setInitialSpace(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_space) {
+  Vec *__pyx_v_vs;
+  Py_ssize_t __pyx_v_i;
+  Py_ssize_t __pyx_v_ns;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getKrylovSchurDimensions", 0);
+  Py_ssize_t __pyx_t_4;
+  Py_ssize_t __pyx_t_5;
+  Vec __pyx_t_6;
+  int __pyx_t_7;
+  __Pyx_RefNannySetupContext("setInitialSpace", 0);
+  __Pyx_INCREF(__pyx_v_space);
 
-  /* "SLEPc/EPS.pyx":1559
- *              Maximum dimension allowed for the projected problem.
+  /* "SLEPc/EPS.pyx":1037
+ *         approximation of the wanted eigenspace. Then, convergence may be faster.
  *         """
- *         cdef PetscInt ival1 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival2 = 0
- *         cdef PetscInt ival3 = 0
+ *         if isinstance(space, Vec): space = [space]             # <<<<<<<<<<<<<<
+ *         cdef PetscVec *vs = NULL
+ *         cdef Py_ssize_t i = 0, ns = len(space)
  */
-  __pyx_v_ival1 = 0;
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_space, __pyx_ptype_8petsc4py_5PETSc_Vec); 
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 1037, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_v_space);
+    __Pyx_GIVEREF(__pyx_v_space);
+    PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_space);
+    __Pyx_DECREF_SET(__pyx_v_space, __pyx_t_3);
+    __pyx_t_3 = 0;
+  }
 
-  /* "SLEPc/EPS.pyx":1560
+  /* "SLEPc/EPS.pyx":1038
  *         """
- *         cdef PetscInt ival1 = 0
- *         cdef PetscInt ival2 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival3 = 0
- *         CHKERR( EPSKrylovSchurGetDimensions(self.eps, &ival1, &ival2, &ival3) )
+ *         if isinstance(space, Vec): space = [space]
+ *         cdef PetscVec *vs = NULL             # <<<<<<<<<<<<<<
+ *         cdef Py_ssize_t i = 0, ns = len(space)
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
  */
-  __pyx_v_ival2 = 0;
+  __pyx_v_vs = NULL;
 
-  /* "SLEPc/EPS.pyx":1561
- *         cdef PetscInt ival1 = 0
- *         cdef PetscInt ival2 = 0
- *         cdef PetscInt ival3 = 0             # <<<<<<<<<<<<<<
- *         CHKERR( EPSKrylovSchurGetDimensions(self.eps, &ival1, &ival2, &ival3) )
- *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+  /* "SLEPc/EPS.pyx":1039
+ *         if isinstance(space, Vec): space = [space]
+ *         cdef PetscVec *vs = NULL
+ *         cdef Py_ssize_t i = 0, ns = len(space)             # <<<<<<<<<<<<<<
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
+ *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
  */
-  __pyx_v_ival3 = 0;
+  __pyx_v_i = 0;
+  __pyx_t_4 = PyObject_Length(__pyx_v_space); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(13, 1039, __pyx_L1_error)
+  __pyx_v_ns = __pyx_t_4;
 
-  /* "SLEPc/EPS.pyx":1562
- *         cdef PetscInt ival2 = 0
- *         cdef PetscInt ival3 = 0
- *         CHKERR( EPSKrylovSchurGetDimensions(self.eps, &ival1, &ival2, &ival3) )             # <<<<<<<<<<<<<<
- *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+  /* "SLEPc/EPS.pyx":1040
+ *         cdef PetscVec *vs = NULL
+ *         cdef Py_ssize_t i = 0, ns = len(space)
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)             # <<<<<<<<<<<<<<
+ *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
+ *         CHKERR( EPSSetInitialSpace(self.eps, <PetscInt>ns, vs) )
+ */
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_allocate((((size_t)__pyx_v_ns) * (sizeof(struct PyPetscVecObject))), ((void **)(&__pyx_v_vs))); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 1040, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_v_tmp = __pyx_t_3;
+  __pyx_t_3 = 0;
+
+  /* "SLEPc/EPS.pyx":1041
+ *         cdef Py_ssize_t i = 0, ns = len(space)
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
+ *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSSetInitialSpace(self.eps, <PetscInt>ns, vs) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurGetDimensions(__pyx_v_self->eps, (&__pyx_v_ival1), (&__pyx_v_ival2), (&__pyx_v_ival3))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_v_ns;
+  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
+    __pyx_v_i = __pyx_t_5;
+    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_space, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 1041, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(13, 1041, __pyx_L1_error)
+    __pyx_t_6 = ((struct PyPetscVecObject *)__pyx_t_3)->vec;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    (__pyx_v_vs[__pyx_v_i]) = __pyx_t_6;
+  }
 
-  /* "SLEPc/EPS.pyx":1563
- *         cdef PetscInt ival3 = 0
- *         CHKERR( EPSKrylovSchurGetDimensions(self.eps, &ival1, &ival2, &ival3) )
- *         return (toInt(ival1), toInt(ival2), toInt(ival3))             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1042
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
+ *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
+ *         CHKERR( EPSSetInitialSpace(self.eps, <PetscInt>ns, vs) )             # <<<<<<<<<<<<<<
  * 
- *     def getKrylovSchurSubcommInfo(self):
+ *     #
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __Pyx_GIVEREF(__pyx_t_2);
-  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_3);
-  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_4);
-  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
-  __pyx_t_2 = 0;
-  __pyx_t_3 = 0;
-  __pyx_t_4 = 0;
-  __pyx_r = __pyx_t_5;
-  __pyx_t_5 = 0;
-  goto __pyx_L0;
+  __pyx_t_7 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetInitialSpace(__pyx_v_self->eps, ((PetscInt)__pyx_v_ns), __pyx_v_vs)); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(13, 1042, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":1545
- *         CHKERR( EPSKrylovSchurSetDimensions(self.eps, ival1, ival2, ival3) )
+  /* "SLEPc/EPS.pyx":1012
+ *     #
  * 
- *     def getKrylovSchurDimensions(self):             # <<<<<<<<<<<<<<
+ *     def setInitialSpace(self, space):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the dimensions used for each subsolve step in case of doing
+ *         Sets the initial space from which the eigensolver starts to
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getKrylovSchurDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setInitialSpace", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_tmp);
+  __Pyx_XDECREF(__pyx_v_space);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1565
- *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+/* "SLEPc/EPS.pyx":1046
+ *     #
  * 
- *     def getKrylovSchurSubcommInfo(self):             # <<<<<<<<<<<<<<
+ *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets information related to the case of doing spectrum slicing
+ *         Clears all monitors for an EPS object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_149getKrylovSchurSubcommInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_148getKrylovSchurSubcommInfo[] = "EPS.getKrylovSchurSubcommInfo(self)\n\n        Gets information related to the case of doing spectrum slicing\n        for a computational interval with multiple communicators.\n\n        Returns\n        -------\n        k: int\n             Number of the subinterval for the calling process.\n        n: int\n             Number of eigenvalues found in the k-th subinterval.\n        v: Vec\n             A vecto [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_149getKrylovSchurSubcommInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_97cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_96cancelMonitor[] = "EPS.cancelMonitor(self)\n\n        Clears all monitors for an EPS object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_97cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getKrylovSchurSubcommInfo (wrapper)", 0);
+  __Pyx_RefNannySetupContext("cancelMonitor (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getKrylovSchurSubcommInfo", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getKrylovSchurSubcommInfo", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_148getKrylovSchurSubcommInfo(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("cancelMonitor", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "cancelMonitor", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_96cancelMonitor(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_148getKrylovSchurSubcommInfo(struct PySlepcEPSObject *__pyx_v_self) {
-  PetscInt __pyx_v_ival1;
-  PetscInt __pyx_v_ival2;
-  struct PyPetscVecObject *__pyx_v_vec = 0;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_96cancelMonitor(struct PySlepcEPSObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getKrylovSchurSubcommInfo", 0);
-
-  /* "SLEPc/EPS.pyx":1586
- *         The returned Vec should be destroyed by the user.
- *         """
- *         cdef PetscInt ival1 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival2 = 0
- *         cdef Vec vec
- */
-  __pyx_v_ival1 = 0;
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("cancelMonitor", 0);
 
-  /* "SLEPc/EPS.pyx":1587
+  /* "SLEPc/EPS.pyx":1050
+ *         Clears all monitors for an EPS object.
  *         """
- *         cdef PetscInt ival1 = 0
- *         cdef PetscInt ival2 = 0             # <<<<<<<<<<<<<<
- *         cdef Vec vec
- *         vec = Vec()
- */
-  __pyx_v_ival2 = 0;
-
-  /* "SLEPc/EPS.pyx":1589
- *         cdef PetscInt ival2 = 0
- *         cdef Vec vec
- *         vec = Vec()             # <<<<<<<<<<<<<<
- *         CHKERR( EPSKrylovSchurGetSubcommInfo(self.eps, &ival1, &ival2, &vec.vec) )
- *         return (toInt(ival1), toInt(ival2), vec)
- */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "SLEPc/EPS.pyx":1590
- *         cdef Vec vec
- *         vec = Vec()
- *         CHKERR( EPSKrylovSchurGetSubcommInfo(self.eps, &ival1, &ival2, &vec.vec) )             # <<<<<<<<<<<<<<
- *         return (toInt(ival1), toInt(ival2), vec)
- * 
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurGetSubcommInfo(__pyx_v_self->eps, (&__pyx_v_ival1), (&__pyx_v_ival2), (&__pyx_v_vec->vec))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/EPS.pyx":1591
- *         vec = Vec()
- *         CHKERR( EPSKrylovSchurGetSubcommInfo(self.eps, &ival1, &ival2, &vec.vec) )
- *         return (toInt(ival1), toInt(ival2), vec)             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSMonitorCancel(self.eps) )             # <<<<<<<<<<<<<<
  * 
- *     def getKrylovSchurSubcommPairs(self, int i, Vec V):
+ *     #
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_3);
-  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
-  __Pyx_INCREF(((PyObject *)__pyx_v_vec));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_vec));
-  PyTuple_SET_ITEM(__pyx_t_4, 2, ((PyObject *)__pyx_v_vec));
-  __pyx_t_1 = 0;
-  __pyx_t_3 = 0;
-  __pyx_r = __pyx_t_4;
-  __pyx_t_4 = 0;
-  goto __pyx_L0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSMonitorCancel(__pyx_v_self->eps)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 1050, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":1565
- *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+  /* "SLEPc/EPS.pyx":1046
+ *     #
  * 
- *     def getKrylovSchurSubcommInfo(self):             # <<<<<<<<<<<<<<
+ *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets information related to the case of doing spectrum slicing
+ *         Clears all monitors for an EPS object.
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getKrylovSchurSubcommInfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.cancelMonitor", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_vec);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1593
- *         return (toInt(ival1), toInt(ival2), vec)
+/* "SLEPc/EPS.pyx":1054
+ *     #
  * 
- *     def getKrylovSchurSubcommPairs(self, int i, Vec V):             # <<<<<<<<<<<<<<
+ *     def setUp(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the i-th eigenpair stored internally in the multi-communicator
+ *         Sets up all the internal data structures necessary for the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_151getKrylovSchurSubcommPairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_150getKrylovSchurSubcommPairs[] = "EPS.getKrylovSchurSubcommPairs(self, int i, Vec V)\n\n        Gets the i-th eigenpair stored internally in the multi-communicator\n        to which the calling process belongs.\n\n        Parameters\n        ----------\n        i: int\n           Index of the solution to be obtained.\n        V: Vec\n           Placeholder for the returned eigenvector.\n\n        Returns\n        -------\n        e: scalar\n   [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_151getKrylovSchurSubcommPairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_v_i;
-  struct PyPetscVecObject *__pyx_v_V = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_99setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_98setUp[] = "EPS.setUp(self)\n\n        Sets up all the internal data structures necessary for the\n        execution of the eigensolver.\n\n        Notes\n        -----\n        This function need not be called explicitly in most cases,\n        since `solve()` calls it. It can be useful when one wants to\n        measure the set-up time separately from the solve time.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_99setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getKrylovSchurSubcommPairs (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,&__pyx_n_s_V,0};
-    PyObject* values[2] = {0,0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("getKrylovSchurSubcommPairs", 1, 2, 2, 1); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1593; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getKrylovSchurSubcommPairs") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1593; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-    }
-    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1593; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_V = ((struct PyPetscVecObject *)values[1]);
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getKrylovSchurSubcommPairs", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1593; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getKrylovSchurSubcommPairs", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_V), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "V", 0))) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_150getKrylovSchurSubcommPairs(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_i, __pyx_v_V);
+  __Pyx_RefNannySetupContext("setUp (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("setUp", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setUp", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_98setUp(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_150getKrylovSchurSubcommPairs(struct PySlepcEPSObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_V) {
-  PetscScalar __pyx_v_sval;
-  Vec __pyx_v_vec;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_98setUp(struct PySlepcEPSObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_t_2;
-  Vec __pyx_t_3;
-  int __pyx_t_4;
-  PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getKrylovSchurSubcommPairs", 0);
-
-  /* "SLEPc/EPS.pyx":1616
- *         see `getKrylovSchurSubcommInfo()`.
- *         """
- *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
- *         cdef PetscVec vec = NULL
- *         if V is not None: vec = V.vec
- */
-  __pyx_v_sval = 0.0;
+  __Pyx_RefNannySetupContext("setUp", 0);
 
-  /* "SLEPc/EPS.pyx":1617
+  /* "SLEPc/EPS.pyx":1065
+ *         measure the set-up time separately from the solve time.
  *         """
- *         cdef PetscScalar sval = 0
- *         cdef PetscVec vec = NULL             # <<<<<<<<<<<<<<
- *         if V is not None: vec = V.vec
- *         CHKERR( EPSKrylovSchurGetSubcommPairs(self.eps, i, &sval, vec) )
- */
-  __pyx_v_vec = NULL;
-
-  /* "SLEPc/EPS.pyx":1618
- *         cdef PetscScalar sval = 0
- *         cdef PetscVec vec = NULL
- *         if V is not None: vec = V.vec             # <<<<<<<<<<<<<<
- *         CHKERR( EPSKrylovSchurGetSubcommPairs(self.eps, i, &sval, vec) )
- *         return toScalar(sval)
- */
-  __pyx_t_1 = (((PyObject *)__pyx_v_V) != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_v_V->vec;
-    __pyx_v_vec = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "SLEPc/EPS.pyx":1619
- *         cdef PetscVec vec = NULL
- *         if V is not None: vec = V.vec
- *         CHKERR( EPSKrylovSchurGetSubcommPairs(self.eps, i, &sval, vec) )             # <<<<<<<<<<<<<<
- *         return toScalar(sval)
+ *         CHKERR( EPSSetUp(self.eps) )             # <<<<<<<<<<<<<<
  * 
+ *     def solve(self):
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurGetSubcommPairs(__pyx_v_self->eps, __pyx_v_i, (&__pyx_v_sval), __pyx_v_vec)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1619; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSetUp(__pyx_v_self->eps)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 1065, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":1620
- *         if V is not None: vec = V.vec
- *         CHKERR( EPSKrylovSchurGetSubcommPairs(self.eps, i, &sval, vec) )
- *         return toScalar(sval)             # <<<<<<<<<<<<<<
- * 
+  /* "SLEPc/EPS.pyx":1054
  *     #
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __pyx_r = __pyx_t_5;
-  __pyx_t_5 = 0;
-  goto __pyx_L0;
-
-  /* "SLEPc/EPS.pyx":1593
- *         return (toInt(ival1), toInt(ival2), vec)
  * 
- *     def getKrylovSchurSubcommPairs(self, int i, Vec V):             # <<<<<<<<<<<<<<
+ *     def setUp(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the i-th eigenpair stored internally in the multi-communicator
+ *         Sets up all the internal data structures necessary for the
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getKrylovSchurSubcommPairs", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setUp", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -26136,110 +26933,59 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_150getKrylovSchurSubcommPairs(st
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1624
- *     #
+/* "SLEPc/EPS.pyx":1067
+ *         CHKERR( EPSSetUp(self.eps) )
  * 
- *     def setRQCGReset(self, nrest):             # <<<<<<<<<<<<<<
+ *     def solve(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the reset parameter of the RQCG iteration. Every nrest iterations,
+ *         Solves the eigensystem.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_153setRQCGReset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_152setRQCGReset[] = "EPS.setRQCGReset(self, nrest)\n\n        Sets the reset parameter of the RQCG iteration. Every nrest iterations,\n        the solver performs a Rayleigh-Ritz projection step.\n\n        Parameters\n        ----------\n        nrest: integer\n               The number of iterations between resets.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_153setRQCGReset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_nrest = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_101solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_100solve[] = "EPS.solve(self)\n\n        Solves the eigensystem.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_101solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setRQCGReset (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nrest,0};
-    PyObject* values[1] = {0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nrest)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRQCGReset") < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1624; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-    }
-    __pyx_v_nrest = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setRQCGReset", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1624; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setRQCGReset", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_152setRQCGReset(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_nrest);
+  __Pyx_RefNannySetupContext("solve (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("solve", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "solve", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_100solve(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_152setRQCGReset(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_nrest) {
-  PetscInt __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_100solve(struct PySlepcEPSObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscInt __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setRQCGReset", 0);
-
-  /* "SLEPc/EPS.pyx":1634
- *                The number of iterations between resets.
- *         """
- *         cdef PetscInt val = nrest             # <<<<<<<<<<<<<<
- *         CHKERR( EPSRQCGSetReset(self.eps, val) )
- * 
- */
-  __pyx_t_1 = __Pyx_PyInt_As_PetscInt(__pyx_v_nrest); if (unlikely((__pyx_t_1 == (PetscInt)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_val = __pyx_t_1;
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("solve", 0);
 
-  /* "SLEPc/EPS.pyx":1635
+  /* "SLEPc/EPS.pyx":1071
+ *         Solves the eigensystem.
  *         """
- *         cdef PetscInt val = nrest
- *         CHKERR( EPSRQCGSetReset(self.eps, val) )             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSSolve(self.eps) )             # <<<<<<<<<<<<<<
  * 
- *     def getRQCGReset(self):
+ *     def getIterationNumber(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSRQCGSetReset(__pyx_v_self->eps, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1635; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSSolve(__pyx_v_self->eps)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 1071, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":1624
- *     #
+  /* "SLEPc/EPS.pyx":1067
+ *         CHKERR( EPSSetUp(self.eps) )
  * 
- *     def setRQCGReset(self, nrest):             # <<<<<<<<<<<<<<
+ *     def solve(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the reset parameter of the RQCG iteration. Every nrest iterations,
+ *         Solves the eigensystem.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setRQCGReset", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.solve", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -26247,86 +26993,83 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_152setRQCGReset(struct PySlepcEP
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1637
- *         CHKERR( EPSRQCGSetReset(self.eps, val) )
+/* "SLEPc/EPS.pyx":1073
+ *         CHKERR( EPSSolve(self.eps) )
  * 
- *     def getRQCGReset(self):             # <<<<<<<<<<<<<<
+ *     def getIterationNumber(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the reset parameter used in the RQCG method.
+ *         Gets the current iteration number. If the call to `solve()` is
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_155getRQCGReset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3EPS_154getRQCGReset[] = "EPS.getRQCGReset(self)\n\n        Gets the reset parameter used in the RQCG method.\n\n        Returns\n        -------\n        nrest: integer\n               The number of iterations between resets.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_155getRQCGReset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_103getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_102getIterationNumber[] = "EPS.getIterationNumber(self)\n\n        Gets the current iteration number. If the call to `solve()` is\n        complete, then it returns the number of iterations carried out\n        by the solution method.\n\n        Returns\n        -------\n        its: int\n             Iteration number.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_103getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getRQCGReset (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getIterationNumber (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getRQCGReset", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getRQCGReset", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_154getRQCGReset(((struct PySlepcEPSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getIterationNumber", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getIterationNumber", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_102getIterationNumber(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_154getRQCGReset(struct PySlepcEPSObject *__pyx_v_self) {
-  PetscInt __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_102getIterationNumber(struct PySlepcEPSObject *__pyx_v_self) {
+  PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getRQCGReset", 0);
+  __Pyx_RefNannySetupContext("getIterationNumber", 0);
 
-  /* "SLEPc/EPS.pyx":1646
- *                The number of iterations between resets.
+  /* "SLEPc/EPS.pyx":1084
+ *              Iteration number.
  *         """
- *         cdef PetscInt val = 0             # <<<<<<<<<<<<<<
- *         CHKERR( EPSRQCGGetReset(self.eps, &val) )
- *         return val
+ *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetIterationNumber(self.eps, &ival) )
+ *         return toInt(ival)
  */
-  __pyx_v_val = 0;
+  __pyx_v_ival = 0;
 
-  /* "SLEPc/EPS.pyx":1647
+  /* "SLEPc/EPS.pyx":1085
  *         """
- *         cdef PetscInt val = 0
- *         CHKERR( EPSRQCGGetReset(self.eps, &val) )             # <<<<<<<<<<<<<<
- *         return val
+ *         cdef PetscInt ival = 0
+ *         CHKERR( EPSGetIterationNumber(self.eps, &ival) )             # <<<<<<<<<<<<<<
+ *         return toInt(ival)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSRQCGGetReset(__pyx_v_self->eps, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1647; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetIterationNumber(__pyx_v_self->eps, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 1085, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":1648
- *         cdef PetscInt val = 0
- *         CHKERR( EPSRQCGGetReset(self.eps, &val) )
- *         return val             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1086
+ *         cdef PetscInt ival = 0
+ *         CHKERR( EPSGetIterationNumber(self.eps, &ival) )
+ *         return toInt(ival)             # <<<<<<<<<<<<<<
  * 
- *     #
+ *     def getConvergedReason(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscInt(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1648; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1086, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":1637
- *         CHKERR( EPSRQCGSetReset(self.eps, val) )
+  /* "SLEPc/EPS.pyx":1073
+ *         CHKERR( EPSSolve(self.eps) )
  * 
- *     def getRQCGReset(self):             # <<<<<<<<<<<<<<
+ *     def getIterationNumber(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the reset parameter used in the RQCG method.
+ *         Gets the current iteration number. If the call to `solve()` is
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getRQCGReset", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getIterationNumber", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -26334,84 +27077,83 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_154getRQCGReset(struct PySlepcEP
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1652
- *     #
- *     property problem_type:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getProblemType()
- *         def __set__(self, value):
+/* "SLEPc/EPS.pyx":1088
+ *         return toInt(ival)
+ * 
+ *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the reason why the `solve()` iteration was stopped.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_12problem_type_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_12problem_type_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_105getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_104getConvergedReason[] = "EPS.getConvergedReason(self)\n\n        Gets the reason why the `solve()` iteration was stopped.\n\n        Returns\n        -------\n        reason: `EPS.ConvergedReason` enumerate\n                Negative value indicates diverged, positive value\n                converged.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_105getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_12problem_type___get__(((struct PySlepcEPSObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("getConvergedReason (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getConvergedReason", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getConvergedReason", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_104getConvergedReason(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_12problem_type___get__(struct PySlepcEPSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_104getConvergedReason(struct PySlepcEPSObject *__pyx_v_self) {
+  EPSConvergedReason __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_RefNannySetupContext("getConvergedReason", 0);
 
-  /* "SLEPc/EPS.pyx":1653
- *     property problem_type:
- *         def __get__(self):
- *             return self.getProblemType()             # <<<<<<<<<<<<<<
- *         def __set__(self, value):
- *             self.setProblemType(value)
+  /* "SLEPc/EPS.pyx":1098
+ *                 converged.
+ *         """
+ *         cdef SlepcEPSConvergedReason val = EPS_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetConvergedReason(self.eps, &val) )
+ *         return val
+ */
+  __pyx_v_val = EPS_CONVERGED_ITERATING;
+
+  /* "SLEPc/EPS.pyx":1099
+ *         """
+ *         cdef SlepcEPSConvergedReason val = EPS_CONVERGED_ITERATING
+ *         CHKERR( EPSGetConvergedReason(self.eps, &val) )             # <<<<<<<<<<<<<<
+ *         return val
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetConvergedReason(__pyx_v_self->eps, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 1099, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":1100
+ *         cdef SlepcEPSConvergedReason val = EPS_CONVERGED_ITERATING
+ *         CHKERR( EPSGetConvergedReason(self.eps, &val) )
+ *         return val             # <<<<<<<<<<<<<<
+ * 
+ *     def getConverged(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getProblemType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_EPSConvergedReason(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1100, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_3)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_3);
-      __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
-    }
-  }
-  if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":1652
- *     #
- *     property problem_type:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getProblemType()
- *         def __set__(self, value):
+  /* "SLEPc/EPS.pyx":1088
+ *         return toInt(ival)
+ * 
+ *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the reason why the `solve()` iteration was stopped.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.problem_type.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getConvergedReason", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -26419,176 +27161,227 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_12problem_type___get__(struct Py
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1654
- *         def __get__(self):
- *             return self.getProblemType()
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setProblemType(value)
+/* "SLEPc/EPS.pyx":1102
+ *         return val
  * 
+ *     def getConverged(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the number of converged eigenpairs.
  */
 
 /* Python wrapper */
-static int __pyx_pw_8slepc4py_5SLEPc_3EPS_12problem_type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_8slepc4py_5SLEPc_3EPS_12problem_type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_107getConverged(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_106getConverged[] = "EPS.getConverged(self)\n\n        Gets the number of converged eigenpairs.\n\n        Returns\n        -------\n        nconv: int\n               Number of converged eigenpairs.\n\n        Notes\n        -----\n        This function should be called after `solve()` has finished.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_107getConverged(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_12problem_type_2__set__(((struct PySlepcEPSObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannySetupContext("getConverged (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getConverged", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getConverged", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_106getConverged(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_8slepc4py_5SLEPc_3EPS_12problem_type_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_106getConverged(struct PySlepcEPSObject *__pyx_v_self) {
+  PetscInt __pyx_v_ival;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
+  __Pyx_RefNannySetupContext("getConverged", 0);
 
-  /* "SLEPc/EPS.pyx":1655
- *             return self.getProblemType()
- *         def __set__(self, value):
- *             self.setProblemType(value)             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1115
+ *         This function should be called after `solve()` has finished.
+ *         """
+ *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetConverged(self.eps, &ival) )
+ *         return toInt(ival)
+ */
+  __pyx_v_ival = 0;
+
+  /* "SLEPc/EPS.pyx":1116
+ *         """
+ *         cdef PetscInt ival = 0
+ *         CHKERR( EPSGetConverged(self.eps, &ival) )             # <<<<<<<<<<<<<<
+ *         return toInt(ival)
  * 
- *     property extraction:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setProblemType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1655; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetConverged(__pyx_v_self->eps, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 1116, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":1117
+ *         cdef PetscInt ival = 0
+ *         CHKERR( EPSGetConverged(self.eps, &ival) )
+ *         return toInt(ival)             # <<<<<<<<<<<<<<
+ * 
+ *     def getEigenvalue(self, int i):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1117, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_3)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_3);
-      __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
-    }
-  }
-  if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1655; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-  } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1655; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
-    __Pyx_INCREF(__pyx_v_value);
-    __Pyx_GIVEREF(__pyx_v_value);
-    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1655; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  }
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":1654
- *         def __get__(self):
- *             return self.getProblemType()
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setProblemType(value)
+  /* "SLEPc/EPS.pyx":1102
+ *         return val
  * 
+ *     def getConverged(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the number of converged eigenpairs.
  */
 
   /* function exit code */
-  __pyx_r = 0;
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.problem_type.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getConverged", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1658
+/* "SLEPc/EPS.pyx":1119
+ *         return toInt(ival)
  * 
- *     property extraction:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getExtraction()
- *         def __set__(self, value):
+ *     def getEigenvalue(self, int i):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the i-th eigenvalue as computed by `solve()`.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_10extraction_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_10extraction_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_109getEigenvalue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_108getEigenvalue[] = "EPS.getEigenvalue(self, int i)\n\n        Gets the i-th eigenvalue as computed by `solve()`.\n\n        Parameters\n        ----------\n        i: int\n           Index of the solution to be obtained.\n\n        Returns\n        -------\n        e: scalar (possibly complex)\n           The computed eigenvalue.\n\n        Notes\n        -----\n        The index ``i`` should be a value between ``0`` and\n        ``nconv-1``  [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_109getEigenvalue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_i;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_10extraction___get__(((struct PySlepcEPSObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("getEigenvalue (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getEigenvalue") < 0)) __PYX_ERR(13, 1119, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) __PYX_ERR(13, 1119, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getEigenvalue", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 1119, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getEigenvalue", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_108getEigenvalue(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_i);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_10extraction___get__(struct PySlepcEPSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_108getEigenvalue(struct PySlepcEPSObject *__pyx_v_self, int __pyx_v_i) {
+  PetscScalar __pyx_v_sval1;
+  PetscScalar __pyx_v_sval2;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 0);
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("getEigenvalue", 0);
 
-  /* "SLEPc/EPS.pyx":1659
- *     property extraction:
- *         def __get__(self):
- *             return self.getExtraction()             # <<<<<<<<<<<<<<
- *         def __set__(self, value):
- *             self.setExtraction(value)
+  /* "SLEPc/EPS.pyx":1140
+ *         `setWhichEigenpairs()`.
+ *         """
+ *         cdef PetscScalar sval1 = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscScalar sval2 = 0
+ *         CHKERR( EPSGetEigenvalue(self.eps, i, &sval1, &sval2) )
+ */
+  __pyx_v_sval1 = 0.0;
+
+  /* "SLEPc/EPS.pyx":1141
+ *         """
+ *         cdef PetscScalar sval1 = 0
+ *         cdef PetscScalar sval2 = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetEigenvalue(self.eps, i, &sval1, &sval2) )
+ *         return complex(toScalar(sval1), toScalar(sval2))
+ */
+  __pyx_v_sval2 = 0.0;
+
+  /* "SLEPc/EPS.pyx":1142
+ *         cdef PetscScalar sval1 = 0
+ *         cdef PetscScalar sval2 = 0
+ *         CHKERR( EPSGetEigenvalue(self.eps, i, &sval1, &sval2) )             # <<<<<<<<<<<<<<
+ *         return complex(toScalar(sval1), toScalar(sval2))
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetEigenvalue(__pyx_v_self->eps, __pyx_v_i, (&__pyx_v_sval1), (&__pyx_v_sval2))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 1142, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":1143
+ *         cdef PetscScalar sval2 = 0
+ *         CHKERR( EPSGetEigenvalue(self.eps, i, &sval1, &sval2) )
+ *         return complex(toScalar(sval1), toScalar(sval2))             # <<<<<<<<<<<<<<
+ * 
+ *     def getEigenvector(self, int i, Vec Vr not None, Vec Vi=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getExtraction); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1659; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval1); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_3)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_3);
-      __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
-    }
-  }
-  if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1659; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1659; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval2); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 1143, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 1143, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
+  __pyx_t_2 = 0;
+  __pyx_t_3 = 0;
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)(&PyComplex_Type)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 1143, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":1658
+  /* "SLEPc/EPS.pyx":1119
+ *         return toInt(ival)
  * 
- *     property extraction:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getExtraction()
- *         def __set__(self, value):
+ *     def getEigenvalue(self, int i):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the i-th eigenvalue as computed by `solve()`.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.extraction.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getEigenvalue", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -26596,533 +27389,752 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_10extraction___get__(struct PySl
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1660
- *         def __get__(self):
- *             return self.getExtraction()
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setExtraction(value)
+/* "SLEPc/EPS.pyx":1145
+ *         return complex(toScalar(sval1), toScalar(sval2))
  * 
+ *     def getEigenvector(self, int i, Vec Vr not None, Vec Vi=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the i-th eigenvector as computed by `solve()`.
  */
 
 /* Python wrapper */
-static int __pyx_pw_8slepc4py_5SLEPc_3EPS_10extraction_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_8slepc4py_5SLEPc_3EPS_10extraction_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_111getEigenvector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_110getEigenvector[] = "EPS.getEigenvector(self, int i, Vec Vr, Vec Vi=None)\n\n        Gets the i-th eigenvector as computed by `solve()`.\n\n        Parameters\n        ----------\n        i: int\n           Index of the solution to be obtained.\n        Vr: Vec\n            Placeholder for the returned eigenvector (real part).\n        Vi: Vec, optional\n            Placeholder for the returned eigenvector (imaginary part).\n\n        Notes\n [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_111getEigenvector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_i;
+  struct PyPetscVecObject *__pyx_v_Vr = 0;
+  struct PyPetscVecObject *__pyx_v_Vi = 0;
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_10extraction_2__set__(((struct PySlepcEPSObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannySetupContext("getEigenvector (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,&__pyx_n_s_Vr,&__pyx_n_s_Vi,0};
+    PyObject* values[3] = {0,0,0};
+    values[2] = (PyObject *)((struct PyPetscVecObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Vr)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("getEigenvector", 0, 2, 3, 1); __PYX_ERR(13, 1145, __pyx_L3_error)
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Vi);
+          if (value) { values[2] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getEigenvector") < 0)) __PYX_ERR(13, 1145, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) __PYX_ERR(13, 1145, __pyx_L3_error)
+    __pyx_v_Vr = ((struct PyPetscVecObject *)values[1]);
+    __pyx_v_Vi = ((struct PyPetscVecObject *)values[2]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getEigenvector", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 1145, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getEigenvector", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Vr), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "Vr", 0))) __PYX_ERR(13, 1145, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Vi), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "Vi", 0))) __PYX_ERR(13, 1145, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_110getEigenvector(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_i, __pyx_v_Vr, __pyx_v_Vi);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_8slepc4py_5SLEPc_3EPS_10extraction_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_110getEigenvector(struct PySlepcEPSObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_Vr, struct PyPetscVecObject *__pyx_v_Vi) {
+  Vec __pyx_v_vecr;
+  Vec __pyx_v_veci;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
+  int __pyx_t_1;
+  int __pyx_t_2;
+  Vec __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("getEigenvector", 0);
 
-  /* "SLEPc/EPS.pyx":1661
- *             return self.getExtraction()
- *         def __set__(self, value):
- *             self.setExtraction(value)             # <<<<<<<<<<<<<<
- * 
- *     property which:
+  /* "SLEPc/EPS.pyx":1165
+ *         `setWhichEigenpairs()`.
+ *         """
+ *         cdef PetscVec vecr = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscVec veci = NULL
+ *         if Vr is not None: vecr = Vr.vec
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setExtraction); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_3)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_3);
-      __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
-    }
+  __pyx_v_vecr = NULL;
+
+  /* "SLEPc/EPS.pyx":1166
+ *         """
+ *         cdef PetscVec vecr = NULL
+ *         cdef PetscVec veci = NULL             # <<<<<<<<<<<<<<
+ *         if Vr is not None: vecr = Vr.vec
+ *         if Vi is not None: veci = Vi.vec
+ */
+  __pyx_v_veci = NULL;
+
+  /* "SLEPc/EPS.pyx":1167
+ *         cdef PetscVec vecr = NULL
+ *         cdef PetscVec veci = NULL
+ *         if Vr is not None: vecr = Vr.vec             # <<<<<<<<<<<<<<
+ *         if Vi is not None: veci = Vi.vec
+ *         CHKERR( EPSGetEigenvector(self.eps, i, vecr, veci) )
+ */
+  __pyx_t_1 = (((PyObject *)__pyx_v_Vr) != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_v_Vr->vec;
+    __pyx_v_vecr = __pyx_t_3;
   }
-  if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-  } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
-    __Pyx_INCREF(__pyx_v_value);
-    __Pyx_GIVEREF(__pyx_v_value);
-    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+  /* "SLEPc/EPS.pyx":1168
+ *         cdef PetscVec veci = NULL
+ *         if Vr is not None: vecr = Vr.vec
+ *         if Vi is not None: veci = Vi.vec             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetEigenvector(self.eps, i, vecr, veci) )
+ * 
+ */
+  __pyx_t_2 = (((PyObject *)__pyx_v_Vi) != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_3 = __pyx_v_Vi->vec;
+    __pyx_v_veci = __pyx_t_3;
   }
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "SLEPc/EPS.pyx":1660
- *         def __get__(self):
- *             return self.getExtraction()
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setExtraction(value)
+  /* "SLEPc/EPS.pyx":1169
+ *         if Vr is not None: vecr = Vr.vec
+ *         if Vi is not None: veci = Vi.vec
+ *         CHKERR( EPSGetEigenvector(self.eps, i, vecr, veci) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getEigenpair(self, int i, Vec Vr=None, Vec Vi=None):
+ */
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetEigenvector(__pyx_v_self->eps, __pyx_v_i, __pyx_v_vecr, __pyx_v_veci)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(13, 1169, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":1145
+ *         return complex(toScalar(sval1), toScalar(sval2))
  * 
+ *     def getEigenvector(self, int i, Vec Vr not None, Vec Vi=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the i-th eigenvector as computed by `solve()`.
  */
 
   /* function exit code */
-  __pyx_r = 0;
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.extraction.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getEigenvector", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1664
+/* "SLEPc/EPS.pyx":1171
+ *         CHKERR( EPSGetEigenvector(self.eps, i, vecr, veci) )
  * 
- *     property which:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getWhichEigenpairs()
- *         def __set__(self, value):
+ *     def getEigenpair(self, int i, Vec Vr=None, Vec Vi=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the i-th solution of the eigenproblem as computed by
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_5which_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_5which_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_113getEigenpair(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_112getEigenpair[] = "EPS.getEigenpair(self, int i, Vec Vr=None, Vec Vi=None)\n\n        Gets the i-th solution of the eigenproblem as computed by\n        `solve()`.  The solution consists of both the eigenvalue and\n        the eigenvector.\n\n        Parameters\n        ----------\n        i: int\n           Index of the solution to be obtained.\n        Vr: Vec\n            Placeholder for the returned eigenvector (real part).\n        Vi: V [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_113getEigenpair(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_i;
+  struct PyPetscVecObject *__pyx_v_Vr = 0;
+  struct PyPetscVecObject *__pyx_v_Vi = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_5which___get__(((struct PySlepcEPSObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("getEigenpair (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,&__pyx_n_s_Vr,&__pyx_n_s_Vi,0};
+    PyObject* values[3] = {0,0,0};
+    values[1] = (PyObject *)((struct PyPetscVecObject *)Py_None);
+    values[2] = (PyObject *)((struct PyPetscVecObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Vr);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Vi);
+          if (value) { values[2] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getEigenpair") < 0)) __PYX_ERR(13, 1171, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) __PYX_ERR(13, 1171, __pyx_L3_error)
+    __pyx_v_Vr = ((struct PyPetscVecObject *)values[1]);
+    __pyx_v_Vi = ((struct PyPetscVecObject *)values[2]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getEigenpair", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 1171, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getEigenpair", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Vr), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "Vr", 0))) __PYX_ERR(13, 1171, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Vi), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "Vi", 0))) __PYX_ERR(13, 1171, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_112getEigenpair(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_i, __pyx_v_Vr, __pyx_v_Vi);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_5which___get__(struct PySlepcEPSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_112getEigenpair(struct PySlepcEPSObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_Vr, struct PyPetscVecObject *__pyx_v_Vi) {
+  PetscScalar __pyx_v_sval1;
+  PetscScalar __pyx_v_sval2;
+  Vec __pyx_v_vecr;
+  Vec __pyx_v_veci;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 0);
+  int __pyx_t_1;
+  int __pyx_t_2;
+  Vec __pyx_t_3;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  __Pyx_RefNannySetupContext("getEigenpair", 0);
 
-  /* "SLEPc/EPS.pyx":1665
- *     property which:
- *         def __get__(self):
- *             return self.getWhichEigenpairs()             # <<<<<<<<<<<<<<
- *         def __set__(self, value):
- *             self.setWhichEigenpairs(value)
+  /* "SLEPc/EPS.pyx":1198
+ *         `setWhichEigenpairs()`.
+ *         """
+ *         cdef PetscScalar sval1 = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscScalar sval2 = 0
+ *         cdef PetscVec vecr = NULL
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getWhichEigenpairs); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1665; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_3)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_3);
-      __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
-    }
-  }
-  if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1665; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1665; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
+  __pyx_v_sval1 = 0.0;
 
-  /* "SLEPc/EPS.pyx":1664
- * 
- *     property which:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getWhichEigenpairs()
- *         def __set__(self, value):
+  /* "SLEPc/EPS.pyx":1199
+ *         """
+ *         cdef PetscScalar sval1 = 0
+ *         cdef PetscScalar sval2 = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscVec vecr = NULL
+ *         cdef PetscVec veci = NULL
  */
+  __pyx_v_sval2 = 0.0;
 
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.which.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "SLEPc/EPS.pyx":1200
+ *         cdef PetscScalar sval1 = 0
+ *         cdef PetscScalar sval2 = 0
+ *         cdef PetscVec vecr = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscVec veci = NULL
+ *         if Vr is not None: vecr = Vr.vec
+ */
+  __pyx_v_vecr = NULL;
 
-/* "SLEPc/EPS.pyx":1666
- *         def __get__(self):
- *             return self.getWhichEigenpairs()
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setWhichEigenpairs(value)
- * 
+  /* "SLEPc/EPS.pyx":1201
+ *         cdef PetscScalar sval2 = 0
+ *         cdef PetscVec vecr = NULL
+ *         cdef PetscVec veci = NULL             # <<<<<<<<<<<<<<
+ *         if Vr is not None: vecr = Vr.vec
+ *         if Vi is not None: veci = Vi.vec
  */
+  __pyx_v_veci = NULL;
 
-/* Python wrapper */
-static int __pyx_pw_8slepc4py_5SLEPc_3EPS_5which_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_8slepc4py_5SLEPc_3EPS_5which_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_5which_2__set__(((struct PySlepcEPSObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  /* "SLEPc/EPS.pyx":1202
+ *         cdef PetscVec vecr = NULL
+ *         cdef PetscVec veci = NULL
+ *         if Vr is not None: vecr = Vr.vec             # <<<<<<<<<<<<<<
+ *         if Vi is not None: veci = Vi.vec
+ *         CHKERR( EPSGetEigenpair(self.eps, i, &sval1, &sval2, vecr, veci) )
+ */
+  __pyx_t_1 = (((PyObject *)__pyx_v_Vr) != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_v_Vr->vec;
+    __pyx_v_vecr = __pyx_t_3;
+  }
 
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "SLEPc/EPS.pyx":1203
+ *         cdef PetscVec veci = NULL
+ *         if Vr is not None: vecr = Vr.vec
+ *         if Vi is not None: veci = Vi.vec             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetEigenpair(self.eps, i, &sval1, &sval2, vecr, veci) )
+ *         return complex(toScalar(sval1), toScalar(sval2))
+ */
+  __pyx_t_2 = (((PyObject *)__pyx_v_Vi) != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_3 = __pyx_v_Vi->vec;
+    __pyx_v_veci = __pyx_t_3;
+  }
 
-static int __pyx_pf_8slepc4py_5SLEPc_3EPS_5which_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
+  /* "SLEPc/EPS.pyx":1204
+ *         if Vr is not None: vecr = Vr.vec
+ *         if Vi is not None: veci = Vi.vec
+ *         CHKERR( EPSGetEigenpair(self.eps, i, &sval1, &sval2, vecr, veci) )             # <<<<<<<<<<<<<<
+ *         return complex(toScalar(sval1), toScalar(sval2))
+ * 
+ */
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetEigenpair(__pyx_v_self->eps, __pyx_v_i, (&__pyx_v_sval1), (&__pyx_v_sval2), __pyx_v_vecr, __pyx_v_veci)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(13, 1204, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":1667
- *             return self.getWhichEigenpairs()
- *         def __set__(self, value):
- *             self.setWhichEigenpairs(value)             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1205
+ *         if Vi is not None: veci = Vi.vec
+ *         CHKERR( EPSGetEigenpair(self.eps, i, &sval1, &sval2, vecr, veci) )
+ *         return complex(toScalar(sval1), toScalar(sval2))             # <<<<<<<<<<<<<<
  * 
- *     property target:
+ *     def getInvariantSubspace(self):
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setWhichEigenpairs); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1667; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_3)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_3);
-      __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
-    }
-  }
-  if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1667; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-  } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1667; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
-    __Pyx_INCREF(__pyx_v_value);
-    __Pyx_GIVEREF(__pyx_v_value);
-    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1667; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  }
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval1); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 1205, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_6 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval2); if (unlikely(!__pyx_t_6)) __PYX_ERR(13, 1205, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(13, 1205, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_GIVEREF(__pyx_t_5);
+  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5);
+  __Pyx_GIVEREF(__pyx_t_6);
+  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
+  __pyx_t_5 = 0;
+  __pyx_t_6 = 0;
+  __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)(&PyComplex_Type)), __pyx_t_7, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(13, 1205, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_r = __pyx_t_6;
+  __pyx_t_6 = 0;
+  goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":1666
- *         def __get__(self):
- *             return self.getWhichEigenpairs()
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setWhichEigenpairs(value)
+  /* "SLEPc/EPS.pyx":1171
+ *         CHKERR( EPSGetEigenvector(self.eps, i, vecr, veci) )
  * 
+ *     def getEigenpair(self, int i, Vec Vr=None, Vec Vi=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the i-th solution of the eigenproblem as computed by
  */
 
   /* function exit code */
-  __pyx_r = 0;
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.which.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getEigenpair", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1670
+/* "SLEPc/EPS.pyx":1207
+ *         return complex(toScalar(sval1), toScalar(sval2))
  * 
- *     property target:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getTarget()
- *         def __set__(self, value):
+ *     def getInvariantSubspace(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets an orthonormal basis of the computed invariant subspace.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_6target_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_6target_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_115getInvariantSubspace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_114getInvariantSubspace[] = "EPS.getInvariantSubspace(self)\n\n        Gets an orthonormal basis of the computed invariant subspace.\n\n        Returns\n        -------\n        subspace: list of Vec\n           Basis of the invariant subspace.\n\n        Notes\n        -----\n        This function should be called after `solve()` has finished.\n\n        The returned vectors span an invariant subspace associated\n        with the computed eige [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_115getInvariantSubspace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_6target___get__(((struct PySlepcEPSObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("getInvariantSubspace (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getInvariantSubspace", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getInvariantSubspace", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_114getInvariantSubspace(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_6target___get__(struct PySlepcEPSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_114getInvariantSubspace(struct PySlepcEPSObject *__pyx_v_self) {
+  PetscInt __pyx_v_i;
+  PetscInt __pyx_v_ncv;
+  Vec __pyx_v_v;
+  Vec *__pyx_v_isp;
+  PyObject *__pyx_v_subspace = 0;
+  Mat __pyx_v_A;
+  struct PyPetscVecObject *__pyx_v_V = 0;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 0);
+  int __pyx_t_2;
+  int __pyx_t_3;
+  PetscInt __pyx_t_4;
+  PetscInt __pyx_t_5;
+  int __pyx_t_6;
+  __Pyx_RefNannySetupContext("getInvariantSubspace", 0);
 
-  /* "SLEPc/EPS.pyx":1671
- *     property target:
- *         def __get__(self):
- *             return self.getTarget()             # <<<<<<<<<<<<<<
- *         def __set__(self, value):
- *             self.setTarget(value)
+  /* "SLEPc/EPS.pyx":1225
+ *         similar definition applies for generalized eigenproblems).
+ *         """
+ *         cdef PetscInt i = 0, ncv = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscVec v = NULL, *isp = NULL
+ *         cdef list subspace = []
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getTarget); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1671; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_3)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_3);
-      __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
-    }
-  }
-  if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1671; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1671; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
+  __pyx_v_i = 0;
+  __pyx_v_ncv = 0;
+
+  /* "SLEPc/EPS.pyx":1226
+ *         """
+ *         cdef PetscInt i = 0, ncv = 0
+ *         cdef PetscVec v = NULL, *isp = NULL             # <<<<<<<<<<<<<<
+ *         cdef list subspace = []
+ *         CHKERR( EPSGetConverged(self.eps, &ncv) )
+ */
+  __pyx_v_v = NULL;
+  __pyx_v_isp = NULL;
+
+  /* "SLEPc/EPS.pyx":1227
+ *         cdef PetscInt i = 0, ncv = 0
+ *         cdef PetscVec v = NULL, *isp = NULL
+ *         cdef list subspace = []             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetConverged(self.eps, &ncv) )
+ *         if ncv == 0: return subspace
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1227, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_r = __pyx_t_1;
+  __pyx_v_subspace = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
-  goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":1670
- * 
- *     property target:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getTarget()
- *         def __set__(self, value):
+  /* "SLEPc/EPS.pyx":1228
+ *         cdef PetscVec v = NULL, *isp = NULL
+ *         cdef list subspace = []
+ *         CHKERR( EPSGetConverged(self.eps, &ncv) )             # <<<<<<<<<<<<<<
+ *         if ncv == 0: return subspace
+ *         cdef PetscMat A = NULL
  */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetConverged(__pyx_v_self->eps, (&__pyx_v_ncv))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 1228, __pyx_L1_error)
 
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.target.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "SLEPc/EPS.pyx":1229
+ *         cdef list subspace = []
+ *         CHKERR( EPSGetConverged(self.eps, &ncv) )
+ *         if ncv == 0: return subspace             # <<<<<<<<<<<<<<
+ *         cdef PetscMat A = NULL
+ *         CHKERR( EPSGetOperators(self.eps, &A, NULL) )
+ */
+  __pyx_t_3 = ((__pyx_v_ncv == 0) != 0);
+  if (__pyx_t_3) {
+    __Pyx_XDECREF(__pyx_r);
+    __Pyx_INCREF(__pyx_v_subspace);
+    __pyx_r = __pyx_v_subspace;
+    goto __pyx_L0;
+  }
 
-/* "SLEPc/EPS.pyx":1672
- *         def __get__(self):
- *             return self.getTarget()
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setTarget(value)
- * 
+  /* "SLEPc/EPS.pyx":1230
+ *         CHKERR( EPSGetConverged(self.eps, &ncv) )
+ *         if ncv == 0: return subspace
+ *         cdef PetscMat A = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetOperators(self.eps, &A, NULL) )
+ *         CHKERR( MatCreateVecs(A, &v, NULL) )
  */
+  __pyx_v_A = NULL;
 
-/* Python wrapper */
-static int __pyx_pw_8slepc4py_5SLEPc_3EPS_6target_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_8slepc4py_5SLEPc_3EPS_6target_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_6target_2__set__(((struct PySlepcEPSObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  /* "SLEPc/EPS.pyx":1231
+ *         if ncv == 0: return subspace
+ *         cdef PetscMat A = NULL
+ *         CHKERR( EPSGetOperators(self.eps, &A, NULL) )             # <<<<<<<<<<<<<<
+ *         CHKERR( MatCreateVecs(A, &v, NULL) )
+ *         cdef Vec V = None
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetOperators(__pyx_v_self->eps, (&__pyx_v_A), NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 1231, __pyx_L1_error)
 
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "SLEPc/EPS.pyx":1232
+ *         cdef PetscMat A = NULL
+ *         CHKERR( EPSGetOperators(self.eps, &A, NULL) )
+ *         CHKERR( MatCreateVecs(A, &v, NULL) )             # <<<<<<<<<<<<<<
+ *         cdef Vec V = None
+ *         cdef object tmp = allocate(ncv*sizeof(Vec),<void**>&isp)
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MatCreateVecs(__pyx_v_A, (&__pyx_v_v), NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 1232, __pyx_L1_error)
 
-static int __pyx_pf_8slepc4py_5SLEPc_3EPS_6target_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
+  /* "SLEPc/EPS.pyx":1233
+ *         CHKERR( EPSGetOperators(self.eps, &A, NULL) )
+ *         CHKERR( MatCreateVecs(A, &v, NULL) )
+ *         cdef Vec V = None             # <<<<<<<<<<<<<<
+ *         cdef object tmp = allocate(ncv*sizeof(Vec),<void**>&isp)
+ *         for i in range(ncv):
+ */
+  __Pyx_INCREF(Py_None);
+  __pyx_v_V = ((struct PyPetscVecObject *)Py_None);
 
-  /* "SLEPc/EPS.pyx":1673
- *             return self.getTarget()
- *         def __set__(self, value):
- *             self.setTarget(value)             # <<<<<<<<<<<<<<
- * 
- *     property tol:
+  /* "SLEPc/EPS.pyx":1234
+ *         CHKERR( MatCreateVecs(A, &v, NULL) )
+ *         cdef Vec V = None
+ *         cdef object tmp = allocate(ncv*sizeof(Vec),<void**>&isp)             # <<<<<<<<<<<<<<
+ *         for i in range(ncv):
+ *             if i == 0: isp[0] = v
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTarget); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1673; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_3)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_3);
-      __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_allocate((__pyx_v_ncv * (sizeof(struct PyPetscVecObject))), ((void **)(&__pyx_v_isp))); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1234, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_tmp = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "SLEPc/EPS.pyx":1235
+ *         cdef Vec V = None
+ *         cdef object tmp = allocate(ncv*sizeof(Vec),<void**>&isp)
+ *         for i in range(ncv):             # <<<<<<<<<<<<<<
+ *             if i == 0: isp[0] = v
+ *             if i >= 1: CHKERR( VecDuplicate(v, &isp[i]) )
+ */
+  __pyx_t_4 = __pyx_v_ncv;
+  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
+    __pyx_v_i = __pyx_t_5;
+
+    /* "SLEPc/EPS.pyx":1236
+ *         cdef object tmp = allocate(ncv*sizeof(Vec),<void**>&isp)
+ *         for i in range(ncv):
+ *             if i == 0: isp[0] = v             # <<<<<<<<<<<<<<
+ *             if i >= 1: CHKERR( VecDuplicate(v, &isp[i]) )
+ *             V = Vec(); V.vec = isp[i]; subspace.append(V)
+ */
+    __pyx_t_3 = ((__pyx_v_i == 0) != 0);
+    if (__pyx_t_3) {
+      (__pyx_v_isp[0]) = __pyx_v_v;
     }
-  }
-  if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1673; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-  } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1673; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
-    __Pyx_INCREF(__pyx_v_value);
-    __Pyx_GIVEREF(__pyx_v_value);
-    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1673; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+    /* "SLEPc/EPS.pyx":1237
+ *         for i in range(ncv):
+ *             if i == 0: isp[0] = v
+ *             if i >= 1: CHKERR( VecDuplicate(v, &isp[i]) )             # <<<<<<<<<<<<<<
+ *             V = Vec(); V.vec = isp[i]; subspace.append(V)
+ *         CHKERR( EPSGetInvariantSubspace(self.eps, isp) )
+ */
+    __pyx_t_3 = ((__pyx_v_i >= 1) != 0);
+    if (__pyx_t_3) {
+      __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(VecDuplicate(__pyx_v_v, (&(__pyx_v_isp[__pyx_v_i])))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 1237, __pyx_L1_error)
+    }
+
+    /* "SLEPc/EPS.pyx":1238
+ *             if i == 0: isp[0] = v
+ *             if i >= 1: CHKERR( VecDuplicate(v, &isp[i]) )
+ *             V = Vec(); V.vec = isp[i]; subspace.append(V)             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetInvariantSubspace(self.eps, isp) )
+ *         return subspace
+ */
+    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1238, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_DECREF_SET(__pyx_v_V, ((struct PyPetscVecObject *)__pyx_t_1));
+    __pyx_t_1 = 0;
+    __pyx_v_V->vec = (__pyx_v_isp[__pyx_v_i]);
+    __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_subspace, ((PyObject *)__pyx_v_V)); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(13, 1238, __pyx_L1_error)
   }
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "SLEPc/EPS.pyx":1672
- *         def __get__(self):
- *             return self.getTarget()
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setTarget(value)
+  /* "SLEPc/EPS.pyx":1239
+ *             if i >= 1: CHKERR( VecDuplicate(v, &isp[i]) )
+ *             V = Vec(); V.vec = isp[i]; subspace.append(V)
+ *         CHKERR( EPSGetInvariantSubspace(self.eps, isp) )             # <<<<<<<<<<<<<<
+ *         return subspace
  * 
  */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetInvariantSubspace(__pyx_v_self->eps, __pyx_v_isp)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 1239, __pyx_L1_error)
 
-  /* function exit code */
-  __pyx_r = 0;
+  /* "SLEPc/EPS.pyx":1240
+ *             V = Vec(); V.vec = isp[i]; subspace.append(V)
+ *         CHKERR( EPSGetInvariantSubspace(self.eps, isp) )
+ *         return subspace             # <<<<<<<<<<<<<<
+ * 
+ *     #
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_subspace);
+  __pyx_r = __pyx_v_subspace;
   goto __pyx_L0;
+
+  /* "SLEPc/EPS.pyx":1207
+ *         return complex(toScalar(sval1), toScalar(sval2))
+ * 
+ *     def getInvariantSubspace(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets an orthonormal basis of the computed invariant subspace.
+ */
+
+  /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.target.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getInvariantSubspace", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_subspace);
+  __Pyx_XDECREF((PyObject *)__pyx_v_V);
+  __Pyx_XDECREF(__pyx_v_tmp);
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1676
+/* "SLEPc/EPS.pyx":1244
+ *     #
  * 
- *     property tol:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getTolerances()[0]
- *         def __set__(self, value):
+ *     def getErrorEstimate(self, int i):             # <<<<<<<<<<<<<<
+ *         """
+ *         Returns the error estimate associated to the i-th computed
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_3tol_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_3tol_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_117getErrorEstimate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_116getErrorEstimate[] = "EPS.getErrorEstimate(self, int i)\n\n        Returns the error estimate associated to the i-th computed\n        eigenpair.\n\n        Parameters\n        ----------\n        i: int\n           Index of the solution to be considered.\n\n        Returns\n        -------\n        e: real\n           Error estimate.\n\n        Notes\n        -----\n        This is the error estimate used internally by the\n        eigensol [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_117getErrorEstimate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_i;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_3tol___get__(((struct PySlepcEPSObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("getErrorEstimate (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getErrorEstimate") < 0)) __PYX_ERR(13, 1244, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) __PYX_ERR(13, 1244, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getErrorEstimate", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 1244, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getErrorEstimate", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_116getErrorEstimate(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_i);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_3tol___get__(struct PySlepcEPSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_116getErrorEstimate(struct PySlepcEPSObject *__pyx_v_self, int __pyx_v_i) {
+  PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_RefNannySetupContext("getErrorEstimate", 0);
 
-  /* "SLEPc/EPS.pyx":1677
- *     property tol:
- *         def __get__(self):
- *             return self.getTolerances()[0]             # <<<<<<<<<<<<<<
- *         def __set__(self, value):
- *             self.setTolerances(tol=value)
+  /* "SLEPc/EPS.pyx":1265
+ *         `computeError()`.
+ *         """
+ *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSGetErrorEstimate(self.eps, i, &rval) )
+ *         return toReal(rval)
+ */
+  __pyx_v_rval = 0.0;
+
+  /* "SLEPc/EPS.pyx":1266
+ *         """
+ *         cdef PetscReal rval = 0
+ *         CHKERR( EPSGetErrorEstimate(self.eps, i, &rval) )             # <<<<<<<<<<<<<<
+ *         return toReal(rval)
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSGetErrorEstimate(__pyx_v_self->eps, __pyx_v_i, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 1266, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":1267
+ *         cdef PetscReal rval = 0
+ *         CHKERR( EPSGetErrorEstimate(self.eps, i, &rval) )
+ *         return toReal(rval)             # <<<<<<<<<<<<<<
+ * 
+ *     def computeError(self, int i, etype=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getTolerances); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1677; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_3)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_3);
-      __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
-    }
-  }
-  if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1677; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1677; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1677; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1267, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":1676
+  /* "SLEPc/EPS.pyx":1244
+ *     #
  * 
- *     property tol:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getTolerances()[0]
- *         def __set__(self, value):
+ *     def getErrorEstimate(self, int i):             # <<<<<<<<<<<<<<
+ *         """
+ *         Returns the error estimate associated to the i-th computed
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.tol.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getErrorEstimate", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -27130,159 +28142,320 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_3tol___get__(struct PySlepcEPSOb
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1678
- *         def __get__(self):
- *             return self.getTolerances()[0]
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setTolerances(tol=value)
+/* "SLEPc/EPS.pyx":1269
+ *         return toReal(rval)
  * 
+ *     def computeError(self, int i, etype=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Computes the error (based on the residual norm) associated with the i-th
  */
 
 /* Python wrapper */
-static int __pyx_pw_8slepc4py_5SLEPc_3EPS_3tol_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_8slepc4py_5SLEPc_3EPS_3tol_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_119computeError(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_118computeError[] = "EPS.computeError(self, int i, etype=None)\n\n        Computes the error (based on the residual norm) associated with the i-th\n        computed eigenpair.\n\n        Parameters\n        ----------\n        i: int\n           Index of the solution to be considered.\n        etype: `EPS.ErrorType` enumerate\n           The error type to compute.\n\n        Returns\n        -------\n        e: real\n           The error bound, [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_119computeError(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_i;
+  PyObject *__pyx_v_etype = 0;
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_3tol_2__set__(((struct PySlepcEPSObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannySetupContext("computeError (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,&__pyx_n_s_etype,0};
+    PyObject* values[2] = {0,0};
+    values[1] = ((PyObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_etype);
+          if (value) { values[1] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeError") < 0)) __PYX_ERR(13, 1269, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) __PYX_ERR(13, 1269, __pyx_L3_error)
+    __pyx_v_etype = values[1];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("computeError", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 1269, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.computeError", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_118computeError(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_i, __pyx_v_etype);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_8slepc4py_5SLEPc_3EPS_3tol_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_118computeError(struct PySlepcEPSObject *__pyx_v_self, int __pyx_v_i, PyObject *__pyx_v_etype) {
+  EPSErrorType __pyx_v_et;
+  PetscReal __pyx_v_rval;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
+  int __pyx_t_1;
+  int __pyx_t_2;
+  EPSErrorType __pyx_t_3;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("computeError", 0);
 
-  /* "SLEPc/EPS.pyx":1679
- *             return self.getTolerances()[0]
- *         def __set__(self, value):
- *             self.setTolerances(tol=value)             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1293
+ *         ``nconv-1`` (see `getConverged()`).
+ *         """
+ *         cdef SlepcEPSErrorType et = EPS_ERROR_RELATIVE             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = 0
+ *         if etype is not None: et = etype
+ */
+  __pyx_v_et = EPS_ERROR_RELATIVE;
+
+  /* "SLEPc/EPS.pyx":1294
+ *         """
+ *         cdef SlepcEPSErrorType et = EPS_ERROR_RELATIVE
+ *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
+ *         if etype is not None: et = etype
+ *         CHKERR( EPSComputeError(self.eps, i, et, &rval) )
+ */
+  __pyx_v_rval = 0.0;
+
+  /* "SLEPc/EPS.pyx":1295
+ *         cdef SlepcEPSErrorType et = EPS_ERROR_RELATIVE
+ *         cdef PetscReal rval = 0
+ *         if etype is not None: et = etype             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSComputeError(self.eps, i, et, &rval) )
+ *         return toReal(rval)
+ */
+  __pyx_t_1 = (__pyx_v_etype != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = ((EPSErrorType)__Pyx_PyInt_As_EPSErrorType(__pyx_v_etype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(13, 1295, __pyx_L1_error)
+    __pyx_v_et = __pyx_t_3;
+  }
+
+  /* "SLEPc/EPS.pyx":1296
+ *         cdef PetscReal rval = 0
+ *         if etype is not None: et = etype
+ *         CHKERR( EPSComputeError(self.eps, i, et, &rval) )             # <<<<<<<<<<<<<<
+ *         return toReal(rval)
  * 
- *     property max_it:
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTolerances); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1679; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1679; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_tol, __pyx_v_value) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1679; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1679; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSComputeError(__pyx_v_self->eps, __pyx_v_i, __pyx_v_et, (&__pyx_v_rval))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(13, 1296, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":1678
- *         def __get__(self):
- *             return self.getTolerances()[0]
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setTolerances(tol=value)
+  /* "SLEPc/EPS.pyx":1297
+ *         if etype is not None: et = etype
+ *         CHKERR( EPSComputeError(self.eps, i, et, &rval) )
+ *         return toReal(rval)             # <<<<<<<<<<<<<<
+ * 
+ *     def errorView(self, etype=None, Viewer viewer=None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 1297, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_r = __pyx_t_5;
+  __pyx_t_5 = 0;
+  goto __pyx_L0;
+
+  /* "SLEPc/EPS.pyx":1269
+ *         return toReal(rval)
  * 
+ *     def computeError(self, int i, etype=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Computes the error (based on the residual norm) associated with the i-th
  */
 
   /* function exit code */
-  __pyx_r = 0;
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.tol.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.computeError", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1682
+/* "SLEPc/EPS.pyx":1299
+ *         return toReal(rval)
  * 
- *     property max_it:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getTolerances()[1]
- *         def __set__(self, value):
+ *     def errorView(self, etype=None, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Displays the errors associated with the computed solution
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_6max_it_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_6max_it_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_121errorView(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_120errorView[] = "EPS.errorView(self, etype=None, Viewer viewer=None)\n\n        Displays the errors associated with the computed solution\n        (as well as the eigenvalues).\n\n        Parameters\n        ----------\n        etype: `EPS.ErrorType` enumerate, optional\n           The error type to compute.\n        viewer: Viewer, optional.\n                Visualization context; if not provided, the standard\n                output is used. [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_121errorView(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_etype = 0;
+  struct PyPetscViewerObject *__pyx_v_viewer = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_6max_it___get__(((struct PySlepcEPSObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("errorView (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_etype,&__pyx_n_s_viewer,0};
+    PyObject* values[2] = {0,0};
+    values[0] = ((PyObject *)Py_None);
+    values[1] = (PyObject *)((struct PyPetscViewerObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_etype);
+          if (value) { values[0] = value; kw_args--; }
+        }
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_viewer);
+          if (value) { values[1] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "errorView") < 0)) __PYX_ERR(13, 1299, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_etype = values[0];
+    __pyx_v_viewer = ((struct PyPetscViewerObject *)values[1]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("errorView", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 1299, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.errorView", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) __PYX_ERR(13, 1299, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_120errorView(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_etype, __pyx_v_viewer);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_6max_it___get__(struct PySlepcEPSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_120errorView(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_etype, struct PyPetscViewerObject *__pyx_v_viewer) {
+  EPSErrorType __pyx_v_et;
+  PetscViewer __pyx_v_vwr;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 0);
-
-  /* "SLEPc/EPS.pyx":1683
- *     property max_it:
- *         def __get__(self):
- *             return self.getTolerances()[1]             # <<<<<<<<<<<<<<
- *         def __set__(self, value):
- *             self.setTolerances(max_it=value)
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getTolerances); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1683; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_3)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_3);
-      __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
-    }
-  }
-  if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1683; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1683; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1683; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  int __pyx_t_1;
+  int __pyx_t_2;
+  EPSErrorType __pyx_t_3;
+  PetscViewer __pyx_t_4;
+  int __pyx_t_5;
+  __Pyx_RefNannySetupContext("errorView", 0);
 
-  /* "SLEPc/EPS.pyx":1682
+  /* "SLEPc/EPS.pyx":1320
  * 
- *     property max_it:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getTolerances()[1]
- *         def __set__(self, value):
+ *         """
+ *         cdef SlepcEPSErrorType et = EPS_ERROR_RELATIVE             # <<<<<<<<<<<<<<
+ *         if etype is not None: et = etype
+ *         cdef PetscViewer vwr = NULL
  */
+  __pyx_v_et = EPS_ERROR_RELATIVE;
 
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.max_it.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  /* "SLEPc/EPS.pyx":1321
+ *         """
+ *         cdef SlepcEPSErrorType et = EPS_ERROR_RELATIVE
+ *         if etype is not None: et = etype             # <<<<<<<<<<<<<<
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr
+ */
+  __pyx_t_1 = (__pyx_v_etype != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = ((EPSErrorType)__Pyx_PyInt_As_EPSErrorType(__pyx_v_etype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(13, 1321, __pyx_L1_error)
+    __pyx_v_et = __pyx_t_3;
+  }
+
+  /* "SLEPc/EPS.pyx":1322
+ *         cdef SlepcEPSErrorType et = EPS_ERROR_RELATIVE
+ *         if etype is not None: et = etype
+ *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( EPSErrorView(self.eps, et, vwr) )
+ */
+  __pyx_v_vwr = NULL;
+
+  /* "SLEPc/EPS.pyx":1323
+ *         if etype is not None: et = etype
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSErrorView(self.eps, et, vwr) )
+ * 
+ */
+  __pyx_t_2 = (((PyObject *)__pyx_v_viewer) != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_4 = __pyx_v_viewer->vwr;
+    __pyx_v_vwr = __pyx_t_4;
+  }
+
+  /* "SLEPc/EPS.pyx":1324
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( EPSErrorView(self.eps, et, vwr) )             # <<<<<<<<<<<<<<
+ * 
+ *     #
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSErrorView(__pyx_v_self->eps, __pyx_v_et, __pyx_v_vwr)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(13, 1324, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":1299
+ *         return toReal(rval)
+ * 
+ *     def errorView(self, etype=None, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Displays the errors associated with the computed solution
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.errorView", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -27290,156 +28463,188 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_6max_it___get__(struct PySlepcEP
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1684
- *         def __get__(self):
- *             return self.getTolerances()[1]
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setTolerances(max_it=value)
+/* "SLEPc/EPS.pyx":1328
+ *     #
  * 
+ *     def setPowerShiftType(self, shift):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the type of shifts used during the power iteration. This
  */
 
 /* Python wrapper */
-static int __pyx_pw_8slepc4py_5SLEPc_3EPS_6max_it_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_8slepc4py_5SLEPc_3EPS_6max_it_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_123setPowerShiftType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_122setPowerShiftType[] = "EPS.setPowerShiftType(self, shift)\n\n        Sets the type of shifts used during the power iteration. This\n        can be used to emulate the Rayleigh Quotient Iteration (RQI)\n        method.\n\n        Parameters\n        ----------\n        shift: `EPS.PowerShiftType` enumerate\n               The type of shift.\n\n        Notes\n        -----\n        This call is only relevant if the type was set to\n        `EP [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_123setPowerShiftType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_shift = 0;
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_6max_it_2__set__(((struct PySlepcEPSObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannySetupContext("setPowerShiftType (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_shift,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_shift)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPowerShiftType") < 0)) __PYX_ERR(13, 1328, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_shift = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setPowerShiftType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 1328, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setPowerShiftType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_122setPowerShiftType(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_shift);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_8slepc4py_5SLEPc_3EPS_6max_it_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_122setPowerShiftType(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_shift) {
+  EPSPowerShiftType __pyx_v_val;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
+  EPSPowerShiftType __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setPowerShiftType", 0);
 
-  /* "SLEPc/EPS.pyx":1685
- *             return self.getTolerances()[1]
- *         def __set__(self, value):
- *             self.setTolerances(max_it=value)             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1354
+ *         behaves rather like a cubic converging method as RQI.
+ *         """
+ *         cdef SlepcEPSPowerShiftType val = shift             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSPowerSetShiftType(self.eps, val) )
  * 
- *     property st:
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTolerances); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1685; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1685; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_max_it, __pyx_v_value) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1685; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1685; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_1 = ((EPSPowerShiftType)__Pyx_PyInt_As_EPSPowerShiftType(__pyx_v_shift)); if (unlikely(PyErr_Occurred())) __PYX_ERR(13, 1354, __pyx_L1_error)
+  __pyx_v_val = __pyx_t_1;
 
-  /* "SLEPc/EPS.pyx":1684
- *         def __get__(self):
- *             return self.getTolerances()[1]
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setTolerances(max_it=value)
+  /* "SLEPc/EPS.pyx":1355
+ *         """
+ *         cdef SlepcEPSPowerShiftType val = shift
+ *         CHKERR( EPSPowerSetShiftType(self.eps, val) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getPowerShiftType(self):
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSPowerSetShiftType(__pyx_v_self->eps, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 1355, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":1328
+ *     #
  * 
+ *     def setPowerShiftType(self, shift):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the type of shifts used during the power iteration. This
  */
 
   /* function exit code */
-  __pyx_r = 0;
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.max_it.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setPowerShiftType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1688
+/* "SLEPc/EPS.pyx":1357
+ *         CHKERR( EPSPowerSetShiftType(self.eps, val) )
  * 
- *     property st:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getST()
- *         def __set__(self, value):
+ *     def getPowerShiftType(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the type of shifts used during the power iteration.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_2st_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_2st_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_125getPowerShiftType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_124getPowerShiftType[] = "EPS.getPowerShiftType(self)\n\n        Gets the type of shifts used during the power iteration.\n\n        Returns\n        -------\n        shift: `EPS.PowerShiftType` enumerate\n               The type of shift.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_125getPowerShiftType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_2st___get__(((struct PySlepcEPSObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("getPowerShiftType (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getPowerShiftType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getPowerShiftType", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_124getPowerShiftType(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_2st___get__(struct PySlepcEPSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_124getPowerShiftType(struct PySlepcEPSObject *__pyx_v_self) {
+  EPSPowerShiftType __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_RefNannySetupContext("getPowerShiftType", 0);
 
-  /* "SLEPc/EPS.pyx":1689
- *     property st:
- *         def __get__(self):
- *             return self.getST()             # <<<<<<<<<<<<<<
- *         def __set__(self, value):
- *             self.setST(value)
+  /* "SLEPc/EPS.pyx":1366
+ *                The type of shift.
+ *         """
+ *         cdef SlepcEPSPowerShiftType val = EPS_POWER_SHIFT_CONSTANT             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSPowerGetShiftType(self.eps, &val) )
+ *         return val
+ */
+  __pyx_v_val = EPS_POWER_SHIFT_CONSTANT;
+
+  /* "SLEPc/EPS.pyx":1367
+ *         """
+ *         cdef SlepcEPSPowerShiftType val = EPS_POWER_SHIFT_CONSTANT
+ *         CHKERR( EPSPowerGetShiftType(self.eps, &val) )             # <<<<<<<<<<<<<<
+ *         return val
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSPowerGetShiftType(__pyx_v_self->eps, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 1367, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":1368
+ *         cdef SlepcEPSPowerShiftType val = EPS_POWER_SHIFT_CONSTANT
+ *         CHKERR( EPSPowerGetShiftType(self.eps, &val) )
+ *         return val             # <<<<<<<<<<<<<<
+ * 
+ *     def setArnoldiDelayed(self, delayed):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getST); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1689; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_EPSPowerShiftType(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1368, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_3)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_3);
-      __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
-    }
-  }
-  if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1689; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1689; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":1688
+  /* "SLEPc/EPS.pyx":1357
+ *         CHKERR( EPSPowerSetShiftType(self.eps, val) )
  * 
- *     property st:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getST()
- *         def __set__(self, value):
+ *     def getPowerShiftType(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the type of shifts used during the power iteration.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.st.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getPowerShiftType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -27447,176 +28652,199 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_2st___get__(struct PySlepcEPSObj
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1690
- *         def __get__(self):
- *             return self.getST()
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setST(value)
+/* "SLEPc/EPS.pyx":1370
+ *         return val
  * 
+ *     def setArnoldiDelayed(self, delayed):             # <<<<<<<<<<<<<<
+ *         """
+ *         Activates or deactivates delayed reorthogonalization in the
  */
 
 /* Python wrapper */
-static int __pyx_pw_8slepc4py_5SLEPc_3EPS_2st_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_8slepc4py_5SLEPc_3EPS_2st_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_127setArnoldiDelayed(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_126setArnoldiDelayed[] = "EPS.setArnoldiDelayed(self, delayed)\n\n        Activates or deactivates delayed reorthogonalization in the\n        Arnoldi iteration.\n\n        Parameters\n        ----------\n        delayed: boolean\n                 True if delayed reorthogonalization is to be used.\n\n        Notes\n        -----\n        This call is only relevant if the type was set to\n        `EPS.Type.ARNOLDI` with `setType()`.\n\n        D [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_127setArnoldiDelayed(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_delayed = 0;
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_2st_2__set__(((struct PySlepcEPSObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannySetupContext("setArnoldiDelayed (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_delayed,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_delayed)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setArnoldiDelayed") < 0)) __PYX_ERR(13, 1370, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_delayed = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setArnoldiDelayed", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 1370, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setArnoldiDelayed", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_126setArnoldiDelayed(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_delayed);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_8slepc4py_5SLEPc_3EPS_2st_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_126setArnoldiDelayed(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_delayed) {
+  PetscBool __pyx_v_val;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
+  int __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setArnoldiDelayed", 0);
 
-  /* "SLEPc/EPS.pyx":1691
- *             return self.getST()
- *         def __set__(self, value):
- *             self.setST(value)             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1390
+ *         algorithm.
+ *         """
+ *         cdef PetscBool val = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         if delayed: val = PETSC_TRUE
+ *         CHKERR( EPSArnoldiSetDelayed(self.eps, val) )
+ */
+  __pyx_v_val = PETSC_FALSE;
+
+  /* "SLEPc/EPS.pyx":1391
+ *         """
+ *         cdef PetscBool val = PETSC_FALSE
+ *         if delayed: val = PETSC_TRUE             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSArnoldiSetDelayed(self.eps, val) )
  * 
- *     property bv:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setST); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1691; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_3)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_3);
-      __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
-    }
-  }
-  if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1691; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-  } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1691; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
-    __Pyx_INCREF(__pyx_v_value);
-    __Pyx_GIVEREF(__pyx_v_value);
-    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1691; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_delayed); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(13, 1391, __pyx_L1_error)
+  if (__pyx_t_1) {
+    __pyx_v_val = PETSC_TRUE;
   }
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "SLEPc/EPS.pyx":1690
- *         def __get__(self):
- *             return self.getST()
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setST(value)
+  /* "SLEPc/EPS.pyx":1392
+ *         cdef PetscBool val = PETSC_FALSE
+ *         if delayed: val = PETSC_TRUE
+ *         CHKERR( EPSArnoldiSetDelayed(self.eps, val) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getArnoldiDelayed(self):
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSArnoldiSetDelayed(__pyx_v_self->eps, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 1392, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":1370
+ *         return val
  * 
+ *     def setArnoldiDelayed(self, delayed):             # <<<<<<<<<<<<<<
+ *         """
+ *         Activates or deactivates delayed reorthogonalization in the
  */
 
   /* function exit code */
-  __pyx_r = 0;
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.st.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setArnoldiDelayed", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1694
+/* "SLEPc/EPS.pyx":1394
+ *         CHKERR( EPSArnoldiSetDelayed(self.eps, val) )
  * 
- *     property bv:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getBV()
- *         def __set__(self, value):
+ *     def getArnoldiDelayed(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the type of reorthogonalization used during the Arnoldi
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_2bv_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_2bv_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_129getArnoldiDelayed(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_128getArnoldiDelayed[] = "EPS.getArnoldiDelayed(self)\n\n        Gets the type of reorthogonalization used during the Arnoldi\n        iteration.\n\n        Returns\n        -------\n        delayed: boolean\n                 True if delayed reorthogonalization is to be used.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_129getArnoldiDelayed(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_2bv___get__(((struct PySlepcEPSObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("getArnoldiDelayed (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getArnoldiDelayed", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getArnoldiDelayed", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_128getArnoldiDelayed(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_2bv___get__(struct PySlepcEPSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_128getArnoldiDelayed(struct PySlepcEPSObject *__pyx_v_self) {
+  PetscBool __pyx_v_tval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_RefNannySetupContext("getArnoldiDelayed", 0);
 
-  /* "SLEPc/EPS.pyx":1695
- *     property bv:
- *         def __get__(self):
- *             return self.getBV()             # <<<<<<<<<<<<<<
- *         def __set__(self, value):
- *             self.setBV(value)
+  /* "SLEPc/EPS.pyx":1404
+ *                  True if delayed reorthogonalization is to be used.
+ *         """
+ *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSArnoldiGetDelayed(self.eps, &tval) )
+ *         return <bint> tval
+ */
+  __pyx_v_tval = PETSC_FALSE;
+
+  /* "SLEPc/EPS.pyx":1405
+ *         """
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( EPSArnoldiGetDelayed(self.eps, &tval) )             # <<<<<<<<<<<<<<
+ *         return <bint> tval
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSArnoldiGetDelayed(__pyx_v_self->eps, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 1405, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":1406
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( EPSArnoldiGetDelayed(self.eps, &tval) )
+ *         return <bint> tval             # <<<<<<<<<<<<<<
+ * 
+ *     def setLanczosReorthogType(self, reorthog):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBV); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1695; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_tval); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1406, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_3)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_3);
-      __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
-    }
-  }
-  if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1695; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1695; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":1694
+  /* "SLEPc/EPS.pyx":1394
+ *         CHKERR( EPSArnoldiSetDelayed(self.eps, val) )
  * 
- *     property bv:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getBV()
- *         def __set__(self, value):
+ *     def getArnoldiDelayed(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the type of reorthogonalization used during the Arnoldi
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.bv.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getArnoldiDelayed", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -27624,182 +28852,214 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_2bv___get__(struct PySlepcEPSObj
   return __pyx_r;
 }
 
-/* "SLEPc/EPS.pyx":1696
- *         def __get__(self):
- *             return self.getBV()
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setBV(value)
+/* "SLEPc/EPS.pyx":1408
+ *         return <bint> tval
  * 
+ *     def setLanczosReorthogType(self, reorthog):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the type of reorthogonalization used during the Lanczos
  */
 
 /* Python wrapper */
-static int __pyx_pw_8slepc4py_5SLEPc_3EPS_2bv_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_8slepc4py_5SLEPc_3EPS_2bv_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_131setLanczosReorthogType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_130setLanczosReorthogType[] = "EPS.setLanczosReorthogType(self, reorthog)\n\n        Sets the type of reorthogonalization used during the Lanczos\n        iteration.\n\n        Parameters\n        ----------\n        reorthog: `EPS.LanczosReorthogType` enumerate\n                  The type of reorthogonalization.\n\n        Notes\n        -----\n        This call is only relevant if the type was set to\n        `EPS.Type.LANCZOS` with `setType( [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_131setLanczosReorthogType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_reorthog = 0;
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_2bv_2__set__(((struct PySlepcEPSObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannySetupContext("setLanczosReorthogType (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_reorthog,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_reorthog)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLanczosReorthogType") < 0)) __PYX_ERR(13, 1408, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_reorthog = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setLanczosReorthogType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 1408, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setLanczosReorthogType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_130setLanczosReorthogType(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_reorthog);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_8slepc4py_5SLEPc_3EPS_2bv_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_130setLanczosReorthogType(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_reorthog) {
+  EPSLanczosReorthogType __pyx_v_val;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
+  EPSLanczosReorthogType __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setLanczosReorthogType", 0);
 
-  /* "SLEPc/EPS.pyx":1697
- *             return self.getBV()
- *         def __set__(self, value):
- *             self.setBV(value)             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1423
+ *         `EPS.Type.LANCZOS` with `setType()`.
+ *         """
+ *         cdef SlepcEPSLanczosReorthogType val = reorthog             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSLanczosSetReorthog(self.eps, val) )
  * 
- * # -----------------------------------------------------------------------------
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setBV); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1697; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_3)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_3);
-      __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
-    }
-  }
-  if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1697; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-  } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1697; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
-    __Pyx_INCREF(__pyx_v_value);
-    __Pyx_GIVEREF(__pyx_v_value);
-    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1697; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  }
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = ((EPSLanczosReorthogType)__Pyx_PyInt_As_EPSLanczosReorthogType(__pyx_v_reorthog)); if (unlikely(PyErr_Occurred())) __PYX_ERR(13, 1423, __pyx_L1_error)
+  __pyx_v_val = __pyx_t_1;
 
-  /* "SLEPc/EPS.pyx":1696
- *         def __get__(self):
- *             return self.getBV()
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setBV(value)
+  /* "SLEPc/EPS.pyx":1424
+ *         """
+ *         cdef SlepcEPSLanczosReorthogType val = reorthog
+ *         CHKERR( EPSLanczosSetReorthog(self.eps, val) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getLanczosReorthogType(self):
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSLanczosSetReorthog(__pyx_v_self->eps, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 1424, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":1408
+ *         return <bint> tval
  * 
+ *     def setLanczosReorthogType(self, reorthog):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the type of reorthogonalization used during the Lanczos
  */
 
   /* function exit code */
-  __pyx_r = 0;
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.bv.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setLanczosReorthogType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":67
- *     ConvergedReason = SVDConvergedReason
+/* "SLEPc/EPS.pyx":1426
+ *         CHKERR( EPSLanczosSetReorthog(self.eps, val) )
  * 
- *     def __cinit__(self):             # <<<<<<<<<<<<<<
- *         self.obj = <PetscObject*> &self.svd
- *         self.svd = NULL
+ *     def getLanczosReorthogType(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the type of reorthogonalization used during the Lanczos
  */
 
 /* Python wrapper */
-static int __pyx_pw_8slepc4py_5SLEPc_3SVD_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_8slepc4py_5SLEPc_3SVD_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_r;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_133getLanczosReorthogType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_132getLanczosReorthogType[] = "EPS.getLanczosReorthogType(self)\n\n        Gets the type of reorthogonalization used during the Lanczos\n        iteration.\n\n        Returns\n        -------\n        reorthog: `EPS.LanczosReorthogType` enumerate\n                  The type of reorthogonalization.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_133getLanczosReorthogType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getLanczosReorthogType (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD___cinit__(((struct PySlepcSVDObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getLanczosReorthogType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getLanczosReorthogType", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_132getLanczosReorthogType(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_8slepc4py_5SLEPc_3SVD___cinit__(struct PySlepcSVDObject *__pyx_v_self) {
-  int __pyx_r;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_132getLanczosReorthogType(struct PySlepcEPSObject *__pyx_v_self) {
+  EPSLanczosReorthogType __pyx_v_val;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__", 0);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getLanczosReorthogType", 0);
 
-  /* "SLEPc/SVD.pyx":68
- * 
- *     def __cinit__(self):
- *         self.obj = <PetscObject*> &self.svd             # <<<<<<<<<<<<<<
- *         self.svd = NULL
+  /* "SLEPc/EPS.pyx":1437
+ *         """
+ *         cdef SlepcEPSLanczosReorthogType val = \
+ *             EPS_LANCZOS_REORTHOG_LOCAL             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSLanczosGetReorthog(self.eps, &val) )
+ *         return val
+ */
+  __pyx_v_val = EPS_LANCZOS_REORTHOG_LOCAL;
+
+  /* "SLEPc/EPS.pyx":1438
+ *         cdef SlepcEPSLanczosReorthogType val = \
+ *             EPS_LANCZOS_REORTHOG_LOCAL
+ *         CHKERR( EPSLanczosGetReorthog(self.eps, &val) )             # <<<<<<<<<<<<<<
+ *         return val
  * 
  */
-  __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->svd));
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSLanczosGetReorthog(__pyx_v_self->eps, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 1438, __pyx_L1_error)
 
-  /* "SLEPc/SVD.pyx":69
- *     def __cinit__(self):
- *         self.obj = <PetscObject*> &self.svd
- *         self.svd = NULL             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1439
+ *             EPS_LANCZOS_REORTHOG_LOCAL
+ *         CHKERR( EPSLanczosGetReorthog(self.eps, &val) )
+ *         return val             # <<<<<<<<<<<<<<
  * 
- *     def view(self, Viewer viewer=None):
+ *     #
  */
-  __pyx_v_self->svd = NULL;
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyInt_From_EPSLanczosReorthogType(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1439, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
 
-  /* "SLEPc/SVD.pyx":67
- *     ConvergedReason = SVDConvergedReason
+  /* "SLEPc/EPS.pyx":1426
+ *         CHKERR( EPSLanczosSetReorthog(self.eps, val) )
  * 
- *     def __cinit__(self):             # <<<<<<<<<<<<<<
- *         self.obj = <PetscObject*> &self.svd
- *         self.svd = NULL
+ *     def getLanczosReorthogType(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the type of reorthogonalization used during the Lanczos
  */
 
   /* function exit code */
-  __pyx_r = 0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getLanczosReorthogType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":71
- *         self.svd = NULL
+/* "SLEPc/EPS.pyx":1443
+ *     #
  * 
- *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *     def setKrylovSchurRestart(self, keep):             # <<<<<<<<<<<<<<
  *         """
- *         Prints the SVD data structure.
+ *         Sets the restart parameter for the Krylov-Schur method, in
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_2view[] = "SVD.view(self, Viewer viewer=None)\n\n        Prints the SVD data structure.\n\n        Parameters\n        ----------\n        viewer: Viewer, optional\n                Visualization context; if not provided, the standard\n                output is used.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscViewerObject *__pyx_v_viewer = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_135setKrylovSchurRestart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_134setKrylovSchurRestart[] = "EPS.setKrylovSchurRestart(self, keep)\n\n        Sets the restart parameter for the Krylov-Schur method, in\n        particular the proportion of basis vectors that must be kept\n        after restart.\n\n        Parameters\n        ----------\n        keep: float\n              The number of vectors to be kept at restart.\n\n        Notes\n        -----\n        Allowed values are in the range [0.1,0.9]. The defau [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_135setKrylovSchurRestart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_keep = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("view (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setKrylovSchurRestart (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_viewer,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_keep,0};
     PyObject* values[1] = {0};
-    values[0] = (PyObject *)((struct PyPetscViewerObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
@@ -27811,103 +29071,74 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_3view(PyObject *__pyx_v_self, Py
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_viewer);
-          if (value) { values[0] = value; kw_args--; }
-        }
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_keep)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setKrylovSchurRestart") < 0)) __PYX_ERR(13, 1443, __pyx_L3_error)
       }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
     } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_viewer = ((struct PyPetscViewerObject *)values[0]);
+    __pyx_v_keep = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setKrylovSchurRestart", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 1443, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setKrylovSchurRestart", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_2view(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_viewer);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_134setKrylovSchurRestart(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_keep);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_2view(struct PySlepcSVDObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
-  PetscViewer __pyx_v_vwr;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_134setKrylovSchurRestart(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_keep) {
+  PetscReal __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PetscReal __pyx_t_1;
   int __pyx_t_2;
-  PetscViewer __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("view", 0);
-
-  /* "SLEPc/SVD.pyx":81
- *                 output is used.
- *         """
- *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
- *         if viewer is not None: vwr = viewer.vwr
- *         CHKERR( SVDView(self.svd, vwr) )
- */
-  __pyx_v_vwr = NULL;
+  __Pyx_RefNannySetupContext("setKrylovSchurRestart", 0);
 
-  /* "SLEPc/SVD.pyx":82
+  /* "SLEPc/EPS.pyx":1458
+ *         Allowed values are in the range [0.1,0.9]. The default is 0.5.
  *         """
- *         cdef PetscViewer vwr = NULL
- *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
- *         CHKERR( SVDView(self.svd, vwr) )
+ *         cdef PetscReal val = keep             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSKrylovSchurSetRestart(self.eps, val) )
  * 
  */
-  __pyx_t_1 = (((PyObject *)__pyx_v_viewer) != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_v_viewer->vwr;
-    __pyx_v_vwr = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_keep); if (unlikely((__pyx_t_1 == (PetscReal)-1) && PyErr_Occurred())) __PYX_ERR(13, 1458, __pyx_L1_error)
+  __pyx_v_val = __pyx_t_1;
 
-  /* "SLEPc/SVD.pyx":83
- *         cdef PetscViewer vwr = NULL
- *         if viewer is not None: vwr = viewer.vwr
- *         CHKERR( SVDView(self.svd, vwr) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1459
+ *         """
+ *         cdef PetscReal val = keep
+ *         CHKERR( EPSKrylovSchurSetRestart(self.eps, val) )             # <<<<<<<<<<<<<<
  * 
- *     def destroy(self):
+ *     def getKrylovSchurRestart(self):
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDView(__pyx_v_self->svd, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurSetRestart(__pyx_v_self->eps, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 1459, __pyx_L1_error)
 
-  /* "SLEPc/SVD.pyx":71
- *         self.svd = NULL
+  /* "SLEPc/EPS.pyx":1443
+ *     #
  * 
- *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *     def setKrylovSchurRestart(self, keep):             # <<<<<<<<<<<<<<
  *         """
- *         Prints the SVD data structure.
+ *         Sets the restart parameter for the Krylov-Schur method, in
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setKrylovSchurRestart", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -27915,81 +29146,83 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_2view(struct PySlepcSVDObject *_
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":85
- *         CHKERR( SVDView(self.svd, vwr) )
+/* "SLEPc/EPS.pyx":1461
+ *         CHKERR( EPSKrylovSchurSetRestart(self.eps, val) )
  * 
- *     def destroy(self):             # <<<<<<<<<<<<<<
+ *     def getKrylovSchurRestart(self):             # <<<<<<<<<<<<<<
  *         """
- *         Destroys the SVD object.
+ *         Gets the restart parameter used in the Krylov-Schur method.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_4destroy[] = "SVD.destroy(self)\n\n        Destroys the SVD object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_137getKrylovSchurRestart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_136getKrylovSchurRestart[] = "EPS.getKrylovSchurRestart(self)\n\n        Gets the restart parameter used in the Krylov-Schur method.\n\n        Returns\n        -------\n        keep: float\n              The number of vectors to be kept at restart.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_137getKrylovSchurRestart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("destroy (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getKrylovSchurRestart (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("destroy", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "destroy", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_4destroy(((struct PySlepcSVDObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getKrylovSchurRestart", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getKrylovSchurRestart", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_136getKrylovSchurRestart(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_4destroy(struct PySlepcSVDObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_136getKrylovSchurRestart(struct PySlepcEPSObject *__pyx_v_self) {
+  PetscReal __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("destroy", 0);
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getKrylovSchurRestart", 0);
 
-  /* "SLEPc/SVD.pyx":89
- *         Destroys the SVD object.
+  /* "SLEPc/EPS.pyx":1470
+ *               The number of vectors to be kept at restart.
  *         """
- *         CHKERR( SVDDestroy(&self.svd) )             # <<<<<<<<<<<<<<
- *         self.svd = NULL
- *         return self
+ *         cdef PetscReal val = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSKrylovSchurGetRestart(self.eps, &val) )
+ *         return val
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDDestroy((&__pyx_v_self->svd))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_val = 0.0;
 
-  /* "SLEPc/SVD.pyx":90
+  /* "SLEPc/EPS.pyx":1471
  *         """
- *         CHKERR( SVDDestroy(&self.svd) )
- *         self.svd = NULL             # <<<<<<<<<<<<<<
- *         return self
+ *         cdef PetscReal val = 0
+ *         CHKERR( EPSKrylovSchurGetRestart(self.eps, &val) )             # <<<<<<<<<<<<<<
+ *         return val
  * 
  */
-  __pyx_v_self->svd = NULL;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurGetRestart(__pyx_v_self->eps, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 1471, __pyx_L1_error)
 
-  /* "SLEPc/SVD.pyx":91
- *         CHKERR( SVDDestroy(&self.svd) )
- *         self.svd = NULL
- *         return self             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1472
+ *         cdef PetscReal val = 0
+ *         CHKERR( EPSKrylovSchurGetRestart(self.eps, &val) )
+ *         return val             # <<<<<<<<<<<<<<
  * 
- *     def reset(self):
+ *     def setKrylovSchurLocking(self, lock):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_r = ((PyObject *)__pyx_v_self);
+  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1472, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/SVD.pyx":85
- *         CHKERR( SVDView(self.svd, vwr) )
+  /* "SLEPc/EPS.pyx":1461
+ *         CHKERR( EPSKrylovSchurSetRestart(self.eps, val) )
  * 
- *     def destroy(self):             # <<<<<<<<<<<<<<
+ *     def getKrylovSchurRestart(self):             # <<<<<<<<<<<<<<
  *         """
- *         Destroys the SVD object.
+ *         Gets the restart parameter used in the Krylov-Schur method.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.destroy", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getKrylovSchurRestart", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -27997,62 +29230,104 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_4destroy(struct PySlepcSVDObject
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":93
- *         return self
+/* "SLEPc/EPS.pyx":1474
+ *         return val
  * 
- *     def reset(self):             # <<<<<<<<<<<<<<
+ *     def setKrylovSchurLocking(self, lock):             # <<<<<<<<<<<<<<
  *         """
- *         Resets the SVD object.
+ *         Choose between locking and non-locking variants of the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_7reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_6reset[] = "SVD.reset(self)\n\n        Resets the SVD object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_7reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_139setKrylovSchurLocking(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_138setKrylovSchurLocking[] = "EPS.setKrylovSchurLocking(self, lock)\n\n        Choose between locking and non-locking variants of the\n        Krylov-Schur method.\n\n        Parameters\n        ----------\n        lock: bool\n              True if the locking variant must be selected.\n\n        Notes\n        -----\n        The default is to lock converged eigenpairs when the method restarts.\n        This behaviour can be changed so that all [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_139setKrylovSchurLocking(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_lock = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("reset (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("reset", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "reset", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_6reset(((struct PySlepcSVDObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("setKrylovSchurLocking (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_lock,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_lock)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setKrylovSchurLocking") < 0)) __PYX_ERR(13, 1474, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_lock = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setKrylovSchurLocking", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 1474, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setKrylovSchurLocking", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_138setKrylovSchurLocking(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_lock);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_6reset(struct PySlepcSVDObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_138setKrylovSchurLocking(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_lock) {
+  PetscBool __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("reset", 0);
+  PetscBool __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setKrylovSchurLocking", 0);
 
-  /* "SLEPc/SVD.pyx":97
- *         Resets the SVD object.
+  /* "SLEPc/EPS.pyx":1491
+ *         non-locking variant).
  *         """
- *         CHKERR( SVDReset(self.svd) )             # <<<<<<<<<<<<<<
+ *         cdef PetscBool val = lock             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSKrylovSchurSetLocking(self.eps, val) )
  * 
- *     def create(self, comm=None):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDReset(__pyx_v_self->svd)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_lock)); if (unlikely(PyErr_Occurred())) __PYX_ERR(13, 1491, __pyx_L1_error)
+  __pyx_v_val = __pyx_t_1;
 
-  /* "SLEPc/SVD.pyx":93
- *         return self
+  /* "SLEPc/EPS.pyx":1492
+ *         """
+ *         cdef PetscBool val = lock
+ *         CHKERR( EPSKrylovSchurSetLocking(self.eps, val) )             # <<<<<<<<<<<<<<
  * 
- *     def reset(self):             # <<<<<<<<<<<<<<
+ *     def getKrylovSchurLocking(self):
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurSetLocking(__pyx_v_self->eps, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 1492, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":1474
+ *         return val
+ * 
+ *     def setKrylovSchurLocking(self, lock):             # <<<<<<<<<<<<<<
  *         """
- *         Resets the SVD object.
+ *         Choose between locking and non-locking variants of the
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.reset", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setKrylovSchurLocking", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -28060,145 +29335,83 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_6reset(struct PySlepcSVDObject *
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":99
- *         CHKERR( SVDReset(self.svd) )
+/* "SLEPc/EPS.pyx":1494
+ *         CHKERR( EPSKrylovSchurSetLocking(self.eps, val) )
  * 
- *     def create(self, comm=None):             # <<<<<<<<<<<<<<
+ *     def getKrylovSchurLocking(self):             # <<<<<<<<<<<<<<
  *         """
- *         Creates the SVD object.
+ *         Gets the locking flag used in the Krylov-Schur method.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_8create[] = "SVD.create(self, comm=None)\n\n        Creates the SVD object.\n\n        Parameters\n        ----------\n        comm: Comm, optional\n              MPI communicator; if not provided, it defaults to all\n              processes.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_comm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_141getKrylovSchurLocking(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_140getKrylovSchurLocking[] = "EPS.getKrylovSchurLocking(self)\n\n        Gets the locking flag used in the Krylov-Schur method.\n\n        Returns\n        -------\n        lock: bool\n              The locking flag.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_141getKrylovSchurLocking(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("create (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,0};
-    PyObject* values[1] = {0};
-    values[0] = ((PyObject *)Py_None);
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
-          if (value) { values[0] = value; kw_args--; }
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-    }
-    __pyx_v_comm = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_8create(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_comm);
+  __Pyx_RefNannySetupContext("getKrylovSchurLocking (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getKrylovSchurLocking", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getKrylovSchurLocking", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_140getKrylovSchurLocking(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_8create(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_comm) {
-  MPI_Comm __pyx_v_ccomm;
-  SVD __pyx_v_newsvd;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_140getKrylovSchurLocking(struct PySlepcEPSObject *__pyx_v_self) {
+  PetscBool __pyx_v_tval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  MPI_Comm __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("create", 0);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getKrylovSchurLocking", 0);
 
-  /* "SLEPc/SVD.pyx":109
- *               processes.
+  /* "SLEPc/EPS.pyx":1503
+ *               The locking flag.
  *         """
- *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())             # <<<<<<<<<<<<<<
- *         cdef SlepcSVD newsvd = NULL
- *         CHKERR( SVDCreate(ccomm, &newsvd) )
+ *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSKrylovSchurGetLocking(self.eps, &tval) )
+ *         return <bint> tval
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_def_Comm(__pyx_v_comm, __pyx_f_8slepc4py_5SLEPc_SLEPC_COMM_DEFAULT()); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ccomm = __pyx_t_1;
+  __pyx_v_tval = PETSC_FALSE;
 
-  /* "SLEPc/SVD.pyx":110
+  /* "SLEPc/EPS.pyx":1504
  *         """
- *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
- *         cdef SlepcSVD newsvd = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( SVDCreate(ccomm, &newsvd) )
- *         SlepcCLEAR(self.obj); self.svd = newsvd
- */
-  __pyx_v_newsvd = NULL;
-
-  /* "SLEPc/SVD.pyx":111
- *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
- *         cdef SlepcSVD newsvd = NULL
- *         CHKERR( SVDCreate(ccomm, &newsvd) )             # <<<<<<<<<<<<<<
- *         SlepcCLEAR(self.obj); self.svd = newsvd
- *         return self
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDCreate(__pyx_v_ccomm, (&__pyx_v_newsvd))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/SVD.pyx":112
- *         cdef SlepcSVD newsvd = NULL
- *         CHKERR( SVDCreate(ccomm, &newsvd) )
- *         SlepcCLEAR(self.obj); self.svd = newsvd             # <<<<<<<<<<<<<<
- *         return self
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( EPSKrylovSchurGetLocking(self.eps, &tval) )             # <<<<<<<<<<<<<<
+ *         return <bint> tval
  * 
  */
-  __pyx_f_8slepc4py_5SLEPc_SlepcCLEAR(__pyx_v_self->__pyx_base.obj);
-  __pyx_v_self->svd = __pyx_v_newsvd;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurGetLocking(__pyx_v_self->eps, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 1504, __pyx_L1_error)
 
-  /* "SLEPc/SVD.pyx":113
- *         CHKERR( SVDCreate(ccomm, &newsvd) )
- *         SlepcCLEAR(self.obj); self.svd = newsvd
- *         return self             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1505
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( EPSKrylovSchurGetLocking(self.eps, &tval) )
+ *         return <bint> tval             # <<<<<<<<<<<<<<
  * 
- *     def setType(self, svd_type):
+ *     def setKrylovSchurPartitions(self, npart):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_r = ((PyObject *)__pyx_v_self);
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_tval); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1505, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/SVD.pyx":99
- *         CHKERR( SVDReset(self.svd) )
+  /* "SLEPc/EPS.pyx":1494
+ *         CHKERR( EPSKrylovSchurSetLocking(self.eps, val) )
  * 
- *     def create(self, comm=None):             # <<<<<<<<<<<<<<
+ *     def getKrylovSchurLocking(self):             # <<<<<<<<<<<<<<
  *         """
- *         Creates the SVD object.
+ *         Gets the locking flag used in the Krylov-Schur method.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getKrylovSchurLocking", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -28206,27 +29419,24 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_8create(struct PySlepcSVDObject
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":115
- *         return self
+/* "SLEPc/EPS.pyx":1507
+ *         return <bint> tval
  * 
- *     def setType(self, svd_type):             # <<<<<<<<<<<<<<
+ *     def setKrylovSchurPartitions(self, npart):             # <<<<<<<<<<<<<<
  *         """
- *         Selects the particular solver to be used in the SVD object.
+ *         Sets the number of partitions for the case of doing spectrum
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_10setType[] = "SVD.setType(self, svd_type)\n\n        Selects the particular solver to be used in the SVD object.\n\n        Parameters\n        ----------\n        svd_type: `SVD.Type` enumerate\n                  The solver to be used.\n\n        Notes\n        -----\n        See `SVD.Type` for available methods. The default is CROSS.\n        Normally, it is best to use `setFromOptions()` and then set\n        the SVD type from the options d [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_svd_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_143setKrylovSchurPartitions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_142setKrylovSchurPartitions[] = "EPS.setKrylovSchurPartitions(self, npart)\n\n        Sets the number of partitions for the case of doing spectrum\n        slicing for a computational interval with the communicator split\n        in several sub-communicators.\n\n        Parameters\n        ----------\n        npart: int\n              The number of partitions.\n\n        Notes\n        -----\n        By default, npart=1 so all processes in the  [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_143setKrylovSchurPartitions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_npart = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setType (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setKrylovSchurPartitions (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_svd_type,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_npart,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -28239,178 +29449,158 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_11setType(PyObject *__pyx_v_self
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_svd_type)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_npart)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setKrylovSchurPartitions") < 0)) __PYX_ERR(13, 1507, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_svd_type = values[0];
+    __pyx_v_npart = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setKrylovSchurPartitions", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 1507, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setKrylovSchurPartitions", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_10setType(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_svd_type);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_142setKrylovSchurPartitions(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_npart);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_10setType(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_svd_type) {
-  const char* __pyx_v_cval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_142setKrylovSchurPartitions(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_npart) {
+  PetscInt __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  PetscInt __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setType", 0);
-  __Pyx_INCREF(__pyx_v_svd_type);
+  __Pyx_RefNannySetupContext("setKrylovSchurPartitions", 0);
 
-  /* "SLEPc/SVD.pyx":133
- *         methods.
+  /* "SLEPc/EPS.pyx":1525
+ *         subset of processes.
  *         """
- *         cdef SlepcSVDType cval = NULL             # <<<<<<<<<<<<<<
- *         svd_type = str2bytes(svd_type, &cval)
- *         CHKERR( SVDSetType(self.svd, cval) )
- */
-  __pyx_v_cval = NULL;
-
-  /* "SLEPc/SVD.pyx":134
- *         """
- *         cdef SlepcSVDType cval = NULL
- *         svd_type = str2bytes(svd_type, &cval)             # <<<<<<<<<<<<<<
- *         CHKERR( SVDSetType(self.svd, cval) )
+ *         cdef PetscInt val = npart             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSKrylovSchurSetPartitions(self.eps, val) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_svd_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_svd_type, __pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_1 = __Pyx_PyInt_As_PetscInt(__pyx_v_npart); if (unlikely((__pyx_t_1 == (PetscInt)-1) && PyErr_Occurred())) __PYX_ERR(13, 1525, __pyx_L1_error)
+  __pyx_v_val = __pyx_t_1;
 
-  /* "SLEPc/SVD.pyx":135
- *         cdef SlepcSVDType cval = NULL
- *         svd_type = str2bytes(svd_type, &cval)
- *         CHKERR( SVDSetType(self.svd, cval) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1526
+ *         """
+ *         cdef PetscInt val = npart
+ *         CHKERR( EPSKrylovSchurSetPartitions(self.eps, val) )             # <<<<<<<<<<<<<<
  * 
- *     def getType(self):
+ *     def getKrylovSchurPartitions(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDSetType(__pyx_v_self->svd, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurSetPartitions(__pyx_v_self->eps, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 1526, __pyx_L1_error)
 
-  /* "SLEPc/SVD.pyx":115
- *         return self
+  /* "SLEPc/EPS.pyx":1507
+ *         return <bint> tval
  * 
- *     def setType(self, svd_type):             # <<<<<<<<<<<<<<
+ *     def setKrylovSchurPartitions(self, npart):             # <<<<<<<<<<<<<<
  *         """
- *         Selects the particular solver to be used in the SVD object.
+ *         Sets the number of partitions for the case of doing spectrum
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setKrylovSchurPartitions", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_svd_type);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":137
- *         CHKERR( SVDSetType(self.svd, cval) )
+/* "SLEPc/EPS.pyx":1528
+ *         CHKERR( EPSKrylovSchurSetPartitions(self.eps, val) )
  * 
- *     def getType(self):             # <<<<<<<<<<<<<<
+ *     def getKrylovSchurPartitions(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the SVD type of this object.
+ *         Gets the number of partitions of the communicator in case of
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_12getType[] = "SVD.getType(self)\n\n        Gets the SVD type of this object.\n\n        Returns\n        -------\n        type: `SVD.Type` enumerate\n              The solver currently being used.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_145getKrylovSchurPartitions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_144getKrylovSchurPartitions[] = "EPS.getKrylovSchurPartitions(self)\n\n        Gets the number of partitions of the communicator in case of\n        spectrum slicing.\n\n        Returns\n        -------\n        npart: int\n              The number of partitions.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_145getKrylovSchurPartitions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getType (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getKrylovSchurPartitions (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getType", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_12getType(((struct PySlepcSVDObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getKrylovSchurPartitions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getKrylovSchurPartitions", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_144getKrylovSchurPartitions(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_12getType(struct PySlepcSVDObject *__pyx_v_self) {
-  const char* __pyx_v_svd_type;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_144getKrylovSchurPartitions(struct PySlepcEPSObject *__pyx_v_self) {
+  PetscInt __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getType", 0);
+  __Pyx_RefNannySetupContext("getKrylovSchurPartitions", 0);
 
-  /* "SLEPc/SVD.pyx":146
- *               The solver currently being used.
+  /* "SLEPc/EPS.pyx":1538
+ *               The number of partitions.
  *         """
- *         cdef SlepcSVDType svd_type = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( SVDGetType(self.svd, &svd_type) )
- *         return bytes2str(svd_type)
+ *         cdef PetscInt val = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSKrylovSchurGetPartitions(self.eps, &val) )
+ *         return val
  */
-  __pyx_v_svd_type = NULL;
+  __pyx_v_val = 0;
 
-  /* "SLEPc/SVD.pyx":147
+  /* "SLEPc/EPS.pyx":1539
  *         """
- *         cdef SlepcSVDType svd_type = NULL
- *         CHKERR( SVDGetType(self.svd, &svd_type) )             # <<<<<<<<<<<<<<
- *         return bytes2str(svd_type)
+ *         cdef PetscInt val = 0
+ *         CHKERR( EPSKrylovSchurGetPartitions(self.eps, &val) )             # <<<<<<<<<<<<<<
+ *         return val
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetType(__pyx_v_self->svd, (&__pyx_v_svd_type))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurGetPartitions(__pyx_v_self->eps, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 1539, __pyx_L1_error)
 
-  /* "SLEPc/SVD.pyx":148
- *         cdef SlepcSVDType svd_type = NULL
- *         CHKERR( SVDGetType(self.svd, &svd_type) )
- *         return bytes2str(svd_type)             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1540
+ *         cdef PetscInt val = 0
+ *         CHKERR( EPSKrylovSchurGetPartitions(self.eps, &val) )
+ *         return val             # <<<<<<<<<<<<<<
  * 
- *     def getOptionsPrefix(self):
+ *     def setKrylovSchurDetectZeros(self, detect):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_svd_type); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscInt(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1540, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/SVD.pyx":137
- *         CHKERR( SVDSetType(self.svd, cval) )
+  /* "SLEPc/EPS.pyx":1528
+ *         CHKERR( EPSKrylovSchurSetPartitions(self.eps, val) )
  * 
- *     def getType(self):             # <<<<<<<<<<<<<<
+ *     def getKrylovSchurPartitions(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the SVD type of this object.
+ *         Gets the number of partitions of the communicator in case of
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getKrylovSchurPartitions", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -28418,86 +29608,104 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_12getType(struct PySlepcSVDObjec
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":150
- *         return bytes2str(svd_type)
+/* "SLEPc/EPS.pyx":1542
+ *         return val
  * 
- *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
+ *     def setKrylovSchurDetectZeros(self, detect):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the prefix used for searching for all SVD options in the
+ *         Sets a flag to enforce detection of zeros during the factorizations
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_14getOptionsPrefix[] = "SVD.getOptionsPrefix(self)\n\n        Gets the prefix used for searching for all SVD options in the\n        database.\n\n        Returns\n        -------\n        prefix: string\n                The prefix string set for this SVD object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_147setKrylovSchurDetectZeros(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_146setKrylovSchurDetectZeros[] = "EPS.setKrylovSchurDetectZeros(self, detect)\n\n        Sets a flag to enforce detection of zeros during the factorizations\n        throughout the spectrum slicing computation.\n\n        Parameters\n        ----------\n        detect: bool\n              True if zeros must checked for.\n\n        Notes\n        -----\n        A zero in the factorization indicates that a shift coincides with\n        an eigenva [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_147setKrylovSchurDetectZeros(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_detect = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getOptionsPrefix (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getOptionsPrefix", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getOptionsPrefix", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_14getOptionsPrefix(((struct PySlepcSVDObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("setKrylovSchurDetectZeros (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_detect,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_detect)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setKrylovSchurDetectZeros") < 0)) __PYX_ERR(13, 1542, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_detect = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setKrylovSchurDetectZeros", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 1542, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setKrylovSchurDetectZeros", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_146setKrylovSchurDetectZeros(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_detect);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_14getOptionsPrefix(struct PySlepcSVDObject *__pyx_v_self) {
-  const char *__pyx_v_prefix;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_146setKrylovSchurDetectZeros(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_detect) {
+  PetscBool __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getOptionsPrefix", 0);
-
-  /* "SLEPc/SVD.pyx":160
- *                 The prefix string set for this SVD object.
- *         """
- *         cdef const_char *prefix = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( SVDGetOptionsPrefix(self.svd, &prefix) )
- *         return bytes2str(prefix)
- */
-  __pyx_v_prefix = NULL;
+  PetscBool __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setKrylovSchurDetectZeros", 0);
 
-  /* "SLEPc/SVD.pyx":161
+  /* "SLEPc/EPS.pyx":1562
+ *         detection, e.g. MUMPS.
  *         """
- *         cdef const_char *prefix = NULL
- *         CHKERR( SVDGetOptionsPrefix(self.svd, &prefix) )             # <<<<<<<<<<<<<<
- *         return bytes2str(prefix)
+ *         cdef PetscBool val = detect             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSKrylovSchurSetDetectZeros(self.eps, val) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetOptionsPrefix(__pyx_v_self->svd, (&__pyx_v_prefix))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_detect)); if (unlikely(PyErr_Occurred())) __PYX_ERR(13, 1562, __pyx_L1_error)
+  __pyx_v_val = __pyx_t_1;
 
-  /* "SLEPc/SVD.pyx":162
- *         cdef const_char *prefix = NULL
- *         CHKERR( SVDGetOptionsPrefix(self.svd, &prefix) )
- *         return bytes2str(prefix)             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1563
+ *         """
+ *         cdef PetscBool val = detect
+ *         CHKERR( EPSKrylovSchurSetDetectZeros(self.eps, val) )             # <<<<<<<<<<<<<<
  * 
- *     def setOptionsPrefix(self, prefix):
+ *     def getKrylovSchurDetectZeros(self):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_prefix); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurSetDetectZeros(__pyx_v_self->eps, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 1563, __pyx_L1_error)
 
-  /* "SLEPc/SVD.pyx":150
- *         return bytes2str(svd_type)
+  /* "SLEPc/EPS.pyx":1542
+ *         return val
  * 
- *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
+ *     def setKrylovSchurDetectZeros(self, detect):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the prefix used for searching for all SVD options in the
+ *         Sets a flag to enforce detection of zeros during the factorizations
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setKrylovSchurDetectZeros", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -28505,157 +29713,120 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_14getOptionsPrefix(struct PySlep
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":164
- *         return bytes2str(prefix)
+/* "SLEPc/EPS.pyx":1565
+ *         CHKERR( EPSKrylovSchurSetDetectZeros(self.eps, val) )
  * 
- *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *     def getKrylovSchurDetectZeros(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the prefix used for searching for all SVD options in the
+ *         Gets the flag that enforces zero detection in spectrum slicing.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_17setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_16setOptionsPrefix[] = "SVD.setOptionsPrefix(self, prefix)\n\n        Sets the prefix used for searching for all SVD options in the\n        database.\n\n        Parameters\n        ----------\n        prefix: string\n                The prefix string to prepend to all SVD option\n                requests.\n\n        Notes\n        -----\n        A hyphen (-) must NOT be given at the beginning of the prefix\n        name.  The first character o [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_17setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_prefix = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_149getKrylovSchurDetectZeros(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_148getKrylovSchurDetectZeros[] = "EPS.getKrylovSchurDetectZeros(self)\n\n        Gets the flag that enforces zero detection in spectrum slicing.\n\n        Returns\n        -------\n        detect: bool\n              The zero detection flag.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_149getKrylovSchurDetectZeros(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setOptionsPrefix (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_prefix,0};
-    PyObject* values[1] = {0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_prefix)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-    }
-    __pyx_v_prefix = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_16setOptionsPrefix(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_prefix);
+  __Pyx_RefNannySetupContext("getKrylovSchurDetectZeros (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getKrylovSchurDetectZeros", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getKrylovSchurDetectZeros", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_148getKrylovSchurDetectZeros(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_16setOptionsPrefix(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
-  const char *__pyx_v_cval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_148getKrylovSchurDetectZeros(struct PySlepcEPSObject *__pyx_v_self) {
+  PetscBool __pyx_v_tval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setOptionsPrefix", 0);
-  __Pyx_INCREF(__pyx_v_prefix);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getKrylovSchurDetectZeros", 0);
 
-  /* "SLEPc/SVD.pyx":187
- *             S2.setOptionsPrefix("svd2_")
+  /* "SLEPc/EPS.pyx":1574
+ *               The zero detection flag.
  *         """
- *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
- *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( SVDSetOptionsPrefix(self.svd, cval) )
+ *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSKrylovSchurGetDetectZeros(self.eps, &tval) )
+ *         return <bint> tval
  */
-  __pyx_v_cval = NULL;
+  __pyx_v_tval = PETSC_FALSE;
 
-  /* "SLEPc/SVD.pyx":188
+  /* "SLEPc/EPS.pyx":1575
  *         """
- *         cdef const_char *cval = NULL
- *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
- *         CHKERR( SVDSetOptionsPrefix(self.svd, cval) )
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( EPSKrylovSchurGetDetectZeros(self.eps, &tval) )             # <<<<<<<<<<<<<<
+ *         return <bint> tval
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurGetDetectZeros(__pyx_v_self->eps, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 1575, __pyx_L1_error)
 
-  /* "SLEPc/SVD.pyx":189
- *         cdef const_char *cval = NULL
- *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( SVDSetOptionsPrefix(self.svd, cval) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1576
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( EPSKrylovSchurGetDetectZeros(self.eps, &tval) )
+ *         return <bint> tval             # <<<<<<<<<<<<<<
  * 
- *     def appendOptionsPrefix(self, prefix):
+ *     def setKrylovSchurDimensions(self, nev=None, ncv=None, mpd=None):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDSetOptionsPrefix(__pyx_v_self->svd, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_tval); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1576, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
 
-  /* "SLEPc/SVD.pyx":164
- *         return bytes2str(prefix)
+  /* "SLEPc/EPS.pyx":1565
+ *         CHKERR( EPSKrylovSchurSetDetectZeros(self.eps, val) )
  * 
- *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *     def getKrylovSchurDetectZeros(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the prefix used for searching for all SVD options in the
+ *         Gets the flag that enforces zero detection in spectrum slicing.
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getKrylovSchurDetectZeros", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_prefix);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":191
- *         CHKERR( SVDSetOptionsPrefix(self.svd, cval) )
+/* "SLEPc/EPS.pyx":1578
+ *         return <bint> tval
  * 
- *     def appendOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *     def setKrylovSchurDimensions(self, nev=None, ncv=None, mpd=None):             # <<<<<<<<<<<<<<
  *         """
- *         Appends to the prefix used for searching for all SVD options
+ *         Sets the dimensions used for each subsolve step in case of doing
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_19appendOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_18appendOptionsPrefix[] = "SVD.appendOptionsPrefix(self, prefix)\n\n        Appends to the prefix used for searching for all SVD options\n        in the database.\n\n        Parameters\n        ----------\n        prefix: string\n                The prefix string to prepend to all SVD option requests.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_19appendOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_prefix = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_151setKrylovSchurDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_150setKrylovSchurDimensions[] = "EPS.setKrylovSchurDimensions(self, nev=None, ncv=None, mpd=None)\n\n        Sets the dimensions used for each subsolve step in case of doing\n        spectrum slicing for a computational interval. The meaning of the\n        parameters is the same as in `setDimensions()`.\n\n        Parameters\n        ----------\n        nev: int, optional\n             Number of eigenvalues to compute.\n        ncv: int, optio [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_151setKrylovSchurDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_nev = 0;
+  PyObject *__pyx_v_ncv = 0;
+  PyObject *__pyx_v_mpd = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("appendOptionsPrefix (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setKrylovSchurDimensions (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_prefix,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nev,&__pyx_n_s_ncv,&__pyx_n_s_mpd,0};
+    PyObject* values[3] = {0,0,0};
+    values[0] = ((PyObject *)Py_None);
+    values[1] = ((PyObject *)Py_None);
+    values[2] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -28663,274 +29834,437 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_19appendOptionsPrefix(PyObject *
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_prefix)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nev);
+          if (value) { values[0] = value; kw_args--; }
+        }
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ncv);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mpd);
+          if (value) { values[2] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "appendOptionsPrefix") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setKrylovSchurDimensions") < 0)) __PYX_ERR(13, 1578, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
     } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
     }
-    __pyx_v_prefix = values[0];
+    __pyx_v_nev = values[0];
+    __pyx_v_ncv = values[1];
+    __pyx_v_mpd = values[2];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("appendOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setKrylovSchurDimensions", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 1578, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.appendOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setKrylovSchurDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_18appendOptionsPrefix(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_prefix);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_150setKrylovSchurDimensions(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_nev, __pyx_v_ncv, __pyx_v_mpd);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_18appendOptionsPrefix(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
-  const char *__pyx_v_cval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_150setKrylovSchurDimensions(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_nev, PyObject *__pyx_v_ncv, PyObject *__pyx_v_mpd) {
+  PetscInt __pyx_v_ival1;
+  PetscInt __pyx_v_ival2;
+  PetscInt __pyx_v_ival3;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("appendOptionsPrefix", 0);
-  __Pyx_INCREF(__pyx_v_prefix);
+  PetscInt __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("setKrylovSchurDimensions", 0);
 
-  /* "SLEPc/SVD.pyx":201
- *                 The prefix string to prepend to all SVD option requests.
+  /* "SLEPc/EPS.pyx":1593
+ *              Maximum dimension allowed for the projected problem.
  *         """
- *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
- *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( SVDAppendOptionsPrefix(self.svd, cval) )
+ *         cdef PetscInt ival1 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival2 = PETSC_DEFAULT
+ *         cdef PetscInt ival3 = PETSC_DEFAULT
  */
-  __pyx_v_cval = NULL;
+  __pyx_v_ival1 = PETSC_DEFAULT;
 
-  /* "SLEPc/SVD.pyx":202
+  /* "SLEPc/EPS.pyx":1594
  *         """
- *         cdef const_char *cval = NULL
- *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
- *         CHKERR( SVDAppendOptionsPrefix(self.svd, cval) )
+ *         cdef PetscInt ival1 = PETSC_DEFAULT
+ *         cdef PetscInt ival2 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival3 = PETSC_DEFAULT
+ *         if nev is not None: ival1 = asInt(nev)
+ */
+  __pyx_v_ival2 = PETSC_DEFAULT;
+
+  /* "SLEPc/EPS.pyx":1595
+ *         cdef PetscInt ival1 = PETSC_DEFAULT
+ *         cdef PetscInt ival2 = PETSC_DEFAULT
+ *         cdef PetscInt ival3 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         if nev is not None: ival1 = asInt(nev)
+ *         if ncv is not None: ival2 = asInt(ncv)
+ */
+  __pyx_v_ival3 = PETSC_DEFAULT;
+
+  /* "SLEPc/EPS.pyx":1596
+ *         cdef PetscInt ival2 = PETSC_DEFAULT
+ *         cdef PetscInt ival3 = PETSC_DEFAULT
+ *         if nev is not None: ival1 = asInt(nev)             # <<<<<<<<<<<<<<
+ *         if ncv is not None: ival2 = asInt(ncv)
+ *         if mpd is not None: ival3 = asInt(mpd)
+ */
+  __pyx_t_1 = (__pyx_v_nev != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_nev); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(13, 1596, __pyx_L1_error)
+    __pyx_v_ival1 = __pyx_t_3;
+  }
+
+  /* "SLEPc/EPS.pyx":1597
+ *         cdef PetscInt ival3 = PETSC_DEFAULT
+ *         if nev is not None: ival1 = asInt(nev)
+ *         if ncv is not None: ival2 = asInt(ncv)             # <<<<<<<<<<<<<<
+ *         if mpd is not None: ival3 = asInt(mpd)
+ *         CHKERR( EPSKrylovSchurSetDimensions(self.eps, ival1, ival2, ival3) )
+ */
+  __pyx_t_2 = (__pyx_v_ncv != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_ncv); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(13, 1597, __pyx_L1_error)
+    __pyx_v_ival2 = __pyx_t_3;
+  }
+
+  /* "SLEPc/EPS.pyx":1598
+ *         if nev is not None: ival1 = asInt(nev)
+ *         if ncv is not None: ival2 = asInt(ncv)
+ *         if mpd is not None: ival3 = asInt(mpd)             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSKrylovSchurSetDimensions(self.eps, ival1, ival2, ival3) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_1 = (__pyx_v_mpd != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_mpd); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(13, 1598, __pyx_L1_error)
+    __pyx_v_ival3 = __pyx_t_3;
+  }
 
-  /* "SLEPc/SVD.pyx":203
- *         cdef const_char *cval = NULL
- *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( SVDAppendOptionsPrefix(self.svd, cval) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1599
+ *         if ncv is not None: ival2 = asInt(ncv)
+ *         if mpd is not None: ival3 = asInt(mpd)
+ *         CHKERR( EPSKrylovSchurSetDimensions(self.eps, ival1, ival2, ival3) )             # <<<<<<<<<<<<<<
  * 
- *     def setFromOptions(self):
+ *     def getKrylovSchurDimensions(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDAppendOptionsPrefix(__pyx_v_self->svd, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurSetDimensions(__pyx_v_self->eps, __pyx_v_ival1, __pyx_v_ival2, __pyx_v_ival3)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(13, 1599, __pyx_L1_error)
 
-  /* "SLEPc/SVD.pyx":191
- *         CHKERR( SVDSetOptionsPrefix(self.svd, cval) )
+  /* "SLEPc/EPS.pyx":1578
+ *         return <bint> tval
  * 
- *     def appendOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *     def setKrylovSchurDimensions(self, nev=None, ncv=None, mpd=None):             # <<<<<<<<<<<<<<
  *         """
- *         Appends to the prefix used for searching for all SVD options
+ *         Sets the dimensions used for each subsolve step in case of doing
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.appendOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setKrylovSchurDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_prefix);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":205
- *         CHKERR( SVDAppendOptionsPrefix(self.svd, cval) )
+/* "SLEPc/EPS.pyx":1601
+ *         CHKERR( EPSKrylovSchurSetDimensions(self.eps, ival1, ival2, ival3) )
  * 
- *     def setFromOptions(self):             # <<<<<<<<<<<<<<
+ *     def getKrylovSchurDimensions(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets SVD options from the options database. This routine must
+ *         Gets the dimensions used for each subsolve step in case of doing
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_21setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_20setFromOptions[] = "SVD.setFromOptions(self)\n\n        Sets SVD options from the options database. This routine must\n        be called before `setUp()` if the user is to be allowed to set\n        the solver type.\n\n        Notes\n        -----\n        To see all options, run your program with the ``-help``\n        option.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_21setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_153getKrylovSchurDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_152getKrylovSchurDimensions[] = "EPS.getKrylovSchurDimensions(self)\n\n        Gets the dimensions used for each subsolve step in case of doing\n        spectrum slicing for a computational interval.\n\n        Returns\n        -------\n        nev: int\n             Number of eigenvalues to compute.\n        ncv: int\n             Maximum dimension of the subspace to be used by the solver.\n        mpd: int\n             Maximum dimension allo [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_153getKrylovSchurDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setFromOptions (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getKrylovSchurDimensions (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("setFromOptions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setFromOptions", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_20setFromOptions(((struct PySlepcSVDObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getKrylovSchurDimensions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getKrylovSchurDimensions", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_152getKrylovSchurDimensions(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_20setFromOptions(struct PySlepcSVDObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_152getKrylovSchurDimensions(struct PySlepcEPSObject *__pyx_v_self) {
+  PetscInt __pyx_v_ival1;
+  PetscInt __pyx_v_ival2;
+  PetscInt __pyx_v_ival3;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setFromOptions", 0);
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("getKrylovSchurDimensions", 0);
 
-  /* "SLEPc/SVD.pyx":216
- *         option.
+  /* "SLEPc/EPS.pyx":1615
+ *              Maximum dimension allowed for the projected problem.
  *         """
- *         CHKERR( SVDSetFromOptions(self.svd) )             # <<<<<<<<<<<<<<
- * 
- *     #
+ *         cdef PetscInt ival1 = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival2 = 0
+ *         cdef PetscInt ival3 = 0
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDSetFromOptions(__pyx_v_self->svd)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_ival1 = 0;
 
-  /* "SLEPc/SVD.pyx":205
- *         CHKERR( SVDAppendOptionsPrefix(self.svd, cval) )
- * 
- *     def setFromOptions(self):             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1616
  *         """
- *         Sets SVD options from the options database. This routine must
+ *         cdef PetscInt ival1 = 0
+ *         cdef PetscInt ival2 = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival3 = 0
+ *         CHKERR( EPSKrylovSchurGetDimensions(self.eps, &ival1, &ival2, &ival3) )
  */
+  __pyx_v_ival2 = 0;
 
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setFromOptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
+  /* "SLEPc/EPS.pyx":1617
+ *         cdef PetscInt ival1 = 0
+ *         cdef PetscInt ival2 = 0
+ *         cdef PetscInt ival3 = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSKrylovSchurGetDimensions(self.eps, &ival1, &ival2, &ival3) )
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+ */
+  __pyx_v_ival3 = 0;
+
+  /* "SLEPc/EPS.pyx":1618
+ *         cdef PetscInt ival2 = 0
+ *         cdef PetscInt ival3 = 0
+ *         CHKERR( EPSKrylovSchurGetDimensions(self.eps, &ival1, &ival2, &ival3) )             # <<<<<<<<<<<<<<
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurGetDimensions(__pyx_v_self->eps, (&__pyx_v_ival1), (&__pyx_v_ival2), (&__pyx_v_ival3))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 1618, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":1619
+ *         cdef PetscInt ival3 = 0
+ *         CHKERR( EPSKrylovSchurGetDimensions(self.eps, &ival1, &ival2, &ival3) )
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3))             # <<<<<<<<<<<<<<
+ * 
+ *     def getKrylovSchurSubcommInfo(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival1); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1619, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 1619, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival3); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 1619, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 1619, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_4);
+  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
+  __pyx_t_2 = 0;
+  __pyx_t_3 = 0;
+  __pyx_t_4 = 0;
+  __pyx_r = __pyx_t_5;
+  __pyx_t_5 = 0;
+  goto __pyx_L0;
+
+  /* "SLEPc/EPS.pyx":1601
+ *         CHKERR( EPSKrylovSchurSetDimensions(self.eps, ival1, ival2, ival3) )
+ * 
+ *     def getKrylovSchurDimensions(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the dimensions used for each subsolve step in case of doing
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getKrylovSchurDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":220
- *     #
+/* "SLEPc/EPS.pyx":1621
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3))
  * 
- *     def getImplicitTranspose(self):             # <<<<<<<<<<<<<<
+ *     def getKrylovSchurSubcommInfo(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the mode used to handle the transpose of the matrix
+ *         Gets information related to the case of doing spectrum slicing
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_23getImplicitTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_22getImplicitTranspose[] = "SVD.getImplicitTranspose(self)\n\n        Gets the mode used to handle the transpose of the matrix\n        associated with the singular value problem.\n\n        Returns\n        -------\n        impl: boolean\n              How to handle the transpose (implicitly or not).\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_23getImplicitTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_155getKrylovSchurSubcommInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_154getKrylovSchurSubcommInfo[] = "EPS.getKrylovSchurSubcommInfo(self)\n\n        Gets information related to the case of doing spectrum slicing\n        for a computational interval with multiple communicators.\n\n        Returns\n        -------\n        k: int\n             Number of the subinterval for the calling process.\n        n: int\n             Number of eigenvalues found in the k-th subinterval.\n        v: Vec\n             A vecto [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_155getKrylovSchurSubcommInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getImplicitTranspose (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getKrylovSchurSubcommInfo (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getImplicitTranspose", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getImplicitTranspose", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_22getImplicitTranspose(((struct PySlepcSVDObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getKrylovSchurSubcommInfo", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getKrylovSchurSubcommInfo", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_154getKrylovSchurSubcommInfo(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_22getImplicitTranspose(struct PySlepcSVDObject *__pyx_v_self) {
-  PetscBool __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_154getKrylovSchurSubcommInfo(struct PySlepcEPSObject *__pyx_v_self) {
+  PetscInt __pyx_v_ival1;
+  PetscInt __pyx_v_ival2;
+  struct PyPetscVecObject *__pyx_v_vec = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getImplicitTranspose", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("getKrylovSchurSubcommInfo", 0);
 
-  /* "SLEPc/SVD.pyx":230
- *               How to handle the transpose (implicitly or not).
+  /* "SLEPc/EPS.pyx":1642
+ *         The returned Vec should be destroyed by the user.
  *         """
- *         cdef PetscBool val = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( SVDGetImplicitTranspose(self.svd, &val) )
- *         return val
+ *         cdef PetscInt ival1 = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival2 = 0
+ *         cdef Vec vec
  */
-  __pyx_v_val = PETSC_FALSE;
+  __pyx_v_ival1 = 0;
 
-  /* "SLEPc/SVD.pyx":231
+  /* "SLEPc/EPS.pyx":1643
  *         """
- *         cdef PetscBool val = PETSC_FALSE
- *         CHKERR( SVDGetImplicitTranspose(self.svd, &val) )             # <<<<<<<<<<<<<<
- *         return val
+ *         cdef PetscInt ival1 = 0
+ *         cdef PetscInt ival2 = 0             # <<<<<<<<<<<<<<
+ *         cdef Vec vec
+ *         vec = Vec()
+ */
+  __pyx_v_ival2 = 0;
+
+  /* "SLEPc/EPS.pyx":1645
+ *         cdef PetscInt ival2 = 0
+ *         cdef Vec vec
+ *         vec = Vec()             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSKrylovSchurGetSubcommInfo(self.eps, &ival1, &ival2, &vec.vec) )
+ *         return (toInt(ival1), toInt(ival2), vec)
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1645, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "SLEPc/EPS.pyx":1646
+ *         cdef Vec vec
+ *         vec = Vec()
+ *         CHKERR( EPSKrylovSchurGetSubcommInfo(self.eps, &ival1, &ival2, &vec.vec) )             # <<<<<<<<<<<<<<
+ *         return (toInt(ival1), toInt(ival2), vec)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetImplicitTranspose(__pyx_v_self->svd, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurGetSubcommInfo(__pyx_v_self->eps, (&__pyx_v_ival1), (&__pyx_v_ival2), (&__pyx_v_vec->vec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 1646, __pyx_L1_error)
 
-  /* "SLEPc/SVD.pyx":232
- *         cdef PetscBool val = PETSC_FALSE
- *         CHKERR( SVDGetImplicitTranspose(self.svd, &val) )
- *         return val             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1647
+ *         vec = Vec()
+ *         CHKERR( EPSKrylovSchurGetSubcommInfo(self.eps, &ival1, &ival2, &vec.vec) )
+ *         return (toInt(ival1), toInt(ival2), vec)             # <<<<<<<<<<<<<<
  * 
- *     def setImplicitTranspose(self, mode):
+ *     def getKrylovSchurSubcommPairs(self, int i, Vec V):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival1); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1647, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 1647, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 1647, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_GIVEREF(__pyx_t_1);
+  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
+  __Pyx_INCREF(((PyObject *)__pyx_v_vec));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_vec));
+  PyTuple_SET_ITEM(__pyx_t_4, 2, ((PyObject *)__pyx_v_vec));
+  __pyx_t_1 = 0;
+  __pyx_t_3 = 0;
+  __pyx_r = __pyx_t_4;
+  __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/SVD.pyx":220
- *     #
+  /* "SLEPc/EPS.pyx":1621
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3))
  * 
- *     def getImplicitTranspose(self):             # <<<<<<<<<<<<<<
+ *     def getKrylovSchurSubcommInfo(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the mode used to handle the transpose of the matrix
+ *         Gets information related to the case of doing spectrum slicing
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getImplicitTranspose", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getKrylovSchurSubcommInfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_vec);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":234
- *         return val
+/* "SLEPc/EPS.pyx":1649
+ *         return (toInt(ival1), toInt(ival2), vec)
  * 
- *     def setImplicitTranspose(self, mode):             # <<<<<<<<<<<<<<
+ *     def getKrylovSchurSubcommPairs(self, int i, Vec V):             # <<<<<<<<<<<<<<
  *         """
- *         Indicates how to handle the transpose of the matrix
+ *         Gets the i-th eigenpair stored internally in the multi-communicator
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_25setImplicitTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_24setImplicitTranspose[] = "SVD.setImplicitTranspose(self, mode)\n\n        Indicates how to handle the transpose of the matrix\n        associated with the singular value problem.\n\n        Parameters\n        ----------\n        impl: boolean\n              How to handle the transpose (implicitly or not).\n\n        Notes\n        -----\n        By default, the transpose of the matrix is explicitly built\n        (if the matrix has defined t [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_25setImplicitTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_mode = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_157getKrylovSchurSubcommPairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_156getKrylovSchurSubcommPairs[] = "EPS.getKrylovSchurSubcommPairs(self, int i, Vec V)\n\n        Gets the i-th eigenpair stored internally in the multi-communicator\n        to which the calling process belongs.\n\n        Parameters\n        ----------\n        i: int\n           Index of the solution to be obtained.\n        V: Vec\n           Placeholder for the returned eigenvector.\n\n        Returns\n        -------\n        e: scalar\n   [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_157getKrylovSchurSubcommPairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_i;
+  struct PyPetscVecObject *__pyx_v_V = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setImplicitTranspose (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getKrylovSchurSubcommPairs (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mode,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,&__pyx_n_s_V,0};
+    PyObject* values[2] = {0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -28938,77 +30272,125 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_25setImplicitTranspose(PyObject
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mode)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("getKrylovSchurSubcommPairs", 1, 2, 2, 1); __PYX_ERR(13, 1649, __pyx_L3_error)
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setImplicitTranspose") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getKrylovSchurSubcommPairs") < 0)) __PYX_ERR(13, 1649, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_mode = values[0];
+    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) __PYX_ERR(13, 1649, __pyx_L3_error)
+    __pyx_v_V = ((struct PyPetscVecObject *)values[1]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setImplicitTranspose", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getKrylovSchurSubcommPairs", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 1649, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setImplicitTranspose", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getKrylovSchurSubcommPairs", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_24setImplicitTranspose(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_mode);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_V), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "V", 0))) __PYX_ERR(13, 1649, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_156getKrylovSchurSubcommPairs(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_i, __pyx_v_V);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_24setImplicitTranspose(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_mode) {
-  PetscBool __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_156getKrylovSchurSubcommPairs(struct PySlepcEPSObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_V) {
+  PetscScalar __pyx_v_sval;
+  Vec __pyx_v_vec;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscBool __pyx_t_1;
+  int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setImplicitTranspose", 0);
+  Vec __pyx_t_3;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("getKrylovSchurSubcommPairs", 0);
 
-  /* "SLEPc/SVD.pyx":252
- *         transpose, but handles it implicitly via MatMultTranspose().
+  /* "SLEPc/EPS.pyx":1672
+ *         see `getKrylovSchurSubcommInfo()`.
  *         """
- *         cdef PetscBool val = mode             # <<<<<<<<<<<<<<
- *         CHKERR( SVDSetImplicitTranspose(self.svd, val) )
- * 
+ *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscVec vec = NULL
+ *         if V is not None: vec = V.vec
  */
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_mode)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_val = __pyx_t_1;
+  __pyx_v_sval = 0.0;
 
-  /* "SLEPc/SVD.pyx":253
+  /* "SLEPc/EPS.pyx":1673
  *         """
- *         cdef PetscBool val = mode
- *         CHKERR( SVDSetImplicitTranspose(self.svd, val) )             # <<<<<<<<<<<<<<
+ *         cdef PetscScalar sval = 0
+ *         cdef PetscVec vec = NULL             # <<<<<<<<<<<<<<
+ *         if V is not None: vec = V.vec
+ *         CHKERR( EPSKrylovSchurGetSubcommPairs(self.eps, i, &sval, vec) )
+ */
+  __pyx_v_vec = NULL;
+
+  /* "SLEPc/EPS.pyx":1674
+ *         cdef PetscScalar sval = 0
+ *         cdef PetscVec vec = NULL
+ *         if V is not None: vec = V.vec             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSKrylovSchurGetSubcommPairs(self.eps, i, &sval, vec) )
+ *         return toScalar(sval)
+ */
+  __pyx_t_1 = (((PyObject *)__pyx_v_V) != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_v_V->vec;
+    __pyx_v_vec = __pyx_t_3;
+  }
+
+  /* "SLEPc/EPS.pyx":1675
+ *         cdef PetscVec vec = NULL
+ *         if V is not None: vec = V.vec
+ *         CHKERR( EPSKrylovSchurGetSubcommPairs(self.eps, i, &sval, vec) )             # <<<<<<<<<<<<<<
+ *         return toScalar(sval)
  * 
- *     def getWhichSingularTriplets(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDSetImplicitTranspose(__pyx_v_self->svd, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurGetSubcommPairs(__pyx_v_self->eps, __pyx_v_i, (&__pyx_v_sval), __pyx_v_vec)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(13, 1675, __pyx_L1_error)
 
-  /* "SLEPc/SVD.pyx":234
- *         return val
+  /* "SLEPc/EPS.pyx":1676
+ *         if V is not None: vec = V.vec
+ *         CHKERR( EPSKrylovSchurGetSubcommPairs(self.eps, i, &sval, vec) )
+ *         return toScalar(sval)             # <<<<<<<<<<<<<<
  * 
- *     def setImplicitTranspose(self, mode):             # <<<<<<<<<<<<<<
+ *     def getKrylovSchurSubcommMats(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 1676, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_r = __pyx_t_5;
+  __pyx_t_5 = 0;
+  goto __pyx_L0;
+
+  /* "SLEPc/EPS.pyx":1649
+ *         return (toInt(ival1), toInt(ival2), vec)
+ * 
+ *     def getKrylovSchurSubcommPairs(self, int i, Vec V):             # <<<<<<<<<<<<<<
  *         """
- *         Indicates how to handle the transpose of the matrix
+ *         Gets the i-th eigenpair stored internally in the multi-communicator
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setImplicitTranspose", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getKrylovSchurSubcommPairs", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -29016,119 +30398,177 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_24setImplicitTranspose(struct Py
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":255
- *         CHKERR( SVDSetImplicitTranspose(self.svd, val) )
+/* "SLEPc/EPS.pyx":1678
+ *         return toScalar(sval)
  * 
- *     def getWhichSingularTriplets(self):             # <<<<<<<<<<<<<<
+ *     def getKrylovSchurSubcommMats(self):             # <<<<<<<<<<<<<<
  *         """
- *         Returns which singular triplets are to be sought.
+ *         Gets the eigenproblem matrices stored internally in the subcommunicator
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_27getWhichSingularTriplets(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_26getWhichSingularTriplets[] = "SVD.getWhichSingularTriplets(self)\n\n        Returns which singular triplets are to be sought.\n\n        Returns\n        -------\n        which: `SVD.Which` enumerate\n               The singular values to be sought (either largest or\n               smallest).\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_27getWhichSingularTriplets(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_159getKrylovSchurSubcommMats(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_158getKrylovSchurSubcommMats[] = "EPS.getKrylovSchurSubcommMats(self)\n\n        Gets the eigenproblem matrices stored internally in the subcommunicator\n        to which the calling process belongs.\n\n        Returns\n        -------\n        A: Mat\n           The matrix associated with the eigensystem.\n        B: Mat\n           The second matrix in the case of generalized eigenproblems.\n\n        Notes\n        -----\n        This is the [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_159getKrylovSchurSubcommMats(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getWhichSingularTriplets (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getKrylovSchurSubcommMats (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getWhichSingularTriplets", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getWhichSingularTriplets", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_26getWhichSingularTriplets(((struct PySlepcSVDObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getKrylovSchurSubcommMats", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getKrylovSchurSubcommMats", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_158getKrylovSchurSubcommMats(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_26getWhichSingularTriplets(struct PySlepcSVDObject *__pyx_v_self) {
-  SVDWhich __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_158getKrylovSchurSubcommMats(struct PySlepcEPSObject *__pyx_v_self) {
+  struct PyPetscMatObject *__pyx_v_A = 0;
+  struct PyPetscMatObject *__pyx_v_B = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getWhichSingularTriplets", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getKrylovSchurSubcommMats", 0);
 
-  /* "SLEPc/SVD.pyx":265
- *                smallest).
+  /* "SLEPc/EPS.pyx":1697
+ *         These matrices should not be modified by the user.
  *         """
- *         cdef SlepcSVDWhich val = SVD_LARGEST             # <<<<<<<<<<<<<<
- *         CHKERR( SVDGetWhichSingularTriplets(self.svd, &val) )
- *         return val
+ *         cdef Mat A = Mat()             # <<<<<<<<<<<<<<
+ *         cdef Mat B = Mat()
+ *         CHKERR( EPSKrylovSchurGetSubcommMats(self.eps, &A.mat, &B.mat) )
  */
-  __pyx_v_val = SVD_LARGEST;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1697, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_A = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/SVD.pyx":266
+  /* "SLEPc/EPS.pyx":1698
  *         """
- *         cdef SlepcSVDWhich val = SVD_LARGEST
- *         CHKERR( SVDGetWhichSingularTriplets(self.svd, &val) )             # <<<<<<<<<<<<<<
- *         return val
+ *         cdef Mat A = Mat()
+ *         cdef Mat B = Mat()             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSKrylovSchurGetSubcommMats(self.eps, &A.mat, &B.mat) )
+ *         PetscINCREF(A.obj)
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1698, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_B = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "SLEPc/EPS.pyx":1699
+ *         cdef Mat A = Mat()
+ *         cdef Mat B = Mat()
+ *         CHKERR( EPSKrylovSchurGetSubcommMats(self.eps, &A.mat, &B.mat) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(A.obj)
+ *         PetscINCREF(B.obj)
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurGetSubcommMats(__pyx_v_self->eps, (&__pyx_v_A->mat), (&__pyx_v_B->mat))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 1699, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":1700
+ *         cdef Mat B = Mat()
+ *         CHKERR( EPSKrylovSchurGetSubcommMats(self.eps, &A.mat, &B.mat) )
+ *         PetscINCREF(A.obj)             # <<<<<<<<<<<<<<
+ *         PetscINCREF(B.obj)
+ *         return (A, B)
+ */
+  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_A->__pyx_base.obj);
+
+  /* "SLEPc/EPS.pyx":1701
+ *         CHKERR( EPSKrylovSchurGetSubcommMats(self.eps, &A.mat, &B.mat) )
+ *         PetscINCREF(A.obj)
+ *         PetscINCREF(B.obj)             # <<<<<<<<<<<<<<
+ *         return (A, B)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetWhichSingularTriplets(__pyx_v_self->svd, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_B->__pyx_base.obj);
 
-  /* "SLEPc/SVD.pyx":267
- *         cdef SlepcSVDWhich val = SVD_LARGEST
- *         CHKERR( SVDGetWhichSingularTriplets(self.svd, &val) )
- *         return val             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1702
+ *         PetscINCREF(A.obj)
+ *         PetscINCREF(B.obj)
+ *         return (A, B)             # <<<<<<<<<<<<<<
  * 
- *     def setWhichSingularTriplets(self, which):
+ *     def updateKrylovSchurSubcommMats(self, s=1.0, a=1.0, Mat Au=None, t=1.0, b=1.0, Mat Bu=None, structure=None, globalup=False):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1702, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_INCREF(((PyObject *)__pyx_v_A));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_A));
+  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_A));
+  __Pyx_INCREF(((PyObject *)__pyx_v_B));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_B));
+  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_B));
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/SVD.pyx":255
- *         CHKERR( SVDSetImplicitTranspose(self.svd, val) )
+  /* "SLEPc/EPS.pyx":1678
+ *         return toScalar(sval)
  * 
- *     def getWhichSingularTriplets(self):             # <<<<<<<<<<<<<<
+ *     def getKrylovSchurSubcommMats(self):             # <<<<<<<<<<<<<<
  *         """
- *         Returns which singular triplets are to be sought.
+ *         Gets the eigenproblem matrices stored internally in the subcommunicator
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getWhichSingularTriplets", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getKrylovSchurSubcommMats", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_A);
+  __Pyx_XDECREF((PyObject *)__pyx_v_B);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":269
- *         return val
+/* "SLEPc/EPS.pyx":1704
+ *         return (A, B)
  * 
- *     def setWhichSingularTriplets(self, which):             # <<<<<<<<<<<<<<
+ *     def updateKrylovSchurSubcommMats(self, s=1.0, a=1.0, Mat Au=None, t=1.0, b=1.0, Mat Bu=None, structure=None, globalup=False):             # <<<<<<<<<<<<<<
  *         """
- *         Specifies which singular triplets are to be sought.
+ *         Update the eigenproblem matrices stored internally in the subcommunicator
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_29setWhichSingularTriplets(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_28setWhichSingularTriplets[] = "SVD.setWhichSingularTriplets(self, which)\n\n        Specifies which singular triplets are to be sought.\n\n        Parameters\n        ----------\n        which: `SVD.Which` enumerate\n               The singular values to be sought (either largest or\n               smallest).\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_29setWhichSingularTriplets(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_which = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_161updateKrylovSchurSubcommMats(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_160updateKrylovSchurSubcommMats[] = "EPS.updateKrylovSchurSubcommMats(self, s=1.0, a=1.0, Mat Au=None, t=1.0, b=1.0, Mat Bu=None, structure=None, globalup=False)\n\n        Update the eigenproblem matrices stored internally in the subcommunicator\n        to which the calling process belongs.\n\n        Parameters\n        ----------\n        s: float (real or complex)\n           Scalar that multiplies the existing A matrix.\n        a: float  [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_161updateKrylovSchurSubcommMats(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_s = 0;
+  PyObject *__pyx_v_a = 0;
+  struct PyPetscMatObject *__pyx_v_Au = 0;
+  PyObject *__pyx_v_t = 0;
+  PyObject *__pyx_v_b = 0;
+  struct PyPetscMatObject *__pyx_v_Bu = 0;
+  PyObject *__pyx_v_structure = 0;
+  PyObject *__pyx_v_globalup = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setWhichSingularTriplets (wrapper)", 0);
+  __Pyx_RefNannySetupContext("updateKrylovSchurSubcommMats (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_which,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_s,&__pyx_n_s_a,&__pyx_n_s_Au,&__pyx_n_s_t,&__pyx_n_s_b,&__pyx_n_s_Bu,&__pyx_n_s_structure,&__pyx_n_s_globalup,0};
+    PyObject* values[8] = {0,0,0,0,0,0,0,0};
+    values[0] = ((PyObject *)__pyx_float_1_0);
+    values[1] = ((PyObject *)__pyx_float_1_0);
+    values[2] = (PyObject *)((struct PyPetscMatObject *)Py_None);
+    values[3] = ((PyObject *)__pyx_float_1_0);
+    values[4] = ((PyObject *)__pyx_float_1_0);
+    values[5] = (PyObject *)((struct PyPetscMatObject *)Py_None);
+    values[6] = ((PyObject *)Py_None);
+    values[7] = ((PyObject *)Py_False);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
+        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -29136,77 +30576,204 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_29setWhichSingularTriplets(PyObj
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_which)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_s);
+          if (value) { values[0] = value; kw_args--; }
+        }
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_a);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Au);
+          if (value) { values[2] = value; kw_args--; }
+        }
+        case  3:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_t);
+          if (value) { values[3] = value; kw_args--; }
+        }
+        case  4:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_b);
+          if (value) { values[4] = value; kw_args--; }
+        }
+        case  5:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Bu);
+          if (value) { values[5] = value; kw_args--; }
+        }
+        case  6:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_structure);
+          if (value) { values[6] = value; kw_args--; }
+        }
+        case  7:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_globalup);
+          if (value) { values[7] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setWhichSingularTriplets") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "updateKrylovSchurSubcommMats") < 0)) __PYX_ERR(13, 1704, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
     } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
+        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
     }
-    __pyx_v_which = values[0];
+    __pyx_v_s = values[0];
+    __pyx_v_a = values[1];
+    __pyx_v_Au = ((struct PyPetscMatObject *)values[2]);
+    __pyx_v_t = values[3];
+    __pyx_v_b = values[4];
+    __pyx_v_Bu = ((struct PyPetscMatObject *)values[5]);
+    __pyx_v_structure = values[6];
+    __pyx_v_globalup = values[7];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setWhichSingularTriplets", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("updateKrylovSchurSubcommMats", 0, 0, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 1704, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setWhichSingularTriplets", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.updateKrylovSchurSubcommMats", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_28setWhichSingularTriplets(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_which);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Au), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "Au", 0))) __PYX_ERR(13, 1704, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Bu), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "Bu", 0))) __PYX_ERR(13, 1704, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_160updateKrylovSchurSubcommMats(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_s, __pyx_v_a, __pyx_v_Au, __pyx_v_t, __pyx_v_b, __pyx_v_Bu, __pyx_v_structure, __pyx_v_globalup);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_28setWhichSingularTriplets(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_which) {
-  SVDWhich __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_160updateKrylovSchurSubcommMats(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_s, PyObject *__pyx_v_a, struct PyPetscMatObject *__pyx_v_Au, PyObject *__pyx_v_t, PyObject *__pyx_v_b, struct PyPetscMatObject *__pyx_v_Bu, PyObject *__pyx_v_structure, PyObject *__pyx_v_globalup) {
+  Mat __pyx_v_Amat;
+  Mat __pyx_v_Bmat;
+  MatStructure __pyx_v_vstr;
+  PetscBool __pyx_v_tval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  SVDWhich __pyx_t_1;
+  int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setWhichSingularTriplets", 0);
+  Mat __pyx_t_3;
+  MatStructure __pyx_t_4;
+  PetscBool __pyx_t_5;
+  PetscScalar __pyx_t_6;
+  PetscScalar __pyx_t_7;
+  PetscScalar __pyx_t_8;
+  PetscScalar __pyx_t_9;
+  int __pyx_t_10;
+  __Pyx_RefNannySetupContext("updateKrylovSchurSubcommMats", 0);
+
+  /* "SLEPc/EPS.pyx":1743
+ *         matrices in the parent communicator.
+ *         """
+ *         cdef PetscMat Amat = NULL             # <<<<<<<<<<<<<<
+ *         if Au is not None: Amat = Au.mat
+ *         cdef PetscMat Bmat = NULL
+ */
+  __pyx_v_Amat = NULL;
 
-  /* "SLEPc/SVD.pyx":279
- *                smallest).
+  /* "SLEPc/EPS.pyx":1744
  *         """
- *         cdef SlepcSVDWhich val = which             # <<<<<<<<<<<<<<
- *         CHKERR( SVDSetWhichSingularTriplets(self.svd, val) )
- *     #
+ *         cdef PetscMat Amat = NULL
+ *         if Au is not None: Amat = Au.mat             # <<<<<<<<<<<<<<
+ *         cdef PetscMat Bmat = NULL
+ *         if Bu is not None: Bmat = Bu.mat
  */
-  __pyx_t_1 = ((SVDWhich)PyInt_AsLong(__pyx_v_which)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_val = __pyx_t_1;
+  __pyx_t_1 = (((PyObject *)__pyx_v_Au) != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_v_Au->mat;
+    __pyx_v_Amat = __pyx_t_3;
+  }
 
-  /* "SLEPc/SVD.pyx":280
- *         """
- *         cdef SlepcSVDWhich val = which
- *         CHKERR( SVDSetWhichSingularTriplets(self.svd, val) )             # <<<<<<<<<<<<<<
- *     #
+  /* "SLEPc/EPS.pyx":1745
+ *         cdef PetscMat Amat = NULL
+ *         if Au is not None: Amat = Au.mat
+ *         cdef PetscMat Bmat = NULL             # <<<<<<<<<<<<<<
+ *         if Bu is not None: Bmat = Bu.mat
+ *         cdef PetscMatStructure vstr = matstructure(structure)
+ */
+  __pyx_v_Bmat = NULL;
+
+  /* "SLEPc/EPS.pyx":1746
+ *         if Au is not None: Amat = Au.mat
+ *         cdef PetscMat Bmat = NULL
+ *         if Bu is not None: Bmat = Bu.mat             # <<<<<<<<<<<<<<
+ *         cdef PetscMatStructure vstr = matstructure(structure)
+ *         cdef PetscBool tval = globalup
+ */
+  __pyx_t_2 = (((PyObject *)__pyx_v_Bu) != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_3 = __pyx_v_Bu->mat;
+    __pyx_v_Bmat = __pyx_t_3;
+  }
+
+  /* "SLEPc/EPS.pyx":1747
+ *         cdef PetscMat Bmat = NULL
+ *         if Bu is not None: Bmat = Bu.mat
+ *         cdef PetscMatStructure vstr = matstructure(structure)             # <<<<<<<<<<<<<<
+ *         cdef PetscBool tval = globalup
+ *         CHKERR( EPSKrylovSchurUpdateSubcommMats(self.eps, s, a, Amat, t, b, Bmat, vstr, tval) )
+ */
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_matstructure(__pyx_v_structure); if (unlikely(__pyx_t_4 == ((MatStructure)-1L))) __PYX_ERR(13, 1747, __pyx_L1_error)
+  __pyx_v_vstr = __pyx_t_4;
+
+  /* "SLEPc/EPS.pyx":1748
+ *         if Bu is not None: Bmat = Bu.mat
+ *         cdef PetscMatStructure vstr = matstructure(structure)
+ *         cdef PetscBool tval = globalup             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSKrylovSchurUpdateSubcommMats(self.eps, s, a, Amat, t, b, Bmat, vstr, tval) )
  * 
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDSetWhichSingularTriplets(__pyx_v_self->svd, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_globalup)); if (unlikely(PyErr_Occurred())) __PYX_ERR(13, 1748, __pyx_L1_error)
+  __pyx_v_tval = __pyx_t_5;
 
-  /* "SLEPc/SVD.pyx":269
- *         return val
+  /* "SLEPc/EPS.pyx":1749
+ *         cdef PetscMatStructure vstr = matstructure(structure)
+ *         cdef PetscBool tval = globalup
+ *         CHKERR( EPSKrylovSchurUpdateSubcommMats(self.eps, s, a, Amat, t, b, Bmat, vstr, tval) )             # <<<<<<<<<<<<<<
  * 
- *     def setWhichSingularTriplets(self, which):             # <<<<<<<<<<<<<<
+ *     def setKrylovSchurSubintervals(self, subint):
+ */
+  __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_s); if (unlikely((__pyx_t_6 == (PetscScalar)-1) && PyErr_Occurred())) __PYX_ERR(13, 1749, __pyx_L1_error)
+  __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_v_a); if (unlikely((__pyx_t_7 == (PetscScalar)-1) && PyErr_Occurred())) __PYX_ERR(13, 1749, __pyx_L1_error)
+  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_t); if (unlikely((__pyx_t_8 == (PetscScalar)-1) && PyErr_Occurred())) __PYX_ERR(13, 1749, __pyx_L1_error)
+  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_v_b); if (unlikely((__pyx_t_9 == (PetscScalar)-1) && PyErr_Occurred())) __PYX_ERR(13, 1749, __pyx_L1_error)
+  __pyx_t_10 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurUpdateSubcommMats(__pyx_v_self->eps, __pyx_t_6, __pyx_t_7, __pyx_v_Amat, __pyx_t_8, __pyx_t_9, __pyx_v_Bmat, __pyx_v_vstr, __pyx_v_tval)); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(13, 1749, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":1704
+ *         return (A, B)
+ * 
+ *     def updateKrylovSchurSubcommMats(self, s=1.0, a=1.0, Mat Au=None, t=1.0, b=1.0, Mat Bu=None, structure=None, globalup=False):             # <<<<<<<<<<<<<<
  *         """
- *         Specifies which singular triplets are to be sought.
+ *         Update the eigenproblem matrices stored internally in the subcommunicator
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setWhichSingularTriplets", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.updateKrylovSchurSubcommMats", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -29214,147 +30781,29 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_28setWhichSingularTriplets(struc
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":283
- *     #
+/* "SLEPc/EPS.pyx":1751
+ *         CHKERR( EPSKrylovSchurUpdateSubcommMats(self.eps, s, a, Amat, t, b, Bmat, vstr, tval) )
  * 
- *     def getTolerances(self):             # <<<<<<<<<<<<<<
+ *     def setKrylovSchurSubintervals(self, subint):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the tolerance and maximum iteration count used by the
+ *         Sets the subinterval boundaries for spectrum slicing with a computational interval.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_31getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_30getTolerances[] = "SVD.getTolerances(self)\n\n        Gets the tolerance and maximum iteration count used by the\n        default SVD convergence tests.\n\n        Returns\n        -------\n        tol: float\n             The convergence tolerance.\n        max_it: int\n             The maximum number of iterations\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_31getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_163setKrylovSchurSubintervals(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_162setKrylovSchurSubintervals[] = "EPS.setKrylovSchurSubintervals(self, subint)\n\n        Sets the subinterval boundaries for spectrum slicing with a computational interval.\n        \n        Parameters\n        ----------\n        subint: list of real values specifying subintervals\n\n        Notes\n        -----\n        Logically Collective on EPS\n        This function must be called after setKrylovSchurPartitions(). \n        For npart p [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_163setKrylovSchurSubintervals(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_subint = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getTolerances (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getTolerances", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTolerances", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_30getTolerances(((struct PySlepcSVDObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_30getTolerances(struct PySlepcSVDObject *__pyx_v_self) {
-  PetscReal __pyx_v_rval;
-  PetscInt __pyx_v_ival;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getTolerances", 0);
-
-  /* "SLEPc/SVD.pyx":295
- *              The maximum number of iterations
- *         """
- *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt  ival = 0
- *         CHKERR( SVDGetTolerances(self.svd, &rval, &ival) )
- */
-  __pyx_v_rval = 0.0;
-
-  /* "SLEPc/SVD.pyx":296
- *         """
- *         cdef PetscReal rval = 0
- *         cdef PetscInt  ival = 0             # <<<<<<<<<<<<<<
- *         CHKERR( SVDGetTolerances(self.svd, &rval, &ival) )
- *         return (toReal(rval), toInt(ival))
- */
-  __pyx_v_ival = 0;
-
-  /* "SLEPc/SVD.pyx":297
- *         cdef PetscReal rval = 0
- *         cdef PetscInt  ival = 0
- *         CHKERR( SVDGetTolerances(self.svd, &rval, &ival) )             # <<<<<<<<<<<<<<
- *         return (toReal(rval), toInt(ival))
- * 
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetTolerances(__pyx_v_self->svd, (&__pyx_v_rval), (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/SVD.pyx":298
- *         cdef PetscInt  ival = 0
- *         CHKERR( SVDGetTolerances(self.svd, &rval, &ival) )
- *         return (toReal(rval), toInt(ival))             # <<<<<<<<<<<<<<
- * 
- *     def setTolerances(self, tol=None, max_it=None):
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __Pyx_GIVEREF(__pyx_t_2);
-  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_3);
-  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
-  __pyx_t_2 = 0;
-  __pyx_t_3 = 0;
-  __pyx_r = __pyx_t_4;
-  __pyx_t_4 = 0;
-  goto __pyx_L0;
-
-  /* "SLEPc/SVD.pyx":283
- *     #
- * 
- *     def getTolerances(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the tolerance and maximum iteration count used by the
- */
-
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "SLEPc/SVD.pyx":300
- *         return (toReal(rval), toInt(ival))
- * 
- *     def setTolerances(self, tol=None, max_it=None):             # <<<<<<<<<<<<<<
- *         """
- *         Sets the tolerance and maximum iteration count used by the
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_33setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_32setTolerances[] = "SVD.setTolerances(self, tol=None, max_it=None)\n\n        Sets the tolerance and maximum iteration count used by the\n        default SVD convergence tests.\n\n        Parameters\n        ----------\n        tol: float, optional\n             The convergence tolerance.\n        max_it: int, optional\n             The maximum number of iterations\n\n        Notes\n        -----\n        Use `DECIDE` for `max_it` to assign a  [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_33setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_tol = 0;
-  PyObject *__pyx_v_max_it = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setTolerances (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setKrylovSchurSubintervals (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_tol,&__pyx_n_s_max_it,0};
-    PyObject* values[2] = {0,0};
-    values[0] = ((PyObject *)Py_None);
-    values[1] = ((PyObject *)Py_None);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_subint,0};
+    PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -29362,300 +30811,220 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_33setTolerances(PyObject *__pyx_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_tol);
-          if (value) { values[0] = value; kw_args--; }
-        }
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_max_it);
-          if (value) { values[1] = value; kw_args--; }
-        }
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_subint)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTolerances") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setKrylovSchurSubintervals") < 0)) __PYX_ERR(13, 1751, __pyx_L3_error)
       }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
     } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_tol = values[0];
-    __pyx_v_max_it = values[1];
+    __pyx_v_subint = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTolerances", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setKrylovSchurSubintervals", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 1751, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setKrylovSchurSubintervals", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_32setTolerances(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_tol, __pyx_v_max_it);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_162setKrylovSchurSubintervals(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_subint);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_32setTolerances(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_tol, PyObject *__pyx_v_max_it) {
-  PetscReal __pyx_v_rval;
-  PetscInt __pyx_v_ival;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_162setKrylovSchurSubintervals(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_subint) {
+  PetscBool __pyx_v_match;
+  PetscReal *__pyx_v_subintarray;
+  Py_ssize_t __pyx_v_i;
+  Py_ssize_t __pyx_v_n;
+  PetscInt __pyx_v_nparts;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
-  PetscReal __pyx_t_3;
-  PetscInt __pyx_t_4;
-  int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setTolerances", 0);
+  Py_ssize_t __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  Py_ssize_t __pyx_t_5;
+  PetscReal __pyx_t_6;
+  __Pyx_RefNannySetupContext("setKrylovSchurSubintervals", 0);
 
-  /* "SLEPc/SVD.pyx":317
- *         which is dependent on the solution method.
+  /* "SLEPc/EPS.pyx":1771
+ *         [subint_0,subint_1], [subint_1,subint_2], and so on.
  *         """
- *         cdef PetscReal rval = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscInt  ival = PETSC_DEFAULT
- *         if tol    is not None: rval = asReal(tol)
+ *         cdef PetscBool match = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscObjectTypeCompare(<PetscObject>self.eps, EPSKRYLOVSCHUR, &match) )
+ *         if match == PETSC_FALSE: return
  */
-  __pyx_v_rval = PETSC_DEFAULT;
+  __pyx_v_match = PETSC_FALSE;
 
-  /* "SLEPc/SVD.pyx":318
+  /* "SLEPc/EPS.pyx":1772
  *         """
- *         cdef PetscReal rval = PETSC_DEFAULT
- *         cdef PetscInt  ival = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         if tol    is not None: rval = asReal(tol)
- *         if max_it is not None: ival = asInt(max_it)
+ *         cdef PetscBool match = PETSC_FALSE
+ *         CHKERR( PetscObjectTypeCompare(<PetscObject>self.eps, EPSKRYLOVSCHUR, &match) )             # <<<<<<<<<<<<<<
+ *         if match == PETSC_FALSE: return
+ *         cdef PetscReal *subintarray = NULL
  */
-  __pyx_v_ival = PETSC_DEFAULT;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PetscObjectTypeCompare(((PetscObject)__pyx_v_self->eps), EPSKRYLOVSCHUR, (&__pyx_v_match))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 1772, __pyx_L1_error)
 
-  /* "SLEPc/SVD.pyx":319
- *         cdef PetscReal rval = PETSC_DEFAULT
- *         cdef PetscInt  ival = PETSC_DEFAULT
- *         if tol    is not None: rval = asReal(tol)             # <<<<<<<<<<<<<<
- *         if max_it is not None: ival = asInt(max_it)
- *         CHKERR( SVDSetTolerances(self.svd, rval, ival) )
+  /* "SLEPc/EPS.pyx":1773
+ *         cdef PetscBool match = PETSC_FALSE
+ *         CHKERR( PetscObjectTypeCompare(<PetscObject>self.eps, EPSKRYLOVSCHUR, &match) )
+ *         if match == PETSC_FALSE: return             # <<<<<<<<<<<<<<
+ *         cdef PetscReal *subintarray = NULL
+ *         cdef Py_ssize_t i = 0, n = len(subint)
  */
-  __pyx_t_1 = (__pyx_v_tol != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
+  __pyx_t_2 = ((__pyx_v_match == PETSC_FALSE) != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_rval = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "SLEPc/SVD.pyx":320
- *         cdef PetscInt  ival = PETSC_DEFAULT
- *         if tol    is not None: rval = asReal(tol)
- *         if max_it is not None: ival = asInt(max_it)             # <<<<<<<<<<<<<<
- *         CHKERR( SVDSetTolerances(self.svd, rval, ival) )
- * 
- */
-  __pyx_t_2 = (__pyx_v_max_it != Py_None);
-  __pyx_t_1 = (__pyx_t_2 != 0);
-  if (__pyx_t_1) {
-    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_max_it); if (unlikely(__pyx_t_4 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival = __pyx_t_4;
-    goto __pyx_L4;
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+    goto __pyx_L0;
   }
-  __pyx_L4:;
 
-  /* "SLEPc/SVD.pyx":321
- *         if tol    is not None: rval = asReal(tol)
- *         if max_it is not None: ival = asInt(max_it)
- *         CHKERR( SVDSetTolerances(self.svd, rval, ival) )             # <<<<<<<<<<<<<<
- * 
- *     def getDimensions(self):
- */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDSetTolerances(__pyx_v_self->svd, __pyx_v_rval, __pyx_v_ival)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/SVD.pyx":300
- *         return (toReal(rval), toInt(ival))
- * 
- *     def setTolerances(self, tol=None, max_it=None):             # <<<<<<<<<<<<<<
- *         """
- *         Sets the tolerance and maximum iteration count used by the
- */
-
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "SLEPc/SVD.pyx":323
- *         CHKERR( SVDSetTolerances(self.svd, rval, ival) )
- * 
- *     def getDimensions(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the number of singular values to compute and the
+  /* "SLEPc/EPS.pyx":1774
+ *         CHKERR( PetscObjectTypeCompare(<PetscObject>self.eps, EPSKRYLOVSCHUR, &match) )
+ *         if match == PETSC_FALSE: return
+ *         cdef PetscReal *subintarray = NULL             # <<<<<<<<<<<<<<
+ *         cdef Py_ssize_t i = 0, n = len(subint)
+ *         cdef PetscInt nparts = 0
  */
+  __pyx_v_subintarray = NULL;
 
-/* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_35getDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_34getDimensions[] = "SVD.getDimensions(self)\n\n        Gets the number of singular values to compute and the\n        dimension of the subspace.\n\n        Returns\n        -------\n        nsv: int\n             Number of singular values to compute.\n        ncv: int\n             Maximum dimension of the subspace to be used by the\n             solver.\n        mpd: int\n             Maximum dimension allowed for the projected problem.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_35getDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getDimensions (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getDimensions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDimensions", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_34getDimensions(((struct PySlepcSVDObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_34getDimensions(struct PySlepcSVDObject *__pyx_v_self) {
-  PetscInt __pyx_v_ival1;
-  PetscInt __pyx_v_ival2;
-  PetscInt __pyx_v_ival3;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getDimensions", 0);
-
-  /* "SLEPc/SVD.pyx":338
- *              Maximum dimension allowed for the projected problem.
- *         """
- *         cdef PetscInt ival1 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival2 = 0
- *         cdef PetscInt ival3 = 0
+  /* "SLEPc/EPS.pyx":1775
+ *         if match == PETSC_FALSE: return
+ *         cdef PetscReal *subintarray = NULL
+ *         cdef Py_ssize_t i = 0, n = len(subint)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt nparts = 0
+ *         CHKERR( EPSKrylovSchurGetPartitions(self.eps, &nparts) )
  */
-  __pyx_v_ival1 = 0;
-
-  /* "SLEPc/SVD.pyx":339
- *         """
- *         cdef PetscInt ival1 = 0
- *         cdef PetscInt ival2 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival3 = 0
- *         CHKERR( SVDGetDimensions(self.svd, &ival1, &ival2, &ival3) )
+  __pyx_v_i = 0;
+  __pyx_t_3 = PyObject_Length(__pyx_v_subint); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(13, 1775, __pyx_L1_error)
+  __pyx_v_n = __pyx_t_3;
+
+  /* "SLEPc/EPS.pyx":1776
+ *         cdef PetscReal *subintarray = NULL
+ *         cdef Py_ssize_t i = 0, n = len(subint)
+ *         cdef PetscInt nparts = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSKrylovSchurGetPartitions(self.eps, &nparts) )
+ *         assert n >= nparts
+ */
+  __pyx_v_nparts = 0;
+
+  /* "SLEPc/EPS.pyx":1777
+ *         cdef Py_ssize_t i = 0, n = len(subint)
+ *         cdef PetscInt nparts = 0
+ *         CHKERR( EPSKrylovSchurGetPartitions(self.eps, &nparts) )             # <<<<<<<<<<<<<<
+ *         assert n >= nparts
+ *         cdef tmp = allocate(n*sizeof(PetscReal),<void**>&subintarray)
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurGetPartitions(__pyx_v_self->eps, (&__pyx_v_nparts))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 1777, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":1778
+ *         cdef PetscInt nparts = 0
+ *         CHKERR( EPSKrylovSchurGetPartitions(self.eps, &nparts) )
+ *         assert n >= nparts             # <<<<<<<<<<<<<<
+ *         cdef tmp = allocate(n*sizeof(PetscReal),<void**>&subintarray)
+ *         for i in range(n): subintarray[i] = asReal(subint[i])
  */
-  __pyx_v_ival2 = 0;
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!Py_OptimizeFlag)) {
+    if (unlikely(!((__pyx_v_n >= __pyx_v_nparts) != 0))) {
+      PyErr_SetNone(PyExc_AssertionError);
+      __PYX_ERR(13, 1778, __pyx_L1_error)
+    }
+  }
+  #endif
 
-  /* "SLEPc/SVD.pyx":340
- *         cdef PetscInt ival1 = 0
- *         cdef PetscInt ival2 = 0
- *         cdef PetscInt ival3 = 0             # <<<<<<<<<<<<<<
- *         CHKERR( SVDGetDimensions(self.svd, &ival1, &ival2, &ival3) )
- *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+  /* "SLEPc/EPS.pyx":1779
+ *         CHKERR( EPSKrylovSchurGetPartitions(self.eps, &nparts) )
+ *         assert n >= nparts
+ *         cdef tmp = allocate(n*sizeof(PetscReal),<void**>&subintarray)             # <<<<<<<<<<<<<<
+ *         for i in range(n): subintarray[i] = asReal(subint[i])
+ *         CHKERR(EPSKrylovSchurSetSubintervals(self.eps, subintarray))
  */
-  __pyx_v_ival3 = 0;
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_allocate((__pyx_v_n * (sizeof(PetscReal))), ((void **)(&__pyx_v_subintarray))); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 1779, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_v_tmp = __pyx_t_4;
+  __pyx_t_4 = 0;
 
-  /* "SLEPc/SVD.pyx":341
- *         cdef PetscInt ival2 = 0
- *         cdef PetscInt ival3 = 0
- *         CHKERR( SVDGetDimensions(self.svd, &ival1, &ival2, &ival3) )             # <<<<<<<<<<<<<<
- *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+  /* "SLEPc/EPS.pyx":1780
+ *         assert n >= nparts
+ *         cdef tmp = allocate(n*sizeof(PetscReal),<void**>&subintarray)
+ *         for i in range(n): subintarray[i] = asReal(subint[i])             # <<<<<<<<<<<<<<
+ *         CHKERR(EPSKrylovSchurSetSubintervals(self.eps, subintarray))
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetDimensions(__pyx_v_self->svd, (&__pyx_v_ival1), (&__pyx_v_ival2), (&__pyx_v_ival3))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_v_n;
+  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_3; __pyx_t_5+=1) {
+    __pyx_v_i = __pyx_t_5;
+    __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_subint, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 1780, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_6 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_t_4); if (unlikely(__pyx_t_6 == -1.0 && PyErr_Occurred())) __PYX_ERR(13, 1780, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    (__pyx_v_subintarray[__pyx_v_i]) = __pyx_t_6;
+  }
 
-  /* "SLEPc/SVD.pyx":342
- *         cdef PetscInt ival3 = 0
- *         CHKERR( SVDGetDimensions(self.svd, &ival1, &ival2, &ival3) )
- *         return (toInt(ival1), toInt(ival2), toInt(ival3))             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1781
+ *         cdef tmp = allocate(n*sizeof(PetscReal),<void**>&subintarray)
+ *         for i in range(n): subintarray[i] = asReal(subint[i])
+ *         CHKERR(EPSKrylovSchurSetSubintervals(self.eps, subintarray))             # <<<<<<<<<<<<<<
  * 
- *     def setDimensions(self, nsv=None, ncv=None, mpd=None):
+ *     def setRQCGReset(self, nrest):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __Pyx_GIVEREF(__pyx_t_2);
-  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_3);
-  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_4);
-  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
-  __pyx_t_2 = 0;
-  __pyx_t_3 = 0;
-  __pyx_t_4 = 0;
-  __pyx_r = __pyx_t_5;
-  __pyx_t_5 = 0;
-  goto __pyx_L0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSKrylovSchurSetSubintervals(__pyx_v_self->eps, __pyx_v_subintarray)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 1781, __pyx_L1_error)
 
-  /* "SLEPc/SVD.pyx":323
- *         CHKERR( SVDSetTolerances(self.svd, rval, ival) )
+  /* "SLEPc/EPS.pyx":1751
+ *         CHKERR( EPSKrylovSchurUpdateSubcommMats(self.eps, s, a, Amat, t, b, Bmat, vstr, tval) )
  * 
- *     def getDimensions(self):             # <<<<<<<<<<<<<<
+ *     def setKrylovSchurSubintervals(self, subint):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the number of singular values to compute and the
+ *         Sets the subinterval boundaries for spectrum slicing with a computational interval.
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setKrylovSchurSubintervals", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_tmp);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":344
- *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+/* "SLEPc/EPS.pyx":1783
+ *         CHKERR(EPSKrylovSchurSetSubintervals(self.eps, subintarray))
  * 
- *     def setDimensions(self, nsv=None, ncv=None, mpd=None):             # <<<<<<<<<<<<<<
+ *     def setRQCGReset(self, nrest):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the number of singular values to compute and the
+ *         Sets the reset parameter of the RQCG iteration. Every nrest iterations,
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_37setDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_36setDimensions[] = "SVD.setDimensions(self, nsv=None, ncv=None, mpd=None)\n\n        Sets the number of singular values to compute and the\n        dimension of the subspace.\n\n        Parameters\n        ----------\n        nsv: int, optional\n             Number of singular values to compute.\n        ncv: int, optional\n             Maximum dimension of the subspace to be used by the\n             solver.\n        mpd: int, optional\n      [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_37setDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_nsv = 0;
-  PyObject *__pyx_v_ncv = 0;
-  PyObject *__pyx_v_mpd = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_165setRQCGReset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_164setRQCGReset[] = "EPS.setRQCGReset(self, nrest)\n\n        Sets the reset parameter of the RQCG iteration. Every nrest iterations,\n        the solver performs a Rayleigh-Ritz projection step.\n\n        Parameters\n        ----------\n        nrest: integer\n               The number of iterations between resets.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_165setRQCGReset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_nrest = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setDimensions (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setRQCGReset (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nsv,&__pyx_n_s_ncv,&__pyx_n_s_mpd,0};
-    PyObject* values[3] = {0,0,0};
-    values[0] = ((PyObject *)Py_None);
-    values[1] = ((PyObject *)Py_None);
-    values[2] = ((PyObject *)Py_None);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nrest,0};
+    PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -29663,164 +31032,74 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_37setDimensions(PyObject *__pyx_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nsv);
-          if (value) { values[0] = value; kw_args--; }
-        }
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ncv);
-          if (value) { values[1] = value; kw_args--; }
-        }
-        case  2:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mpd);
-          if (value) { values[2] = value; kw_args--; }
-        }
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nrest)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDimensions") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRQCGReset") < 0)) __PYX_ERR(13, 1783, __pyx_L3_error)
       }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
     } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_nsv = values[0];
-    __pyx_v_ncv = values[1];
-    __pyx_v_mpd = values[2];
+    __pyx_v_nrest = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDimensions", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setRQCGReset", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 1783, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setRQCGReset", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_36setDimensions(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_nsv, __pyx_v_ncv, __pyx_v_mpd);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_164setRQCGReset(((struct PySlepcEPSObject *)__pyx_v_self), __pyx_v_nrest);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_36setDimensions(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_nsv, PyObject *__pyx_v_ncv, PyObject *__pyx_v_mpd) {
-  PetscInt __pyx_v_ival1;
-  PetscInt __pyx_v_ival2;
-  PetscInt __pyx_v_ival3;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_164setRQCGReset(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_nrest) {
+  PetscInt __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PetscInt __pyx_t_1;
   int __pyx_t_2;
-  PetscInt __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setDimensions", 0);
-
-  /* "SLEPc/SVD.pyx":377
- *         smaller value should be used.
- *         """
- *         cdef PetscInt ival1 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival2 = PETSC_DEFAULT
- *         cdef PetscInt ival3 = PETSC_DEFAULT
- */
-  __pyx_v_ival1 = PETSC_DEFAULT;
+  __Pyx_RefNannySetupContext("setRQCGReset", 0);
 
-  /* "SLEPc/SVD.pyx":378
+  /* "SLEPc/EPS.pyx":1793
+ *                The number of iterations between resets.
  *         """
- *         cdef PetscInt ival1 = PETSC_DEFAULT
- *         cdef PetscInt ival2 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival3 = PETSC_DEFAULT
- *         if nsv is not None: ival1 = asInt(nsv)
- */
-  __pyx_v_ival2 = PETSC_DEFAULT;
-
-  /* "SLEPc/SVD.pyx":379
- *         cdef PetscInt ival1 = PETSC_DEFAULT
- *         cdef PetscInt ival2 = PETSC_DEFAULT
- *         cdef PetscInt ival3 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         if nsv is not None: ival1 = asInt(nsv)
- *         if ncv is not None: ival2 = asInt(ncv)
- */
-  __pyx_v_ival3 = PETSC_DEFAULT;
-
-  /* "SLEPc/SVD.pyx":380
- *         cdef PetscInt ival2 = PETSC_DEFAULT
- *         cdef PetscInt ival3 = PETSC_DEFAULT
- *         if nsv is not None: ival1 = asInt(nsv)             # <<<<<<<<<<<<<<
- *         if ncv is not None: ival2 = asInt(ncv)
- *         if mpd is not None: ival3 = asInt(mpd)
- */
-  __pyx_t_1 = (__pyx_v_nsv != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_nsv); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival1 = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "SLEPc/SVD.pyx":381
- *         cdef PetscInt ival3 = PETSC_DEFAULT
- *         if nsv is not None: ival1 = asInt(nsv)
- *         if ncv is not None: ival2 = asInt(ncv)             # <<<<<<<<<<<<<<
- *         if mpd is not None: ival3 = asInt(mpd)
- *         CHKERR( SVDSetDimensions(self.svd, ival1, ival2, ival3) )
- */
-  __pyx_t_2 = (__pyx_v_ncv != Py_None);
-  __pyx_t_1 = (__pyx_t_2 != 0);
-  if (__pyx_t_1) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_ncv); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival2 = __pyx_t_3;
-    goto __pyx_L4;
-  }
-  __pyx_L4:;
-
-  /* "SLEPc/SVD.pyx":382
- *         if nsv is not None: ival1 = asInt(nsv)
- *         if ncv is not None: ival2 = asInt(ncv)
- *         if mpd is not None: ival3 = asInt(mpd)             # <<<<<<<<<<<<<<
- *         CHKERR( SVDSetDimensions(self.svd, ival1, ival2, ival3) )
+ *         cdef PetscInt val = nrest             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSRQCGSetReset(self.eps, val) )
  * 
  */
-  __pyx_t_1 = (__pyx_v_mpd != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_mpd); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival3 = __pyx_t_3;
-    goto __pyx_L5;
-  }
-  __pyx_L5:;
+  __pyx_t_1 = __Pyx_PyInt_As_PetscInt(__pyx_v_nrest); if (unlikely((__pyx_t_1 == (PetscInt)-1) && PyErr_Occurred())) __PYX_ERR(13, 1793, __pyx_L1_error)
+  __pyx_v_val = __pyx_t_1;
 
-  /* "SLEPc/SVD.pyx":383
- *         if ncv is not None: ival2 = asInt(ncv)
- *         if mpd is not None: ival3 = asInt(mpd)
- *         CHKERR( SVDSetDimensions(self.svd, ival1, ival2, ival3) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1794
+ *         """
+ *         cdef PetscInt val = nrest
+ *         CHKERR( EPSRQCGSetReset(self.eps, val) )             # <<<<<<<<<<<<<<
  * 
- *     def getBV(self):
+ *     def getRQCGReset(self):
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDSetDimensions(__pyx_v_self->svd, __pyx_v_ival1, __pyx_v_ival2, __pyx_v_ival3)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSRQCGSetReset(__pyx_v_self->eps, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(13, 1794, __pyx_L1_error)
 
-  /* "SLEPc/SVD.pyx":344
- *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+  /* "SLEPc/EPS.pyx":1783
+ *         CHKERR(EPSKrylovSchurSetSubintervals(self.eps, subintarray))
  * 
- *     def setDimensions(self, nsv=None, ncv=None, mpd=None):             # <<<<<<<<<<<<<<
+ *     def setRQCGReset(self, nrest):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the number of singular values to compute and the
+ *         Sets the reset parameter of the RQCG iteration. Every nrest iterations,
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.setRQCGReset", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -29828,797 +31107,678 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_36setDimensions(struct PySlepcSV
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":385
- *         CHKERR( SVDSetDimensions(self.svd, ival1, ival2, ival3) )
+/* "SLEPc/EPS.pyx":1796
+ *         CHKERR( EPSRQCGSetReset(self.eps, val) )
  * 
- *     def getBV(self):             # <<<<<<<<<<<<<<
+ *     def getRQCGReset(self):             # <<<<<<<<<<<<<<
  *         """
- *         Obtain the basis vectors objects associated to the SVD object.
+ *         Gets the reset parameter used in the RQCG method.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_39getBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_38getBV[] = "SVD.getBV(self)\n\n        Obtain the basis vectors objects associated to the SVD object.\n\n        Returns\n        -------\n        V: BV\n            The basis vectors context for right singular vectors.\n        U: BV\n            The basis vectors context for left singular vectors.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_39getBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_167getRQCGReset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3EPS_166getRQCGReset[] = "EPS.getRQCGReset(self)\n\n        Gets the reset parameter used in the RQCG method.\n\n        Returns\n        -------\n        nrest: integer\n               The number of iterations between resets.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_167getRQCGReset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getBV (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getRQCGReset (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getBV", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getBV", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_38getBV(((struct PySlepcSVDObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getRQCGReset", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getRQCGReset", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_166getRQCGReset(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_38getBV(struct PySlepcSVDObject *__pyx_v_self) {
-  struct PySlepcBVObject *__pyx_v_V = 0;
-  struct PySlepcBVObject *__pyx_v_U = 0;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_166getRQCGReset(struct PySlepcEPSObject *__pyx_v_self) {
+  PetscInt __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getBV", 0);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getRQCGReset", 0);
 
-  /* "SLEPc/SVD.pyx":396
- *             The basis vectors context for left singular vectors.
+  /* "SLEPc/EPS.pyx":1805
+ *                The number of iterations between resets.
  *         """
- *         cdef BV V = BV()             # <<<<<<<<<<<<<<
- *         cdef BV U = BV()
- *         CHKERR( SVDGetBV(self.svd, &V.bv, &U.bv) )
+ *         cdef PetscInt val = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( EPSRQCGGetReset(self.eps, &val) )
+ *         return val
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_BV)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_V = ((struct PySlepcBVObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_val = 0;
 
-  /* "SLEPc/SVD.pyx":397
+  /* "SLEPc/EPS.pyx":1806
  *         """
- *         cdef BV V = BV()
- *         cdef BV U = BV()             # <<<<<<<<<<<<<<
- *         CHKERR( SVDGetBV(self.svd, &V.bv, &U.bv) )
- *         PetscINCREF(V.obj)
+ *         cdef PetscInt val = 0
+ *         CHKERR( EPSRQCGGetReset(self.eps, &val) )             # <<<<<<<<<<<<<<
+ *         return val
+ * 
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_BV)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_U = ((struct PySlepcBVObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(EPSRQCGGetReset(__pyx_v_self->eps, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(13, 1806, __pyx_L1_error)
 
-  /* "SLEPc/SVD.pyx":398
- *         cdef BV V = BV()
- *         cdef BV U = BV()
- *         CHKERR( SVDGetBV(self.svd, &V.bv, &U.bv) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(V.obj)
- *         PetscINCREF(U.obj)
+  /* "SLEPc/EPS.pyx":1807
+ *         cdef PetscInt val = 0
+ *         CHKERR( EPSRQCGGetReset(self.eps, &val) )
+ *         return val             # <<<<<<<<<<<<<<
+ * 
+ *     #
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetBV(__pyx_v_self->svd, (&__pyx_v_V->bv), (&__pyx_v_U->bv))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyInt_From_PetscInt(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1807, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
 
-  /* "SLEPc/SVD.pyx":399
- *         cdef BV U = BV()
- *         CHKERR( SVDGetBV(self.svd, &V.bv, &U.bv) )
- *         PetscINCREF(V.obj)             # <<<<<<<<<<<<<<
- *         PetscINCREF(U.obj)
- *         return (V,U)
+  /* "SLEPc/EPS.pyx":1796
+ *         CHKERR( EPSRQCGSetReset(self.eps, val) )
+ * 
+ *     def getRQCGReset(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the reset parameter used in the RQCG method.
  */
-  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_V->__pyx_base.obj);
 
-  /* "SLEPc/SVD.pyx":400
- *         CHKERR( SVDGetBV(self.svd, &V.bv, &U.bv) )
- *         PetscINCREF(V.obj)
- *         PetscINCREF(U.obj)             # <<<<<<<<<<<<<<
- *         return (V,U)
- * 
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.getRQCGReset", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/EPS.pyx":1811
+ *     #
+ *     property problem_type:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getProblemType()
+ *         def __set__(self, value):
  */
-  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_U->__pyx_base.obj);
 
-  /* "SLEPc/SVD.pyx":401
- *         PetscINCREF(V.obj)
- *         PetscINCREF(U.obj)
- *         return (V,U)             # <<<<<<<<<<<<<<
- * 
- *     def setBV(self, BV V not None,BV U=None):
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_12problem_type_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_12problem_type_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_12problem_type___get__(((struct PySlepcEPSObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_12problem_type___get__(struct PySlepcEPSObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("__get__", 0);
+
+  /* "SLEPc/EPS.pyx":1812
+ *     property problem_type:
+ *         def __get__(self):
+ *             return self.getProblemType()             # <<<<<<<<<<<<<<
+ *         def __set__(self, value):
+ *             self.setProblemType(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getProblemType); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1812, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
+  }
+  if (__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1812, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  } else {
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1812, __pyx_L1_error)
+  }
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_INCREF(((PyObject *)__pyx_v_V));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_V));
-  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_V));
-  __Pyx_INCREF(((PyObject *)__pyx_v_U));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_U));
-  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_U));
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/SVD.pyx":385
- *         CHKERR( SVDSetDimensions(self.svd, ival1, ival2, ival3) )
- * 
- *     def getBV(self):             # <<<<<<<<<<<<<<
- *         """
- *         Obtain the basis vectors objects associated to the SVD object.
+  /* "SLEPc/EPS.pyx":1811
+ *     #
+ *     property problem_type:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getProblemType()
+ *         def __set__(self, value):
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.problem_type.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_V);
-  __Pyx_XDECREF((PyObject *)__pyx_v_U);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":403
- *         return (V,U)
+/* "SLEPc/EPS.pyx":1813
+ *         def __get__(self):
+ *             return self.getProblemType()
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setProblemType(value)
  * 
- *     def setBV(self, BV V not None,BV U=None):             # <<<<<<<<<<<<<<
- *         """
- *         Associates basis vectors objects to the SVD solver.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_41setBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_40setBV[] = "SVD.setBV(self, BV V, BV U=None)\n\n        Associates basis vectors objects to the SVD solver.\n\n        Parameters\n        ----------\n        V: BV\n            The basis vectors context for right singular vectors.\n        U: BV\n            The basis vectors context for left singular vectors.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_41setBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PySlepcBVObject *__pyx_v_V = 0;
-  struct PySlepcBVObject *__pyx_v_U = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  PyObject *__pyx_r = 0;
+static int __pyx_pw_8slepc4py_5SLEPc_3EPS_12problem_type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_8slepc4py_5SLEPc_3EPS_12problem_type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setBV (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_V,&__pyx_n_s_U,0};
-    PyObject* values[2] = {0,0};
-    values[1] = (PyObject *)((struct PySlepcBVObject *)Py_None);
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_U);
-          if (value) { values[1] = value; kw_args--; }
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setBV") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-    }
-    __pyx_v_V = ((struct PySlepcBVObject *)values[0]);
-    __pyx_v_U = ((struct PySlepcBVObject *)values[1]);
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setBV", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_V), __pyx_ptype_8slepc4py_5SLEPc_BV, 0, "V", 0))) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_U), __pyx_ptype_8slepc4py_5SLEPc_BV, 1, "U", 0))) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_40setBV(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_V, __pyx_v_U);
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_12problem_type_2__set__(((struct PySlepcEPSObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_40setBV(struct PySlepcSVDObject *__pyx_v_self, struct PySlepcBVObject *__pyx_v_V, struct PySlepcBVObject *__pyx_v_U) {
-  BV __pyx_v_VBV;
-  BV __pyx_v_UBV;
-  PyObject *__pyx_r = NULL;
+static int __pyx_pf_8slepc4py_5SLEPc_3EPS_12problem_type_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  BV __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setBV", 0);
-
-  /* "SLEPc/SVD.pyx":414
- *             The basis vectors context for left singular vectors.
- *         """
- *         cdef SlepcBV VBV = V.bv             # <<<<<<<<<<<<<<
- *         cdef SlepcBV UBV = NULL
- *         if U is not None: UBV = U.bv
- */
-  __pyx_t_1 = __pyx_v_V->bv;
-  __pyx_v_VBV = __pyx_t_1;
-
-  /* "SLEPc/SVD.pyx":415
- *         """
- *         cdef SlepcBV VBV = V.bv
- *         cdef SlepcBV UBV = NULL             # <<<<<<<<<<<<<<
- *         if U is not None: UBV = U.bv
- *         CHKERR( SVDSetBV(self.svd, VBV, UBV) )
- */
-  __pyx_v_UBV = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "SLEPc/SVD.pyx":416
- *         cdef SlepcBV VBV = V.bv
- *         cdef SlepcBV UBV = NULL
- *         if U is not None: UBV = U.bv             # <<<<<<<<<<<<<<
- *         CHKERR( SVDSetBV(self.svd, VBV, UBV) )
+  /* "SLEPc/EPS.pyx":1814
+ *             return self.getProblemType()
+ *         def __set__(self, value):
+ *             self.setProblemType(value)             # <<<<<<<<<<<<<<
  * 
+ *     property extraction:
  */
-  __pyx_t_2 = (((PyObject *)__pyx_v_U) != Py_None);
-  __pyx_t_3 = (__pyx_t_2 != 0);
-  if (__pyx_t_3) {
-    __pyx_t_1 = __pyx_v_U->bv;
-    __pyx_v_UBV = __pyx_t_1;
-    goto __pyx_L3;
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setProblemType); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1814, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
   }
-  __pyx_L3:;
-
-  /* "SLEPc/SVD.pyx":417
- *         cdef SlepcBV UBV = NULL
- *         if U is not None: UBV = U.bv
- *         CHKERR( SVDSetBV(self.svd, VBV, UBV) )             # <<<<<<<<<<<<<<
- * 
- *     def getOperator(self):
- */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDSetBV(__pyx_v_self->svd, __pyx_v_VBV, __pyx_v_UBV)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1814, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+  } else {
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 1814, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+    __Pyx_INCREF(__pyx_v_value);
+    __Pyx_GIVEREF(__pyx_v_value);
+    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1814, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  }
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "SLEPc/SVD.pyx":403
- *         return (V,U)
+  /* "SLEPc/EPS.pyx":1813
+ *         def __get__(self):
+ *             return self.getProblemType()
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setProblemType(value)
  * 
- *     def setBV(self, BV V not None,BV U=None):             # <<<<<<<<<<<<<<
- *         """
- *         Associates basis vectors objects to the SVD solver.
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.problem_type.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
   __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":419
- *         CHKERR( SVDSetBV(self.svd, VBV, UBV) )
+/* "SLEPc/EPS.pyx":1817
  * 
- *     def getOperator(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the matrix associated with the singular value problem.
+ *     property extraction:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getExtraction()
+ *         def __set__(self, value):
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_43getOperator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_42getOperator[] = "SVD.getOperator(self)\n\n        Gets the matrix associated with the singular value problem.\n\n        Returns\n        -------\n        A: Mat\n           The matrix associated with the singular value problem.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_43getOperator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_10extraction_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_10extraction_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getOperator (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getOperator", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getOperator", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_42getOperator(((struct PySlepcSVDObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_10extraction___get__(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_42getOperator(struct PySlepcSVDObject *__pyx_v_self) {
-  struct PyPetscMatObject *__pyx_v_A = 0;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_10extraction___get__(struct PySlepcEPSObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getOperator", 0);
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "SLEPc/SVD.pyx":428
- *            The matrix associated with the singular value problem.
- *         """
- *         cdef Mat A = Mat()             # <<<<<<<<<<<<<<
- *         CHKERR( SVDGetOperator(self.svd, &A.mat) )
- *         PetscINCREF(A.obj)
+  /* "SLEPc/EPS.pyx":1818
+ *     property extraction:
+ *         def __get__(self):
+ *             return self.getExtraction()             # <<<<<<<<<<<<<<
+ *         def __set__(self, value):
+ *             self.setExtraction(value)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Mat)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getExtraction); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1818, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
+  }
+  if (__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1818, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  } else {
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1818, __pyx_L1_error)
+  }
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_A = ((struct PyPetscMatObject *)__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
-
-  /* "SLEPc/SVD.pyx":429
- *         """
- *         cdef Mat A = Mat()
- *         CHKERR( SVDGetOperator(self.svd, &A.mat) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(A.obj)
- *         return A
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetOperator(__pyx_v_self->svd, (&__pyx_v_A->mat))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/SVD.pyx":430
- *         cdef Mat A = Mat()
- *         CHKERR( SVDGetOperator(self.svd, &A.mat) )
- *         PetscINCREF(A.obj)             # <<<<<<<<<<<<<<
- *         return A
- * 
- */
-  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_A->__pyx_base.obj);
-
-  /* "SLEPc/SVD.pyx":431
- *         CHKERR( SVDGetOperator(self.svd, &A.mat) )
- *         PetscINCREF(A.obj)
- *         return A             # <<<<<<<<<<<<<<
- * 
- *     def setOperator(self, Mat A not None):
- */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_A));
-  __pyx_r = ((PyObject *)__pyx_v_A);
   goto __pyx_L0;
 
-  /* "SLEPc/SVD.pyx":419
- *         CHKERR( SVDSetBV(self.svd, VBV, UBV) )
+  /* "SLEPc/EPS.pyx":1817
  * 
- *     def getOperator(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the matrix associated with the singular value problem.
+ *     property extraction:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getExtraction()
+ *         def __set__(self, value):
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getOperator", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.extraction.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_A);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":433
- *         return A
+/* "SLEPc/EPS.pyx":1819
+ *         def __get__(self):
+ *             return self.getExtraction()
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setExtraction(value)
  * 
- *     def setOperator(self, Mat A not None):             # <<<<<<<<<<<<<<
- *         """
- *         Sets the matrix associated with the singular value problem.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_45setOperator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_44setOperator[] = "SVD.setOperator(self, Mat A)\n\n        Sets the matrix associated with the singular value problem.\n\n        Parameters\n        ----------\n        A: Mat\n           The matrix associated with the singular value problem.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_45setOperator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscMatObject *__pyx_v_A = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  PyObject *__pyx_r = 0;
+static int __pyx_pw_8slepc4py_5SLEPc_3EPS_10extraction_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_8slepc4py_5SLEPc_3EPS_10extraction_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setOperator (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_A,0};
-    PyObject* values[1] = {0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOperator") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-    }
-    __pyx_v_A = ((struct PyPetscMatObject *)values[0]);
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setOperator", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setOperator", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_A), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "A", 0))) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_44setOperator(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_A);
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_10extraction_2__set__(((struct PySlepcEPSObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_44setOperator(struct PySlepcSVDObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A) {
-  PyObject *__pyx_r = NULL;
+static int __pyx_pf_8slepc4py_5SLEPc_3EPS_10extraction_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setOperator", 0);
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "SLEPc/SVD.pyx":442
- *            The matrix associated with the singular value problem.
- *         """
- *         CHKERR( SVDSetOperator(self.svd, A.mat) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1820
+ *             return self.getExtraction()
+ *         def __set__(self, value):
+ *             self.setExtraction(value)             # <<<<<<<<<<<<<<
  * 
- *     #
+ *     property which:
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDSetOperator(__pyx_v_self->svd, __pyx_v_A->mat)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setExtraction); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1820, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
+  }
+  if (!__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1820, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+  } else {
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 1820, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+    __Pyx_INCREF(__pyx_v_value);
+    __Pyx_GIVEREF(__pyx_v_value);
+    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1820, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  }
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "SLEPc/SVD.pyx":433
- *         return A
+  /* "SLEPc/EPS.pyx":1819
+ *         def __get__(self):
+ *             return self.getExtraction()
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setExtraction(value)
  * 
- *     def setOperator(self, Mat A not None):             # <<<<<<<<<<<<<<
- *         """
- *         Sets the matrix associated with the singular value problem.
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setOperator", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.extraction.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
   __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":446
- *     #
+/* "SLEPc/EPS.pyx":1823
  * 
- *     def setInitialSpace(self, space):             # <<<<<<<<<<<<<<
- *         """
- *         Sets the initial space from which the SVD solver starts to
+ *     property which:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getWhichEigenpairs()
+ *         def __set__(self, value):
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_47setInitialSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_46setInitialSpace[] = "SVD.setInitialSpace(self, space)\n\n        Sets the initial space from which the SVD solver starts to\n        iterate.\n\n        Parameters\n        ----------\n        space: an sequence of Vec\n           The initial space.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_47setInitialSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_space = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_5which_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_5which_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setInitialSpace (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_space,0};
-    PyObject* values[1] = {0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_space)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInitialSpace") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-    }
-    __pyx_v_space = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setInitialSpace", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setInitialSpace", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_46setInitialSpace(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_space);
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_5which___get__(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_46setInitialSpace(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_space) {
-  Vec *__pyx_v_vs;
-  Py_ssize_t __pyx_v_i;
-  Py_ssize_t __pyx_v_ns;
-  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_5which___get__(struct PySlepcEPSObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_t_2;
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
-  Py_ssize_t __pyx_t_4;
-  Py_ssize_t __pyx_t_5;
-  Vec __pyx_t_6;
-  int __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setInitialSpace", 0);
-  __Pyx_INCREF(__pyx_v_space);
+  __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "SLEPc/SVD.pyx":456
- *            The initial space.
- *         """
- *         if isinstance(space, Vec): space = [space]             # <<<<<<<<<<<<<<
- *         cdef PetscVec *vs = NULL
- *         cdef Py_ssize_t i = 0, ns = len(space)
+  /* "SLEPc/EPS.pyx":1824
+ *     property which:
+ *         def __get__(self):
+ *             return self.getWhichEigenpairs()             # <<<<<<<<<<<<<<
+ *         def __set__(self, value):
+ *             self.setWhichEigenpairs(value)
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_space, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)); 
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_INCREF(__pyx_v_space);
-    __Pyx_GIVEREF(__pyx_v_space);
-    PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_space);
-    __Pyx_DECREF_SET(__pyx_v_space, __pyx_t_3);
-    __pyx_t_3 = 0;
-    goto __pyx_L3;
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getWhichEigenpairs); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1824, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
   }
-  __pyx_L3:;
-
-  /* "SLEPc/SVD.pyx":457
- *         """
- *         if isinstance(space, Vec): space = [space]
- *         cdef PetscVec *vs = NULL             # <<<<<<<<<<<<<<
- *         cdef Py_ssize_t i = 0, ns = len(space)
- *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
- */
-  __pyx_v_vs = NULL;
-
-  /* "SLEPc/SVD.pyx":458
- *         if isinstance(space, Vec): space = [space]
- *         cdef PetscVec *vs = NULL
- *         cdef Py_ssize_t i = 0, ns = len(space)             # <<<<<<<<<<<<<<
- *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
- *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
- */
-  __pyx_v_i = 0;
-  __pyx_t_4 = PyObject_Length(__pyx_v_space); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ns = __pyx_t_4;
-
-  /* "SLEPc/SVD.pyx":459
- *         cdef PetscVec *vs = NULL
- *         cdef Py_ssize_t i = 0, ns = len(space)
- *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)             # <<<<<<<<<<<<<<
- *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
- *         CHKERR( SVDSetInitialSpace(self.svd, <PetscInt>ns, vs) )
- */
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_allocate((((size_t)__pyx_v_ns) * (sizeof(struct PyPetscVecObject))), ((void **)(&__pyx_v_vs))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_v_tmp = __pyx_t_3;
-  __pyx_t_3 = 0;
-
-  /* "SLEPc/SVD.pyx":460
- *         cdef Py_ssize_t i = 0, ns = len(space)
- *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
- *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec             # <<<<<<<<<<<<<<
- *         CHKERR( SVDSetInitialSpace(self.svd, <PetscInt>ns, vs) )
- * 
- */
-  __pyx_t_4 = __pyx_v_ns;
-  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
-    __pyx_v_i = __pyx_t_5;
-    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_space, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-    __Pyx_GOTREF(__pyx_t_3);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_Vec)))) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_6 = ((struct PyPetscVecObject *)__pyx_t_3)->vec;
+  if (__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1824, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    (__pyx_v_vs[__pyx_v_i]) = __pyx_t_6;
+  } else {
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1824, __pyx_L1_error)
   }
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
 
-  /* "SLEPc/SVD.pyx":461
- *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
- *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
- *         CHKERR( SVDSetInitialSpace(self.svd, <PetscInt>ns, vs) )             # <<<<<<<<<<<<<<
- * 
- *     #
- */
-  __pyx_t_7 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDSetInitialSpace(__pyx_v_self->svd, ((PetscInt)__pyx_v_ns), __pyx_v_vs)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/SVD.pyx":446
- *     #
+  /* "SLEPc/EPS.pyx":1823
  * 
- *     def setInitialSpace(self, space):             # <<<<<<<<<<<<<<
- *         """
- *         Sets the initial space from which the SVD solver starts to
+ *     property which:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getWhichEigenpairs()
+ *         def __set__(self, value):
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setInitialSpace", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.which.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_tmp);
-  __Pyx_XDECREF(__pyx_v_space);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":465
- *     #
+/* "SLEPc/EPS.pyx":1825
+ *         def __get__(self):
+ *             return self.getWhichEigenpairs()
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setWhichEigenpairs(value)
  * 
- *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
- *         """
- *         Clears all monitors for an SVD object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_49cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_48cancelMonitor[] = "SVD.cancelMonitor(self)\n\n        Clears all monitors for an SVD object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_49cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
+static int __pyx_pw_8slepc4py_5SLEPc_3EPS_5which_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_8slepc4py_5SLEPc_3EPS_5which_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("cancelMonitor (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("cancelMonitor", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "cancelMonitor", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_48cancelMonitor(((struct PySlepcSVDObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_5which_2__set__(((struct PySlepcEPSObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_48cancelMonitor(struct PySlepcSVDObject *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
+static int __pyx_pf_8slepc4py_5SLEPc_3EPS_5which_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("cancelMonitor", 0);
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "SLEPc/SVD.pyx":469
- *         Clears all monitors for an SVD object.
- *         """
- *         CHKERR( SVDMonitorCancel(self.svd) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1826
+ *             return self.getWhichEigenpairs()
+ *         def __set__(self, value):
+ *             self.setWhichEigenpairs(value)             # <<<<<<<<<<<<<<
  * 
- *     #
+ *     property target:
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDMonitorCancel(__pyx_v_self->svd)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setWhichEigenpairs); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1826, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
+  }
+  if (!__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1826, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+  } else {
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 1826, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+    __Pyx_INCREF(__pyx_v_value);
+    __Pyx_GIVEREF(__pyx_v_value);
+    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1826, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  }
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "SLEPc/SVD.pyx":465
- *     #
+  /* "SLEPc/EPS.pyx":1825
+ *         def __get__(self):
+ *             return self.getWhichEigenpairs()
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setWhichEigenpairs(value)
  * 
- *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
- *         """
- *         Clears all monitors for an SVD object.
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.cancelMonitor", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.which.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
   __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":473
- *     #
+/* "SLEPc/EPS.pyx":1829
  * 
- *     def setUp(self):             # <<<<<<<<<<<<<<
- *         """
- *         Sets up all the internal data structures necessary for the
+ *     property target:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getTarget()
+ *         def __set__(self, value):
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_51setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_50setUp[] = "SVD.setUp(self)\n\n        Sets up all the internal data structures necessary for the\n        execution of the singular value solver.\n\n        Notes\n        -----\n        This function need not be called explicitly in most cases,\n        since `solve()` calls it. It can be useful when one wants to\n        measure the set-up time separately from the solve time.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_51setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_6target_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_6target_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setUp (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("setUp", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setUp", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_50setUp(((struct PySlepcSVDObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_6target___get__(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_50setUp(struct PySlepcSVDObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_6target___get__(struct PySlepcEPSObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setUp", 0);
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "SLEPc/SVD.pyx":484
- *         measure the set-up time separately from the solve time.
- *         """
- *         CHKERR( SVDSetUp(self.svd) )             # <<<<<<<<<<<<<<
- * 
- *     def solve(self):
+  /* "SLEPc/EPS.pyx":1830
+ *     property target:
+ *         def __get__(self):
+ *             return self.getTarget()             # <<<<<<<<<<<<<<
+ *         def __set__(self, value):
+ *             self.setTarget(value)
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDSetUp(__pyx_v_self->svd)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getTarget); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1830, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
+  }
+  if (__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1830, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  } else {
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1830, __pyx_L1_error)
+  }
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
 
-  /* "SLEPc/SVD.pyx":473
- *     #
+  /* "SLEPc/EPS.pyx":1829
  * 
- *     def setUp(self):             # <<<<<<<<<<<<<<
- *         """
- *         Sets up all the internal data structures necessary for the
+ *     property target:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getTarget()
+ *         def __set__(self, value):
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setUp", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.target.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -30626,149 +31786,173 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_50setUp(struct PySlepcSVDObject
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":486
- *         CHKERR( SVDSetUp(self.svd) )
+/* "SLEPc/EPS.pyx":1831
+ *         def __get__(self):
+ *             return self.getTarget()
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setTarget(value)
  * 
- *     def solve(self):             # <<<<<<<<<<<<<<
- *         """
- *         Solves the singular value problem.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_53solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_52solve[] = "SVD.solve(self)\n\n        Solves the singular value problem.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_53solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
+static int __pyx_pw_8slepc4py_5SLEPc_3EPS_6target_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_8slepc4py_5SLEPc_3EPS_6target_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("solve (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("solve", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "solve", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_52solve(((struct PySlepcSVDObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_6target_2__set__(((struct PySlepcEPSObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_52solve(struct PySlepcSVDObject *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
+static int __pyx_pf_8slepc4py_5SLEPc_3EPS_6target_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("solve", 0);
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "SLEPc/SVD.pyx":490
- *         Solves the singular value problem.
- *         """
- *         CHKERR( SVDSolve(self.svd) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1832
+ *             return self.getTarget()
+ *         def __set__(self, value):
+ *             self.setTarget(value)             # <<<<<<<<<<<<<<
  * 
- *     def getIterationNumber(self):
+ *     property tol:
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDSolve(__pyx_v_self->svd)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTarget); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1832, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
+  }
+  if (!__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1832, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+  } else {
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 1832, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+    __Pyx_INCREF(__pyx_v_value);
+    __Pyx_GIVEREF(__pyx_v_value);
+    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1832, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  }
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "SLEPc/SVD.pyx":486
- *         CHKERR( SVDSetUp(self.svd) )
+  /* "SLEPc/EPS.pyx":1831
+ *         def __get__(self):
+ *             return self.getTarget()
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setTarget(value)
  * 
- *     def solve(self):             # <<<<<<<<<<<<<<
- *         """
- *         Solves the singular value problem.
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.solve", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.target.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
   __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":492
- *         CHKERR( SVDSolve(self.svd) )
+/* "SLEPc/EPS.pyx":1835
  * 
- *     def getIterationNumber(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the current iteration number. If the call to `solve()` is
+ *     property tol:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getTolerances()[0]
+ *         def __set__(self, value):
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_55getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_54getIterationNumber[] = "SVD.getIterationNumber(self)\n\n        Gets the current iteration number. If the call to `solve()` is\n        complete, then it returns the number of iterations carried out\n        by the solution method.\n\n        Returns\n        -------\n        its: int\n             Iteration number.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_55getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_3tol_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_3tol_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getIterationNumber (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getIterationNumber", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getIterationNumber", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_54getIterationNumber(((struct PySlepcSVDObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_3tol___get__(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_54getIterationNumber(struct PySlepcSVDObject *__pyx_v_self) {
-  PetscInt __pyx_v_ival;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_3tol___get__(struct PySlepcEPSObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getIterationNumber", 0);
-
-  /* "SLEPc/SVD.pyx":503
- *              Iteration number.
- *         """
- *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
- *         CHKERR( SVDGetIterationNumber(self.svd, &ival) )
- *         return toInt(ival)
- */
-  __pyx_v_ival = 0;
-
-  /* "SLEPc/SVD.pyx":504
- *         """
- *         cdef PetscInt ival = 0
- *         CHKERR( SVDGetIterationNumber(self.svd, &ival) )             # <<<<<<<<<<<<<<
- *         return toInt(ival)
- * 
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetIterationNumber(__pyx_v_self->svd, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "SLEPc/SVD.pyx":505
- *         cdef PetscInt ival = 0
- *         CHKERR( SVDGetIterationNumber(self.svd, &ival) )
- *         return toInt(ival)             # <<<<<<<<<<<<<<
- * 
- *     def getConvergedReason(self):
+  /* "SLEPc/EPS.pyx":1836
+ *     property tol:
+ *         def __get__(self):
+ *             return self.getTolerances()[0]             # <<<<<<<<<<<<<<
+ *         def __set__(self, value):
+ *             self.setTolerances(tol=value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getTolerances); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1836, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
+  }
+  if (__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1836, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  } else {
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1836, __pyx_L1_error)
+  }
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1836, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/SVD.pyx":492
- *         CHKERR( SVDSolve(self.svd) )
+  /* "SLEPc/EPS.pyx":1835
  * 
- *     def getIterationNumber(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the current iteration number. If the call to `solve()` is
+ *     property tol:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getTolerances()[0]
+ *         def __set__(self, value):
  */
 
   /* function exit code */
   __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getIterationNumber", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.tol.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -30776,173 +31960,153 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_54getIterationNumber(struct PySl
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":507
- *         return toInt(ival)
+/* "SLEPc/EPS.pyx":1837
+ *         def __get__(self):
+ *             return self.getTolerances()[0]
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setTolerances(tol=value)
  * 
- *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the reason why the `solve()` iteration was stopped.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_57getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_56getConvergedReason[] = "SVD.getConvergedReason(self)\n\n        Gets the reason why the `solve()` iteration was stopped.\n\n        Returns\n        -------\n        reason: `SVD.ConvergedReason` enumerate\n                Negative value indicates diverged, positive value\n                converged.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_57getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
+static int __pyx_pw_8slepc4py_5SLEPc_3EPS_3tol_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_8slepc4py_5SLEPc_3EPS_3tol_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getConvergedReason (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getConvergedReason", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getConvergedReason", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_56getConvergedReason(((struct PySlepcSVDObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_3tol_2__set__(((struct PySlepcEPSObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_56getConvergedReason(struct PySlepcSVDObject *__pyx_v_self) {
-  SVDConvergedReason __pyx_v_val;
-  PyObject *__pyx_r = NULL;
+static int __pyx_pf_8slepc4py_5SLEPc_3EPS_3tol_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getConvergedReason", 0);
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "SLEPc/SVD.pyx":517
- *                 converged.
- *         """
- *         cdef SlepcSVDConvergedReason val = SVD_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
- *         CHKERR( SVDGetConvergedReason(self.svd, &val) )
- *         return val
- */
-  __pyx_v_val = SVD_CONVERGED_ITERATING;
-
-  /* "SLEPc/SVD.pyx":518
- *         """
- *         cdef SlepcSVDConvergedReason val = SVD_CONVERGED_ITERATING
- *         CHKERR( SVDGetConvergedReason(self.svd, &val) )             # <<<<<<<<<<<<<<
- *         return val
- * 
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetConvergedReason(__pyx_v_self->svd, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/SVD.pyx":519
- *         cdef SlepcSVDConvergedReason val = SVD_CONVERGED_ITERATING
- *         CHKERR( SVDGetConvergedReason(self.svd, &val) )
- *         return val             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1838
+ *             return self.getTolerances()[0]
+ *         def __set__(self, value):
+ *             self.setTolerances(tol=value)             # <<<<<<<<<<<<<<
  * 
- *     def getConverged(self):
+ *     property max_it:
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTolerances); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1838, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1838, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_tol, __pyx_v_value) < 0) __PYX_ERR(13, 1838, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 1838, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "SLEPc/SVD.pyx":507
- *         return toInt(ival)
+  /* "SLEPc/EPS.pyx":1837
+ *         def __get__(self):
+ *             return self.getTolerances()[0]
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setTolerances(tol=value)
  * 
- *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the reason why the `solve()` iteration was stopped.
  */
 
   /* function exit code */
+  __pyx_r = 0;
+  goto __pyx_L0;
   __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getConvergedReason", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.tol.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
   __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":521
- *         return val
+/* "SLEPc/EPS.pyx":1841
  * 
- *     def getConverged(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the number of converged singular triplets.
+ *     property max_it:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getTolerances()[1]
+ *         def __set__(self, value):
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_59getConverged(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_58getConverged[] = "SVD.getConverged(self)\n\n        Gets the number of converged singular triplets.\n\n        Returns\n        -------\n        nconv: int\n               Number of converged singular triplets.\n\n        Notes\n        -----\n        This function should be called after `solve()` has finished.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_59getConverged(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_6max_it_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_6max_it_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getConverged (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getConverged", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getConverged", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_58getConverged(((struct PySlepcSVDObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_6max_it___get__(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_58getConverged(struct PySlepcSVDObject *__pyx_v_self) {
-  PetscInt __pyx_v_ival;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_6max_it___get__(struct PySlepcEPSObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getConverged", 0);
-
-  /* "SLEPc/SVD.pyx":534
- *         This function should be called after `solve()` has finished.
- *         """
- *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
- *         CHKERR( SVDGetConverged(self.svd, &ival) )
- *         return toInt(ival)
- */
-  __pyx_v_ival = 0;
-
-  /* "SLEPc/SVD.pyx":535
- *         """
- *         cdef PetscInt ival = 0
- *         CHKERR( SVDGetConverged(self.svd, &ival) )             # <<<<<<<<<<<<<<
- *         return toInt(ival)
- * 
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetConverged(__pyx_v_self->svd, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "SLEPc/SVD.pyx":536
- *         cdef PetscInt ival = 0
- *         CHKERR( SVDGetConverged(self.svd, &ival) )
- *         return toInt(ival)             # <<<<<<<<<<<<<<
- * 
- *     def getValue(self, int i):
+  /* "SLEPc/EPS.pyx":1842
+ *     property max_it:
+ *         def __get__(self):
+ *             return self.getTolerances()[1]             # <<<<<<<<<<<<<<
+ *         def __set__(self, value):
+ *             self.setTolerances(max_it=value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getTolerances); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1842, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
+  }
+  if (__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1842, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  } else {
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1842, __pyx_L1_error)
+  }
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1842, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/SVD.pyx":521
- *         return val
+  /* "SLEPc/EPS.pyx":1841
  * 
- *     def getConverged(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the number of converged singular triplets.
+ *     property max_it:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getTolerances()[1]
+ *         def __set__(self, value):
  */
 
   /* function exit code */
   __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getConverged", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.max_it.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -30950,255 +32114,150 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_58getConverged(struct PySlepcSVD
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":538
- *         return toInt(ival)
+/* "SLEPc/EPS.pyx":1843
+ *         def __get__(self):
+ *             return self.getTolerances()[1]
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setTolerances(max_it=value)
  * 
- *     def getValue(self, int i):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the i-th singular value as computed by `solve()`.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_61getValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_60getValue[] = "SVD.getValue(self, int i)\n\n        Gets the i-th singular value as computed by `solve()`.\n\n        Parameters\n        ----------\n        i: int\n           Index of the solution to be obtained.\n\n        Returns\n        -------\n        s: float\n           The computed singular value.\n\n        Notes\n        -----\n        The index ``i`` should be a value between ``0`` and\n        ``nconv-1`` (see `getConverged()`.  [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_61getValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_v_i;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  PyObject *__pyx_r = 0;
+static int __pyx_pw_8slepc4py_5SLEPc_3EPS_6max_it_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_8slepc4py_5SLEPc_3EPS_6max_it_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getValue (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,0};
-    PyObject* values[1] = {0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getValue") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-    }
-    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getValue", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_60getValue(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_i);
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_6max_it_2__set__(((struct PySlepcEPSObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_60getValue(struct PySlepcSVDObject *__pyx_v_self, int __pyx_v_i) {
-  PetscReal __pyx_v_rval;
-  PyObject *__pyx_r = NULL;
+static int __pyx_pf_8slepc4py_5SLEPc_3EPS_6max_it_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getValue", 0);
-
-  /* "SLEPc/SVD.pyx":559
- *         `setWhichSingularTriplets()`.
- *         """
- *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
- *         CHKERR( SVDGetSingularTriplet(self.svd, i, &rval, NULL, NULL) )
- *         return toReal(rval)
- */
-  __pyx_v_rval = 0.0;
-
-  /* "SLEPc/SVD.pyx":560
- *         """
- *         cdef PetscReal rval = 0
- *         CHKERR( SVDGetSingularTriplet(self.svd, i, &rval, NULL, NULL) )             # <<<<<<<<<<<<<<
- *         return toReal(rval)
- * 
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetSingularTriplet(__pyx_v_self->svd, __pyx_v_i, (&__pyx_v_rval), NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "SLEPc/SVD.pyx":561
- *         cdef PetscReal rval = 0
- *         CHKERR( SVDGetSingularTriplet(self.svd, i, &rval, NULL, NULL) )
- *         return toReal(rval)             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1844
+ *             return self.getTolerances()[1]
+ *         def __set__(self, value):
+ *             self.setTolerances(max_it=value)             # <<<<<<<<<<<<<<
  * 
- *     def getVectors(self, int i, Vec U not None, Vec V not None):
+ *     property st:
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTolerances); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1844, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1844, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_max_it, __pyx_v_value) < 0) __PYX_ERR(13, 1844, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 1844, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "SLEPc/SVD.pyx":538
- *         return toInt(ival)
+  /* "SLEPc/EPS.pyx":1843
+ *         def __get__(self):
+ *             return self.getTolerances()[1]
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setTolerances(max_it=value)
  * 
- *     def getValue(self, int i):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the i-th singular value as computed by `solve()`.
  */
 
   /* function exit code */
+  __pyx_r = 0;
+  goto __pyx_L0;
   __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.max_it.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
   __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":563
- *         return toReal(rval)
+/* "SLEPc/EPS.pyx":1847
  * 
- *     def getVectors(self, int i, Vec U not None, Vec V not None):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the i-th left and right singular vectors as computed by
+ *     property st:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getST()
+ *         def __set__(self, value):
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_63getVectors(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_62getVectors[] = "SVD.getVectors(self, int i, Vec U, Vec V)\n\n        Gets the i-th left and right singular vectors as computed by\n        `solve()`.\n\n        Parameters\n        ----------\n        i: int\n           Index of the solution to be obtained.\n        U: Vec\n           Placeholder for the returned left singular vector.\n        V: Vec\n           Placeholder for the returned right singular vector.\n\n        Notes\n        --- [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_63getVectors(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_v_i;
-  struct PyPetscVecObject *__pyx_v_U = 0;
-  struct PyPetscVecObject *__pyx_v_V = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_2st_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_2st_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getVectors (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,&__pyx_n_s_U,&__pyx_n_s_V,0};
-    PyObject* values[3] = {0,0,0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_U)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("getVectors", 1, 3, 3, 1); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-        case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("getVectors", 1, 3, 3, 2); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getVectors") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-    }
-    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_U = ((struct PyPetscVecObject *)values[1]);
-    __pyx_v_V = ((struct PyPetscVecObject *)values[2]);
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getVectors", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getVectors", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_U), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "U", 0))) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_V), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "V", 0))) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_62getVectors(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_i, __pyx_v_U, __pyx_v_V);
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_2st___get__(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_62getVectors(struct PySlepcSVDObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_U, struct PyPetscVecObject *__pyx_v_V) {
-  PetscReal __pyx_v_dummy;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_2st___get__(struct PySlepcEPSObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getVectors", 0);
-
-  /* "SLEPc/SVD.pyx":584
- *         `setWhichSingularTriplets()`.
- *         """
- *         cdef PetscReal dummy = 0             # <<<<<<<<<<<<<<
- *         CHKERR( SVDGetSingularTriplet(self.svd, i, &dummy, U.vec, V.vec) )
- * 
- */
-  __pyx_v_dummy = 0.0;
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "SLEPc/SVD.pyx":585
- *         """
- *         cdef PetscReal dummy = 0
- *         CHKERR( SVDGetSingularTriplet(self.svd, i, &dummy, U.vec, V.vec) )             # <<<<<<<<<<<<<<
- * 
- *     def getSingularTriplet(self, int i, Vec U=None, Vec V=None):
+  /* "SLEPc/EPS.pyx":1848
+ *     property st:
+ *         def __get__(self):
+ *             return self.getST()             # <<<<<<<<<<<<<<
+ *         def __set__(self, value):
+ *             self.setST(value)
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetSingularTriplet(__pyx_v_self->svd, __pyx_v_i, (&__pyx_v_dummy), __pyx_v_U->vec, __pyx_v_V->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getST); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1848, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
+  }
+  if (__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1848, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  } else {
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1848, __pyx_L1_error)
+  }
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
 
-  /* "SLEPc/SVD.pyx":563
- *         return toReal(rval)
+  /* "SLEPc/EPS.pyx":1847
  * 
- *     def getVectors(self, int i, Vec U not None, Vec V not None):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the i-th left and right singular vectors as computed by
+ *     property st:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getST()
+ *         def __set__(self, value):
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getVectors", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.st.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -31206,369 +32265,170 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_62getVectors(struct PySlepcSVDOb
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":587
- *         CHKERR( SVDGetSingularTriplet(self.svd, i, &dummy, U.vec, V.vec) )
+/* "SLEPc/EPS.pyx":1849
+ *         def __get__(self):
+ *             return self.getST()
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setST(value)
  * 
- *     def getSingularTriplet(self, int i, Vec U=None, Vec V=None):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the i-th triplet of the singular value decomposition as
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_65getSingularTriplet(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_64getSingularTriplet[] = "SVD.getSingularTriplet(self, int i, Vec U=None, Vec V=None)\n\n        Gets the i-th triplet of the singular value decomposition as\n        computed by `solve()`. The solution consists of the singular\n        value and its left and right singular vectors.\n\n        Parameters\n        ----------\n        i: int\n           Index of the solution to be obtained.\n        U: Vec\n           Placeholder for the returned [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_65getSingularTriplet(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_v_i;
-  struct PyPetscVecObject *__pyx_v_U = 0;
-  struct PyPetscVecObject *__pyx_v_V = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  PyObject *__pyx_r = 0;
+static int __pyx_pw_8slepc4py_5SLEPc_3EPS_2st_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_8slepc4py_5SLEPc_3EPS_2st_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getSingularTriplet (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,&__pyx_n_s_U,&__pyx_n_s_V,0};
-    PyObject* values[3] = {0,0,0};
-    values[1] = (PyObject *)((struct PyPetscVecObject *)Py_None);
-    values[2] = (PyObject *)((struct PyPetscVecObject *)Py_None);
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_U);
-          if (value) { values[1] = value; kw_args--; }
-        }
-        case  2:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_V);
-          if (value) { values[2] = value; kw_args--; }
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getSingularTriplet") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-    }
-    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_U = ((struct PyPetscVecObject *)values[1]);
-    __pyx_v_V = ((struct PyPetscVecObject *)values[2]);
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getSingularTriplet", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getSingularTriplet", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_U), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "U", 0))) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_V), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "V", 0))) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_64getSingularTriplet(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_i, __pyx_v_U, __pyx_v_V);
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_2st_2__set__(((struct PySlepcEPSObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_64getSingularTriplet(struct PySlepcSVDObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_U, struct PyPetscVecObject *__pyx_v_V) {
-  PetscReal __pyx_v_rval;
-  Vec __pyx_v_Uvec;
-  Vec __pyx_v_Vvec;
-  PyObject *__pyx_r = NULL;
+static int __pyx_pf_8slepc4py_5SLEPc_3EPS_2st_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_t_2;
-  Vec __pyx_t_3;
-  int __pyx_t_4;
-  PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getSingularTriplet", 0);
-
-  /* "SLEPc/SVD.pyx":614
- *         `setWhichSingularTriplets()`.
- *         """
- *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
- *         cdef PetscVec Uvec = NULL
- *         cdef PetscVec Vvec = NULL
- */
-  __pyx_v_rval = 0.0;
-
-  /* "SLEPc/SVD.pyx":615
- *         """
- *         cdef PetscReal rval = 0
- *         cdef PetscVec Uvec = NULL             # <<<<<<<<<<<<<<
- *         cdef PetscVec Vvec = NULL
- *         if U is not None: Uvec = U.vec
- */
-  __pyx_v_Uvec = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "SLEPc/SVD.pyx":616
- *         cdef PetscReal rval = 0
- *         cdef PetscVec Uvec = NULL
- *         cdef PetscVec Vvec = NULL             # <<<<<<<<<<<<<<
- *         if U is not None: Uvec = U.vec
- *         if V is not None: Vvec = V.vec
+  /* "SLEPc/EPS.pyx":1850
+ *             return self.getST()
+ *         def __set__(self, value):
+ *             self.setST(value)             # <<<<<<<<<<<<<<
+ * 
+ *     property bv:
  */
-  __pyx_v_Vvec = NULL;
-
-  /* "SLEPc/SVD.pyx":617
- *         cdef PetscVec Uvec = NULL
- *         cdef PetscVec Vvec = NULL
- *         if U is not None: Uvec = U.vec             # <<<<<<<<<<<<<<
- *         if V is not None: Vvec = V.vec
- *         CHKERR( SVDGetSingularTriplet(self.svd, i, &rval, Uvec, Vvec) )
- */
-  __pyx_t_1 = (((PyObject *)__pyx_v_U) != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_v_U->vec;
-    __pyx_v_Uvec = __pyx_t_3;
-    goto __pyx_L3;
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setST); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1850, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
   }
-  __pyx_L3:;
-
-  /* "SLEPc/SVD.pyx":618
- *         cdef PetscVec Vvec = NULL
- *         if U is not None: Uvec = U.vec
- *         if V is not None: Vvec = V.vec             # <<<<<<<<<<<<<<
- *         CHKERR( SVDGetSingularTriplet(self.svd, i, &rval, Uvec, Vvec) )
- *         return toReal(rval)
- */
-  __pyx_t_2 = (((PyObject *)__pyx_v_V) != Py_None);
-  __pyx_t_1 = (__pyx_t_2 != 0);
-  if (__pyx_t_1) {
-    __pyx_t_3 = __pyx_v_V->vec;
-    __pyx_v_Vvec = __pyx_t_3;
-    goto __pyx_L4;
+  if (!__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1850, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+  } else {
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 1850, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+    __Pyx_INCREF(__pyx_v_value);
+    __Pyx_GIVEREF(__pyx_v_value);
+    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1850, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
-  __pyx_L4:;
-
-  /* "SLEPc/SVD.pyx":619
- *         if U is not None: Uvec = U.vec
- *         if V is not None: Vvec = V.vec
- *         CHKERR( SVDGetSingularTriplet(self.svd, i, &rval, Uvec, Vvec) )             # <<<<<<<<<<<<<<
- *         return toReal(rval)
- * 
- */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetSingularTriplet(__pyx_v_self->svd, __pyx_v_i, (&__pyx_v_rval), __pyx_v_Uvec, __pyx_v_Vvec)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/SVD.pyx":620
- *         if V is not None: Vvec = V.vec
- *         CHKERR( SVDGetSingularTriplet(self.svd, i, &rval, Uvec, Vvec) )
- *         return toReal(rval)             # <<<<<<<<<<<<<<
- * 
- *     #
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __pyx_r = __pyx_t_5;
-  __pyx_t_5 = 0;
-  goto __pyx_L0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "SLEPc/SVD.pyx":587
- *         CHKERR( SVDGetSingularTriplet(self.svd, i, &dummy, U.vec, V.vec) )
+  /* "SLEPc/EPS.pyx":1849
+ *         def __get__(self):
+ *             return self.getST()
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setST(value)
  * 
- *     def getSingularTriplet(self, int i, Vec U=None, Vec V=None):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the i-th triplet of the singular value decomposition as
  */
 
   /* function exit code */
+  __pyx_r = 0;
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getSingularTriplet", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.st.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
   __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":624
- *     #
+/* "SLEPc/EPS.pyx":1853
  * 
- *     def computeError(self, int i, etype=None):             # <<<<<<<<<<<<<<
- *         """
- *         Computes the error (based on the residual norm) associated with the i-th
+ *     property bv:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getBV()
+ *         def __set__(self, value):
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_67computeError(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_66computeError[] = "SVD.computeError(self, int i, etype=None)\n\n        Computes the error (based on the residual norm) associated with the i-th\n        singular triplet.\n\n        Parameters\n        ----------\n        i: int\n           Index of the solution to be considered.\n        etype: `SVD.ErrorType` enumerate\n           The error type to compute.\n\n        Returns\n        -------\n        e: real\n           The relative error  [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_67computeError(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_v_i;
-  PyObject *__pyx_v_etype = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_2bv_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3EPS_2bv_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("computeError (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,&__pyx_n_s_etype,0};
-    PyObject* values[2] = {0,0};
-    values[1] = ((PyObject *)Py_None);
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_etype);
-          if (value) { values[1] = value; kw_args--; }
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeError") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-    }
-    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_etype = values[1];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeError", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.computeError", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_66computeError(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_i, __pyx_v_etype);
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_2bv___get__(((struct PySlepcEPSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_66computeError(struct PySlepcSVDObject *__pyx_v_self, int __pyx_v_i, PyObject *__pyx_v_etype) {
-  SVDErrorType __pyx_v_et;
-  PetscReal __pyx_v_rval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3EPS_2bv___get__(struct PySlepcEPSObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_t_2;
-  SVDErrorType __pyx_t_3;
-  int __pyx_t_4;
-  PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("computeError", 0);
-
-  /* "SLEPc/SVD.pyx":650
- *         ``nconv-1`` (see `getConverged()`).
- *         """
- *         cdef SlepcSVDErrorType et = SVD_ERROR_RELATIVE             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval = 0
- *         if etype is not None: et = etype
- */
-  __pyx_v_et = SVD_ERROR_RELATIVE;
-
-  /* "SLEPc/SVD.pyx":651
- *         """
- *         cdef SlepcSVDErrorType et = SVD_ERROR_RELATIVE
- *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
- *         if etype is not None: et = etype
- *         CHKERR( SVDComputeError(self.svd, i, et, &rval) )
- */
-  __pyx_v_rval = 0.0;
-
-  /* "SLEPc/SVD.pyx":652
- *         cdef SlepcSVDErrorType et = SVD_ERROR_RELATIVE
- *         cdef PetscReal rval = 0
- *         if etype is not None: et = etype             # <<<<<<<<<<<<<<
- *         CHKERR( SVDComputeError(self.svd, i, et, &rval) )
- *         return toReal(rval)
- */
-  __pyx_t_1 = (__pyx_v_etype != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = ((SVDErrorType)PyInt_AsLong(__pyx_v_etype)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_et = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "SLEPc/SVD.pyx":653
- *         cdef PetscReal rval = 0
- *         if etype is not None: et = etype
- *         CHKERR( SVDComputeError(self.svd, i, et, &rval) )             # <<<<<<<<<<<<<<
- *         return toReal(rval)
- * 
- */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDComputeError(__pyx_v_self->svd, __pyx_v_i, __pyx_v_et, (&__pyx_v_rval))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "SLEPc/SVD.pyx":654
- *         if etype is not None: et = etype
- *         CHKERR( SVDComputeError(self.svd, i, et, &rval) )
- *         return toReal(rval)             # <<<<<<<<<<<<<<
- * 
- *     #
+  /* "SLEPc/EPS.pyx":1854
+ *     property bv:
+ *         def __get__(self):
+ *             return self.getBV()             # <<<<<<<<<<<<<<
+ *         def __set__(self, value):
+ *             self.setBV(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __pyx_r = __pyx_t_5;
-  __pyx_t_5 = 0;
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBV); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1854, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
+  }
+  if (__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1854, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  } else {
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1854, __pyx_L1_error)
+  }
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/SVD.pyx":624
- *     #
+  /* "SLEPc/EPS.pyx":1853
  * 
- *     def computeError(self, int i, etype=None):             # <<<<<<<<<<<<<<
- *         """
- *         Computes the error (based on the residual norm) associated with the i-th
+ *     property bv:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getBV()
+ *         def __set__(self, value):
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.computeError", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.bv.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -31576,230 +32436,176 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_66computeError(struct PySlepcSVD
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":658
- *     #
+/* "SLEPc/EPS.pyx":1855
+ *         def __get__(self):
+ *             return self.getBV()
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setBV(value)
  * 
- *     def setCrossEPS(self, EPS eps not None):             # <<<<<<<<<<<<<<
- *         """
- *         Associate an eigensolver object (`EPS`) to the singular value
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_69setCrossEPS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_68setCrossEPS[] = "SVD.setCrossEPS(self, EPS eps)\n\n        Associate an eigensolver object (`EPS`) to the singular value\n        solver.\n\n        Parameters\n        ----------\n        eps: EPS\n             The eigensolver object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_69setCrossEPS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PySlepcEPSObject *__pyx_v_eps = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  PyObject *__pyx_r = 0;
+static int __pyx_pw_8slepc4py_5SLEPc_3EPS_2bv_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_8slepc4py_5SLEPc_3EPS_2bv_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setCrossEPS (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_eps,0};
-    PyObject* values[1] = {0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_eps)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCrossEPS") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-    }
-    __pyx_v_eps = ((struct PySlepcEPSObject *)values[0]);
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setCrossEPS", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setCrossEPS", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_eps), __pyx_ptype_8slepc4py_5SLEPc_EPS, 0, "eps", 0))) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_68setCrossEPS(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_eps);
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3EPS_2bv_2__set__(((struct PySlepcEPSObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_68setCrossEPS(struct PySlepcSVDObject *__pyx_v_self, struct PySlepcEPSObject *__pyx_v_eps) {
-  PyObject *__pyx_r = NULL;
+static int __pyx_pf_8slepc4py_5SLEPc_3EPS_2bv_2__set__(struct PySlepcEPSObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setCrossEPS", 0);
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "SLEPc/SVD.pyx":668
- *              The eigensolver object.
- *         """
- *         CHKERR( SVDCrossSetEPS(self.svd, eps.eps) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/EPS.pyx":1856
+ *             return self.getBV()
+ *         def __set__(self, value):
+ *             self.setBV(value)             # <<<<<<<<<<<<<<
  * 
- *     def getCrossEPS(self):
+ * # -----------------------------------------------------------------------------
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDCrossSetEPS(__pyx_v_self->svd, __pyx_v_eps->eps)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setBV); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 1856, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
+  }
+  if (!__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1856, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+  } else {
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 1856, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+    __Pyx_INCREF(__pyx_v_value);
+    __Pyx_GIVEREF(__pyx_v_value);
+    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 1856, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  }
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "SLEPc/SVD.pyx":658
- *     #
+  /* "SLEPc/EPS.pyx":1855
+ *         def __get__(self):
+ *             return self.getBV()
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setBV(value)
  * 
- *     def setCrossEPS(self, EPS eps not None):             # <<<<<<<<<<<<<<
- *         """
- *         Associate an eigensolver object (`EPS`) to the singular value
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setCrossEPS", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("slepc4py.SLEPc.EPS.bv.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
   __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":670
- *         CHKERR( SVDCrossSetEPS(self.svd, eps.eps) )
+/* "SLEPc/SVD.pyx":69
+ *     ConvergedReason = SVDConvergedReason
  * 
- *     def getCrossEPS(self):             # <<<<<<<<<<<<<<
- *         """
- *         Retrieve the eigensolver object (`EPS`) associated to the
+ *     def __cinit__(self):             # <<<<<<<<<<<<<<
+ *         self.obj = <PetscObject*> &self.svd
+ *         self.svd = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_71getCrossEPS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_70getCrossEPS[] = "SVD.getCrossEPS(self)\n\n        Retrieve the eigensolver object (`EPS`) associated to the\n        singular value solver.\n\n        Returns\n        -------\n        eps: EPS\n             The eigensolver object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_71getCrossEPS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
+static int __pyx_pw_8slepc4py_5SLEPc_3SVD_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pw_8slepc4py_5SLEPc_3SVD_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getCrossEPS (wrapper)", 0);
+  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getCrossEPS", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getCrossEPS", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_70getCrossEPS(((struct PySlepcSVDObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD___cinit__(((struct PySlepcSVDObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_70getCrossEPS(struct PySlepcSVDObject *__pyx_v_self) {
-  struct PySlepcEPSObject *__pyx_v_eps = 0;
-  PyObject *__pyx_r = NULL;
+static int __pyx_pf_8slepc4py_5SLEPc_3SVD___cinit__(struct PySlepcSVDObject *__pyx_v_self) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getCrossEPS", 0);
-
-  /* "SLEPc/SVD.pyx":680
- *              The eigensolver object.
- *         """
- *         cdef EPS eps = EPS()             # <<<<<<<<<<<<<<
- *         CHKERR( SVDCrossGetEPS(self.svd, &eps.eps) )
- *         PetscINCREF(eps.obj)
- */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_EPS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_eps = ((struct PySlepcEPSObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "SLEPc/SVD.pyx":681
- *         """
- *         cdef EPS eps = EPS()
- *         CHKERR( SVDCrossGetEPS(self.svd, &eps.eps) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(eps.obj)
- *         return eps
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDCrossGetEPS(__pyx_v_self->svd, (&__pyx_v_eps->eps))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 681; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "SLEPc/SVD.pyx":682
- *         cdef EPS eps = EPS()
- *         CHKERR( SVDCrossGetEPS(self.svd, &eps.eps) )
- *         PetscINCREF(eps.obj)             # <<<<<<<<<<<<<<
- *         return eps
+  /* "SLEPc/SVD.pyx":70
+ * 
+ *     def __cinit__(self):
+ *         self.obj = <PetscObject*> &self.svd             # <<<<<<<<<<<<<<
+ *         self.svd = NULL
  * 
  */
-  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_eps->__pyx_base.obj);
+  __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->svd));
 
-  /* "SLEPc/SVD.pyx":683
- *         CHKERR( SVDCrossGetEPS(self.svd, &eps.eps) )
- *         PetscINCREF(eps.obj)
- *         return eps             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":71
+ *     def __cinit__(self):
+ *         self.obj = <PetscObject*> &self.svd
+ *         self.svd = NULL             # <<<<<<<<<<<<<<
  * 
- *     def setCyclicEPS(self, EPS eps not None):
+ *     def view(self, Viewer viewer=None):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_eps));
-  __pyx_r = ((PyObject *)__pyx_v_eps);
-  goto __pyx_L0;
+  __pyx_v_self->svd = NULL;
 
-  /* "SLEPc/SVD.pyx":670
- *         CHKERR( SVDCrossSetEPS(self.svd, eps.eps) )
+  /* "SLEPc/SVD.pyx":69
+ *     ConvergedReason = SVDConvergedReason
  * 
- *     def getCrossEPS(self):             # <<<<<<<<<<<<<<
- *         """
- *         Retrieve the eigensolver object (`EPS`) associated to the
+ *     def __cinit__(self):             # <<<<<<<<<<<<<<
+ *         self.obj = <PetscObject*> &self.svd
+ *         self.svd = NULL
  */
 
   /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getCrossEPS", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_eps);
-  __Pyx_XGIVEREF(__pyx_r);
+  __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":685
- *         return eps
+/* "SLEPc/SVD.pyx":73
+ *         self.svd = NULL
  * 
- *     def setCyclicEPS(self, EPS eps not None):             # <<<<<<<<<<<<<<
+ *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
  *         """
- *         Associate an eigensolver object (`EPS`) to the singular value
+ *         Prints the SVD data structure.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_73setCyclicEPS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_72setCyclicEPS[] = "SVD.setCyclicEPS(self, EPS eps)\n\n        Associate an eigensolver object (`EPS`) to the singular value\n        solver.\n\n        Parameters\n        ----------\n        eps: EPS\n             The eigensolver object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_73setCyclicEPS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PySlepcEPSObject *__pyx_v_eps = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_2view[] = "SVD.view(self, Viewer viewer=None)\n\n        Prints the SVD data structure.\n\n        Parameters\n        ----------\n        viewer: Viewer, optional\n                Visualization context; if not provided, the standard\n                output is used.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscViewerObject *__pyx_v_viewer = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setCyclicEPS (wrapper)", 0);
+  __Pyx_RefNannySetupContext("view (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_eps,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_viewer,0};
     PyObject* values[1] = {0};
+    values[0] = (PyObject *)((struct PyPetscViewerObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
@@ -31811,29 +32617,33 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_73setCyclicEPS(PyObject *__pyx_v
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_eps)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_viewer);
+          if (value) { values[0] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCyclicEPS") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 685; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(14, 73, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
     } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
     }
-    __pyx_v_eps = ((struct PySlepcEPSObject *)values[0]);
+    __pyx_v_viewer = ((struct PyPetscViewerObject *)values[0]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setCyclicEPS", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 685; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(14, 73, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setCyclicEPS", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_eps), __pyx_ptype_8slepc4py_5SLEPc_EPS, 0, "eps", 0))) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 685; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_72setCyclicEPS(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_eps);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) __PYX_ERR(14, 73, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_2view(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
   goto __pyx_L0;
@@ -31844,264 +32654,140 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_73setCyclicEPS(PyObject *__pyx_v
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_72setCyclicEPS(struct PySlepcSVDObject *__pyx_v_self, struct PySlepcEPSObject *__pyx_v_eps) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_2view(struct PySlepcSVDObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
+  PetscViewer __pyx_v_vwr;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setCyclicEPS", 0);
+  int __pyx_t_2;
+  PetscViewer __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("view", 0);
 
-  /* "SLEPc/SVD.pyx":695
- *              The eigensolver object.
+  /* "SLEPc/SVD.pyx":83
+ *                 output is used.
  *         """
- *         CHKERR( SVDCyclicSetEPS(self.svd, eps.eps) )             # <<<<<<<<<<<<<<
- * 
- *     def getCyclicEPS(self):
+ *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( SVDView(self.svd, vwr) )
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDCyclicSetEPS(__pyx_v_self->svd, __pyx_v_eps->eps)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 695; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_vwr = NULL;
 
-  /* "SLEPc/SVD.pyx":685
- *         return eps
- * 
- *     def setCyclicEPS(self, EPS eps not None):             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":84
  *         """
- *         Associate an eigensolver object (`EPS`) to the singular value
- */
-
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setCyclicEPS", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "SLEPc/SVD.pyx":697
- *         CHKERR( SVDCyclicSetEPS(self.svd, eps.eps) )
- * 
- *     def getCyclicEPS(self):             # <<<<<<<<<<<<<<
- *         """
- *         Retrieve the eigensolver object (`EPS`) associated to the
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_75getCyclicEPS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_74getCyclicEPS[] = "SVD.getCyclicEPS(self)\n\n        Retrieve the eigensolver object (`EPS`) associated to the\n        singular value solver.\n\n        Returns\n        -------\n        eps: EPS\n             The eigensolver object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_75getCyclicEPS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getCyclicEPS (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getCyclicEPS", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getCyclicEPS", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_74getCyclicEPS(((struct PySlepcSVDObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_74getCyclicEPS(struct PySlepcSVDObject *__pyx_v_self) {
-  struct PySlepcEPSObject *__pyx_v_eps = 0;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getCyclicEPS", 0);
-
-  /* "SLEPc/SVD.pyx":707
- *              The eigensolver object.
- *         """
- *         cdef EPS eps = EPS()             # <<<<<<<<<<<<<<
- *         CHKERR( SVDCyclicGetEPS(self.svd, &eps.eps) )
- *         PetscINCREF(eps.obj)
- */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_EPS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_eps = ((struct PySlepcEPSObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "SLEPc/SVD.pyx":708
- *         """
- *         cdef EPS eps = EPS()
- *         CHKERR( SVDCyclicGetEPS(self.svd, &eps.eps) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(eps.obj)
- *         return eps
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDCyclicGetEPS(__pyx_v_self->svd, (&__pyx_v_eps->eps))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/SVD.pyx":709
- *         cdef EPS eps = EPS()
- *         CHKERR( SVDCyclicGetEPS(self.svd, &eps.eps) )
- *         PetscINCREF(eps.obj)             # <<<<<<<<<<<<<<
- *         return eps
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDView(self.svd, vwr) )
  * 
  */
-  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_eps->__pyx_base.obj);
+  __pyx_t_1 = (((PyObject *)__pyx_v_viewer) != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_v_viewer->vwr;
+    __pyx_v_vwr = __pyx_t_3;
+  }
 
-  /* "SLEPc/SVD.pyx":710
- *         CHKERR( SVDCyclicGetEPS(self.svd, &eps.eps) )
- *         PetscINCREF(eps.obj)
- *         return eps             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":85
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( SVDView(self.svd, vwr) )             # <<<<<<<<<<<<<<
  * 
- *     def setCyclicExplicitMatrix(self, flag=True):
+ *     def destroy(self):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_eps));
-  __pyx_r = ((PyObject *)__pyx_v_eps);
-  goto __pyx_L0;
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDView(__pyx_v_self->svd, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(14, 85, __pyx_L1_error)
 
-  /* "SLEPc/SVD.pyx":697
- *         CHKERR( SVDCyclicSetEPS(self.svd, eps.eps) )
+  /* "SLEPc/SVD.pyx":73
+ *         self.svd = NULL
  * 
- *     def getCyclicEPS(self):             # <<<<<<<<<<<<<<
+ *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
  *         """
- *         Retrieve the eigensolver object (`EPS`) associated to the
+ *         Prints the SVD data structure.
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getCyclicEPS", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_eps);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":712
- *         return eps
+/* "SLEPc/SVD.pyx":87
+ *         CHKERR( SVDView(self.svd, vwr) )
  * 
- *     def setCyclicExplicitMatrix(self, flag=True):             # <<<<<<<<<<<<<<
+ *     def destroy(self):             # <<<<<<<<<<<<<<
  *         """
- *         Indicate if the eigensolver operator ``H(A) = [ 0 A ; A^T 0
+ *         Destroys the SVD object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_77setCyclicExplicitMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_76setCyclicExplicitMatrix[] = "SVD.setCyclicExplicitMatrix(self, flag=True)\n\n        Indicate if the eigensolver operator ``H(A) = [ 0 A ; A^T 0\n        ]`` must be computed explicitly.\n\n        Parameters\n        ----------\n        flag: boolean\n              True if ``H(A)`` is built explicitly.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_77setCyclicExplicitMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_flag = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_4destroy[] = "SVD.destroy(self)\n\n        Destroys the SVD object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setCyclicExplicitMatrix (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag,0};
-    PyObject* values[1] = {0};
-    values[0] = ((PyObject *)Py_True);
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_flag);
-          if (value) { values[0] = value; kw_args--; }
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCyclicExplicitMatrix") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 712; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-    }
-    __pyx_v_flag = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setCyclicExplicitMatrix", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 712; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setCyclicExplicitMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_76setCyclicExplicitMatrix(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_flag);
+  __Pyx_RefNannySetupContext("destroy (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("destroy", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "destroy", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_4destroy(((struct PySlepcSVDObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_76setCyclicExplicitMatrix(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_flag) {
-  PetscBool __pyx_v_tval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_4destroy(struct PySlepcSVDObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setCyclicExplicitMatrix", 0);
+  __Pyx_RefNannySetupContext("destroy", 0);
 
-  /* "SLEPc/SVD.pyx":722
- *               True if ``H(A)`` is built explicitly.
+  /* "SLEPc/SVD.pyx":91
+ *         Destroys the SVD object.
  *         """
- *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         if flag: tval = PETSC_TRUE
- *         CHKERR( SVDCyclicSetExplicitMatrix(self.svd, tval) )
+ *         CHKERR( SVDDestroy(&self.svd) )             # <<<<<<<<<<<<<<
+ *         self.svd = NULL
+ *         return self
  */
-  __pyx_v_tval = PETSC_FALSE;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDDestroy((&__pyx_v_self->svd))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(14, 91, __pyx_L1_error)
 
-  /* "SLEPc/SVD.pyx":723
+  /* "SLEPc/SVD.pyx":92
  *         """
- *         cdef PetscBool tval = PETSC_FALSE
- *         if flag: tval = PETSC_TRUE             # <<<<<<<<<<<<<<
- *         CHKERR( SVDCyclicSetExplicitMatrix(self.svd, tval) )
+ *         CHKERR( SVDDestroy(&self.svd) )
+ *         self.svd = NULL             # <<<<<<<<<<<<<<
+ *         return self
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_flag); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 723; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__pyx_t_1) {
-    __pyx_v_tval = PETSC_TRUE;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+  __pyx_v_self->svd = NULL;
 
-  /* "SLEPc/SVD.pyx":724
- *         cdef PetscBool tval = PETSC_FALSE
- *         if flag: tval = PETSC_TRUE
- *         CHKERR( SVDCyclicSetExplicitMatrix(self.svd, tval) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":93
+ *         CHKERR( SVDDestroy(&self.svd) )
+ *         self.svd = NULL
+ *         return self             # <<<<<<<<<<<<<<
  * 
- *     def getCyclicExplicitMatrix(self):
+ *     def reset(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDCyclicSetExplicitMatrix(__pyx_v_self->svd, __pyx_v_tval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 724; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_r = ((PyObject *)__pyx_v_self);
+  goto __pyx_L0;
 
-  /* "SLEPc/SVD.pyx":712
- *         return eps
+  /* "SLEPc/SVD.pyx":87
+ *         CHKERR( SVDView(self.svd, vwr) )
  * 
- *     def setCyclicExplicitMatrix(self, flag=True):             # <<<<<<<<<<<<<<
+ *     def destroy(self):             # <<<<<<<<<<<<<<
  *         """
- *         Indicate if the eigensolver operator ``H(A) = [ 0 A ; A^T 0
+ *         Destroys the SVD object.
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setCyclicExplicitMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.destroy", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -32109,86 +32795,59 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_76setCyclicExplicitMatrix(struct
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":726
- *         CHKERR( SVDCyclicSetExplicitMatrix(self.svd, tval) )
+/* "SLEPc/SVD.pyx":95
+ *         return self
  * 
- *     def getCyclicExplicitMatrix(self):             # <<<<<<<<<<<<<<
+ *     def reset(self):             # <<<<<<<<<<<<<<
  *         """
- *         Returns the flag indicating if ``H(A) = [ 0 A ; A^T 0 ]`` is
+ *         Resets the SVD object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_79getCyclicExplicitMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_78getCyclicExplicitMatrix[] = "SVD.getCyclicExplicitMatrix(self)\n\n        Returns the flag indicating if ``H(A) = [ 0 A ; A^T 0 ]`` is\n        built explicitly.\n\n        Returns\n        -------\n        flag: boolean\n              True if ``H(A)`` is built explicitly.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_79getCyclicExplicitMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_7reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_6reset[] = "SVD.reset(self)\n\n        Resets the SVD object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_7reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getCyclicExplicitMatrix (wrapper)", 0);
+  __Pyx_RefNannySetupContext("reset (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getCyclicExplicitMatrix", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getCyclicExplicitMatrix", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_78getCyclicExplicitMatrix(((struct PySlepcSVDObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("reset", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "reset", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_6reset(((struct PySlepcSVDObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_78getCyclicExplicitMatrix(struct PySlepcSVDObject *__pyx_v_self) {
-  PetscBool __pyx_v_tval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_6reset(struct PySlepcSVDObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getCyclicExplicitMatrix", 0);
-
-  /* "SLEPc/SVD.pyx":736
- *               True if ``H(A)`` is built explicitly.
- *         """
- *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( SVDCyclicGetExplicitMatrix(self.svd, &tval) )
- *         return <bint>tval
- */
-  __pyx_v_tval = PETSC_FALSE;
+  __Pyx_RefNannySetupContext("reset", 0);
 
-  /* "SLEPc/SVD.pyx":737
+  /* "SLEPc/SVD.pyx":99
+ *         Resets the SVD object.
  *         """
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( SVDCyclicGetExplicitMatrix(self.svd, &tval) )             # <<<<<<<<<<<<<<
- *         return <bint>tval
- * 
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDCyclicGetExplicitMatrix(__pyx_v_self->svd, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 737; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/SVD.pyx":738
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( SVDCyclicGetExplicitMatrix(self.svd, &tval) )
- *         return <bint>tval             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDReset(self.svd) )             # <<<<<<<<<<<<<<
  * 
- *     def setLanczosOneSide(self, flag=True):
+ *     def create(self, comm=None):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_tval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 738; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDReset(__pyx_v_self->svd)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(14, 99, __pyx_L1_error)
 
-  /* "SLEPc/SVD.pyx":726
- *         CHKERR( SVDCyclicSetExplicitMatrix(self.svd, tval) )
+  /* "SLEPc/SVD.pyx":95
+ *         return self
  * 
- *     def getCyclicExplicitMatrix(self):             # <<<<<<<<<<<<<<
+ *     def reset(self):             # <<<<<<<<<<<<<<
  *         """
- *         Returns the flag indicating if ``H(A) = [ 0 A ; A^T 0 ]`` is
+ *         Resets the SVD object.
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getCyclicExplicitMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.reset", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -32196,29 +32855,26 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_78getCyclicExplicitMatrix(struct
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":740
- *         return <bint>tval
+/* "SLEPc/SVD.pyx":101
+ *         CHKERR( SVDReset(self.svd) )
  * 
- *     def setLanczosOneSide(self, flag=True):             # <<<<<<<<<<<<<<
+ *     def create(self, comm=None):             # <<<<<<<<<<<<<<
  *         """
- *         Indicate if the variant of the Lanczos method to be used is
+ *         Creates the SVD object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_81setLanczosOneSide(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_80setLanczosOneSide[] = "SVD.setLanczosOneSide(self, flag=True)\n\n        Indicate if the variant of the Lanczos method to be used is\n        one-sided or two-sided.\n\n        Parameters\n        ----------\n        flag: boolean\n              True if the method is one-sided.\n\n        Notes\n        -----\n        By default, a two-sided variant is selected, which is\n        sometimes slightly more robust. However, the one-sided variant\ [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_81setLanczosOneSide(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_flag = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_8create[] = "SVD.create(self, comm=None)\n\n        Creates the SVD object.\n\n        Parameters\n        ----------\n        comm: Comm, optional\n              MPI communicator; if not provided, it defaults to all\n              processes.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setLanczosOneSide (wrapper)", 0);
+  __Pyx_RefNannySetupContext("create (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,0};
     PyObject* values[1] = {0};
-    values[0] = ((PyObject *)Py_True);
+    values[0] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
@@ -32231,12 +32887,12 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_81setLanczosOneSide(PyObject *__
       switch (pos_args) {
         case  0:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_flag);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
           if (value) { values[0] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLanczosOneSide") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 740; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(14, 101, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -32245,79 +32901,93 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_81setLanczosOneSide(PyObject *__
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_flag = values[0];
+    __pyx_v_comm = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setLanczosOneSide", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 740; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(14, 101, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setLanczosOneSide", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_80setLanczosOneSide(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_flag);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_8create(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_80setLanczosOneSide(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_flag) {
-  PetscBool __pyx_v_tval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_8create(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_comm) {
+  MPI_Comm __pyx_v_ccomm;
+  SVD __pyx_v_newsvd;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  MPI_Comm __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setLanczosOneSide", 0);
+  __Pyx_RefNannySetupContext("create", 0);
 
-  /* "SLEPc/SVD.pyx":758
- *         for storing such vectors.
+  /* "SLEPc/SVD.pyx":111
+ *               processes.
  *         """
- *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         if flag: tval = PETSC_TRUE
- *         CHKERR( SVDLanczosSetOneSide(self.svd, tval) )
+ *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())             # <<<<<<<<<<<<<<
+ *         cdef SlepcSVD newsvd = NULL
+ *         CHKERR( SVDCreate(ccomm, &newsvd) )
  */
-  __pyx_v_tval = PETSC_FALSE;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_def_Comm(__pyx_v_comm, __pyx_f_8slepc4py_5SLEPc_SLEPC_COMM_DEFAULT()); if (unlikely(PyErr_Occurred())) __PYX_ERR(14, 111, __pyx_L1_error)
+  __pyx_v_ccomm = __pyx_t_1;
 
-  /* "SLEPc/SVD.pyx":759
+  /* "SLEPc/SVD.pyx":112
  *         """
- *         cdef PetscBool tval = PETSC_FALSE
- *         if flag: tval = PETSC_TRUE             # <<<<<<<<<<<<<<
- *         CHKERR( SVDLanczosSetOneSide(self.svd, tval) )
+ *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
+ *         cdef SlepcSVD newsvd = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDCreate(ccomm, &newsvd) )
+ *         SlepcCLEAR(self.obj); self.svd = newsvd
+ */
+  __pyx_v_newsvd = NULL;
+
+  /* "SLEPc/SVD.pyx":113
+ *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
+ *         cdef SlepcSVD newsvd = NULL
+ *         CHKERR( SVDCreate(ccomm, &newsvd) )             # <<<<<<<<<<<<<<
+ *         SlepcCLEAR(self.obj); self.svd = newsvd
+ *         return self
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDCreate(__pyx_v_ccomm, (&__pyx_v_newsvd))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(14, 113, __pyx_L1_error)
+
+  /* "SLEPc/SVD.pyx":114
+ *         cdef SlepcSVD newsvd = NULL
+ *         CHKERR( SVDCreate(ccomm, &newsvd) )
+ *         SlepcCLEAR(self.obj); self.svd = newsvd             # <<<<<<<<<<<<<<
+ *         return self
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_flag); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__pyx_t_1) {
-    __pyx_v_tval = PETSC_TRUE;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+  __pyx_f_8slepc4py_5SLEPc_SlepcCLEAR(__pyx_v_self->__pyx_base.obj);
+  __pyx_v_self->svd = __pyx_v_newsvd;
 
-  /* "SLEPc/SVD.pyx":760
- *         cdef PetscBool tval = PETSC_FALSE
- *         if flag: tval = PETSC_TRUE
- *         CHKERR( SVDLanczosSetOneSide(self.svd, tval) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":115
+ *         CHKERR( SVDCreate(ccomm, &newsvd) )
+ *         SlepcCLEAR(self.obj); self.svd = newsvd
+ *         return self             # <<<<<<<<<<<<<<
  * 
- *     def setTRLanczosOneSide(self, flag=True):
+ *     def setType(self, svd_type):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDLanczosSetOneSide(__pyx_v_self->svd, __pyx_v_tval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 760; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_r = ((PyObject *)__pyx_v_self);
+  goto __pyx_L0;
 
-  /* "SLEPc/SVD.pyx":740
- *         return <bint>tval
+  /* "SLEPc/SVD.pyx":101
+ *         CHKERR( SVDReset(self.svd) )
  * 
- *     def setLanczosOneSide(self, flag=True):             # <<<<<<<<<<<<<<
+ *     def create(self, comm=None):             # <<<<<<<<<<<<<<
  *         """
- *         Indicate if the variant of the Lanczos method to be used is
+ *         Creates the SVD object.
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setLanczosOneSide", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -32325,29 +32995,25 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_80setLanczosOneSide(struct PySle
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":762
- *         CHKERR( SVDLanczosSetOneSide(self.svd, tval) )
+/* "SLEPc/SVD.pyx":117
+ *         return self
  * 
- *     def setTRLanczosOneSide(self, flag=True):             # <<<<<<<<<<<<<<
+ *     def setType(self, svd_type):             # <<<<<<<<<<<<<<
  *         """
- *         Indicate if the variant of the thick-restart Lanczos method to
+ *         Selects the particular solver to be used in the SVD object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_83setTRLanczosOneSide(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3SVD_82setTRLanczosOneSide[] = "SVD.setTRLanczosOneSide(self, flag=True)\n\n        Indicate if the variant of the thick-restart Lanczos method to\n        be used is one-sided or two-sided.\n\n        Parameters\n        ----------\n        flag: boolean\n              True if the method is one-sided.\n\n        Notes\n        -----\n        By default, a two-sided variant is selected, which is\n        sometimes slightly more robust. However, the  [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_83setTRLanczosOneSide(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_flag = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_10setType[] = "SVD.setType(self, svd_type)\n\n        Selects the particular solver to be used in the SVD object.\n\n        Parameters\n        ----------\n        svd_type: `SVD.Type` enumerate\n                  The solver to be used.\n\n        Notes\n        -----\n        See `SVD.Type` for available methods. The default is CROSS.\n        Normally, it is best to use `setFromOptions()` and then set\n        the SVD type from the options d [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_svd_type = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setTRLanczosOneSide (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setType (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_svd_type,0};
     PyObject* values[1] = {0};
-    values[0] = ((PyObject *)Py_True);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
@@ -32359,179 +33025,172 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_83setTRLanczosOneSide(PyObject *
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_flag);
-          if (value) { values[0] = value; kw_args--; }
-        }
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_svd_type)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTRLanczosOneSide") < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 762; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(14, 117, __pyx_L3_error)
       }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
     } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_flag = values[0];
+    __pyx_v_svd_type = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTRLanczosOneSide", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[12]; __pyx_lineno = 762; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(14, 117, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setTRLanczosOneSide", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_82setTRLanczosOneSide(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_flag);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_10setType(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_svd_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_82setTRLanczosOneSide(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_flag) {
-  PetscBool __pyx_v_tval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_10setType(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_svd_type) {
+  const char* __pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setTRLanczosOneSide", 0);
+  __Pyx_RefNannySetupContext("setType", 0);
+  __Pyx_INCREF(__pyx_v_svd_type);
 
-  /* "SLEPc/SVD.pyx":779
- *         to left singular vectors.
+  /* "SLEPc/SVD.pyx":135
+ *         methods.
  *         """
- *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         if flag: tval = PETSC_TRUE
- *         CHKERR( SVDLanczosSetOneSide(self.svd, tval) )
+ *         cdef SlepcSVDType cval = NULL             # <<<<<<<<<<<<<<
+ *         svd_type = str2bytes(svd_type, &cval)
+ *         CHKERR( SVDSetType(self.svd, cval) )
  */
-  __pyx_v_tval = PETSC_FALSE;
+  __pyx_v_cval = NULL;
 
-  /* "SLEPc/SVD.pyx":780
+  /* "SLEPc/SVD.pyx":136
  *         """
- *         cdef PetscBool tval = PETSC_FALSE
- *         if flag: tval = PETSC_TRUE             # <<<<<<<<<<<<<<
- *         CHKERR( SVDLanczosSetOneSide(self.svd, tval) )
+ *         cdef SlepcSVDType cval = NULL
+ *         svd_type = str2bytes(svd_type, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDSetType(self.svd, cval) )
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_flag); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 780; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__pyx_t_1) {
-    __pyx_v_tval = PETSC_TRUE;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_svd_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 136, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_svd_type, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/SVD.pyx":781
- *         cdef PetscBool tval = PETSC_FALSE
- *         if flag: tval = PETSC_TRUE
- *         CHKERR( SVDLanczosSetOneSide(self.svd, tval) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":137
+ *         cdef SlepcSVDType cval = NULL
+ *         svd_type = str2bytes(svd_type, &cval)
+ *         CHKERR( SVDSetType(self.svd, cval) )             # <<<<<<<<<<<<<<
  * 
- *     #
+ *     def getType(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDLanczosSetOneSide(__pyx_v_self->svd, __pyx_v_tval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDSetType(__pyx_v_self->svd, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(14, 137, __pyx_L1_error)
 
-  /* "SLEPc/SVD.pyx":762
- *         CHKERR( SVDLanczosSetOneSide(self.svd, tval) )
+  /* "SLEPc/SVD.pyx":117
+ *         return self
  * 
- *     def setTRLanczosOneSide(self, flag=True):             # <<<<<<<<<<<<<<
+ *     def setType(self, svd_type):             # <<<<<<<<<<<<<<
  *         """
- *         Indicate if the variant of the thick-restart Lanczos method to
+ *         Selects the particular solver to be used in the SVD object.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setTRLanczosOneSide", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_svd_type);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":786
+/* "SLEPc/SVD.pyx":139
+ *         CHKERR( SVDSetType(self.svd, cval) )
  * 
- *     property transpose_mode:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getTransposeMode()
- *         def __set__(self, value):
+ *     def getType(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the SVD type of this object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_14transpose_mode_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_14transpose_mode_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_12getType[] = "SVD.getType(self)\n\n        Gets the SVD type of this object.\n\n        Returns\n        -------\n        type: `SVD.Type` enumerate\n              The solver currently being used.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_14transpose_mode___get__(((struct PySlepcSVDObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("getType (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getType", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_12getType(((struct PySlepcSVDObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_14transpose_mode___get__(struct PySlepcSVDObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_12getType(struct PySlepcSVDObject *__pyx_v_self) {
+  const char* __pyx_v_svd_type;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 0);
+  __Pyx_RefNannySetupContext("getType", 0);
 
-  /* "SLEPc/SVD.pyx":787
- *     property transpose_mode:
- *         def __get__(self):
- *             return self.getTransposeMode()             # <<<<<<<<<<<<<<
- *         def __set__(self, value):
- *             self.setTransposeMode(value)
+  /* "SLEPc/SVD.pyx":148
+ *               The solver currently being used.
+ *         """
+ *         cdef SlepcSVDType svd_type = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDGetType(self.svd, &svd_type) )
+ *         return bytes2str(svd_type)
+ */
+  __pyx_v_svd_type = NULL;
+
+  /* "SLEPc/SVD.pyx":149
+ *         """
+ *         cdef SlepcSVDType svd_type = NULL
+ *         CHKERR( SVDGetType(self.svd, &svd_type) )             # <<<<<<<<<<<<<<
+ *         return bytes2str(svd_type)
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetType(__pyx_v_self->svd, (&__pyx_v_svd_type))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(14, 149, __pyx_L1_error)
+
+  /* "SLEPc/SVD.pyx":150
+ *         cdef SlepcSVDType svd_type = NULL
+ *         CHKERR( SVDGetType(self.svd, &svd_type) )
+ *         return bytes2str(svd_type)             # <<<<<<<<<<<<<<
+ * 
+ *     def getOptionsPrefix(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getTransposeMode); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_svd_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 150, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_3)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_3);
-      __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
-    }
-  }
-  if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/SVD.pyx":786
+  /* "SLEPc/SVD.pyx":139
+ *         CHKERR( SVDSetType(self.svd, cval) )
  * 
- *     property transpose_mode:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getTransposeMode()
- *         def __set__(self, value):
+ *     def getType(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the SVD type of this object.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.transpose_mode.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -32539,356 +33198,381 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_14transpose_mode___get__(struct
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":788
- *         def __get__(self):
- *             return self.getTransposeMode()
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setTransposeMode(value)
+/* "SLEPc/SVD.pyx":152
+ *         return bytes2str(svd_type)
  * 
+ *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the prefix used for searching for all SVD options in the
  */
 
 /* Python wrapper */
-static int __pyx_pw_8slepc4py_5SLEPc_3SVD_14transpose_mode_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_8slepc4py_5SLEPc_3SVD_14transpose_mode_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_14getOptionsPrefix[] = "SVD.getOptionsPrefix(self)\n\n        Gets the prefix used for searching for all SVD options in the\n        database.\n\n        Returns\n        -------\n        prefix: string\n                The prefix string set for this SVD object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_14transpose_mode_2__set__(((struct PySlepcSVDObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannySetupContext("getOptionsPrefix (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getOptionsPrefix", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getOptionsPrefix", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_14getOptionsPrefix(((struct PySlepcSVDObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_8slepc4py_5SLEPc_3SVD_14transpose_mode_2__set__(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_14getOptionsPrefix(struct PySlepcSVDObject *__pyx_v_self) {
+  const char *__pyx_v_prefix;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
+  __Pyx_RefNannySetupContext("getOptionsPrefix", 0);
 
-  /* "SLEPc/SVD.pyx":789
- *             return self.getTransposeMode()
- *         def __set__(self, value):
- *             self.setTransposeMode(value)             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":162
+ *                 The prefix string set for this SVD object.
+ *         """
+ *         cdef const_char *prefix = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDGetOptionsPrefix(self.svd, &prefix) )
+ *         return bytes2str(prefix)
+ */
+  __pyx_v_prefix = NULL;
+
+  /* "SLEPc/SVD.pyx":163
+ *         """
+ *         cdef const_char *prefix = NULL
+ *         CHKERR( SVDGetOptionsPrefix(self.svd, &prefix) )             # <<<<<<<<<<<<<<
+ *         return bytes2str(prefix)
  * 
- *     property which:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTransposeMode); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetOptionsPrefix(__pyx_v_self->svd, (&__pyx_v_prefix))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(14, 163, __pyx_L1_error)
+
+  /* "SLEPc/SVD.pyx":164
+ *         cdef const_char *prefix = NULL
+ *         CHKERR( SVDGetOptionsPrefix(self.svd, &prefix) )
+ *         return bytes2str(prefix)             # <<<<<<<<<<<<<<
+ * 
+ *     def setOptionsPrefix(self, prefix):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_prefix); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 164, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_3)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_3);
-      __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
-    }
-  }
-  if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-  } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
-    __Pyx_INCREF(__pyx_v_value);
-    __Pyx_GIVEREF(__pyx_v_value);
-    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  }
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
 
-  /* "SLEPc/SVD.pyx":788
- *         def __get__(self):
- *             return self.getTransposeMode()
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setTransposeMode(value)
+  /* "SLEPc/SVD.pyx":152
+ *         return bytes2str(svd_type)
  * 
+ *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the prefix used for searching for all SVD options in the
  */
 
   /* function exit code */
-  __pyx_r = 0;
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.transpose_mode.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":792
+/* "SLEPc/SVD.pyx":166
+ *         return bytes2str(prefix)
  * 
- *     property which:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getWhichSingularTriplets()
- *         def __set__(self, value):
+ *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the prefix used for searching for all SVD options in the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_5which_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_5which_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_17setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_16setOptionsPrefix[] = "SVD.setOptionsPrefix(self, prefix)\n\n        Sets the prefix used for searching for all SVD options in the\n        database.\n\n        Parameters\n        ----------\n        prefix: string\n                The prefix string to prepend to all SVD option\n                requests.\n\n        Notes\n        -----\n        A hyphen (-) must NOT be given at the beginning of the prefix\n        name.  The first character o [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_17setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_prefix = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_5which___get__(((struct PySlepcSVDObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("setOptionsPrefix (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_prefix,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_prefix)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) __PYX_ERR(14, 166, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_prefix = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(14, 166, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_16setOptionsPrefix(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_prefix);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_5which___get__(struct PySlepcSVDObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_16setOptionsPrefix(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
+  const char *__pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 0);
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setOptionsPrefix", 0);
+  __Pyx_INCREF(__pyx_v_prefix);
 
-  /* "SLEPc/SVD.pyx":793
- *     property which:
- *         def __get__(self):
- *             return self.getWhichSingularTriplets()             # <<<<<<<<<<<<<<
- *         def __set__(self, value):
- *             self.setWhichSingularTriplets(value)
+  /* "SLEPc/SVD.pyx":189
+ *             S2.setOptionsPrefix("svd2_")
+ *         """
+ *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
+ *         prefix = str2bytes(prefix, &cval)
+ *         CHKERR( SVDSetOptionsPrefix(self.svd, cval) )
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getWhichSingularTriplets); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 793; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_3)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_3);
-      __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
-    }
-  }
-  if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 793; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 793; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
+  __pyx_v_cval = NULL;
+
+  /* "SLEPc/SVD.pyx":190
+ *         """
+ *         cdef const_char *cval = NULL
+ *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDSetOptionsPrefix(self.svd, cval) )
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 190, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_r = __pyx_t_1;
+  __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
   __pyx_t_1 = 0;
-  goto __pyx_L0;
 
-  /* "SLEPc/SVD.pyx":792
+  /* "SLEPc/SVD.pyx":191
+ *         cdef const_char *cval = NULL
+ *         prefix = str2bytes(prefix, &cval)
+ *         CHKERR( SVDSetOptionsPrefix(self.svd, cval) )             # <<<<<<<<<<<<<<
  * 
- *     property which:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getWhichSingularTriplets()
- *         def __set__(self, value):
+ *     def appendOptionsPrefix(self, prefix):
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDSetOptionsPrefix(__pyx_v_self->svd, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(14, 191, __pyx_L1_error)
+
+  /* "SLEPc/SVD.pyx":166
+ *         return bytes2str(prefix)
+ * 
+ *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the prefix used for searching for all SVD options in the
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.which.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_prefix);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":794
- *         def __get__(self):
- *             return self.getWhichSingularTriplets()
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setWhichSingularTriplets(value)
+/* "SLEPc/SVD.pyx":193
+ *         CHKERR( SVDSetOptionsPrefix(self.svd, cval) )
  * 
+ *     def appendOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *         """
+ *         Appends to the prefix used for searching for all SVD options
  */
 
 /* Python wrapper */
-static int __pyx_pw_8slepc4py_5SLEPc_3SVD_5which_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_8slepc4py_5SLEPc_3SVD_5which_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_19appendOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_18appendOptionsPrefix[] = "SVD.appendOptionsPrefix(self, prefix)\n\n        Appends to the prefix used for searching for all SVD options\n        in the database.\n\n        Parameters\n        ----------\n        prefix: string\n                The prefix string to prepend to all SVD option requests.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_19appendOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_prefix = 0;
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_5which_2__set__(((struct PySlepcSVDObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannySetupContext("appendOptionsPrefix (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_prefix,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_prefix)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "appendOptionsPrefix") < 0)) __PYX_ERR(14, 193, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_prefix = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("appendOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(14, 193, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.appendOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_18appendOptionsPrefix(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_prefix);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_8slepc4py_5SLEPc_3SVD_5which_2__set__(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_18appendOptionsPrefix(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
+  const char *__pyx_v_cval;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("appendOptionsPrefix", 0);
+  __Pyx_INCREF(__pyx_v_prefix);
 
-  /* "SLEPc/SVD.pyx":795
- *             return self.getWhichSingularTriplets()
- *         def __set__(self, value):
- *             self.setWhichSingularTriplets(value)             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":203
+ *                 The prefix string to prepend to all SVD option requests.
+ *         """
+ *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
+ *         prefix = str2bytes(prefix, &cval)
+ *         CHKERR( SVDAppendOptionsPrefix(self.svd, cval) )
+ */
+  __pyx_v_cval = NULL;
+
+  /* "SLEPc/SVD.pyx":204
+ *         """
+ *         cdef const_char *cval = NULL
+ *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDAppendOptionsPrefix(self.svd, cval) )
  * 
- *     property tol:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setWhichSingularTriplets); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_3)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_3);
-      __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
-    }
-  }
-  if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-  } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
-    __Pyx_INCREF(__pyx_v_value);
-    __Pyx_GIVEREF(__pyx_v_value);
-    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  }
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 204, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/SVD.pyx":794
- *         def __get__(self):
- *             return self.getWhichSingularTriplets()
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setWhichSingularTriplets(value)
+  /* "SLEPc/SVD.pyx":205
+ *         cdef const_char *cval = NULL
+ *         prefix = str2bytes(prefix, &cval)
+ *         CHKERR( SVDAppendOptionsPrefix(self.svd, cval) )             # <<<<<<<<<<<<<<
+ * 
+ *     def setFromOptions(self):
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDAppendOptionsPrefix(__pyx_v_self->svd, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(14, 205, __pyx_L1_error)
+
+  /* "SLEPc/SVD.pyx":193
+ *         CHKERR( SVDSetOptionsPrefix(self.svd, cval) )
  * 
+ *     def appendOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *         """
+ *         Appends to the prefix used for searching for all SVD options
  */
 
   /* function exit code */
-  __pyx_r = 0;
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.which.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.appendOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_prefix);
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":798
+/* "SLEPc/SVD.pyx":207
+ *         CHKERR( SVDAppendOptionsPrefix(self.svd, cval) )
  * 
- *     property tol:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getTolerances()[0]
- *         def __set__(self, value):
+ *     def setFromOptions(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets SVD options from the options database. This routine must
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_3tol_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_3tol_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_21setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_20setFromOptions[] = "SVD.setFromOptions(self)\n\n        Sets SVD options from the options database. This routine must\n        be called before `setUp()` if the user is to be allowed to set\n        the solver type.\n\n        Notes\n        -----\n        To see all options, run your program with the ``-help``\n        option.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_21setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_3tol___get__(((struct PySlepcSVDObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("setFromOptions (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("setFromOptions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setFromOptions", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_20setFromOptions(((struct PySlepcSVDObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_3tol___get__(struct PySlepcSVDObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_20setFromOptions(struct PySlepcSVDObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 0);
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setFromOptions", 0);
 
-  /* "SLEPc/SVD.pyx":799
- *     property tol:
- *         def __get__(self):
- *             return self.getTolerances()[0]             # <<<<<<<<<<<<<<
- *         def __set__(self, value):
- *             self.setTolerances(tol=value)
+  /* "SLEPc/SVD.pyx":218
+ *         option.
+ *         """
+ *         CHKERR( SVDSetFromOptions(self.svd) )             # <<<<<<<<<<<<<<
+ * 
+ *     #
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getTolerances); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_3)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_3);
-      __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
-    }
-  }
-  if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDSetFromOptions(__pyx_v_self->svd)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(14, 218, __pyx_L1_error)
 
-  /* "SLEPc/SVD.pyx":798
+  /* "SLEPc/SVD.pyx":207
+ *         CHKERR( SVDAppendOptionsPrefix(self.svd, cval) )
  * 
- *     property tol:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getTolerances()[0]
- *         def __set__(self, value):
+ *     def setFromOptions(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets SVD options from the options database. This routine must
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.tol.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setFromOptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -32896,159 +33580,83 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_3tol___get__(struct PySlepcSVDOb
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":800
- *         def __get__(self):
- *             return self.getTolerances()[0]
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setTolerances(tol=value)
+/* "SLEPc/SVD.pyx":222
+ *     #
  * 
+ *     def getImplicitTranspose(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the mode used to handle the transpose of the matrix
  */
 
 /* Python wrapper */
-static int __pyx_pw_8slepc4py_5SLEPc_3SVD_3tol_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_8slepc4py_5SLEPc_3SVD_3tol_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_23getImplicitTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_22getImplicitTranspose[] = "SVD.getImplicitTranspose(self)\n\n        Gets the mode used to handle the transpose of the matrix\n        associated with the singular value problem.\n\n        Returns\n        -------\n        impl: boolean\n              How to handle the transpose (implicitly or not).\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_23getImplicitTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_3tol_2__set__(((struct PySlepcSVDObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannySetupContext("getImplicitTranspose (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getImplicitTranspose", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getImplicitTranspose", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_22getImplicitTranspose(((struct PySlepcSVDObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_8slepc4py_5SLEPc_3SVD_3tol_2__set__(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_22getImplicitTranspose(struct PySlepcSVDObject *__pyx_v_self) {
+  PetscBool __pyx_v_val;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
+  __Pyx_RefNannySetupContext("getImplicitTranspose", 0);
 
-  /* "SLEPc/SVD.pyx":801
- *             return self.getTolerances()[0]
- *         def __set__(self, value):
- *             self.setTolerances(tol=value)             # <<<<<<<<<<<<<<
- * 
- *     property max_it:
+  /* "SLEPc/SVD.pyx":232
+ *               How to handle the transpose (implicitly or not).
+ *         """
+ *         cdef PetscBool val = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDGetImplicitTranspose(self.svd, &val) )
+ *         return val
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTolerances); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_tol, __pyx_v_value) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_v_val = PETSC_FALSE;
 
-  /* "SLEPc/SVD.pyx":800
- *         def __get__(self):
- *             return self.getTolerances()[0]
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setTolerances(tol=value)
+  /* "SLEPc/SVD.pyx":233
+ *         """
+ *         cdef PetscBool val = PETSC_FALSE
+ *         CHKERR( SVDGetImplicitTranspose(self.svd, &val) )             # <<<<<<<<<<<<<<
+ *         return val
  * 
  */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetImplicitTranspose(__pyx_v_self->svd, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(14, 233, __pyx_L1_error)
 
-  /* function exit code */
-  __pyx_r = 0;
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.tol.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "SLEPc/SVD.pyx":804
+  /* "SLEPc/SVD.pyx":234
+ *         cdef PetscBool val = PETSC_FALSE
+ *         CHKERR( SVDGetImplicitTranspose(self.svd, &val) )
+ *         return val             # <<<<<<<<<<<<<<
  * 
- *     property max_it:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getTolerances()[1]
- *         def __set__(self, value):
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_6max_it_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_6max_it_1__get__(PyObject *__pyx_v_self) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_6max_it___get__(((struct PySlepcSVDObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_6max_it___get__(struct PySlepcSVDObject *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 0);
-
-  /* "SLEPc/SVD.pyx":805
- *     property max_it:
- *         def __get__(self):
- *             return self.getTolerances()[1]             # <<<<<<<<<<<<<<
- *         def __set__(self, value):
- *             self.setTolerances(max_it=value)
+ *     def setImplicitTranspose(self, mode):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getTolerances); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 805; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_3)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_3);
-      __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
-    }
-  }
-  if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 805; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 805; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 805; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 234, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/SVD.pyx":804
+  /* "SLEPc/SVD.pyx":222
+ *     #
  * 
- *     property max_it:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getTolerances()[1]
- *         def __set__(self, value):
+ *     def getImplicitTranspose(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the mode used to handle the transpose of the matrix
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.max_it.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getImplicitTranspose", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -33056,339 +33664,214 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_6max_it___get__(struct PySlepcSV
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":806
- *         def __get__(self):
- *             return self.getTolerances()[1]
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setTolerances(max_it=value)
+/* "SLEPc/SVD.pyx":236
+ *         return val
  * 
+ *     def setImplicitTranspose(self, mode):             # <<<<<<<<<<<<<<
+ *         """
+ *         Indicates how to handle the transpose of the matrix
  */
 
 /* Python wrapper */
-static int __pyx_pw_8slepc4py_5SLEPc_3SVD_6max_it_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_8slepc4py_5SLEPc_3SVD_6max_it_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_25setImplicitTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_24setImplicitTranspose[] = "SVD.setImplicitTranspose(self, mode)\n\n        Indicates how to handle the transpose of the matrix\n        associated with the singular value problem.\n\n        Parameters\n        ----------\n        impl: boolean\n              How to handle the transpose (implicitly or not).\n\n        Notes\n        -----\n        By default, the transpose of the matrix is explicitly built\n        (if the matrix has defined t [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_25setImplicitTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_mode = 0;
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_6max_it_2__set__(((struct PySlepcSVDObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+  __Pyx_RefNannySetupContext("setImplicitTranspose (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mode,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mode)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setImplicitTranspose") < 0)) __PYX_ERR(14, 236, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_mode = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setImplicitTranspose", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(14, 236, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setImplicitTranspose", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_24setImplicitTranspose(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_mode);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_8slepc4py_5SLEPc_3SVD_6max_it_2__set__(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_24setImplicitTranspose(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_mode) {
+  PetscBool __pyx_v_val;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
+  PetscBool __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setImplicitTranspose", 0);
 
-  /* "SLEPc/SVD.pyx":807
- *             return self.getTolerances()[1]
- *         def __set__(self, value):
- *             self.setTolerances(max_it=value)             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":254
+ *         transpose, but handles it implicitly via MatMultTranspose().
+ *         """
+ *         cdef PetscBool val = mode             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDSetImplicitTranspose(self.svd, val) )
  * 
- *     property bv:
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTolerances); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 807; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 807; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_max_it, __pyx_v_value) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 807; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 807; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_mode)); if (unlikely(PyErr_Occurred())) __PYX_ERR(14, 254, __pyx_L1_error)
+  __pyx_v_val = __pyx_t_1;
 
-  /* "SLEPc/SVD.pyx":806
- *         def __get__(self):
- *             return self.getTolerances()[1]
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setTolerances(max_it=value)
+  /* "SLEPc/SVD.pyx":255
+ *         """
+ *         cdef PetscBool val = mode
+ *         CHKERR( SVDSetImplicitTranspose(self.svd, val) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getWhichSingularTriplets(self):
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDSetImplicitTranspose(__pyx_v_self->svd, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(14, 255, __pyx_L1_error)
+
+  /* "SLEPc/SVD.pyx":236
+ *         return val
  * 
+ *     def setImplicitTranspose(self, mode):             # <<<<<<<<<<<<<<
+ *         """
+ *         Indicates how to handle the transpose of the matrix
  */
 
   /* function exit code */
-  __pyx_r = 0;
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.max_it.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setImplicitTranspose", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SVD.pyx":810
+/* "SLEPc/SVD.pyx":257
+ *         CHKERR( SVDSetImplicitTranspose(self.svd, val) )
  * 
- *     property bv:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getBV()
- *         def __set__(self, value):
+ *     def getWhichSingularTriplets(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Returns which singular triplets are to be sought.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_2bv_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_2bv_1__get__(PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_27getWhichSingularTriplets(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_26getWhichSingularTriplets[] = "SVD.getWhichSingularTriplets(self)\n\n        Returns which singular triplets are to be sought.\n\n        Returns\n        -------\n        which: `SVD.Which` enumerate\n               The singular values to be sought (either largest or\n               smallest).\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_27getWhichSingularTriplets(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_2bv___get__(((struct PySlepcSVDObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("getWhichSingularTriplets (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getWhichSingularTriplets", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getWhichSingularTriplets", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_26getWhichSingularTriplets(((struct PySlepcSVDObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_2bv___get__(struct PySlepcSVDObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_26getWhichSingularTriplets(struct PySlepcSVDObject *__pyx_v_self) {
+  SVDWhich __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__get__", 0);
-
-  /* "SLEPc/SVD.pyx":811
- *     property bv:
- *         def __get__(self):
- *             return self.getBV()             # <<<<<<<<<<<<<<
- *         def __set__(self, value):
- *             self.setBV(value)
- */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBV); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 811; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_3)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_3);
-      __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
-    }
-  }
-  if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 811; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 811; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
-  goto __pyx_L0;
+  __Pyx_RefNannySetupContext("getWhichSingularTriplets", 0);
 
-  /* "SLEPc/SVD.pyx":810
- * 
- *     property bv:
- *         def __get__(self):             # <<<<<<<<<<<<<<
- *             return self.getBV()
- *         def __set__(self, value):
+  /* "SLEPc/SVD.pyx":267
+ *                smallest).
+ *         """
+ *         cdef SlepcSVDWhich val = SVD_LARGEST             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDGetWhichSingularTriplets(self.svd, &val) )
+ *         return val
  */
+  __pyx_v_val = SVD_LARGEST;
 
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.bv.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "SLEPc/SVD.pyx":812
- *         def __get__(self):
- *             return self.getBV()
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setBV(value)
+  /* "SLEPc/SVD.pyx":268
+ *         """
+ *         cdef SlepcSVDWhich val = SVD_LARGEST
+ *         CHKERR( SVDGetWhichSingularTriplets(self.svd, &val) )             # <<<<<<<<<<<<<<
+ *         return val
  * 
  */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetWhichSingularTriplets(__pyx_v_self->svd, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(14, 268, __pyx_L1_error)
 
-/* Python wrapper */
-static int __pyx_pw_8slepc4py_5SLEPc_3SVD_2bv_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
-static int __pyx_pw_8slepc4py_5SLEPc_3SVD_2bv_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_2bv_2__set__(((struct PySlepcSVDObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_8slepc4py_5SLEPc_3SVD_2bv_2__set__(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_value) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("__set__", 0);
-
-  /* "SLEPc/SVD.pyx":813
- *             return self.getBV()
- *         def __set__(self, value):
- *             self.setBV(value)             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":269
+ *         cdef SlepcSVDWhich val = SVD_LARGEST
+ *         CHKERR( SVDGetWhichSingularTriplets(self.svd, &val) )
+ *         return val             # <<<<<<<<<<<<<<
  * 
- * # -----------------------------------------------------------------------------
+ *     def setWhichSingularTriplets(self, which):
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setBV); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyInt_From_SVDWhich(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 269, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_3)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_3);
-      __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
-    }
-  }
-  if (!__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-  } else {
-    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
-    __Pyx_INCREF(__pyx_v_value);
-    __Pyx_GIVEREF(__pyx_v_value);
-    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  }
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
 
-  /* "SLEPc/SVD.pyx":812
- *         def __get__(self):
- *             return self.getBV()
- *         def __set__(self, value):             # <<<<<<<<<<<<<<
- *             self.setBV(value)
+  /* "SLEPc/SVD.pyx":257
+ *         CHKERR( SVDSetImplicitTranspose(self.svd, val) )
  * 
+ *     def getWhichSingularTriplets(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Returns which singular triplets are to be sought.
  */
 
   /* function exit code */
-  __pyx_r = 0;
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.bv.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getWhichSingularTriplets", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":142
- *     ConvergedReason = PEPConvergedReason
- * 
- *     def __cinit__(self):             # <<<<<<<<<<<<<<
- *         self.obj = <PetscObject*> &self.pep
- *         self.pep = NULL
- */
-
-/* Python wrapper */
-static int __pyx_pw_8slepc4py_5SLEPc_3PEP_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_8slepc4py_5SLEPc_3PEP_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP___cinit__(((struct PySlepcPEPObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static int __pyx_pf_8slepc4py_5SLEPc_3PEP___cinit__(struct PySlepcPEPObject *__pyx_v_self) {
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__", 0);
-
-  /* "SLEPc/PEP.pyx":143
- * 
- *     def __cinit__(self):
- *         self.obj = <PetscObject*> &self.pep             # <<<<<<<<<<<<<<
- *         self.pep = NULL
- * 
- */
-  __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->pep));
-
-  /* "SLEPc/PEP.pyx":144
- *     def __cinit__(self):
- *         self.obj = <PetscObject*> &self.pep
- *         self.pep = NULL             # <<<<<<<<<<<<<<
- * 
- *     def view(self, Viewer viewer=None):
- */
-  __pyx_v_self->pep = NULL;
-
-  /* "SLEPc/PEP.pyx":142
- *     ConvergedReason = PEPConvergedReason
- * 
- *     def __cinit__(self):             # <<<<<<<<<<<<<<
- *         self.obj = <PetscObject*> &self.pep
- *         self.pep = NULL
- */
-
-  /* function exit code */
-  __pyx_r = 0;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "SLEPc/PEP.pyx":146
- *         self.pep = NULL
+/* "SLEPc/SVD.pyx":271
+ *         return val
  * 
- *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *     def setWhichSingularTriplets(self, which):             # <<<<<<<<<<<<<<
  *         """
- *         Prints the PEP data structure.
+ *         Specifies which singular triplets are to be sought.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_2view[] = "PEP.view(self, Viewer viewer=None)\n\n        Prints the PEP data structure.\n\n        Parameters\n        ----------\n        viewer: Viewer, optional.\n            Visualization context; if not provided, the standard\n            output is used.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscViewerObject *__pyx_v_viewer = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_29setWhichSingularTriplets(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_28setWhichSingularTriplets[] = "SVD.setWhichSingularTriplets(self, which)\n\n        Specifies which singular triplets are to be sought.\n\n        Parameters\n        ----------\n        which: `SVD.Which` enumerate\n               The singular values to be sought (either largest or\n               smallest).\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_29setWhichSingularTriplets(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_which = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("view (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setWhichSingularTriplets (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_viewer,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_which,0};
     PyObject* values[1] = {0};
-    values[0] = (PyObject *)((struct PyPetscViewerObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
@@ -33400,103 +33883,74 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_3view(PyObject *__pyx_v_self, Py
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_viewer);
-          if (value) { values[0] = value; kw_args--; }
-        }
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_which)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setWhichSingularTriplets") < 0)) __PYX_ERR(14, 271, __pyx_L3_error)
       }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
     } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_viewer = ((struct PyPetscViewerObject *)values[0]);
+    __pyx_v_which = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setWhichSingularTriplets", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(14, 271, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setWhichSingularTriplets", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_2view(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_viewer);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_28setWhichSingularTriplets(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_which);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_2view(struct PySlepcPEPObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
-  PetscViewer __pyx_v_vwr;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_28setWhichSingularTriplets(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_which) {
+  SVDWhich __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  SVDWhich __pyx_t_1;
   int __pyx_t_2;
-  PetscViewer __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("view", 0);
+  __Pyx_RefNannySetupContext("setWhichSingularTriplets", 0);
 
-  /* "SLEPc/PEP.pyx":156
- *             output is used.
+  /* "SLEPc/SVD.pyx":281
+ *                smallest).
  *         """
- *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
- *         if viewer is not None: vwr = viewer.vwr
- *         CHKERR( PEPView(self.pep, vwr) )
+ *         cdef SlepcSVDWhich val = which             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDSetWhichSingularTriplets(self.svd, val) )
+ *     #
  */
-  __pyx_v_vwr = NULL;
+  __pyx_t_1 = ((SVDWhich)__Pyx_PyInt_As_SVDWhich(__pyx_v_which)); if (unlikely(PyErr_Occurred())) __PYX_ERR(14, 281, __pyx_L1_error)
+  __pyx_v_val = __pyx_t_1;
 
-  /* "SLEPc/PEP.pyx":157
+  /* "SLEPc/SVD.pyx":282
  *         """
- *         cdef PetscViewer vwr = NULL
- *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
- *         CHKERR( PEPView(self.pep, vwr) )
+ *         cdef SlepcSVDWhich val = which
+ *         CHKERR( SVDSetWhichSingularTriplets(self.svd, val) )             # <<<<<<<<<<<<<<
+ *     #
  * 
  */
-  __pyx_t_1 = (((PyObject *)__pyx_v_viewer) != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_v_viewer->vwr;
-    __pyx_v_vwr = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDSetWhichSingularTriplets(__pyx_v_self->svd, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(14, 282, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":158
- *         cdef PetscViewer vwr = NULL
- *         if viewer is not None: vwr = viewer.vwr
- *         CHKERR( PEPView(self.pep, vwr) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":271
+ *         return val
  * 
- *     def destroy(self):
- */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPView(__pyx_v_self->pep, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/PEP.pyx":146
- *         self.pep = NULL
- * 
- *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
- *         """
- *         Prints the PEP data structure.
+ *     def setWhichSingularTriplets(self, which):             # <<<<<<<<<<<<<<
+ *         """
+ *         Specifies which singular triplets are to be sought.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setWhichSingularTriplets", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -33504,144 +33958,107 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_2view(struct PySlepcPEPObject *_
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":160
- *         CHKERR( PEPView(self.pep, vwr) )
+/* "SLEPc/SVD.pyx":285
+ *     #
  * 
- *     def destroy(self):             # <<<<<<<<<<<<<<
+ *     def getTolerances(self):             # <<<<<<<<<<<<<<
  *         """
- *         Destroys the PEP object.
+ *         Gets the tolerance and maximum iteration count used by the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_4destroy[] = "PEP.destroy(self)\n\n        Destroys the PEP object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_31getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_30getTolerances[] = "SVD.getTolerances(self)\n\n        Gets the tolerance and maximum iteration count used by the\n        default SVD convergence tests.\n\n        Returns\n        -------\n        tol: float\n             The convergence tolerance.\n        max_it: int\n             The maximum number of iterations\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_31getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("destroy (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getTolerances (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("destroy", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "destroy", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_4destroy(((struct PySlepcPEPObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getTolerances", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTolerances", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_30getTolerances(((struct PySlepcSVDObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_4destroy(struct PySlepcPEPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_30getTolerances(struct PySlepcSVDObject *__pyx_v_self) {
+  PetscReal __pyx_v_rval;
+  PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("destroy", 0);
-
-  /* "SLEPc/PEP.pyx":164
- *         Destroys the PEP object.
- *         """
- *         CHKERR( PEPDestroy(&self.pep) )             # <<<<<<<<<<<<<<
- *         self.pep = NULL
- *         return self
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPDestroy((&__pyx_v_self->pep))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("getTolerances", 0);
 
-  /* "SLEPc/PEP.pyx":165
+  /* "SLEPc/SVD.pyx":297
+ *              The maximum number of iterations
  *         """
- *         CHKERR( PEPDestroy(&self.pep) )
- *         self.pep = NULL             # <<<<<<<<<<<<<<
- *         return self
- * 
- */
-  __pyx_v_self->pep = NULL;
-
-  /* "SLEPc/PEP.pyx":166
- *         CHKERR( PEPDestroy(&self.pep) )
- *         self.pep = NULL
- *         return self             # <<<<<<<<<<<<<<
- * 
- *     def reset(self):
+ *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt  ival = 0
+ *         CHKERR( SVDGetTolerances(self.svd, &rval, &ival) )
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_r = ((PyObject *)__pyx_v_self);
-  goto __pyx_L0;
+  __pyx_v_rval = 0.0;
 
-  /* "SLEPc/PEP.pyx":160
- *         CHKERR( PEPView(self.pep, vwr) )
- * 
- *     def destroy(self):             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":298
  *         """
- *         Destroys the PEP object.
+ *         cdef PetscReal rval = 0
+ *         cdef PetscInt  ival = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDGetTolerances(self.svd, &rval, &ival) )
+ *         return (toReal(rval), toInt(ival))
  */
+  __pyx_v_ival = 0;
 
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.destroy", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "SLEPc/PEP.pyx":168
- *         return self
+  /* "SLEPc/SVD.pyx":299
+ *         cdef PetscReal rval = 0
+ *         cdef PetscInt  ival = 0
+ *         CHKERR( SVDGetTolerances(self.svd, &rval, &ival) )             # <<<<<<<<<<<<<<
+ *         return (toReal(rval), toInt(ival))
  * 
- *     def reset(self):             # <<<<<<<<<<<<<<
- *         """
- *         Resets the PEP object.
  */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetTolerances(__pyx_v_self->svd, (&__pyx_v_rval), (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(14, 299, __pyx_L1_error)
 
-/* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_7reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_6reset[] = "PEP.reset(self)\n\n        Resets the PEP object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_7reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("reset (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("reset", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "reset", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_6reset(((struct PySlepcPEPObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_6reset(struct PySlepcPEPObject *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("reset", 0);
-
-  /* "SLEPc/PEP.pyx":172
- *         Resets the PEP object.
- *         """
- *         CHKERR( PEPReset(self.pep) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":300
+ *         cdef PetscInt  ival = 0
+ *         CHKERR( SVDGetTolerances(self.svd, &rval, &ival) )
+ *         return (toReal(rval), toInt(ival))             # <<<<<<<<<<<<<<
  * 
- *     def create(self, comm=None):
+ *     def setTolerances(self, tol=None, max_it=None):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPReset(__pyx_v_self->pep)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 300, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_3)) __PYX_ERR(14, 300, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(14, 300, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
+  __pyx_t_2 = 0;
+  __pyx_t_3 = 0;
+  __pyx_r = __pyx_t_4;
+  __pyx_t_4 = 0;
+  goto __pyx_L0;
 
-  /* "SLEPc/PEP.pyx":168
- *         return self
+  /* "SLEPc/SVD.pyx":285
+ *     #
  * 
- *     def reset(self):             # <<<<<<<<<<<<<<
+ *     def getTolerances(self):             # <<<<<<<<<<<<<<
  *         """
- *         Resets the PEP object.
+ *         Gets the tolerance and maximum iteration count used by the
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.reset", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -33649,33 +34066,33 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_6reset(struct PySlepcPEPObject *
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":174
- *         CHKERR( PEPReset(self.pep) )
+/* "SLEPc/SVD.pyx":302
+ *         return (toReal(rval), toInt(ival))
  * 
- *     def create(self, comm=None):             # <<<<<<<<<<<<<<
+ *     def setTolerances(self, tol=None, max_it=None):             # <<<<<<<<<<<<<<
  *         """
- *         Creates the PEP object.
+ *         Sets the tolerance and maximum iteration count used by the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_8create[] = "PEP.create(self, comm=None)\n\n        Creates the PEP object.\n\n        Parameters\n        ----------\n        comm: Comm, optional.\n            MPI communicator. If not provided, it defaults to all\n            processes.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_comm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_33setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_32setTolerances[] = "SVD.setTolerances(self, tol=None, max_it=None)\n\n        Sets the tolerance and maximum iteration count used by the\n        default SVD convergence tests.\n\n        Parameters\n        ----------\n        tol: float, optional\n             The convergence tolerance.\n        max_it: int, optional\n             The maximum number of iterations\n\n        Notes\n        -----\n        Use `DECIDE` for `max_it` to assign a  [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_33setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_tol = 0;
+  PyObject *__pyx_v_max_it = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("create (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setTolerances (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_tol,&__pyx_n_s_max_it,0};
+    PyObject* values[2] = {0,0};
     values[0] = ((PyObject *)Py_None);
+    values[1] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -33684,322 +34101,249 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_9create(PyObject *__pyx_v_self,
       switch (pos_args) {
         case  0:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_tol);
           if (value) { values[0] = value; kw_args--; }
         }
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_max_it);
+          if (value) { values[1] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTolerances") < 0)) __PYX_ERR(14, 302, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_comm = values[0];
+    __pyx_v_tol = values[0];
+    __pyx_v_max_it = values[1];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setTolerances", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(14, 302, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_8create(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_comm);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_32setTolerances(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_tol, __pyx_v_max_it);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_8create(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_comm) {
-  MPI_Comm __pyx_v_ccomm;
-  PEP __pyx_v_newpep;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_32setTolerances(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_tol, PyObject *__pyx_v_max_it) {
+  PetscReal __pyx_v_rval;
+  PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  MPI_Comm __pyx_t_1;
+  int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("create", 0);
-
-  /* "SLEPc/PEP.pyx":184
- *             processes.
- *         """
- *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())             # <<<<<<<<<<<<<<
- *         cdef SlepcPEP newpep = NULL
- *         CHKERR( PEPCreate(ccomm, &newpep) )
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_def_Comm(__pyx_v_comm, __pyx_f_8slepc4py_5SLEPc_SLEPC_COMM_DEFAULT()); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ccomm = __pyx_t_1;
+  PetscReal __pyx_t_3;
+  PetscInt __pyx_t_4;
+  int __pyx_t_5;
+  __Pyx_RefNannySetupContext("setTolerances", 0);
 
-  /* "SLEPc/PEP.pyx":185
+  /* "SLEPc/SVD.pyx":319
+ *         which is dependent on the solution method.
  *         """
- *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
- *         cdef SlepcPEP newpep = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( PEPCreate(ccomm, &newpep) )
- *         SlepcCLEAR(self.obj); self.pep = newpep
- */
-  __pyx_v_newpep = NULL;
-
-  /* "SLEPc/PEP.pyx":186
- *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
- *         cdef SlepcPEP newpep = NULL
- *         CHKERR( PEPCreate(ccomm, &newpep) )             # <<<<<<<<<<<<<<
- *         SlepcCLEAR(self.obj); self.pep = newpep
- *         return self
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPCreate(__pyx_v_ccomm, (&__pyx_v_newpep))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/PEP.pyx":187
- *         cdef SlepcPEP newpep = NULL
- *         CHKERR( PEPCreate(ccomm, &newpep) )
- *         SlepcCLEAR(self.obj); self.pep = newpep             # <<<<<<<<<<<<<<
- *         return self
- * 
- */
-  __pyx_f_8slepc4py_5SLEPc_SlepcCLEAR(__pyx_v_self->__pyx_base.obj);
-  __pyx_v_self->pep = __pyx_v_newpep;
-
-  /* "SLEPc/PEP.pyx":188
- *         CHKERR( PEPCreate(ccomm, &newpep) )
- *         SlepcCLEAR(self.obj); self.pep = newpep
- *         return self             # <<<<<<<<<<<<<<
- * 
- *     def setType(self, pep_type):
+ *         cdef PetscReal rval = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         cdef PetscInt  ival = PETSC_DEFAULT
+ *         if tol    is not None: rval = asReal(tol)
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_r = ((PyObject *)__pyx_v_self);
-  goto __pyx_L0;
+  __pyx_v_rval = PETSC_DEFAULT;
 
-  /* "SLEPc/PEP.pyx":174
- *         CHKERR( PEPReset(self.pep) )
- * 
- *     def create(self, comm=None):             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":320
  *         """
- *         Creates the PEP object.
+ *         cdef PetscReal rval = PETSC_DEFAULT
+ *         cdef PetscInt  ival = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         if tol    is not None: rval = asReal(tol)
+ *         if max_it is not None: ival = asInt(max_it)
  */
+  __pyx_v_ival = PETSC_DEFAULT;
 
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "SLEPc/PEP.pyx":190
- *         return self
- * 
- *     def setType(self, pep_type):             # <<<<<<<<<<<<<<
- *         """
- *         Selects the particular solver to be used in the PEP object.
+  /* "SLEPc/SVD.pyx":321
+ *         cdef PetscReal rval = PETSC_DEFAULT
+ *         cdef PetscInt  ival = PETSC_DEFAULT
+ *         if tol    is not None: rval = asReal(tol)             # <<<<<<<<<<<<<<
+ *         if max_it is not None: ival = asInt(max_it)
+ *         CHKERR( SVDSetTolerances(self.svd, rval, ival) )
  */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_10setType[] = "PEP.setType(self, pep_type)\n\n        Selects the particular solver to be used in the PEP object.\n\n        Parameters\n        ----------\n        pep_type: `PEP.Type` enumerate\n            The solver to be used.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_pep_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setType (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pep_type,0};
-    PyObject* values[1] = {0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_pep_type)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-    }
-    __pyx_v_pep_type = values[0];
+  __pyx_t_1 = (__pyx_v_tol != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) __PYX_ERR(14, 321, __pyx_L1_error)
+    __pyx_v_rval = __pyx_t_3;
   }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_10setType(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_pep_type);
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_10setType(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_pep_type) {
-  const char* __pyx_v_cval;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setType", 0);
-  __Pyx_INCREF(__pyx_v_pep_type);
-
-  /* "SLEPc/PEP.pyx":199
- *             The solver to be used.
- *         """
- *         cdef SlepcPEPType cval = NULL             # <<<<<<<<<<<<<<
- *         pep_type = str2bytes(pep_type, &cval)
- *         CHKERR( PEPSetType(self.pep, cval) )
- */
-  __pyx_v_cval = NULL;
 
-  /* "SLEPc/PEP.pyx":200
- *         """
- *         cdef SlepcPEPType cval = NULL
- *         pep_type = str2bytes(pep_type, &cval)             # <<<<<<<<<<<<<<
- *         CHKERR( PEPSetType(self.pep, cval) )
+  /* "SLEPc/SVD.pyx":322
+ *         cdef PetscInt  ival = PETSC_DEFAULT
+ *         if tol    is not None: rval = asReal(tol)
+ *         if max_it is not None: ival = asInt(max_it)             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDSetTolerances(self.svd, rval, ival) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_pep_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_pep_type, __pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_2 = (__pyx_v_max_it != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_max_it); if (unlikely(__pyx_t_4 == -1L && PyErr_Occurred())) __PYX_ERR(14, 322, __pyx_L1_error)
+    __pyx_v_ival = __pyx_t_4;
+  }
 
-  /* "SLEPc/PEP.pyx":201
- *         cdef SlepcPEPType cval = NULL
- *         pep_type = str2bytes(pep_type, &cval)
- *         CHKERR( PEPSetType(self.pep, cval) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":323
+ *         if tol    is not None: rval = asReal(tol)
+ *         if max_it is not None: ival = asInt(max_it)
+ *         CHKERR( SVDSetTolerances(self.svd, rval, ival) )             # <<<<<<<<<<<<<<
  * 
- *     def getType(self):
+ *     def getDimensions(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetType(__pyx_v_self->pep, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDSetTolerances(__pyx_v_self->svd, __pyx_v_rval, __pyx_v_ival)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(14, 323, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":190
- *         return self
+  /* "SLEPc/SVD.pyx":302
+ *         return (toReal(rval), toInt(ival))
  * 
- *     def setType(self, pep_type):             # <<<<<<<<<<<<<<
+ *     def setTolerances(self, tol=None, max_it=None):             # <<<<<<<<<<<<<<
  *         """
- *         Selects the particular solver to be used in the PEP object.
+ *         Sets the tolerance and maximum iteration count used by the
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_pep_type);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":203
- *         CHKERR( PEPSetType(self.pep, cval) )
+/* "SLEPc/SVD.pyx":325
+ *         CHKERR( SVDSetTolerances(self.svd, rval, ival) )
  * 
- *     def getType(self):             # <<<<<<<<<<<<<<
+ *     def getDimensions(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the PEP type of this object.
+ *         Gets the number of singular values to compute and the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_12getType[] = "PEP.getType(self)\n\n        Gets the PEP type of this object.\n\n        Returns\n        -------\n        type: `PEP.Type` enumerate\n            The solver currently being used.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_35getDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_34getDimensions[] = "SVD.getDimensions(self)\n\n        Gets the number of singular values to compute and the\n        dimension of the subspace.\n\n        Returns\n        -------\n        nsv: int\n             Number of singular values to compute.\n        ncv: int\n             Maximum dimension of the subspace to be used by the\n             solver.\n        mpd: int\n             Maximum dimension allowed for the projected problem.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_35getDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getType (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getDimensions (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getType", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_12getType(((struct PySlepcPEPObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getDimensions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDimensions", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_34getDimensions(((struct PySlepcSVDObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_12getType(struct PySlepcPEPObject *__pyx_v_self) {
-  const char* __pyx_v_pep_type;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_34getDimensions(struct PySlepcSVDObject *__pyx_v_self) {
+  PetscInt __pyx_v_ival1;
+  PetscInt __pyx_v_ival2;
+  PetscInt __pyx_v_ival3;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getType", 0);
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("getDimensions", 0);
 
-  /* "SLEPc/PEP.pyx":212
- *             The solver currently being used.
+  /* "SLEPc/SVD.pyx":340
+ *              Maximum dimension allowed for the projected problem.
  *         """
- *         cdef SlepcPEPType pep_type = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( PEPGetType(self.pep, &pep_type) )
- *         return bytes2str(pep_type)
+ *         cdef PetscInt ival1 = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival2 = 0
+ *         cdef PetscInt ival3 = 0
  */
-  __pyx_v_pep_type = NULL;
+  __pyx_v_ival1 = 0;
 
-  /* "SLEPc/PEP.pyx":213
+  /* "SLEPc/SVD.pyx":341
  *         """
- *         cdef SlepcPEPType pep_type = NULL
- *         CHKERR( PEPGetType(self.pep, &pep_type) )             # <<<<<<<<<<<<<<
- *         return bytes2str(pep_type)
+ *         cdef PetscInt ival1 = 0
+ *         cdef PetscInt ival2 = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival3 = 0
+ *         CHKERR( SVDGetDimensions(self.svd, &ival1, &ival2, &ival3) )
+ */
+  __pyx_v_ival2 = 0;
+
+  /* "SLEPc/SVD.pyx":342
+ *         cdef PetscInt ival1 = 0
+ *         cdef PetscInt ival2 = 0
+ *         cdef PetscInt ival3 = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDGetDimensions(self.svd, &ival1, &ival2, &ival3) )
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+ */
+  __pyx_v_ival3 = 0;
+
+  /* "SLEPc/SVD.pyx":343
+ *         cdef PetscInt ival2 = 0
+ *         cdef PetscInt ival3 = 0
+ *         CHKERR( SVDGetDimensions(self.svd, &ival1, &ival2, &ival3) )             # <<<<<<<<<<<<<<
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3))
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetType(__pyx_v_self->pep, (&__pyx_v_pep_type))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetDimensions(__pyx_v_self->svd, (&__pyx_v_ival1), (&__pyx_v_ival2), (&__pyx_v_ival3))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(14, 343, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":214
- *         cdef SlepcPEPType pep_type = NULL
- *         CHKERR( PEPGetType(self.pep, &pep_type) )
- *         return bytes2str(pep_type)             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":344
+ *         cdef PetscInt ival3 = 0
+ *         CHKERR( SVDGetDimensions(self.svd, &ival1, &ival2, &ival3) )
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3))             # <<<<<<<<<<<<<<
  * 
- *     def getOptionsPrefix(self):
+ *     def setDimensions(self, nsv=None, ncv=None, mpd=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_pep_type); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival1); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 344, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) __PYX_ERR(14, 344, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival3); if (unlikely(!__pyx_t_4)) __PYX_ERR(14, 344, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(14, 344, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_4);
+  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
   __pyx_t_2 = 0;
+  __pyx_t_3 = 0;
+  __pyx_t_4 = 0;
+  __pyx_r = __pyx_t_5;
+  __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/PEP.pyx":203
- *         CHKERR( PEPSetType(self.pep, cval) )
+  /* "SLEPc/SVD.pyx":325
+ *         CHKERR( SVDSetTolerances(self.svd, rval, ival) )
  * 
- *     def getType(self):             # <<<<<<<<<<<<<<
+ *     def getDimensions(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the PEP type of this object.
+ *         Gets the number of singular values to compute and the
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -34007,86 +34351,192 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_12getType(struct PySlepcPEPObjec
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":216
- *         return bytes2str(pep_type)
+/* "SLEPc/SVD.pyx":346
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3))
  * 
- *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
+ *     def setDimensions(self, nsv=None, ncv=None, mpd=None):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the prefix used for searching for all PEP options in the
+ *         Sets the number of singular values to compute and the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_14getOptionsPrefix[] = "PEP.getOptionsPrefix(self)\n\n        Gets the prefix used for searching for all PEP options in the\n        database.\n\n        Returns\n        -------\n        prefix: string\n            The prefix string set for this PEP object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_37setDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_36setDimensions[] = "SVD.setDimensions(self, nsv=None, ncv=None, mpd=None)\n\n        Sets the number of singular values to compute and the\n        dimension of the subspace.\n\n        Parameters\n        ----------\n        nsv: int, optional\n             Number of singular values to compute.\n        ncv: int, optional\n             Maximum dimension of the subspace to be used by the\n             solver.\n        mpd: int, optional\n      [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_37setDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_nsv = 0;
+  PyObject *__pyx_v_ncv = 0;
+  PyObject *__pyx_v_mpd = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getOptionsPrefix (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getOptionsPrefix", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getOptionsPrefix", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_14getOptionsPrefix(((struct PySlepcPEPObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("setDimensions (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nsv,&__pyx_n_s_ncv,&__pyx_n_s_mpd,0};
+    PyObject* values[3] = {0,0,0};
+    values[0] = ((PyObject *)Py_None);
+    values[1] = ((PyObject *)Py_None);
+    values[2] = ((PyObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nsv);
+          if (value) { values[0] = value; kw_args--; }
+        }
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ncv);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mpd);
+          if (value) { values[2] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDimensions") < 0)) __PYX_ERR(14, 346, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_nsv = values[0];
+    __pyx_v_ncv = values[1];
+    __pyx_v_mpd = values[2];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setDimensions", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(14, 346, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_36setDimensions(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_nsv, __pyx_v_ncv, __pyx_v_mpd);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_14getOptionsPrefix(struct PySlepcPEPObject *__pyx_v_self) {
-  const char *__pyx_v_prefix;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_36setDimensions(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_nsv, PyObject *__pyx_v_ncv, PyObject *__pyx_v_mpd) {
+  PetscInt __pyx_v_ival1;
+  PetscInt __pyx_v_ival2;
+  PetscInt __pyx_v_ival3;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getOptionsPrefix", 0);
+  int __pyx_t_2;
+  PetscInt __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("setDimensions", 0);
 
-  /* "SLEPc/PEP.pyx":226
- *             The prefix string set for this PEP object.
+  /* "SLEPc/SVD.pyx":379
+ *         smaller value should be used.
  *         """
- *         cdef const_char *prefix = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( PEPGetOptionsPrefix(self.pep, &prefix) )
- *         return bytes2str(prefix)
+ *         cdef PetscInt ival1 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival2 = PETSC_DEFAULT
+ *         cdef PetscInt ival3 = PETSC_DEFAULT
  */
-  __pyx_v_prefix = NULL;
+  __pyx_v_ival1 = PETSC_DEFAULT;
 
-  /* "SLEPc/PEP.pyx":227
+  /* "SLEPc/SVD.pyx":380
  *         """
- *         cdef const_char *prefix = NULL
- *         CHKERR( PEPGetOptionsPrefix(self.pep, &prefix) )             # <<<<<<<<<<<<<<
- *         return bytes2str(prefix)
+ *         cdef PetscInt ival1 = PETSC_DEFAULT
+ *         cdef PetscInt ival2 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival3 = PETSC_DEFAULT
+ *         if nsv is not None: ival1 = asInt(nsv)
+ */
+  __pyx_v_ival2 = PETSC_DEFAULT;
+
+  /* "SLEPc/SVD.pyx":381
+ *         cdef PetscInt ival1 = PETSC_DEFAULT
+ *         cdef PetscInt ival2 = PETSC_DEFAULT
+ *         cdef PetscInt ival3 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         if nsv is not None: ival1 = asInt(nsv)
+ *         if ncv is not None: ival2 = asInt(ncv)
+ */
+  __pyx_v_ival3 = PETSC_DEFAULT;
+
+  /* "SLEPc/SVD.pyx":382
+ *         cdef PetscInt ival2 = PETSC_DEFAULT
+ *         cdef PetscInt ival3 = PETSC_DEFAULT
+ *         if nsv is not None: ival1 = asInt(nsv)             # <<<<<<<<<<<<<<
+ *         if ncv is not None: ival2 = asInt(ncv)
+ *         if mpd is not None: ival3 = asInt(mpd)
+ */
+  __pyx_t_1 = (__pyx_v_nsv != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_nsv); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(14, 382, __pyx_L1_error)
+    __pyx_v_ival1 = __pyx_t_3;
+  }
+
+  /* "SLEPc/SVD.pyx":383
+ *         cdef PetscInt ival3 = PETSC_DEFAULT
+ *         if nsv is not None: ival1 = asInt(nsv)
+ *         if ncv is not None: ival2 = asInt(ncv)             # <<<<<<<<<<<<<<
+ *         if mpd is not None: ival3 = asInt(mpd)
+ *         CHKERR( SVDSetDimensions(self.svd, ival1, ival2, ival3) )
+ */
+  __pyx_t_2 = (__pyx_v_ncv != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_ncv); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(14, 383, __pyx_L1_error)
+    __pyx_v_ival2 = __pyx_t_3;
+  }
+
+  /* "SLEPc/SVD.pyx":384
+ *         if nsv is not None: ival1 = asInt(nsv)
+ *         if ncv is not None: ival2 = asInt(ncv)
+ *         if mpd is not None: ival3 = asInt(mpd)             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDSetDimensions(self.svd, ival1, ival2, ival3) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetOptionsPrefix(__pyx_v_self->pep, (&__pyx_v_prefix))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__pyx_v_mpd != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_mpd); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(14, 384, __pyx_L1_error)
+    __pyx_v_ival3 = __pyx_t_3;
+  }
 
-  /* "SLEPc/PEP.pyx":228
- *         cdef const_char *prefix = NULL
- *         CHKERR( PEPGetOptionsPrefix(self.pep, &prefix) )
- *         return bytes2str(prefix)             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":385
+ *         if ncv is not None: ival2 = asInt(ncv)
+ *         if mpd is not None: ival3 = asInt(mpd)
+ *         CHKERR( SVDSetDimensions(self.svd, ival1, ival2, ival3) )             # <<<<<<<<<<<<<<
  * 
- *     def setOptionsPrefix(self, prefix):
+ *     def getBV(self):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_prefix); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDSetDimensions(__pyx_v_self->svd, __pyx_v_ival1, __pyx_v_ival2, __pyx_v_ival3)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(14, 385, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":216
- *         return bytes2str(pep_type)
+  /* "SLEPc/SVD.pyx":346
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3))
  * 
- *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
+ *     def setDimensions(self, nsv=None, ncv=None, mpd=None):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the prefix used for searching for all PEP options in the
+ *         Sets the number of singular values to compute and the
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -34094,157 +34544,158 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_14getOptionsPrefix(struct PySlep
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":230
- *         return bytes2str(prefix)
+/* "SLEPc/SVD.pyx":387
+ *         CHKERR( SVDSetDimensions(self.svd, ival1, ival2, ival3) )
  * 
- *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *     def getBV(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the prefix used for searching for all PEP options in the
+ *         Obtain the basis vectors objects associated to the SVD object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_17setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_16setOptionsPrefix[] = "PEP.setOptionsPrefix(self, prefix)\n\n        Sets the prefix used for searching for all PEP options in the\n        database.\n\n        Parameters\n        ----------\n        prefix: string\n            The prefix string to prepend to all PEP option requests.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_17setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_prefix = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_39getBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_38getBV[] = "SVD.getBV(self)\n\n        Obtain the basis vectors objects associated to the SVD object.\n\n        Returns\n        -------\n        V: BV\n            The basis vectors context for right singular vectors.\n        U: BV\n            The basis vectors context for left singular vectors.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_39getBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setOptionsPrefix (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_prefix,0};
-    PyObject* values[1] = {0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_prefix)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-    }
-    __pyx_v_prefix = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_16setOptionsPrefix(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_prefix);
+  __Pyx_RefNannySetupContext("getBV (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getBV", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getBV", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_38getBV(((struct PySlepcSVDObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_16setOptionsPrefix(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
-  const char *__pyx_v_cval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_38getBV(struct PySlepcSVDObject *__pyx_v_self) {
+  struct PySlepcBVObject *__pyx_v_V = 0;
+  struct PySlepcBVObject *__pyx_v_U = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setOptionsPrefix", 0);
-  __Pyx_INCREF(__pyx_v_prefix);
+  __Pyx_RefNannySetupContext("getBV", 0);
 
-  /* "SLEPc/PEP.pyx":240
- *             The prefix string to prepend to all PEP option requests.
+  /* "SLEPc/SVD.pyx":398
+ *             The basis vectors context for left singular vectors.
  *         """
- *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
- *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( PEPSetOptionsPrefix(self.pep, cval) )
+ *         cdef BV V = BV()             # <<<<<<<<<<<<<<
+ *         cdef BV U = BV()
+ *         CHKERR( SVDGetBV(self.svd, &V.bv, &U.bv) )
  */
-  __pyx_v_cval = NULL;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_BV), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 398, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_V = ((struct PySlepcBVObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/PEP.pyx":241
+  /* "SLEPc/SVD.pyx":399
  *         """
- *         cdef const_char *cval = NULL
- *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
- *         CHKERR( PEPSetOptionsPrefix(self.pep, cval) )
- * 
+ *         cdef BV V = BV()
+ *         cdef BV U = BV()             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDGetBV(self.svd, &V.bv, &U.bv) )
+ *         PetscINCREF(V.obj)
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_BV), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 399, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
+  __pyx_v_U = ((struct PySlepcBVObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "SLEPc/PEP.pyx":242
- *         cdef const_char *cval = NULL
- *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( PEPSetOptionsPrefix(self.pep, cval) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":400
+ *         cdef BV V = BV()
+ *         cdef BV U = BV()
+ *         CHKERR( SVDGetBV(self.svd, &V.bv, &U.bv) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(V.obj)
+ *         PetscINCREF(U.obj)
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetBV(__pyx_v_self->svd, (&__pyx_v_V->bv), (&__pyx_v_U->bv))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(14, 400, __pyx_L1_error)
+
+  /* "SLEPc/SVD.pyx":401
+ *         cdef BV U = BV()
+ *         CHKERR( SVDGetBV(self.svd, &V.bv, &U.bv) )
+ *         PetscINCREF(V.obj)             # <<<<<<<<<<<<<<
+ *         PetscINCREF(U.obj)
+ *         return (V,U)
+ */
+  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_V->__pyx_base.obj);
+
+  /* "SLEPc/SVD.pyx":402
+ *         CHKERR( SVDGetBV(self.svd, &V.bv, &U.bv) )
+ *         PetscINCREF(V.obj)
+ *         PetscINCREF(U.obj)             # <<<<<<<<<<<<<<
+ *         return (V,U)
  * 
- *     def appendOptionsPrefix(self, prefix):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetOptionsPrefix(__pyx_v_self->pep, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_U->__pyx_base.obj);
 
-  /* "SLEPc/PEP.pyx":230
- *         return bytes2str(prefix)
+  /* "SLEPc/SVD.pyx":403
+ *         PetscINCREF(V.obj)
+ *         PetscINCREF(U.obj)
+ *         return (V,U)             # <<<<<<<<<<<<<<
  * 
- *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *     def setBV(self, BV V not None,BV U=None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 403, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_INCREF(((PyObject *)__pyx_v_V));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_V));
+  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_V));
+  __Pyx_INCREF(((PyObject *)__pyx_v_U));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_U));
+  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_U));
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* "SLEPc/SVD.pyx":387
+ *         CHKERR( SVDSetDimensions(self.svd, ival1, ival2, ival3) )
+ * 
+ *     def getBV(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the prefix used for searching for all PEP options in the
+ *         Obtain the basis vectors objects associated to the SVD object.
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_prefix);
+  __Pyx_XDECREF((PyObject *)__pyx_v_V);
+  __Pyx_XDECREF((PyObject *)__pyx_v_U);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":244
- *         CHKERR( PEPSetOptionsPrefix(self.pep, cval) )
+/* "SLEPc/SVD.pyx":405
+ *         return (V,U)
  * 
- *     def appendOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *     def setBV(self, BV V not None,BV U=None):             # <<<<<<<<<<<<<<
  *         """
- *         Appends to the prefix used for searching for all PEP options
+ *         Associates basis vectors objects to the SVD solver.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_19appendOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_18appendOptionsPrefix[] = "PEP.appendOptionsPrefix(self, prefix)\n\n        Appends to the prefix used for searching for all PEP options\n        in the database.\n\n        Parameters\n        ----------\n        prefix: string\n            The prefix string to prepend to all PEP option requests.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_19appendOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_prefix = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_41setBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_40setBV[] = "SVD.setBV(self, BV V, BV U=None)\n\n        Associates basis vectors objects to the SVD solver.\n\n        Parameters\n        ----------\n        V: BV\n            The basis vectors context for right singular vectors.\n        U: BV\n            The basis vectors context for left singular vectors.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_41setBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PySlepcBVObject *__pyx_v_V = 0;
+  struct PySlepcBVObject *__pyx_v_U = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("appendOptionsPrefix (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setBV (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_prefix,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_V,&__pyx_n_s_U,0};
+    PyObject* values[2] = {0,0};
+    values[1] = (PyObject *)((struct PySlepcBVObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -34252,241 +34703,308 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_19appendOptionsPrefix(PyObject *
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_prefix)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_U);
+          if (value) { values[1] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "appendOptionsPrefix") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setBV") < 0)) __PYX_ERR(14, 405, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
     } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
     }
-    __pyx_v_prefix = values[0];
+    __pyx_v_V = ((struct PySlepcBVObject *)values[0]);
+    __pyx_v_U = ((struct PySlepcBVObject *)values[1]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("appendOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setBV", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(14, 405, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.appendOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_18appendOptionsPrefix(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_prefix);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_V), __pyx_ptype_8slepc4py_5SLEPc_BV, 0, "V", 0))) __PYX_ERR(14, 405, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_U), __pyx_ptype_8slepc4py_5SLEPc_BV, 1, "U", 0))) __PYX_ERR(14, 405, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_40setBV(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_V, __pyx_v_U);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_18appendOptionsPrefix(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
-  const char *__pyx_v_cval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_40setBV(struct PySlepcSVDObject *__pyx_v_self, struct PySlepcBVObject *__pyx_v_V, struct PySlepcBVObject *__pyx_v_U) {
+  BV __pyx_v_VBV;
+  BV __pyx_v_UBV;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  BV __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("appendOptionsPrefix", 0);
-  __Pyx_INCREF(__pyx_v_prefix);
+  int __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("setBV", 0);
 
-  /* "SLEPc/PEP.pyx":254
- *             The prefix string to prepend to all PEP option requests.
+  /* "SLEPc/SVD.pyx":416
+ *             The basis vectors context for left singular vectors.
  *         """
- *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
- *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( PEPAppendOptionsPrefix(self.pep, cval) )
+ *         cdef SlepcBV VBV = V.bv             # <<<<<<<<<<<<<<
+ *         cdef SlepcBV UBV = NULL
+ *         if U is not None: UBV = U.bv
  */
-  __pyx_v_cval = NULL;
+  __pyx_t_1 = __pyx_v_V->bv;
+  __pyx_v_VBV = __pyx_t_1;
 
-  /* "SLEPc/PEP.pyx":255
+  /* "SLEPc/SVD.pyx":417
  *         """
- *         cdef const_char *cval = NULL
- *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
- *         CHKERR( PEPAppendOptionsPrefix(self.pep, cval) )
+ *         cdef SlepcBV VBV = V.bv
+ *         cdef SlepcBV UBV = NULL             # <<<<<<<<<<<<<<
+ *         if U is not None: UBV = U.bv
+ *         CHKERR( SVDSetBV(self.svd, VBV, UBV) )
+ */
+  __pyx_v_UBV = NULL;
+
+  /* "SLEPc/SVD.pyx":418
+ *         cdef SlepcBV VBV = V.bv
+ *         cdef SlepcBV UBV = NULL
+ *         if U is not None: UBV = U.bv             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDSetBV(self.svd, VBV, UBV) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_2 = (((PyObject *)__pyx_v_U) != Py_None);
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
+    __pyx_t_1 = __pyx_v_U->bv;
+    __pyx_v_UBV = __pyx_t_1;
+  }
 
-  /* "SLEPc/PEP.pyx":256
- *         cdef const_char *cval = NULL
- *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( PEPAppendOptionsPrefix(self.pep, cval) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":419
+ *         cdef SlepcBV UBV = NULL
+ *         if U is not None: UBV = U.bv
+ *         CHKERR( SVDSetBV(self.svd, VBV, UBV) )             # <<<<<<<<<<<<<<
  * 
- *     def setFromOptions(self):
+ *     def getOperator(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPAppendOptionsPrefix(__pyx_v_self->pep, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDSetBV(__pyx_v_self->svd, __pyx_v_VBV, __pyx_v_UBV)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(14, 419, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":244
- *         CHKERR( PEPSetOptionsPrefix(self.pep, cval) )
+  /* "SLEPc/SVD.pyx":405
+ *         return (V,U)
  * 
- *     def appendOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *     def setBV(self, BV V not None,BV U=None):             # <<<<<<<<<<<<<<
  *         """
- *         Appends to the prefix used for searching for all PEP options
+ *         Associates basis vectors objects to the SVD solver.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.appendOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_prefix);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":258
- *         CHKERR( PEPAppendOptionsPrefix(self.pep, cval) )
+/* "SLEPc/SVD.pyx":421
+ *         CHKERR( SVDSetBV(self.svd, VBV, UBV) )
  * 
- *     def setFromOptions(self):             # <<<<<<<<<<<<<<
+ *     def getOperator(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets PEP options from the options database. This routine must
+ *         Gets the matrix associated with the singular value problem.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_21setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_20setFromOptions[] = "PEP.setFromOptions(self)\n\n        Sets PEP options from the options database. This routine must\n        be called before `setUp()` if the user is to be allowed to set\n        the solver type.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_21setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_43getOperator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_42getOperator[] = "SVD.getOperator(self)\n\n        Gets the matrix associated with the singular value problem.\n\n        Returns\n        -------\n        A: Mat\n           The matrix associated with the singular value problem.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_43getOperator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setFromOptions (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getOperator (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("setFromOptions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setFromOptions", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_20setFromOptions(((struct PySlepcPEPObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getOperator", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getOperator", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_42getOperator(((struct PySlepcSVDObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_20setFromOptions(struct PySlepcPEPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_42getOperator(struct PySlepcSVDObject *__pyx_v_self) {
+  struct PyPetscMatObject *__pyx_v_A = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setFromOptions", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getOperator", 0);
 
-  /* "SLEPc/PEP.pyx":264
- *         the solver type.
+  /* "SLEPc/SVD.pyx":430
+ *            The matrix associated with the singular value problem.
  *         """
- *         CHKERR( PEPSetFromOptions(self.pep) )             # <<<<<<<<<<<<<<
+ *         cdef Mat A = Mat()             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDGetOperator(self.svd, &A.mat) )
+ *         PetscINCREF(A.obj)
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 430, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_A = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "SLEPc/SVD.pyx":431
+ *         """
+ *         cdef Mat A = Mat()
+ *         CHKERR( SVDGetOperator(self.svd, &A.mat) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(A.obj)
+ *         return A
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetOperator(__pyx_v_self->svd, (&__pyx_v_A->mat))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(14, 431, __pyx_L1_error)
+
+  /* "SLEPc/SVD.pyx":432
+ *         cdef Mat A = Mat()
+ *         CHKERR( SVDGetOperator(self.svd, &A.mat) )
+ *         PetscINCREF(A.obj)             # <<<<<<<<<<<<<<
+ *         return A
  * 
- *     def getBasis(self):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetFromOptions(__pyx_v_self->pep)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_A->__pyx_base.obj);
 
-  /* "SLEPc/PEP.pyx":258
- *         CHKERR( PEPAppendOptionsPrefix(self.pep, cval) )
+  /* "SLEPc/SVD.pyx":433
+ *         CHKERR( SVDGetOperator(self.svd, &A.mat) )
+ *         PetscINCREF(A.obj)
+ *         return A             # <<<<<<<<<<<<<<
  * 
- *     def setFromOptions(self):             # <<<<<<<<<<<<<<
+ *     def setOperator(self, Mat A not None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_A));
+  __pyx_r = ((PyObject *)__pyx_v_A);
+  goto __pyx_L0;
+
+  /* "SLEPc/SVD.pyx":421
+ *         CHKERR( SVDSetBV(self.svd, VBV, UBV) )
+ * 
+ *     def getOperator(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets PEP options from the options database. This routine must
+ *         Gets the matrix associated with the singular value problem.
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setFromOptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getOperator", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_A);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":266
- *         CHKERR( PEPSetFromOptions(self.pep) )
+/* "SLEPc/SVD.pyx":435
+ *         return A
  * 
- *     def getBasis(self):             # <<<<<<<<<<<<<<
+ *     def setOperator(self, Mat A not None):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the type of polynomial basis used to
+ *         Sets the matrix associated with the singular value problem.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_23getBasis(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_22getBasis[] = "PEP.getBasis(self)\n\n        Gets the type of polynomial basis used to \n        describe the polynomial eigenvalue problem.\n\n        Returns\n        -------\n        basis: `PEP.Basis` enumerate\n            the basis that was previously set.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_23getBasis(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_45setOperator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_44setOperator[] = "SVD.setOperator(self, Mat A)\n\n        Sets the matrix associated with the singular value problem.\n\n        Parameters\n        ----------\n        A: Mat\n           The matrix associated with the singular value problem.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_45setOperator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscMatObject *__pyx_v_A = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getBasis (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getBasis", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getBasis", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_22getBasis(((struct PySlepcPEPObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("setOperator (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_A,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOperator") < 0)) __PYX_ERR(14, 435, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_A = ((struct PyPetscMatObject *)values[0]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setOperator", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(14, 435, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setOperator", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_A), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "A", 0))) __PYX_ERR(14, 435, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_44setOperator(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_A);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_22getBasis(struct PySlepcPEPObject *__pyx_v_self) {
-  PEPBasis __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_44setOperator(struct PySlepcSVDObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getBasis", 0);
-
-  /* "SLEPc/PEP.pyx":276
- *             the basis that was previously set.
- *         """
- *         cdef SlepcPEPBasis val = PEP_BASIS_MONOMIAL             # <<<<<<<<<<<<<<
- *         CHKERR( PEPGetBasis(self.pep, &val) )
- *         return val
- */
-  __pyx_v_val = PEP_BASIS_MONOMIAL;
+  __Pyx_RefNannySetupContext("setOperator", 0);
 
-  /* "SLEPc/PEP.pyx":277
+  /* "SLEPc/SVD.pyx":444
+ *            The matrix associated with the singular value problem.
  *         """
- *         cdef SlepcPEPBasis val = PEP_BASIS_MONOMIAL
- *         CHKERR( PEPGetBasis(self.pep, &val) )             # <<<<<<<<<<<<<<
- *         return val
- * 
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetBasis(__pyx_v_self->pep, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/PEP.pyx":278
- *         cdef SlepcPEPBasis val = PEP_BASIS_MONOMIAL
- *         CHKERR( PEPGetBasis(self.pep, &val) )
- *         return val             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDSetOperator(self.svd, A.mat) )             # <<<<<<<<<<<<<<
  * 
- *     def setBasis(self, basis):
+ *     #
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDSetOperator(__pyx_v_self->svd, __pyx_v_A->mat)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(14, 444, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":266
- *         CHKERR( PEPSetFromOptions(self.pep) )
+  /* "SLEPc/SVD.pyx":435
+ *         return A
  * 
- *     def getBasis(self):             # <<<<<<<<<<<<<<
+ *     def setOperator(self, Mat A not None):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the type of polynomial basis used to
+ *         Sets the matrix associated with the singular value problem.
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getBasis", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setOperator", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -34494,27 +35012,24 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_22getBasis(struct PySlepcPEPObje
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":280
- *         return val
+/* "SLEPc/SVD.pyx":448
+ *     #
  * 
- *     def setBasis(self, basis):             # <<<<<<<<<<<<<<
+ *     def setInitialSpace(self, space):             # <<<<<<<<<<<<<<
  *         """
- *         Specifies the type of polynomial basis used to
+ *         Sets the initial space from which the SVD solver starts to
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_25setBasis(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_24setBasis[] = "PEP.setBasis(self, basis)\n\n        Specifies the type of polynomial basis used to \n        describe the polynomial eigenvalue problem.\n\n        Parameters\n        ----------\n        basis: `PEP.Basis` enumerate\n            the basis to be set.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_25setBasis(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_basis = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_47setInitialSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_46setInitialSpace[] = "SVD.setInitialSpace(self, space)\n\n        Sets the initial space from which the SVD solver starts to\n        iterate.\n\n        Parameters\n        ----------\n        space: an sequence of Vec\n           The initial space.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_47setInitialSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_space = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setBasis (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setInitialSpace (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_basis,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_space,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -34527,164 +35042,265 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_25setBasis(PyObject *__pyx_v_sel
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_basis)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_space)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setBasis") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInitialSpace") < 0)) __PYX_ERR(14, 448, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_basis = values[0];
+    __pyx_v_space = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setBasis", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setInitialSpace", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(14, 448, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setBasis", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setInitialSpace", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_24setBasis(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_basis);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_46setInitialSpace(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_space);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_24setBasis(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_basis) {
-  PEPBasis __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_46setInitialSpace(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_space) {
+  Vec *__pyx_v_vs;
+  Py_ssize_t __pyx_v_i;
+  Py_ssize_t __pyx_v_ns;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PEPBasis __pyx_t_1;
+  int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setBasis", 0);
+  PyObject *__pyx_t_3 = NULL;
+  Py_ssize_t __pyx_t_4;
+  Py_ssize_t __pyx_t_5;
+  Vec __pyx_t_6;
+  int __pyx_t_7;
+  __Pyx_RefNannySetupContext("setInitialSpace", 0);
+  __Pyx_INCREF(__pyx_v_space);
 
-  /* "SLEPc/PEP.pyx":290
- *             the basis to be set.
+  /* "SLEPc/SVD.pyx":458
+ *            The initial space.
  *         """
- *         cdef SlepcPEPBasis val = basis             # <<<<<<<<<<<<<<
- *         CHKERR( PEPSetBasis(self.pep, val) )
- * 
+ *         if isinstance(space, Vec): space = [space]             # <<<<<<<<<<<<<<
+ *         cdef PetscVec *vs = NULL
+ *         cdef Py_ssize_t i = 0, ns = len(space)
  */
-  __pyx_t_1 = ((PEPBasis)PyInt_AsLong(__pyx_v_basis)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_val = __pyx_t_1;
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_space, __pyx_ptype_8petsc4py_5PETSc_Vec); 
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(14, 458, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_v_space);
+    __Pyx_GIVEREF(__pyx_v_space);
+    PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_space);
+    __Pyx_DECREF_SET(__pyx_v_space, __pyx_t_3);
+    __pyx_t_3 = 0;
+  }
 
-  /* "SLEPc/PEP.pyx":291
+  /* "SLEPc/SVD.pyx":459
  *         """
- *         cdef SlepcPEPBasis val = basis
- *         CHKERR( PEPSetBasis(self.pep, val) )             # <<<<<<<<<<<<<<
+ *         if isinstance(space, Vec): space = [space]
+ *         cdef PetscVec *vs = NULL             # <<<<<<<<<<<<<<
+ *         cdef Py_ssize_t i = 0, ns = len(space)
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
+ */
+  __pyx_v_vs = NULL;
+
+  /* "SLEPc/SVD.pyx":460
+ *         if isinstance(space, Vec): space = [space]
+ *         cdef PetscVec *vs = NULL
+ *         cdef Py_ssize_t i = 0, ns = len(space)             # <<<<<<<<<<<<<<
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
+ *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
+ */
+  __pyx_v_i = 0;
+  __pyx_t_4 = PyObject_Length(__pyx_v_space); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(14, 460, __pyx_L1_error)
+  __pyx_v_ns = __pyx_t_4;
+
+  /* "SLEPc/SVD.pyx":461
+ *         cdef PetscVec *vs = NULL
+ *         cdef Py_ssize_t i = 0, ns = len(space)
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)             # <<<<<<<<<<<<<<
+ *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
+ *         CHKERR( SVDSetInitialSpace(self.svd, <PetscInt>ns, vs) )
+ */
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_allocate((((size_t)__pyx_v_ns) * (sizeof(struct PyPetscVecObject))), ((void **)(&__pyx_v_vs))); if (unlikely(!__pyx_t_3)) __PYX_ERR(14, 461, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_v_tmp = __pyx_t_3;
+  __pyx_t_3 = 0;
+
+  /* "SLEPc/SVD.pyx":462
+ *         cdef Py_ssize_t i = 0, ns = len(space)
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
+ *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDSetInitialSpace(self.svd, <PetscInt>ns, vs) )
  * 
- *     def getProblemType(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetBasis(__pyx_v_self->pep, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_v_ns;
+  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
+    __pyx_v_i = __pyx_t_5;
+    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_space, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(14, 462, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(14, 462, __pyx_L1_error)
+    __pyx_t_6 = ((struct PyPetscVecObject *)__pyx_t_3)->vec;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    (__pyx_v_vs[__pyx_v_i]) = __pyx_t_6;
+  }
 
-  /* "SLEPc/PEP.pyx":280
- *         return val
+  /* "SLEPc/SVD.pyx":463
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
+ *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
+ *         CHKERR( SVDSetInitialSpace(self.svd, <PetscInt>ns, vs) )             # <<<<<<<<<<<<<<
  * 
- *     def setBasis(self, basis):             # <<<<<<<<<<<<<<
+ *     #
+ */
+  __pyx_t_7 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDSetInitialSpace(__pyx_v_self->svd, ((PetscInt)__pyx_v_ns), __pyx_v_vs)); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(14, 463, __pyx_L1_error)
+
+  /* "SLEPc/SVD.pyx":448
+ *     #
+ * 
+ *     def setInitialSpace(self, space):             # <<<<<<<<<<<<<<
  *         """
- *         Specifies the type of polynomial basis used to
+ *         Sets the initial space from which the SVD solver starts to
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setBasis", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setInitialSpace", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_tmp);
+  __Pyx_XDECREF(__pyx_v_space);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":293
- *         CHKERR( PEPSetBasis(self.pep, val) )
+/* "SLEPc/SVD.pyx":467
+ *     #
  * 
- *     def getProblemType(self):             # <<<<<<<<<<<<<<
+ *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the problem type from the PEP object.
+ *         Clears all monitors for an SVD object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_27getProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_26getProblemType[] = "PEP.getProblemType(self)\n\n        Gets the problem type from the PEP object.\n\n        Returns\n        -------\n        problem_type: `PEP.ProblemType` enumerate\n            The problem type that was previously set.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_27getProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_49cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_48cancelMonitor[] = "SVD.cancelMonitor(self)\n\n        Clears all monitors for an SVD object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_49cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getProblemType (wrapper)", 0);
+  __Pyx_RefNannySetupContext("cancelMonitor (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getProblemType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getProblemType", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_26getProblemType(((struct PySlepcPEPObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("cancelMonitor", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "cancelMonitor", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_48cancelMonitor(((struct PySlepcSVDObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_26getProblemType(struct PySlepcPEPObject *__pyx_v_self) {
-  PEPProblemType __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_48cancelMonitor(struct PySlepcSVDObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getProblemType", 0);
+  __Pyx_RefNannySetupContext("cancelMonitor", 0);
 
-  /* "SLEPc/PEP.pyx":302
- *             The problem type that was previously set.
+  /* "SLEPc/SVD.pyx":471
+ *         Clears all monitors for an SVD object.
  *         """
- *         cdef SlepcPEPProblemType val = PEP_GENERAL             # <<<<<<<<<<<<<<
- *         CHKERR( PEPGetProblemType(self.pep, &val) )
- *         return val
+ *         CHKERR( SVDMonitorCancel(self.svd) )             # <<<<<<<<<<<<<<
+ * 
+ *     #
  */
-  __pyx_v_val = PEP_GENERAL;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDMonitorCancel(__pyx_v_self->svd)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(14, 471, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":303
+  /* "SLEPc/SVD.pyx":467
+ *     #
+ * 
+ *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
  *         """
- *         cdef SlepcPEPProblemType val = PEP_GENERAL
- *         CHKERR( PEPGetProblemType(self.pep, &val) )             # <<<<<<<<<<<<<<
- *         return val
+ *         Clears all monitors for an SVD object.
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.cancelMonitor", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/SVD.pyx":475
+ *     #
  * 
+ *     def setUp(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets up all the internal data structures necessary for the
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetProblemType(__pyx_v_self->pep, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "SLEPc/PEP.pyx":304
- *         cdef SlepcPEPProblemType val = PEP_GENERAL
- *         CHKERR( PEPGetProblemType(self.pep, &val) )
- *         return val             # <<<<<<<<<<<<<<
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_51setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_50setUp[] = "SVD.setUp(self)\n\n        Sets up all the internal data structures necessary for the\n        execution of the singular value solver.\n\n        Notes\n        -----\n        This function need not be called explicitly in most cases,\n        since `solve()` calls it. It can be useful when one wants to\n        measure the set-up time separately from the solve time.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_51setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setUp (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("setUp", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setUp", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_50setUp(((struct PySlepcSVDObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_50setUp(struct PySlepcSVDObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setUp", 0);
+
+  /* "SLEPc/SVD.pyx":486
+ *         measure the set-up time separately from the solve time.
+ *         """
+ *         CHKERR( SVDSetUp(self.svd) )             # <<<<<<<<<<<<<<
  * 
- *     def setProblemType(self, problem_type):
+ *     def solve(self):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDSetUp(__pyx_v_self->svd)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(14, 486, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":293
- *         CHKERR( PEPSetBasis(self.pep, val) )
+  /* "SLEPc/SVD.pyx":475
+ *     #
  * 
- *     def getProblemType(self):             # <<<<<<<<<<<<<<
+ *     def setUp(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the problem type from the PEP object.
+ *         Sets up all the internal data structures necessary for the
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getProblemType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setUp", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -34692,110 +35308,59 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_26getProblemType(struct PySlepcP
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":306
- *         return val
+/* "SLEPc/SVD.pyx":488
+ *         CHKERR( SVDSetUp(self.svd) )
  * 
- *     def setProblemType(self, problem_type):             # <<<<<<<<<<<<<<
+ *     def solve(self):             # <<<<<<<<<<<<<<
  *         """
- *         Specifies the type of the eigenvalue problem.
+ *         Solves the singular value problem.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_29setProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_28setProblemType[] = "PEP.setProblemType(self, problem_type)\n\n        Specifies the type of the eigenvalue problem.\n\n        Parameters\n        ----------\n        problem_type: `PEP.ProblemType` enumerate\n            The problem type to be set.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_29setProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_problem_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_53solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_52solve[] = "SVD.solve(self)\n\n        Solves the singular value problem.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_53solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setProblemType (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_problem_type,0};
-    PyObject* values[1] = {0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_problem_type)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setProblemType") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-    }
-    __pyx_v_problem_type = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setProblemType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setProblemType", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_28setProblemType(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_problem_type);
+  __Pyx_RefNannySetupContext("solve (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("solve", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "solve", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_52solve(((struct PySlepcSVDObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_28setProblemType(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_problem_type) {
-  PEPProblemType __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_52solve(struct PySlepcSVDObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PEPProblemType __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setProblemType", 0);
-
-  /* "SLEPc/PEP.pyx":315
- *             The problem type to be set.
- *         """
- *         cdef SlepcPEPProblemType val = problem_type             # <<<<<<<<<<<<<<
- *         CHKERR( PEPSetProblemType(self.pep, val) )
- * 
- */
-  __pyx_t_1 = ((PEPProblemType)PyInt_AsLong(__pyx_v_problem_type)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_val = __pyx_t_1;
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("solve", 0);
 
-  /* "SLEPc/PEP.pyx":316
+  /* "SLEPc/SVD.pyx":492
+ *         Solves the singular value problem.
  *         """
- *         cdef SlepcPEPProblemType val = problem_type
- *         CHKERR( PEPSetProblemType(self.pep, val) )             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDSolve(self.svd) )             # <<<<<<<<<<<<<<
  * 
- *     def getWhichEigenpairs(self):
+ *     def getIterationNumber(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetProblemType(__pyx_v_self->pep, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDSolve(__pyx_v_self->svd)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(14, 492, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":306
- *         return val
+  /* "SLEPc/SVD.pyx":488
+ *         CHKERR( SVDSetUp(self.svd) )
  * 
- *     def setProblemType(self, problem_type):             # <<<<<<<<<<<<<<
+ *     def solve(self):             # <<<<<<<<<<<<<<
  *         """
- *         Specifies the type of the eigenvalue problem.
+ *         Solves the singular value problem.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setProblemType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.solve", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -34803,86 +35368,83 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_28setProblemType(struct PySlepcP
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":318
- *         CHKERR( PEPSetProblemType(self.pep, val) )
+/* "SLEPc/SVD.pyx":494
+ *         CHKERR( SVDSolve(self.svd) )
  * 
- *     def getWhichEigenpairs(self):             # <<<<<<<<<<<<<<
+ *     def getIterationNumber(self):             # <<<<<<<<<<<<<<
  *         """
- *         Returns which portion of the spectrum is to be sought.
+ *         Gets the current iteration number. If the call to `solve()` is
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_31getWhichEigenpairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_30getWhichEigenpairs[] = "PEP.getWhichEigenpairs(self)\n\n        Returns which portion of the spectrum is to be sought.\n\n        Returns\n        -------\n        which: `PEP.Which` enumerate\n            The portion of the spectrum to be sought by the solver.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_31getWhichEigenpairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_55getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_54getIterationNumber[] = "SVD.getIterationNumber(self)\n\n        Gets the current iteration number. If the call to `solve()` is\n        complete, then it returns the number of iterations carried out\n        by the solution method.\n\n        Returns\n        -------\n        its: int\n             Iteration number.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_55getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getWhichEigenpairs (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getIterationNumber (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getWhichEigenpairs", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getWhichEigenpairs", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_30getWhichEigenpairs(((struct PySlepcPEPObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getIterationNumber", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getIterationNumber", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_54getIterationNumber(((struct PySlepcSVDObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_30getWhichEigenpairs(struct PySlepcPEPObject *__pyx_v_self) {
-  PEPWhich __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_54getIterationNumber(struct PySlepcSVDObject *__pyx_v_self) {
+  PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getWhichEigenpairs", 0);
+  __Pyx_RefNannySetupContext("getIterationNumber", 0);
 
-  /* "SLEPc/PEP.pyx":327
- *             The portion of the spectrum to be sought by the solver.
+  /* "SLEPc/SVD.pyx":505
+ *              Iteration number.
  *         """
- *         cdef SlepcPEPWhich val = PEP_LARGEST_MAGNITUDE             # <<<<<<<<<<<<<<
- *         CHKERR( PEPGetWhichEigenpairs(self.pep, &val) )
- *         return val
+ *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDGetIterationNumber(self.svd, &ival) )
+ *         return toInt(ival)
  */
-  __pyx_v_val = PEP_LARGEST_MAGNITUDE;
+  __pyx_v_ival = 0;
 
-  /* "SLEPc/PEP.pyx":328
+  /* "SLEPc/SVD.pyx":506
  *         """
- *         cdef SlepcPEPWhich val = PEP_LARGEST_MAGNITUDE
- *         CHKERR( PEPGetWhichEigenpairs(self.pep, &val) )             # <<<<<<<<<<<<<<
- *         return val
+ *         cdef PetscInt ival = 0
+ *         CHKERR( SVDGetIterationNumber(self.svd, &ival) )             # <<<<<<<<<<<<<<
+ *         return toInt(ival)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetWhichEigenpairs(__pyx_v_self->pep, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetIterationNumber(__pyx_v_self->svd, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(14, 506, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":329
- *         cdef SlepcPEPWhich val = PEP_LARGEST_MAGNITUDE
- *         CHKERR( PEPGetWhichEigenpairs(self.pep, &val) )
- *         return val             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":507
+ *         cdef PetscInt ival = 0
+ *         CHKERR( SVDGetIterationNumber(self.svd, &ival) )
+ *         return toInt(ival)             # <<<<<<<<<<<<<<
  * 
- *     def setWhichEigenpairs(self, which):
+ *     def getConvergedReason(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 507, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/PEP.pyx":318
- *         CHKERR( PEPSetProblemType(self.pep, val) )
+  /* "SLEPc/SVD.pyx":494
+ *         CHKERR( SVDSolve(self.svd) )
  * 
- *     def getWhichEigenpairs(self):             # <<<<<<<<<<<<<<
+ *     def getIterationNumber(self):             # <<<<<<<<<<<<<<
  *         """
- *         Returns which portion of the spectrum is to be sought.
+ *         Gets the current iteration number. If the call to `solve()` is
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getWhichEigenpairs", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getIterationNumber", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -34890,110 +35452,83 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_30getWhichEigenpairs(struct PySl
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":331
- *         return val
+/* "SLEPc/SVD.pyx":509
+ *         return toInt(ival)
  * 
- *     def setWhichEigenpairs(self, which):             # <<<<<<<<<<<<<<
+ *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
  *         """
- *         Specifies which portion of the spectrum is to be sought.
+ *         Gets the reason why the `solve()` iteration was stopped.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_33setWhichEigenpairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_32setWhichEigenpairs[] = "PEP.setWhichEigenpairs(self, which)\n\n        Specifies which portion of the spectrum is to be sought.\n\n        Parameters\n        ----------\n        which: `PEP.Which` enumerate\n            The portion of the spectrum to be sought by the solver.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_33setWhichEigenpairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_which = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_57getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_56getConvergedReason[] = "SVD.getConvergedReason(self)\n\n        Gets the reason why the `solve()` iteration was stopped.\n\n        Returns\n        -------\n        reason: `SVD.ConvergedReason` enumerate\n                Negative value indicates diverged, positive value\n                converged.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_57getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setWhichEigenpairs (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_which,0};
-    PyObject* values[1] = {0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_which)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setWhichEigenpairs") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-    }
-    __pyx_v_which = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setWhichEigenpairs", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setWhichEigenpairs", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_32setWhichEigenpairs(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_which);
+  __Pyx_RefNannySetupContext("getConvergedReason (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getConvergedReason", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getConvergedReason", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_56getConvergedReason(((struct PySlepcSVDObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_32setWhichEigenpairs(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_which) {
-  PEPWhich __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_56getConvergedReason(struct PySlepcSVDObject *__pyx_v_self) {
+  SVDConvergedReason __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PEPWhich __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setWhichEigenpairs", 0);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getConvergedReason", 0);
 
-  /* "SLEPc/PEP.pyx":340
- *             The portion of the spectrum to be sought by the solver.
+  /* "SLEPc/SVD.pyx":519
+ *                 converged.
  *         """
- *         cdef SlepcPEPWhich val = which             # <<<<<<<<<<<<<<
- *         CHKERR( PEPSetWhichEigenpairs(self.pep, val) )
- * 
+ *         cdef SlepcSVDConvergedReason val = SVD_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDGetConvergedReason(self.svd, &val) )
+ *         return val
  */
-  __pyx_t_1 = ((PEPWhich)PyInt_AsLong(__pyx_v_which)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_val = __pyx_t_1;
+  __pyx_v_val = SVD_CONVERGED_ITERATING;
 
-  /* "SLEPc/PEP.pyx":341
+  /* "SLEPc/SVD.pyx":520
  *         """
- *         cdef SlepcPEPWhich val = which
- *         CHKERR( PEPSetWhichEigenpairs(self.pep, val) )             # <<<<<<<<<<<<<<
+ *         cdef SlepcSVDConvergedReason val = SVD_CONVERGED_ITERATING
+ *         CHKERR( SVDGetConvergedReason(self.svd, &val) )             # <<<<<<<<<<<<<<
+ *         return val
  * 
- *     def getTolerances(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetWhichEigenpairs(__pyx_v_self->pep, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetConvergedReason(__pyx_v_self->svd, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(14, 520, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":331
- *         return val
+  /* "SLEPc/SVD.pyx":521
+ *         cdef SlepcSVDConvergedReason val = SVD_CONVERGED_ITERATING
+ *         CHKERR( SVDGetConvergedReason(self.svd, &val) )
+ *         return val             # <<<<<<<<<<<<<<
  * 
- *     def setWhichEigenpairs(self, which):             # <<<<<<<<<<<<<<
+ *     def getConverged(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyInt_From_SVDConvergedReason(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 521, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "SLEPc/SVD.pyx":509
+ *         return toInt(ival)
+ * 
+ *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
  *         """
- *         Specifies which portion of the spectrum is to be sought.
+ *         Gets the reason why the `solve()` iteration was stopped.
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setWhichEigenpairs", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getConvergedReason", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -35001,110 +35536,83 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_32setWhichEigenpairs(struct PySl
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":343
- *         CHKERR( PEPSetWhichEigenpairs(self.pep, val) )
+/* "SLEPc/SVD.pyx":523
+ *         return val
  * 
- *     def getTolerances(self):             # <<<<<<<<<<<<<<
+ *     def getConverged(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the tolerance and maximum iteration count used by the
+ *         Gets the number of converged singular triplets.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_35getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_34getTolerances[] = "PEP.getTolerances(self)\n\n        Gets the tolerance and maximum iteration count used by the\n        default PEP convergence tests.\n\n        Returns\n        -------\n        tol: float\n            The convergence tolerance.\n        max_it: int\n            The maximum number of iterations\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_35getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_59getConverged(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_58getConverged[] = "SVD.getConverged(self)\n\n        Gets the number of converged singular triplets.\n\n        Returns\n        -------\n        nconv: int\n               Number of converged singular triplets.\n\n        Notes\n        -----\n        This function should be called after `solve()` has finished.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_59getConverged(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getTolerances (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getConverged (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getTolerances", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTolerances", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_34getTolerances(((struct PySlepcPEPObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getConverged", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getConverged", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_58getConverged(((struct PySlepcSVDObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_34getTolerances(struct PySlepcPEPObject *__pyx_v_self) {
-  PetscReal __pyx_v_rval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_58getConverged(struct PySlepcSVDObject *__pyx_v_self) {
   PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getTolerances", 0);
-
-  /* "SLEPc/PEP.pyx":355
- *             The maximum number of iterations
- *         """
- *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt  ival = 0
- *         CHKERR( PEPGetTolerances(self.pep, &rval, &ival) )
- */
-  __pyx_v_rval = 0.0;
+  __Pyx_RefNannySetupContext("getConverged", 0);
 
-  /* "SLEPc/PEP.pyx":356
+  /* "SLEPc/SVD.pyx":536
+ *         This function should be called after `solve()` has finished.
  *         """
- *         cdef PetscReal rval = 0
- *         cdef PetscInt  ival = 0             # <<<<<<<<<<<<<<
- *         CHKERR( PEPGetTolerances(self.pep, &rval, &ival) )
- *         return (toReal(rval), toInt(ival))
+ *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDGetConverged(self.svd, &ival) )
+ *         return toInt(ival)
  */
   __pyx_v_ival = 0;
 
-  /* "SLEPc/PEP.pyx":357
- *         cdef PetscReal rval = 0
- *         cdef PetscInt  ival = 0
- *         CHKERR( PEPGetTolerances(self.pep, &rval, &ival) )             # <<<<<<<<<<<<<<
- *         return (toReal(rval), toInt(ival))
+  /* "SLEPc/SVD.pyx":537
+ *         """
+ *         cdef PetscInt ival = 0
+ *         CHKERR( SVDGetConverged(self.svd, &ival) )             # <<<<<<<<<<<<<<
+ *         return toInt(ival)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetTolerances(__pyx_v_self->pep, (&__pyx_v_rval), (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetConverged(__pyx_v_self->svd, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(14, 537, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":358
- *         cdef PetscInt  ival = 0
- *         CHKERR( PEPGetTolerances(self.pep, &rval, &ival) )
- *         return (toReal(rval), toInt(ival))             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":538
+ *         cdef PetscInt ival = 0
+ *         CHKERR( SVDGetConverged(self.svd, &ival) )
+ *         return toInt(ival)             # <<<<<<<<<<<<<<
  * 
- *     def setTolerances(self, tol=None, max_it=None):
+ *     def getValue(self, int i):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 538, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __Pyx_GIVEREF(__pyx_t_2);
-  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_3);
-  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
+  __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
-  __pyx_t_3 = 0;
-  __pyx_r = __pyx_t_4;
-  __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/PEP.pyx":343
- *         CHKERR( PEPSetWhichEigenpairs(self.pep, val) )
+  /* "SLEPc/SVD.pyx":523
+ *         return val
  * 
- *     def getTolerances(self):             # <<<<<<<<<<<<<<
+ *     def getConverged(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the tolerance and maximum iteration count used by the
+ *         Gets the number of converged singular triplets.
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getConverged", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -35112,36 +35620,29 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_34getTolerances(struct PySlepcPE
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":360
- *         return (toReal(rval), toInt(ival))
+/* "SLEPc/SVD.pyx":540
+ *         return toInt(ival)
  * 
- *     def setTolerances(self, tol=None, max_it=None):             # <<<<<<<<<<<<<<
+ *     def getValue(self, int i):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the tolerance and maximum iteration count used by the
+ *         Gets the i-th singular value as computed by `solve()`.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_37setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_36setTolerances[] = "PEP.setTolerances(self, tol=None, max_it=None)\n\n        Sets the tolerance and maximum iteration count used by the\n        default PEP convergence tests.\n\n        Parameters\n        ----------\n        tol: float, optional\n            The convergence tolerance.\n        max_it: int, optional\n            The maximum number of iterations\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_37setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_tol = 0;
-  PyObject *__pyx_v_max_it = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_61getValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_60getValue[] = "SVD.getValue(self, int i)\n\n        Gets the i-th singular value as computed by `solve()`.\n\n        Parameters\n        ----------\n        i: int\n           Index of the solution to be obtained.\n\n        Returns\n        -------\n        s: float\n           The computed singular value.\n\n        Notes\n        -----\n        The index ``i`` should be a value between ``0`` and\n        ``nconv-1`` (see `getConverged()`.  [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_61getValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_i;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setTolerances (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getValue (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_tol,&__pyx_n_s_max_it,0};
-    PyObject* values[2] = {0,0};
-    values[0] = ((PyObject *)Py_None);
-    values[1] = ((PyObject *)Py_None);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,0};
+    PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -35149,219 +35650,86 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_37setTolerances(PyObject *__pyx_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_tol);
-          if (value) { values[0] = value; kw_args--; }
-        }
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_max_it);
-          if (value) { values[1] = value; kw_args--; }
-        }
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTolerances") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getValue") < 0)) __PYX_ERR(14, 540, __pyx_L3_error)
       }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
     } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_tol = values[0];
-    __pyx_v_max_it = values[1];
+    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) __PYX_ERR(14, 540, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTolerances", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getValue", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(14, 540, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_36setTolerances(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_tol, __pyx_v_max_it);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_60getValue(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_i);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_36setTolerances(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_tol, PyObject *__pyx_v_max_it) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_60getValue(struct PySlepcSVDObject *__pyx_v_self, int __pyx_v_i) {
   PetscReal __pyx_v_rval;
-  PetscInt __pyx_v_ival;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_t_2;
-  PetscReal __pyx_t_3;
-  PetscInt __pyx_t_4;
-  int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setTolerances", 0);
-
-  /* "SLEPc/PEP.pyx":372
- *             The maximum number of iterations
- *         """
- *         cdef PetscReal rval = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscInt  ival = PETSC_DEFAULT
- *         if tol    is not None: rval = asReal(tol)
- */
-  __pyx_v_rval = PETSC_DEFAULT;
-
-  /* "SLEPc/PEP.pyx":373
- *         """
- *         cdef PetscReal rval = PETSC_DEFAULT
- *         cdef PetscInt  ival = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         if tol    is not None: rval = asReal(tol)
- *         if max_it is not None: ival = asInt(max_it)
- */
-  __pyx_v_ival = PETSC_DEFAULT;
-
-  /* "SLEPc/PEP.pyx":374
- *         cdef PetscReal rval = PETSC_DEFAULT
- *         cdef PetscInt  ival = PETSC_DEFAULT
- *         if tol    is not None: rval = asReal(tol)             # <<<<<<<<<<<<<<
- *         if max_it is not None: ival = asInt(max_it)
- *         CHKERR( PEPSetTolerances(self.pep, rval, ival) )
- */
-  __pyx_t_1 = (__pyx_v_tol != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_rval = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "SLEPc/PEP.pyx":375
- *         cdef PetscInt  ival = PETSC_DEFAULT
- *         if tol    is not None: rval = asReal(tol)
- *         if max_it is not None: ival = asInt(max_it)             # <<<<<<<<<<<<<<
- *         CHKERR( PEPSetTolerances(self.pep, rval, ival) )
- * 
- */
-  __pyx_t_2 = (__pyx_v_max_it != Py_None);
-  __pyx_t_1 = (__pyx_t_2 != 0);
-  if (__pyx_t_1) {
-    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_max_it); if (unlikely(__pyx_t_4 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival = __pyx_t_4;
-    goto __pyx_L4;
-  }
-  __pyx_L4:;
-
-  /* "SLEPc/PEP.pyx":376
- *         if tol    is not None: rval = asReal(tol)
- *         if max_it is not None: ival = asInt(max_it)
- *         CHKERR( PEPSetTolerances(self.pep, rval, ival) )             # <<<<<<<<<<<<<<
- * 
- *     def getConvergenceTest(self):
- */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetTolerances(__pyx_v_self->pep, __pyx_v_rval, __pyx_v_ival)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/PEP.pyx":360
- *         return (toReal(rval), toInt(ival))
- * 
- *     def setTolerances(self, tol=None, max_it=None):             # <<<<<<<<<<<<<<
- *         """
- *         Sets the tolerance and maximum iteration count used by the
- */
-
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "SLEPc/PEP.pyx":378
- *         CHKERR( PEPSetTolerances(self.pep, rval, ival) )
- * 
- *     def getConvergenceTest(self):             # <<<<<<<<<<<<<<
- *         """
- *         Return the method used to compute the error estimate
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_39getConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_38getConvergenceTest[] = "PEP.getConvergenceTest(self)\n\n        Return the method used to compute the error estimate \n        used in the convergence test. \n\n        Returns\n        -------\n        conv: PEP.Conv\n            The method used to compute the error estimate \n            used in the convergence test. \n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_39getConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getConvergenceTest (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getConvergenceTest", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getConvergenceTest", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_38getConvergenceTest(((struct PySlepcPEPObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_38getConvergenceTest(struct PySlepcPEPObject *__pyx_v_self) {
-  PEPConv __pyx_v_conv;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getConvergenceTest", 0);
+  __Pyx_RefNannySetupContext("getValue", 0);
 
-  /* "SLEPc/PEP.pyx":389
- *             used in the convergence test.
+  /* "SLEPc/SVD.pyx":561
+ *         `setWhichSingularTriplets()`.
  *         """
- *         cdef SlepcPEPConv conv = PEP_CONV_EIG             # <<<<<<<<<<<<<<
- *         CHKERR( PEPGetConvergenceTest(self.pep, &conv) )
- *         return conv
+ *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDGetSingularTriplet(self.svd, i, &rval, NULL, NULL) )
+ *         return toReal(rval)
  */
-  __pyx_v_conv = PEP_CONV_EIG;
+  __pyx_v_rval = 0.0;
 
-  /* "SLEPc/PEP.pyx":390
+  /* "SLEPc/SVD.pyx":562
  *         """
- *         cdef SlepcPEPConv conv = PEP_CONV_EIG
- *         CHKERR( PEPGetConvergenceTest(self.pep, &conv) )             # <<<<<<<<<<<<<<
- *         return conv
+ *         cdef PetscReal rval = 0
+ *         CHKERR( SVDGetSingularTriplet(self.svd, i, &rval, NULL, NULL) )             # <<<<<<<<<<<<<<
+ *         return toReal(rval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetConvergenceTest(__pyx_v_self->pep, (&__pyx_v_conv))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetSingularTriplet(__pyx_v_self->svd, __pyx_v_i, (&__pyx_v_rval), NULL, NULL)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(14, 562, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":391
- *         cdef SlepcPEPConv conv = PEP_CONV_EIG
- *         CHKERR( PEPGetConvergenceTest(self.pep, &conv) )
- *         return conv             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":563
+ *         cdef PetscReal rval = 0
+ *         CHKERR( SVDGetSingularTriplet(self.svd, i, &rval, NULL, NULL) )
+ *         return toReal(rval)             # <<<<<<<<<<<<<<
  * 
- *     def setConvergenceTest(self, conv):
+ *     def getVectors(self, int i, Vec U not None, Vec V not None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_conv); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 563, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/PEP.pyx":378
- *         CHKERR( PEPSetTolerances(self.pep, rval, ival) )
+  /* "SLEPc/SVD.pyx":540
+ *         return toInt(ival)
  * 
- *     def getConvergenceTest(self):             # <<<<<<<<<<<<<<
+ *     def getValue(self, int i):             # <<<<<<<<<<<<<<
  *         """
- *         Return the method used to compute the error estimate
+ *         Gets the i-th singular value as computed by `solve()`.
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getConvergenceTest", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -35369,32 +35737,33 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_38getConvergenceTest(struct PySl
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":393
- *         return conv
+/* "SLEPc/SVD.pyx":565
+ *         return toReal(rval)
  * 
- *     def setConvergenceTest(self, conv):             # <<<<<<<<<<<<<<
+ *     def getVectors(self, int i, Vec U not None, Vec V not None):             # <<<<<<<<<<<<<<
  *         """
- *         Specifies how to compute the error estimate
+ *         Gets the i-th left and right singular vectors as computed by
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_41setConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_40setConvergenceTest[] = "PEP.setConvergenceTest(self, conv)\n\n        Specifies how to compute the error estimate \n        used in the convergence test. \n\n        Parameters\n        ----------\n        conv: PEP.Conv\n            The method used to compute the error estimate \n            used in the convergence test.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_41setConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_conv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_63getVectors(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_62getVectors[] = "SVD.getVectors(self, int i, Vec U, Vec V)\n\n        Gets the i-th left and right singular vectors as computed by\n        `solve()`.\n\n        Parameters\n        ----------\n        i: int\n           Index of the solution to be obtained.\n        U: Vec\n           Placeholder for the returned left singular vector.\n        V: Vec\n           Placeholder for the returned right singular vector.\n\n        Notes\n        --- [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_63getVectors(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_i;
+  struct PyPetscVecObject *__pyx_v_U = 0;
+  struct PyPetscVecObject *__pyx_v_V = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setConvergenceTest (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getVectors (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_conv,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,&__pyx_n_s_U,&__pyx_n_s_V,0};
+    PyObject* values[3] = {0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -35402,77 +35771,92 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_41setConvergenceTest(PyObject *_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_conv)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_U)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("getVectors", 1, 3, 3, 1); __PYX_ERR(14, 565, __pyx_L3_error)
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("getVectors", 1, 3, 3, 2); __PYX_ERR(14, 565, __pyx_L3_error)
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergenceTest") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getVectors") < 0)) __PYX_ERR(14, 565, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
     }
-    __pyx_v_conv = values[0];
+    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) __PYX_ERR(14, 565, __pyx_L3_error)
+    __pyx_v_U = ((struct PyPetscVecObject *)values[1]);
+    __pyx_v_V = ((struct PyPetscVecObject *)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setConvergenceTest", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getVectors", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(14, 565, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setConvergenceTest", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getVectors", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_40setConvergenceTest(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_conv);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_U), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "U", 0))) __PYX_ERR(14, 565, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_V), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "V", 0))) __PYX_ERR(14, 565, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_62getVectors(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_i, __pyx_v_U, __pyx_v_V);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_40setConvergenceTest(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_conv) {
-  PEPConv __pyx_v_tconv;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_62getVectors(struct PySlepcSVDObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_U, struct PyPetscVecObject *__pyx_v_V) {
+  PetscReal __pyx_v_dummy;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PEPConv __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setConvergenceTest", 0);
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("getVectors", 0);
 
-  /* "SLEPc/PEP.pyx":404
- *             used in the convergence test.
+  /* "SLEPc/SVD.pyx":586
+ *         `setWhichSingularTriplets()`.
  *         """
- *         cdef SlepcPEPConv tconv = conv             # <<<<<<<<<<<<<<
- *         CHKERR( PEPSetConvergenceTest(self.pep, tconv) )
+ *         cdef PetscReal dummy = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDGetSingularTriplet(self.svd, i, &dummy, U.vec, V.vec) )
  * 
  */
-  __pyx_t_1 = ((PEPConv)PyInt_AsLong(__pyx_v_conv)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_tconv = __pyx_t_1;
+  __pyx_v_dummy = 0.0;
 
-  /* "SLEPc/PEP.pyx":405
+  /* "SLEPc/SVD.pyx":587
  *         """
- *         cdef SlepcPEPConv tconv = conv
- *         CHKERR( PEPSetConvergenceTest(self.pep, tconv) )             # <<<<<<<<<<<<<<
+ *         cdef PetscReal dummy = 0
+ *         CHKERR( SVDGetSingularTriplet(self.svd, i, &dummy, U.vec, V.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def getRefine(self):
+ *     def getSingularTriplet(self, int i, Vec U=None, Vec V=None):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetConvergenceTest(__pyx_v_self->pep, __pyx_v_tconv)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetSingularTriplet(__pyx_v_self->svd, __pyx_v_i, (&__pyx_v_dummy), __pyx_v_U->vec, __pyx_v_V->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(14, 587, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":393
- *         return conv
+  /* "SLEPc/SVD.pyx":565
+ *         return toReal(rval)
  * 
- *     def setConvergenceTest(self, conv):             # <<<<<<<<<<<<<<
+ *     def getVectors(self, int i, Vec U not None, Vec V not None):             # <<<<<<<<<<<<<<
  *         """
- *         Specifies how to compute the error estimate
+ *         Gets the i-th left and right singular vectors as computed by
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setConvergenceTest", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getVectors", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -35480,161 +35864,195 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_40setConvergenceTest(struct PySl
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":407
- *         CHKERR( PEPSetConvergenceTest(self.pep, tconv) )
+/* "SLEPc/SVD.pyx":589
+ *         CHKERR( SVDGetSingularTriplet(self.svd, i, &dummy, U.vec, V.vec) )
  * 
- *     def getRefine(self):             # <<<<<<<<<<<<<<
+ *     def getSingularTriplet(self, int i, Vec U=None, Vec V=None):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the refinement strategy used by the PEP object,
+ *         Gets the i-th triplet of the singular value decomposition as
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_43getRefine(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_42getRefine[] = "PEP.getRefine(self)\n\n        Gets the refinement strategy used by the PEP object, \n        and the associated parameters. \n\n        Returns\n        -------\n        ref: PEP.Refine\n            The refinement type.\n        npart: int\n            The number of partitions of the communicator.\n        tol: real\n            The convergence tolerance.\n        its: int\n            The maximum number of refinement iteratio [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_43getRefine(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_65getSingularTriplet(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_64getSingularTriplet[] = "SVD.getSingularTriplet(self, int i, Vec U=None, Vec V=None)\n\n        Gets the i-th triplet of the singular value decomposition as\n        computed by `solve()`. The solution consists of the singular\n        value and its left and right singular vectors.\n\n        Parameters\n        ----------\n        i: int\n           Index of the solution to be obtained.\n        U: Vec\n           Placeholder for the returned [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_65getSingularTriplet(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_i;
+  struct PyPetscVecObject *__pyx_v_U = 0;
+  struct PyPetscVecObject *__pyx_v_V = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getRefine (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getRefine", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getRefine", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_42getRefine(((struct PySlepcPEPObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("getSingularTriplet (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,&__pyx_n_s_U,&__pyx_n_s_V,0};
+    PyObject* values[3] = {0,0,0};
+    values[1] = (PyObject *)((struct PyPetscVecObject *)Py_None);
+    values[2] = (PyObject *)((struct PyPetscVecObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_U);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_V);
+          if (value) { values[2] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getSingularTriplet") < 0)) __PYX_ERR(14, 589, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) __PYX_ERR(14, 589, __pyx_L3_error)
+    __pyx_v_U = ((struct PyPetscVecObject *)values[1]);
+    __pyx_v_V = ((struct PyPetscVecObject *)values[2]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getSingularTriplet", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(14, 589, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getSingularTriplet", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_U), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "U", 0))) __PYX_ERR(14, 589, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_V), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "V", 0))) __PYX_ERR(14, 589, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_64getSingularTriplet(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_i, __pyx_v_U, __pyx_v_V);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_42getRefine(struct PySlepcPEPObject *__pyx_v_self) {
-  PEPRefine __pyx_v_ref;
-  PetscInt __pyx_v_npart;
-  PetscReal __pyx_v_tol;
-  PetscInt __pyx_v_its;
-  PetscBool __pyx_v_schur;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_64getSingularTriplet(struct PySlepcSVDObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_U, struct PyPetscVecObject *__pyx_v_V) {
+  PetscReal __pyx_v_rval;
+  Vec __pyx_v_Uvec;
+  Vec __pyx_v_Vvec;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
+  int __pyx_t_2;
+  Vec __pyx_t_3;
+  int __pyx_t_4;
   PyObject *__pyx_t_5 = NULL;
-  PyObject *__pyx_t_6 = NULL;
-  PyObject *__pyx_t_7 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getRefine", 0);
+  __Pyx_RefNannySetupContext("getSingularTriplet", 0);
 
-  /* "SLEPc/PEP.pyx":425
- *             Whether the Schur complement approach is being used
+  /* "SLEPc/SVD.pyx":616
+ *         `setWhichSingularTriplets()`.
  *         """
- *         cdef SlepcPEPRefine ref = PEP_REFINE_NONE             # <<<<<<<<<<<<<<
- *         cdef PetscInt npart = 1
- *         cdef PetscReal tol = PETSC_DEFAULT
+ *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscVec Uvec = NULL
+ *         cdef PetscVec Vvec = NULL
  */
-  __pyx_v_ref = PEP_REFINE_NONE;
+  __pyx_v_rval = 0.0;
 
-  /* "SLEPc/PEP.pyx":426
+  /* "SLEPc/SVD.pyx":617
  *         """
- *         cdef SlepcPEPRefine ref = PEP_REFINE_NONE
- *         cdef PetscInt npart = 1             # <<<<<<<<<<<<<<
- *         cdef PetscReal tol = PETSC_DEFAULT
- *         cdef PetscInt its = PETSC_DEFAULT
+ *         cdef PetscReal rval = 0
+ *         cdef PetscVec Uvec = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscVec Vvec = NULL
+ *         if U is not None: Uvec = U.vec
  */
-  __pyx_v_npart = 1;
+  __pyx_v_Uvec = NULL;
 
-  /* "SLEPc/PEP.pyx":427
- *         cdef SlepcPEPRefine ref = PEP_REFINE_NONE
- *         cdef PetscInt npart = 1
- *         cdef PetscReal tol = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscInt its = PETSC_DEFAULT
- *         cdef PetscBool schur = PETSC_FALSE
+  /* "SLEPc/SVD.pyx":618
+ *         cdef PetscReal rval = 0
+ *         cdef PetscVec Uvec = NULL
+ *         cdef PetscVec Vvec = NULL             # <<<<<<<<<<<<<<
+ *         if U is not None: Uvec = U.vec
+ *         if V is not None: Vvec = V.vec
  */
-  __pyx_v_tol = PETSC_DEFAULT;
+  __pyx_v_Vvec = NULL;
 
-  /* "SLEPc/PEP.pyx":428
- *         cdef PetscInt npart = 1
- *         cdef PetscReal tol = PETSC_DEFAULT
- *         cdef PetscInt its = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscBool schur = PETSC_FALSE
- *         CHKERR( PEPGetRefine(self.pep, &ref, &npart, &tol, &its, &schur) )
+  /* "SLEPc/SVD.pyx":619
+ *         cdef PetscVec Uvec = NULL
+ *         cdef PetscVec Vvec = NULL
+ *         if U is not None: Uvec = U.vec             # <<<<<<<<<<<<<<
+ *         if V is not None: Vvec = V.vec
+ *         CHKERR( SVDGetSingularTriplet(self.svd, i, &rval, Uvec, Vvec) )
  */
-  __pyx_v_its = PETSC_DEFAULT;
+  __pyx_t_1 = (((PyObject *)__pyx_v_U) != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_v_U->vec;
+    __pyx_v_Uvec = __pyx_t_3;
+  }
 
-  /* "SLEPc/PEP.pyx":429
- *         cdef PetscReal tol = PETSC_DEFAULT
- *         cdef PetscInt its = PETSC_DEFAULT
- *         cdef PetscBool schur = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( PEPGetRefine(self.pep, &ref, &npart, &tol, &its, &schur) )
- *         return (ref, toInt(npart), toReal(tol), toInt(its), <bint>schur)
+  /* "SLEPc/SVD.pyx":620
+ *         cdef PetscVec Vvec = NULL
+ *         if U is not None: Uvec = U.vec
+ *         if V is not None: Vvec = V.vec             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDGetSingularTriplet(self.svd, i, &rval, Uvec, Vvec) )
+ *         return toReal(rval)
  */
-  __pyx_v_schur = PETSC_FALSE;
+  __pyx_t_2 = (((PyObject *)__pyx_v_V) != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_3 = __pyx_v_V->vec;
+    __pyx_v_Vvec = __pyx_t_3;
+  }
 
-  /* "SLEPc/PEP.pyx":430
- *         cdef PetscInt its = PETSC_DEFAULT
- *         cdef PetscBool schur = PETSC_FALSE
- *         CHKERR( PEPGetRefine(self.pep, &ref, &npart, &tol, &its, &schur) )             # <<<<<<<<<<<<<<
- *         return (ref, toInt(npart), toReal(tol), toInt(its), <bint>schur)
+  /* "SLEPc/SVD.pyx":621
+ *         if U is not None: Uvec = U.vec
+ *         if V is not None: Vvec = V.vec
+ *         CHKERR( SVDGetSingularTriplet(self.svd, i, &rval, Uvec, Vvec) )             # <<<<<<<<<<<<<<
+ *         return toReal(rval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetRefine(__pyx_v_self->pep, (&__pyx_v_ref), (&__pyx_v_npart), (&__pyx_v_tol), (&__pyx_v_its), (&__pyx_v_schur))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDGetSingularTriplet(__pyx_v_self->svd, __pyx_v_i, (&__pyx_v_rval), __pyx_v_Uvec, __pyx_v_Vvec)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(14, 621, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":431
- *         cdef PetscBool schur = PETSC_FALSE
- *         CHKERR( PEPGetRefine(self.pep, &ref, &npart, &tol, &its, &schur) )
- *         return (ref, toInt(npart), toReal(tol), toInt(its), <bint>schur)             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":622
+ *         if V is not None: Vvec = V.vec
+ *         CHKERR( SVDGetSingularTriplet(self.svd, i, &rval, Uvec, Vvec) )
+ *         return toReal(rval)             # <<<<<<<<<<<<<<
  * 
- *     def setRefine(self, ref, npart=None, tol=None, its=None, schur=None):
+ *     #
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_ref); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_npart); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_tol); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_its); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_5)) __PYX_ERR(14, 622, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyInt_FromLong(__pyx_v_schur); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = PyTuple_New(5); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
-  __Pyx_GIVEREF(__pyx_t_2);
-  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_3);
-  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_4);
-  PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_4);
-  __Pyx_GIVEREF(__pyx_t_5);
-  PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_t_5);
-  __Pyx_GIVEREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_7, 4, __pyx_t_6);
-  __pyx_t_2 = 0;
-  __pyx_t_3 = 0;
-  __pyx_t_4 = 0;
+  __pyx_r = __pyx_t_5;
   __pyx_t_5 = 0;
-  __pyx_t_6 = 0;
-  __pyx_r = __pyx_t_7;
-  __pyx_t_7 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/PEP.pyx":407
- *         CHKERR( PEPSetConvergenceTest(self.pep, tconv) )
+  /* "SLEPc/SVD.pyx":589
+ *         CHKERR( SVDGetSingularTriplet(self.svd, i, &dummy, U.vec, V.vec) )
  * 
- *     def getRefine(self):             # <<<<<<<<<<<<<<
+ *     def getSingularTriplet(self, int i, Vec U=None, Vec V=None):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the refinement strategy used by the PEP object,
+ *         Gets the i-th triplet of the singular value decomposition as
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_XDECREF(__pyx_t_6);
-  __Pyx_XDECREF(__pyx_t_7);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getRefine", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getSingularTriplet", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -35642,43 +36060,31 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_42getRefine(struct PySlepcPEPObj
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":433
- *         return (ref, toInt(npart), toReal(tol), toInt(its), <bint>schur)
+/* "SLEPc/SVD.pyx":626
+ *     #
  * 
- *     def setRefine(self, ref, npart=None, tol=None, its=None, schur=None):             # <<<<<<<<<<<<<<
+ *     def computeError(self, int i, etype=None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the refinement strategy used by the PEP object,
+ *         Computes the error (based on the residual norm) associated with the i-th
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_45setRefine(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_44setRefine[] = "PEP.setRefine(self, ref, npart=None, tol=None, its=None, schur=None)\n\n        Sets the refinement strategy used by the PEP object, \n        and the associated parameters. \n\n        Parameters\n        ----------\n        ref: PEP.Refine\n            The refinement type.\n        npart: int, optional\n            The number of partitions of the communicator.\n        tol: real, optional\n            The convergence toleranc [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_45setRefine(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_ref = 0;
-  PyObject *__pyx_v_npart = 0;
-  PyObject *__pyx_v_tol = 0;
-  PyObject *__pyx_v_its = 0;
-  PyObject *__pyx_v_schur = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_67computeError(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_66computeError[] = "SVD.computeError(self, int i, etype=None)\n\n        Computes the error (based on the residual norm) associated with the i-th\n        singular triplet.\n\n        Parameters\n        ----------\n        i: int\n           Index of the solution to be considered.\n        etype: `SVD.ErrorType` enumerate\n           The error type to compute.\n\n        Returns\n        -------\n        e: real\n           The relative error  [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_67computeError(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_i;
+  PyObject *__pyx_v_etype = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setRefine (wrapper)", 0);
+  __Pyx_RefNannySetupContext("computeError (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ref,&__pyx_n_s_npart,&__pyx_n_s_tol,&__pyx_n_s_its,&__pyx_n_s_schur,0};
-    PyObject* values[5] = {0,0,0,0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,&__pyx_n_s_etype,0};
+    PyObject* values[2] = {0,0};
     values[1] = ((PyObject *)Py_None);
-    values[2] = ((PyObject *)Py_None);
-    values[3] = ((PyObject *)Py_None);
-    values[4] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
-        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
-        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
@@ -35687,216 +36093,122 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_45setRefine(PyObject *__pyx_v_se
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ref)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_npart);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_etype);
           if (value) { values[1] = value; kw_args--; }
         }
-        case  2:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_tol);
-          if (value) { values[2] = value; kw_args--; }
-        }
-        case  3:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_its);
-          if (value) { values[3] = value; kw_args--; }
-        }
-        case  4:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_schur);
-          if (value) { values[4] = value; kw_args--; }
-        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRefine") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeError") < 0)) __PYX_ERR(14, 626, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
-        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_ref = values[0];
-    __pyx_v_npart = values[1];
-    __pyx_v_tol = values[2];
-    __pyx_v_its = values[3];
-    __pyx_v_schur = values[4];
+    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) __PYX_ERR(14, 626, __pyx_L3_error)
+    __pyx_v_etype = values[1];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setRefine", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("computeError", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(14, 626, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setRefine", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.computeError", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_44setRefine(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_ref, __pyx_v_npart, __pyx_v_tol, __pyx_v_its, __pyx_v_schur);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_66computeError(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_i, __pyx_v_etype);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_44setRefine(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_ref, PyObject *__pyx_v_npart, PyObject *__pyx_v_tol, PyObject *__pyx_v_its, PyObject *__pyx_v_schur) {
-  PEPRefine __pyx_v_tref;
-  PetscInt __pyx_v_tnpart;
-  PetscReal __pyx_v_ttol;
-  PetscInt __pyx_v_tits;
-  PetscBool __pyx_v_tschur;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_66computeError(struct PySlepcSVDObject *__pyx_v_self, int __pyx_v_i, PyObject *__pyx_v_etype) {
+  SVDErrorType __pyx_v_et;
+  PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PEPRefine __pyx_t_1;
+  int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_t_3;
-  PetscInt __pyx_t_4;
-  PetscReal __pyx_t_5;
-  PetscBool __pyx_t_6;
-  int __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setRefine", 0);
+  SVDErrorType __pyx_t_3;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("computeError", 0);
 
-  /* "SLEPc/PEP.pyx":451
- *             Whether the Schur complement approach is being used
+  /* "SLEPc/SVD.pyx":652
+ *         ``nconv-1`` (see `getConverged()`).
  *         """
- *         cdef SlepcPEPRefine tref = ref             # <<<<<<<<<<<<<<
- *         cdef PetscInt tnpart = 1
- *         cdef PetscReal ttol = PETSC_DEFAULT
+ *         cdef SlepcSVDErrorType et = SVD_ERROR_RELATIVE             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = 0
+ *         if etype is not None: et = etype
  */
-  __pyx_t_1 = ((PEPRefine)PyInt_AsLong(__pyx_v_ref)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_tref = __pyx_t_1;
+  __pyx_v_et = SVD_ERROR_RELATIVE;
 
-  /* "SLEPc/PEP.pyx":452
+  /* "SLEPc/SVD.pyx":653
  *         """
- *         cdef SlepcPEPRefine tref = ref
- *         cdef PetscInt tnpart = 1             # <<<<<<<<<<<<<<
- *         cdef PetscReal ttol = PETSC_DEFAULT
- *         cdef PetscInt tits = PETSC_DEFAULT
- */
-  __pyx_v_tnpart = 1;
-
-  /* "SLEPc/PEP.pyx":453
- *         cdef SlepcPEPRefine tref = ref
- *         cdef PetscInt tnpart = 1
- *         cdef PetscReal ttol = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscInt tits = PETSC_DEFAULT
- *         cdef PetscBool tschur = PETSC_FALSE
- */
-  __pyx_v_ttol = PETSC_DEFAULT;
-
-  /* "SLEPc/PEP.pyx":454
- *         cdef PetscInt tnpart = 1
- *         cdef PetscReal ttol = PETSC_DEFAULT
- *         cdef PetscInt tits = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscBool tschur = PETSC_FALSE
- *         if npart is not None: tnpart = asInt(npart)
- */
-  __pyx_v_tits = PETSC_DEFAULT;
-
-  /* "SLEPc/PEP.pyx":455
- *         cdef PetscReal ttol = PETSC_DEFAULT
- *         cdef PetscInt tits = PETSC_DEFAULT
- *         cdef PetscBool tschur = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         if npart is not None: tnpart = asInt(npart)
- *         if tol is not None: ttol = asReal(tol)
- */
-  __pyx_v_tschur = PETSC_FALSE;
-
-  /* "SLEPc/PEP.pyx":456
- *         cdef PetscInt tits = PETSC_DEFAULT
- *         cdef PetscBool tschur = PETSC_FALSE
- *         if npart is not None: tnpart = asInt(npart)             # <<<<<<<<<<<<<<
- *         if tol is not None: ttol = asReal(tol)
- *         if its is not None: tits = asInt(its)
+ *         cdef SlepcSVDErrorType et = SVD_ERROR_RELATIVE
+ *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
+ *         if etype is not None: et = etype
+ *         CHKERR( SVDComputeError(self.svd, i, et, &rval) )
  */
-  __pyx_t_2 = (__pyx_v_npart != Py_None);
-  __pyx_t_3 = (__pyx_t_2 != 0);
-  if (__pyx_t_3) {
-    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_npart); if (unlikely(__pyx_t_4 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_tnpart = __pyx_t_4;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+  __pyx_v_rval = 0.0;
 
-  /* "SLEPc/PEP.pyx":457
- *         cdef PetscBool tschur = PETSC_FALSE
- *         if npart is not None: tnpart = asInt(npart)
- *         if tol is not None: ttol = asReal(tol)             # <<<<<<<<<<<<<<
- *         if its is not None: tits = asInt(its)
- *         if schur is not None: tschur = schur
+  /* "SLEPc/SVD.pyx":654
+ *         cdef SlepcSVDErrorType et = SVD_ERROR_RELATIVE
+ *         cdef PetscReal rval = 0
+ *         if etype is not None: et = etype             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDComputeError(self.svd, i, et, &rval) )
+ *         return toReal(rval)
  */
-  __pyx_t_3 = (__pyx_v_tol != Py_None);
-  __pyx_t_2 = (__pyx_t_3 != 0);
+  __pyx_t_1 = (__pyx_v_etype != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_5 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ttol = __pyx_t_5;
-    goto __pyx_L4;
-  }
-  __pyx_L4:;
-
-  /* "SLEPc/PEP.pyx":458
- *         if npart is not None: tnpart = asInt(npart)
- *         if tol is not None: ttol = asReal(tol)
- *         if its is not None: tits = asInt(its)             # <<<<<<<<<<<<<<
- *         if schur is not None: tschur = schur
- *         CHKERR( PEPSetRefine(self.pep, tref, tnpart, ttol, tits, tschur) )
- */
-  __pyx_t_2 = (__pyx_v_its != Py_None);
-  __pyx_t_3 = (__pyx_t_2 != 0);
-  if (__pyx_t_3) {
-    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_its); if (unlikely(__pyx_t_4 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_tits = __pyx_t_4;
-    goto __pyx_L5;
+    __pyx_t_3 = ((SVDErrorType)__Pyx_PyInt_As_SVDErrorType(__pyx_v_etype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(14, 654, __pyx_L1_error)
+    __pyx_v_et = __pyx_t_3;
   }
-  __pyx_L5:;
 
-  /* "SLEPc/PEP.pyx":459
- *         if tol is not None: ttol = asReal(tol)
- *         if its is not None: tits = asInt(its)
- *         if schur is not None: tschur = schur             # <<<<<<<<<<<<<<
- *         CHKERR( PEPSetRefine(self.pep, tref, tnpart, ttol, tits, tschur) )
+  /* "SLEPc/SVD.pyx":655
+ *         cdef PetscReal rval = 0
+ *         if etype is not None: et = etype
+ *         CHKERR( SVDComputeError(self.svd, i, et, &rval) )             # <<<<<<<<<<<<<<
+ *         return toReal(rval)
  * 
  */
-  __pyx_t_3 = (__pyx_v_schur != Py_None);
-  __pyx_t_2 = (__pyx_t_3 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_6 = ((PetscBool)PyInt_AsLong(__pyx_v_schur)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_tschur = __pyx_t_6;
-    goto __pyx_L6;
-  }
-  __pyx_L6:;
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDComputeError(__pyx_v_self->svd, __pyx_v_i, __pyx_v_et, (&__pyx_v_rval))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(14, 655, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":460
- *         if its is not None: tits = asInt(its)
- *         if schur is not None: tschur = schur
- *         CHKERR( PEPSetRefine(self.pep, tref, tnpart, ttol, tits, tschur) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":656
+ *         if etype is not None: et = etype
+ *         CHKERR( SVDComputeError(self.svd, i, et, &rval) )
+ *         return toReal(rval)             # <<<<<<<<<<<<<<
  * 
- *     def getTrackAll(self):
+ *     def errorView(self, etype=None, Viewer viewer=None):
  */
-  __pyx_t_7 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetRefine(__pyx_v_self->pep, __pyx_v_tref, __pyx_v_tnpart, __pyx_v_ttol, __pyx_v_tits, __pyx_v_tschur)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_5)) __PYX_ERR(14, 656, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_r = __pyx_t_5;
+  __pyx_t_5 = 0;
+  goto __pyx_L0;
 
-  /* "SLEPc/PEP.pyx":433
- *         return (ref, toInt(npart), toReal(tol), toInt(its), <bint>schur)
+  /* "SLEPc/SVD.pyx":626
+ *     #
  * 
- *     def setRefine(self, ref, npart=None, tol=None, its=None, schur=None):             # <<<<<<<<<<<<<<
+ *     def computeError(self, int i, etype=None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the refinement strategy used by the PEP object,
+ *         Computes the error (based on the residual norm) associated with the i-th
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setRefine", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.computeError", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -35904,86 +36216,164 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_44setRefine(struct PySlepcPEPObj
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":462
- *         CHKERR( PEPSetRefine(self.pep, tref, tnpart, ttol, tits, tschur) )
+/* "SLEPc/SVD.pyx":658
+ *         return toReal(rval)
  * 
- *     def getTrackAll(self):             # <<<<<<<<<<<<<<
+ *     def errorView(self, etype=None, Viewer viewer=None):             # <<<<<<<<<<<<<<
  *         """
- *         Returns the flag indicating whether all residual norms must be
+ *         Displays the errors associated with the computed solution
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_47getTrackAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_46getTrackAll[] = "PEP.getTrackAll(self)\n\n        Returns the flag indicating whether all residual norms must be\n        computed or not.\n\n        Returns\n        -------\n        trackall: bool\n            Whether the solver compute all residuals or not.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_47getTrackAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_69errorView(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_68errorView[] = "SVD.errorView(self, etype=None, Viewer viewer=None)\n\n        Displays the errors associated with the computed solution\n        (as well as the eigenvalues).\n\n        Parameters\n        ----------\n        etype: `SVD.ErrorType` enumerate, optional\n           The error type to compute.\n        viewer: Viewer, optional.\n                Visualization context; if not provided, the standard\n                output is used.\ [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_69errorView(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_etype = 0;
+  struct PyPetscViewerObject *__pyx_v_viewer = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getTrackAll (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getTrackAll", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTrackAll", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_46getTrackAll(((struct PySlepcPEPObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("errorView (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_etype,&__pyx_n_s_viewer,0};
+    PyObject* values[2] = {0,0};
+    values[0] = ((PyObject *)Py_None);
+    values[1] = (PyObject *)((struct PyPetscViewerObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_etype);
+          if (value) { values[0] = value; kw_args--; }
+        }
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_viewer);
+          if (value) { values[1] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "errorView") < 0)) __PYX_ERR(14, 658, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_etype = values[0];
+    __pyx_v_viewer = ((struct PyPetscViewerObject *)values[1]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("errorView", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(14, 658, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.errorView", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) __PYX_ERR(14, 658, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_68errorView(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_etype, __pyx_v_viewer);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_46getTrackAll(struct PySlepcPEPObject *__pyx_v_self) {
-  PetscBool __pyx_v_tval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_68errorView(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_etype, struct PyPetscViewerObject *__pyx_v_viewer) {
+  SVDErrorType __pyx_v_et;
+  PetscViewer __pyx_v_vwr;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getTrackAll", 0);
+  int __pyx_t_2;
+  SVDErrorType __pyx_t_3;
+  PetscViewer __pyx_t_4;
+  int __pyx_t_5;
+  __Pyx_RefNannySetupContext("errorView", 0);
 
-  /* "SLEPc/PEP.pyx":472
- *             Whether the solver compute all residuals or not.
+  /* "SLEPc/SVD.pyx":679
+ * 
  *         """
- *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( PEPGetTrackAll(self.pep, &tval) )
- *         return <bint>tval
+ *         cdef SlepcSVDErrorType et = SVD_ERROR_RELATIVE             # <<<<<<<<<<<<<<
+ *         if etype is not None: et = etype
+ *         cdef PetscViewer vwr = NULL
  */
-  __pyx_v_tval = PETSC_FALSE;
+  __pyx_v_et = SVD_ERROR_RELATIVE;
 
-  /* "SLEPc/PEP.pyx":473
+  /* "SLEPc/SVD.pyx":680
  *         """
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( PEPGetTrackAll(self.pep, &tval) )             # <<<<<<<<<<<<<<
- *         return <bint>tval
+ *         cdef SlepcSVDErrorType et = SVD_ERROR_RELATIVE
+ *         if etype is not None: et = etype             # <<<<<<<<<<<<<<
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr
+ */
+  __pyx_t_1 = (__pyx_v_etype != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = ((SVDErrorType)__Pyx_PyInt_As_SVDErrorType(__pyx_v_etype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(14, 680, __pyx_L1_error)
+    __pyx_v_et = __pyx_t_3;
+  }
+
+  /* "SLEPc/SVD.pyx":681
+ *         cdef SlepcSVDErrorType et = SVD_ERROR_RELATIVE
+ *         if etype is not None: et = etype
+ *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( SVDErrorView(self.svd, et, vwr) )
+ */
+  __pyx_v_vwr = NULL;
+
+  /* "SLEPc/SVD.pyx":682
+ *         if etype is not None: et = etype
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDErrorView(self.svd, et, vwr) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetTrackAll(__pyx_v_self->pep, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = (((PyObject *)__pyx_v_viewer) != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_4 = __pyx_v_viewer->vwr;
+    __pyx_v_vwr = __pyx_t_4;
+  }
 
-  /* "SLEPc/PEP.pyx":474
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( PEPGetTrackAll(self.pep, &tval) )
- *         return <bint>tval             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":683
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( SVDErrorView(self.svd, et, vwr) )             # <<<<<<<<<<<<<<
  * 
- *     def setTrackAll(self, trackall):
+ *     #
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_tval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 474; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDErrorView(__pyx_v_self->svd, __pyx_v_et, __pyx_v_vwr)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(14, 683, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":462
- *         CHKERR( PEPSetRefine(self.pep, tref, tnpart, ttol, tits, tschur) )
+  /* "SLEPc/SVD.pyx":658
+ *         return toReal(rval)
  * 
- *     def getTrackAll(self):             # <<<<<<<<<<<<<<
+ *     def errorView(self, etype=None, Viewer viewer=None):             # <<<<<<<<<<<<<<
  *         """
- *         Returns the flag indicating whether all residual norms must be
+ *         Displays the errors associated with the computed solution
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getTrackAll", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.errorView", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -35991,27 +36381,24 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_46getTrackAll(struct PySlepcPEPO
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":476
- *         return <bint>tval
+/* "SLEPc/SVD.pyx":687
+ *     #
  * 
- *     def setTrackAll(self, trackall):             # <<<<<<<<<<<<<<
+ *     def setCrossEPS(self, EPS eps not None):             # <<<<<<<<<<<<<<
  *         """
- *         Specifies if the solver must compute the residual of all
+ *         Associate an eigensolver object (`EPS`) to the singular value
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_49setTrackAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_48setTrackAll[] = "PEP.setTrackAll(self, trackall)\n\n        Specifies if the solver must compute the residual of all\n        approximate eigenpairs or not.\n\n        Parameters\n        ----------\n        trackall: bool\n            Whether compute all residuals or not.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_49setTrackAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_trackall = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_71setCrossEPS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_70setCrossEPS[] = "SVD.setCrossEPS(self, EPS eps)\n\n        Associate an eigensolver object (`EPS`) to the singular value\n        solver.\n\n        Parameters\n        ----------\n        eps: EPS\n             The eigensolver object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_71setCrossEPS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PySlepcEPSObject *__pyx_v_eps = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setTrackAll (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setCrossEPS (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_trackall,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_eps,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -36024,77 +36411,67 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_49setTrackAll(PyObject *__pyx_v_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_trackall)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_eps)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTrackAll") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCrossEPS") < 0)) __PYX_ERR(14, 687, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_trackall = values[0];
+    __pyx_v_eps = ((struct PySlepcEPSObject *)values[0]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTrackAll", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setCrossEPS", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(14, 687, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setTrackAll", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setCrossEPS", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_48setTrackAll(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_trackall);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_eps), __pyx_ptype_8slepc4py_5SLEPc_EPS, 0, "eps", 0))) __PYX_ERR(14, 687, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_70setCrossEPS(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_eps);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_48setTrackAll(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_trackall) {
-  PetscBool __pyx_v_tval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_70setCrossEPS(struct PySlepcSVDObject *__pyx_v_self, struct PySlepcEPSObject *__pyx_v_eps) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscBool __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setTrackAll", 0);
-
-  /* "SLEPc/PEP.pyx":486
- *             Whether compute all residuals or not.
- *         """
- *         cdef PetscBool tval = trackall             # <<<<<<<<<<<<<<
- *         CHKERR( PEPSetTrackAll(self.pep, tval) )
- * 
- */
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_trackall)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_tval = __pyx_t_1;
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setCrossEPS", 0);
 
-  /* "SLEPc/PEP.pyx":487
+  /* "SLEPc/SVD.pyx":697
+ *              The eigensolver object.
  *         """
- *         cdef PetscBool tval = trackall
- *         CHKERR( PEPSetTrackAll(self.pep, tval) )             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDCrossSetEPS(self.svd, eps.eps) )             # <<<<<<<<<<<<<<
  * 
- *     def getDimensions(self):
+ *     def getCrossEPS(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetTrackAll(__pyx_v_self->pep, __pyx_v_tval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDCrossSetEPS(__pyx_v_self->svd, __pyx_v_eps->eps)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(14, 697, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":476
- *         return <bint>tval
+  /* "SLEPc/SVD.pyx":687
+ *     #
  * 
- *     def setTrackAll(self, trackall):             # <<<<<<<<<<<<<<
+ *     def setCrossEPS(self, EPS eps not None):             # <<<<<<<<<<<<<<
  *         """
- *         Specifies if the solver must compute the residual of all
+ *         Associate an eigensolver object (`EPS`) to the singular value
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setTrackAll", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setCrossEPS", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -36102,167 +36479,124 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_48setTrackAll(struct PySlepcPEPO
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":489
- *         CHKERR( PEPSetTrackAll(self.pep, tval) )
+/* "SLEPc/SVD.pyx":699
+ *         CHKERR( SVDCrossSetEPS(self.svd, eps.eps) )
  * 
- *     def getDimensions(self):             # <<<<<<<<<<<<<<
+ *     def getCrossEPS(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the number of eigenvalues to compute and the dimension of
+ *         Retrieve the eigensolver object (`EPS`) associated to the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_51getDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_50getDimensions[] = "PEP.getDimensions(self)\n\n        Gets the number of eigenvalues to compute and the dimension of\n        the subspace.\n\n        Returns\n        -------\n        nev: int\n            Number of eigenvalues to compute.\n        ncv: int\n            Maximum dimension of the subspace to be used by the solver.\n        mpd: int\n            Maximum dimension allowed for the projected problem.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_51getDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_73getCrossEPS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_72getCrossEPS[] = "SVD.getCrossEPS(self)\n\n        Retrieve the eigensolver object (`EPS`) associated to the\n        singular value solver.\n\n        Returns\n        -------\n        eps: EPS\n             The eigensolver object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_73getCrossEPS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getDimensions (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getCrossEPS (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getDimensions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDimensions", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_50getDimensions(((struct PySlepcPEPObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getCrossEPS", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getCrossEPS", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_72getCrossEPS(((struct PySlepcSVDObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_50getDimensions(struct PySlepcPEPObject *__pyx_v_self) {
-  PetscInt __pyx_v_ival1;
-  PetscInt __pyx_v_ival2;
-  PetscInt __pyx_v_ival3;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_72getCrossEPS(struct PySlepcSVDObject *__pyx_v_self) {
+  struct PySlepcEPSObject *__pyx_v_eps = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getDimensions", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getCrossEPS", 0);
 
-  /* "SLEPc/PEP.pyx":503
- *             Maximum dimension allowed for the projected problem.
+  /* "SLEPc/SVD.pyx":709
+ *              The eigensolver object.
  *         """
- *         cdef PetscInt ival1 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival2 = 0
- *         cdef PetscInt ival3 = 0
+ *         cdef EPS eps = EPS()             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDCrossGetEPS(self.svd, &eps.eps) )
+ *         PetscINCREF(eps.obj)
  */
-  __pyx_v_ival1 = 0;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_EPS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 709, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_eps = ((struct PySlepcEPSObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/PEP.pyx":504
+  /* "SLEPc/SVD.pyx":710
  *         """
- *         cdef PetscInt ival1 = 0
- *         cdef PetscInt ival2 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival3 = 0
- *         CHKERR( PEPGetDimensions(self.pep, &ival1, &ival2, &ival3) )
- */
-  __pyx_v_ival2 = 0;
-
-  /* "SLEPc/PEP.pyx":505
- *         cdef PetscInt ival1 = 0
- *         cdef PetscInt ival2 = 0
- *         cdef PetscInt ival3 = 0             # <<<<<<<<<<<<<<
- *         CHKERR( PEPGetDimensions(self.pep, &ival1, &ival2, &ival3) )
- *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+ *         cdef EPS eps = EPS()
+ *         CHKERR( SVDCrossGetEPS(self.svd, &eps.eps) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(eps.obj)
+ *         return eps
  */
-  __pyx_v_ival3 = 0;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDCrossGetEPS(__pyx_v_self->svd, (&__pyx_v_eps->eps))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(14, 710, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":506
- *         cdef PetscInt ival2 = 0
- *         cdef PetscInt ival3 = 0
- *         CHKERR( PEPGetDimensions(self.pep, &ival1, &ival2, &ival3) )             # <<<<<<<<<<<<<<
- *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+  /* "SLEPc/SVD.pyx":711
+ *         cdef EPS eps = EPS()
+ *         CHKERR( SVDCrossGetEPS(self.svd, &eps.eps) )
+ *         PetscINCREF(eps.obj)             # <<<<<<<<<<<<<<
+ *         return eps
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetDimensions(__pyx_v_self->pep, (&__pyx_v_ival1), (&__pyx_v_ival2), (&__pyx_v_ival3))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_eps->__pyx_base.obj);
 
-  /* "SLEPc/PEP.pyx":507
- *         cdef PetscInt ival3 = 0
- *         CHKERR( PEPGetDimensions(self.pep, &ival1, &ival2, &ival3) )
- *         return (toInt(ival1), toInt(ival2), toInt(ival3))             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":712
+ *         CHKERR( SVDCrossGetEPS(self.svd, &eps.eps) )
+ *         PetscINCREF(eps.obj)
+ *         return eps             # <<<<<<<<<<<<<<
  * 
- *     def setDimensions(self, nev=None, ncv=None, mpd=None):
+ *     def setCyclicEPS(self, EPS eps not None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __Pyx_GIVEREF(__pyx_t_2);
-  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_3);
-  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_4);
-  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
-  __pyx_t_2 = 0;
-  __pyx_t_3 = 0;
-  __pyx_t_4 = 0;
-  __pyx_r = __pyx_t_5;
-  __pyx_t_5 = 0;
+  __Pyx_INCREF(((PyObject *)__pyx_v_eps));
+  __pyx_r = ((PyObject *)__pyx_v_eps);
   goto __pyx_L0;
 
-  /* "SLEPc/PEP.pyx":489
- *         CHKERR( PEPSetTrackAll(self.pep, tval) )
+  /* "SLEPc/SVD.pyx":699
+ *         CHKERR( SVDCrossSetEPS(self.svd, eps.eps) )
  * 
- *     def getDimensions(self):             # <<<<<<<<<<<<<<
+ *     def getCrossEPS(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the number of eigenvalues to compute and the dimension of
+ *         Retrieve the eigensolver object (`EPS`) associated to the
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getCrossEPS", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_eps);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":509
- *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+/* "SLEPc/SVD.pyx":714
+ *         return eps
  * 
- *     def setDimensions(self, nev=None, ncv=None, mpd=None):             # <<<<<<<<<<<<<<
+ *     def setCyclicEPS(self, EPS eps not None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the number of eigenvalues to compute and the dimension of
+ *         Associate an eigensolver object (`EPS`) to the singular value
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_53setDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_52setDimensions[] = "PEP.setDimensions(self, nev=None, ncv=None, mpd=None)\n\n        Sets the number of eigenvalues to compute and the dimension of\n        the subspace.\n\n        Parameters\n        ----------\n        nev: int, optional\n            Number of eigenvalues to compute.\n        ncv: int, optional\n            Maximum dimension of the subspace to be used by the\n            solver.\n        mpd: int, optional\n            Maxi [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_53setDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_nev = 0;
-  PyObject *__pyx_v_ncv = 0;
-  PyObject *__pyx_v_mpd = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_75setCyclicEPS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_74setCyclicEPS[] = "SVD.setCyclicEPS(self, EPS eps)\n\n        Associate an eigensolver object (`EPS`) to the singular value\n        solver.\n\n        Parameters\n        ----------\n        eps: EPS\n             The eigensolver object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_75setCyclicEPS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PySlepcEPSObject *__pyx_v_eps = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setDimensions (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setCyclicEPS (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nev,&__pyx_n_s_ncv,&__pyx_n_s_mpd,0};
-    PyObject* values[3] = {0,0,0};
-    values[0] = ((PyObject *)Py_None);
-    values[1] = ((PyObject *)Py_None);
-    values[2] = ((PyObject *)Py_None);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_eps,0};
+    PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -36270,164 +36604,67 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_53setDimensions(PyObject *__pyx_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nev);
-          if (value) { values[0] = value; kw_args--; }
-        }
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ncv);
-          if (value) { values[1] = value; kw_args--; }
-        }
-        case  2:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mpd);
-          if (value) { values[2] = value; kw_args--; }
-        }
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_eps)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDimensions") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCyclicEPS") < 0)) __PYX_ERR(14, 714, __pyx_L3_error)
       }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
     } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_nev = values[0];
-    __pyx_v_ncv = values[1];
-    __pyx_v_mpd = values[2];
+    __pyx_v_eps = ((struct PySlepcEPSObject *)values[0]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDimensions", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setCyclicEPS", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(14, 714, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setCyclicEPS", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_52setDimensions(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_nev, __pyx_v_ncv, __pyx_v_mpd);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_eps), __pyx_ptype_8slepc4py_5SLEPc_EPS, 0, "eps", 0))) __PYX_ERR(14, 714, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_74setCyclicEPS(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_eps);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_52setDimensions(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_nev, PyObject *__pyx_v_ncv, PyObject *__pyx_v_mpd) {
-  PetscInt __pyx_v_ival1;
-  PetscInt __pyx_v_ival2;
-  PetscInt __pyx_v_ival3;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_74setCyclicEPS(struct PySlepcSVDObject *__pyx_v_self, struct PySlepcEPSObject *__pyx_v_eps) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_t_2;
-  PetscInt __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setDimensions", 0);
-
-  /* "SLEPc/PEP.pyx":524
- *             Maximum dimension allowed for the projected problem.
- *         """
- *         cdef PetscInt ival1 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival2 = PETSC_DEFAULT
- *         cdef PetscInt ival3 = PETSC_DEFAULT
- */
-  __pyx_v_ival1 = PETSC_DEFAULT;
+  __Pyx_RefNannySetupContext("setCyclicEPS", 0);
 
-  /* "SLEPc/PEP.pyx":525
+  /* "SLEPc/SVD.pyx":724
+ *              The eigensolver object.
  *         """
- *         cdef PetscInt ival1 = PETSC_DEFAULT
- *         cdef PetscInt ival2 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival3 = PETSC_DEFAULT
- *         if nev is not None: ival1 = asInt(nev)
- */
-  __pyx_v_ival2 = PETSC_DEFAULT;
-
-  /* "SLEPc/PEP.pyx":526
- *         cdef PetscInt ival1 = PETSC_DEFAULT
- *         cdef PetscInt ival2 = PETSC_DEFAULT
- *         cdef PetscInt ival3 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         if nev is not None: ival1 = asInt(nev)
- *         if ncv is not None: ival2 = asInt(ncv)
- */
-  __pyx_v_ival3 = PETSC_DEFAULT;
-
-  /* "SLEPc/PEP.pyx":527
- *         cdef PetscInt ival2 = PETSC_DEFAULT
- *         cdef PetscInt ival3 = PETSC_DEFAULT
- *         if nev is not None: ival1 = asInt(nev)             # <<<<<<<<<<<<<<
- *         if ncv is not None: ival2 = asInt(ncv)
- *         if mpd is not None: ival3 = asInt(mpd)
- */
-  __pyx_t_1 = (__pyx_v_nev != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_nev); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival1 = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "SLEPc/PEP.pyx":528
- *         cdef PetscInt ival3 = PETSC_DEFAULT
- *         if nev is not None: ival1 = asInt(nev)
- *         if ncv is not None: ival2 = asInt(ncv)             # <<<<<<<<<<<<<<
- *         if mpd is not None: ival3 = asInt(mpd)
- *         CHKERR( PEPSetDimensions(self.pep, ival1, ival2, ival3) )
- */
-  __pyx_t_2 = (__pyx_v_ncv != Py_None);
-  __pyx_t_1 = (__pyx_t_2 != 0);
-  if (__pyx_t_1) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_ncv); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival2 = __pyx_t_3;
-    goto __pyx_L4;
-  }
-  __pyx_L4:;
-
-  /* "SLEPc/PEP.pyx":529
- *         if nev is not None: ival1 = asInt(nev)
- *         if ncv is not None: ival2 = asInt(ncv)
- *         if mpd is not None: ival3 = asInt(mpd)             # <<<<<<<<<<<<<<
- *         CHKERR( PEPSetDimensions(self.pep, ival1, ival2, ival3) )
- * 
- */
-  __pyx_t_1 = (__pyx_v_mpd != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_mpd); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival3 = __pyx_t_3;
-    goto __pyx_L5;
-  }
-  __pyx_L5:;
-
-  /* "SLEPc/PEP.pyx":530
- *         if ncv is not None: ival2 = asInt(ncv)
- *         if mpd is not None: ival3 = asInt(mpd)
- *         CHKERR( PEPSetDimensions(self.pep, ival1, ival2, ival3) )             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDCyclicSetEPS(self.svd, eps.eps) )             # <<<<<<<<<<<<<<
  * 
- *     def getST(self):
+ *     def getCyclicEPS(self):
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetDimensions(__pyx_v_self->pep, __pyx_v_ival1, __pyx_v_ival2, __pyx_v_ival3)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDCyclicSetEPS(__pyx_v_self->svd, __pyx_v_eps->eps)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(14, 724, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":509
- *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+  /* "SLEPc/SVD.pyx":714
+ *         return eps
  * 
- *     def setDimensions(self, nev=None, ncv=None, mpd=None):             # <<<<<<<<<<<<<<
+ *     def setCyclicEPS(self, EPS eps not None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the number of eigenvalues to compute and the dimension of
+ *         Associate an eigensolver object (`EPS`) to the singular value
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setCyclicEPS", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -36435,126 +36672,121 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_52setDimensions(struct PySlepcPE
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":532
- *         CHKERR( PEPSetDimensions(self.pep, ival1, ival2, ival3) )
+/* "SLEPc/SVD.pyx":726
+ *         CHKERR( SVDCyclicSetEPS(self.svd, eps.eps) )
  * 
- *     def getST(self):             # <<<<<<<<<<<<<<
+ *     def getCyclicEPS(self):             # <<<<<<<<<<<<<<
  *         """
- *         Obtain the spectral transformation (`ST`) object associated to
+ *         Retrieve the eigensolver object (`EPS`) associated to the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_55getST(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_54getST[] = "PEP.getST(self)\n\n        Obtain the spectral transformation (`ST`) object associated to\n        the eigensolver object.\n\n        Returns\n        -------\n        st: ST\n            The spectral transformation.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_55getST(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_77getCyclicEPS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_76getCyclicEPS[] = "SVD.getCyclicEPS(self)\n\n        Retrieve the eigensolver object (`EPS`) associated to the\n        singular value solver.\n\n        Returns\n        -------\n        eps: EPS\n             The eigensolver object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_77getCyclicEPS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getST (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getCyclicEPS (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getST", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getST", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_54getST(((struct PySlepcPEPObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getCyclicEPS", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getCyclicEPS", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_76getCyclicEPS(((struct PySlepcSVDObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_54getST(struct PySlepcPEPObject *__pyx_v_self) {
-  struct PySlepcSTObject *__pyx_v_st = 0;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_76getCyclicEPS(struct PySlepcSVDObject *__pyx_v_self) {
+  struct PySlepcEPSObject *__pyx_v_eps = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getST", 0);
+  __Pyx_RefNannySetupContext("getCyclicEPS", 0);
 
-  /* "SLEPc/PEP.pyx":542
- *             The spectral transformation.
+  /* "SLEPc/SVD.pyx":736
+ *              The eigensolver object.
  *         """
- *         cdef ST st = ST()             # <<<<<<<<<<<<<<
- *         CHKERR( PEPGetST(self.pep, &st.st) )
- *         PetscINCREF(st.obj)
+ *         cdef EPS eps = EPS()             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDCyclicGetEPS(self.svd, &eps.eps) )
+ *         PetscINCREF(eps.obj)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_ST)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_EPS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 736, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_st = ((struct PySlepcSTObject *)__pyx_t_1);
+  __pyx_v_eps = ((struct PySlepcEPSObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "SLEPc/PEP.pyx":543
+  /* "SLEPc/SVD.pyx":737
  *         """
- *         cdef ST st = ST()
- *         CHKERR( PEPGetST(self.pep, &st.st) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(st.obj)
- *         return st
+ *         cdef EPS eps = EPS()
+ *         CHKERR( SVDCyclicGetEPS(self.svd, &eps.eps) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(eps.obj)
+ *         return eps
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetST(__pyx_v_self->pep, (&__pyx_v_st->st))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDCyclicGetEPS(__pyx_v_self->svd, (&__pyx_v_eps->eps))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(14, 737, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":544
- *         cdef ST st = ST()
- *         CHKERR( PEPGetST(self.pep, &st.st) )
- *         PetscINCREF(st.obj)             # <<<<<<<<<<<<<<
- *         return st
+  /* "SLEPc/SVD.pyx":738
+ *         cdef EPS eps = EPS()
+ *         CHKERR( SVDCyclicGetEPS(self.svd, &eps.eps) )
+ *         PetscINCREF(eps.obj)             # <<<<<<<<<<<<<<
+ *         return eps
  * 
  */
-  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_st->__pyx_base.obj);
+  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_eps->__pyx_base.obj);
 
-  /* "SLEPc/PEP.pyx":545
- *         CHKERR( PEPGetST(self.pep, &st.st) )
- *         PetscINCREF(st.obj)
- *         return st             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":739
+ *         CHKERR( SVDCyclicGetEPS(self.svd, &eps.eps) )
+ *         PetscINCREF(eps.obj)
+ *         return eps             # <<<<<<<<<<<<<<
  * 
- *     def setST(self, ST st not None):
+ *     def setCyclicExplicitMatrix(self, flag=True):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_st));
-  __pyx_r = ((PyObject *)__pyx_v_st);
+  __Pyx_INCREF(((PyObject *)__pyx_v_eps));
+  __pyx_r = ((PyObject *)__pyx_v_eps);
   goto __pyx_L0;
 
-  /* "SLEPc/PEP.pyx":532
- *         CHKERR( PEPSetDimensions(self.pep, ival1, ival2, ival3) )
+  /* "SLEPc/SVD.pyx":726
+ *         CHKERR( SVDCyclicSetEPS(self.svd, eps.eps) )
  * 
- *     def getST(self):             # <<<<<<<<<<<<<<
+ *     def getCyclicEPS(self):             # <<<<<<<<<<<<<<
  *         """
- *         Obtain the spectral transformation (`ST`) object associated to
+ *         Retrieve the eigensolver object (`EPS`) associated to the
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getST", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getCyclicEPS", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_st);
+  __Pyx_XDECREF((PyObject *)__pyx_v_eps);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":547
- *         return st
+/* "SLEPc/SVD.pyx":741
+ *         return eps
  * 
- *     def setST(self, ST st not None):             # <<<<<<<<<<<<<<
+ *     def setCyclicExplicitMatrix(self, flag=True):             # <<<<<<<<<<<<<<
  *         """
- *         Associates a spectral transformation object to the
+ *         Indicate if the eigensolver operator ``H(A) = [ 0 A ; A^T 0
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_57setST(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_56setST[] = "PEP.setST(self, ST st)\n\n        Associates a spectral transformation object to the\n        eigensolver.\n\n        Parameters\n        ----------\n        st: ST\n            The spectral transformation.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_57setST(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PySlepcSTObject *__pyx_v_st = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_79setCyclicExplicitMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_78setCyclicExplicitMatrix[] = "SVD.setCyclicExplicitMatrix(self, flag=True)\n\n        Indicate if the eigensolver operator ``H(A) = [ 0 A ; A^T 0\n        ]`` must be computed explicitly.\n\n        Parameters\n        ----------\n        flag: boolean\n              True if ``H(A)`` is built explicitly.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_79setCyclicExplicitMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setST (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setCyclicExplicitMatrix (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_st,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag,0};
     PyObject* values[1] = {0};
+    values[0] = ((PyObject *)Py_True);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
@@ -36566,70 +36798,173 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_57setST(PyObject *__pyx_v_self,
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_st)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_flag);
+          if (value) { values[0] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setST") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCyclicExplicitMatrix") < 0)) __PYX_ERR(14, 741, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
     } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
     }
-    __pyx_v_st = ((struct PySlepcSTObject *)values[0]);
+    __pyx_v_flag = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setST", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setCyclicExplicitMatrix", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(14, 741, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setST", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setCyclicExplicitMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_st), __pyx_ptype_8slepc4py_5SLEPc_ST, 0, "st", 0))) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 547; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_56setST(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_st);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_78setCyclicExplicitMatrix(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_flag);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_78setCyclicExplicitMatrix(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_flag) {
+  PetscBool __pyx_v_tval;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setCyclicExplicitMatrix", 0);
+
+  /* "SLEPc/SVD.pyx":751
+ *               True if ``H(A)`` is built explicitly.
+ *         """
+ *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         if flag: tval = PETSC_TRUE
+ *         CHKERR( SVDCyclicSetExplicitMatrix(self.svd, tval) )
+ */
+  __pyx_v_tval = PETSC_FALSE;
+
+  /* "SLEPc/SVD.pyx":752
+ *         """
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         if flag: tval = PETSC_TRUE             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDCyclicSetExplicitMatrix(self.svd, tval) )
+ * 
+ */
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_flag); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(14, 752, __pyx_L1_error)
+  if (__pyx_t_1) {
+    __pyx_v_tval = PETSC_TRUE;
+  }
+
+  /* "SLEPc/SVD.pyx":753
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         if flag: tval = PETSC_TRUE
+ *         CHKERR( SVDCyclicSetExplicitMatrix(self.svd, tval) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getCyclicExplicitMatrix(self):
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDCyclicSetExplicitMatrix(__pyx_v_self->svd, __pyx_v_tval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(14, 753, __pyx_L1_error)
+
+  /* "SLEPc/SVD.pyx":741
+ *         return eps
+ * 
+ *     def setCyclicExplicitMatrix(self, flag=True):             # <<<<<<<<<<<<<<
+ *         """
+ *         Indicate if the eigensolver operator ``H(A) = [ 0 A ; A^T 0
+ */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setCyclicExplicitMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_56setST(struct PySlepcPEPObject *__pyx_v_self, struct PySlepcSTObject *__pyx_v_st) {
+/* "SLEPc/SVD.pyx":755
+ *         CHKERR( SVDCyclicSetExplicitMatrix(self.svd, tval) )
+ * 
+ *     def getCyclicExplicitMatrix(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Returns the flag indicating if ``H(A) = [ 0 A ; A^T 0 ]`` is
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_81getCyclicExplicitMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_80getCyclicExplicitMatrix[] = "SVD.getCyclicExplicitMatrix(self)\n\n        Returns the flag indicating if ``H(A) = [ 0 A ; A^T 0 ]`` is\n        built explicitly.\n\n        Returns\n        -------\n        flag: boolean\n              True if ``H(A)`` is built explicitly.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_81getCyclicExplicitMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getCyclicExplicitMatrix (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getCyclicExplicitMatrix", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getCyclicExplicitMatrix", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_80getCyclicExplicitMatrix(((struct PySlepcSVDObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_80getCyclicExplicitMatrix(struct PySlepcSVDObject *__pyx_v_self) {
+  PetscBool __pyx_v_tval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setST", 0);
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getCyclicExplicitMatrix", 0);
 
-  /* "SLEPc/PEP.pyx":557
- *             The spectral transformation.
+  /* "SLEPc/SVD.pyx":765
+ *               True if ``H(A)`` is built explicitly.
  *         """
- *         CHKERR( PEPSetST(self.pep, st.st) )             # <<<<<<<<<<<<<<
+ *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDCyclicGetExplicitMatrix(self.svd, &tval) )
+ *         return <bint>tval
+ */
+  __pyx_v_tval = PETSC_FALSE;
+
+  /* "SLEPc/SVD.pyx":766
+ *         """
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( SVDCyclicGetExplicitMatrix(self.svd, &tval) )             # <<<<<<<<<<<<<<
+ *         return <bint>tval
  * 
- *     def getScale(self, Vec Dl=None, Vec Dr=None):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetST(__pyx_v_self->pep, __pyx_v_st->st)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDCyclicGetExplicitMatrix(__pyx_v_self->svd, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(14, 766, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":547
- *         return st
+  /* "SLEPc/SVD.pyx":767
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( SVDCyclicGetExplicitMatrix(self.svd, &tval) )
+ *         return <bint>tval             # <<<<<<<<<<<<<<
  * 
- *     def setST(self, ST st not None):             # <<<<<<<<<<<<<<
+ *     def setLanczosOneSide(self, flag=True):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_tval); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 767, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "SLEPc/SVD.pyx":755
+ *         CHKERR( SVDCyclicSetExplicitMatrix(self.svd, tval) )
+ * 
+ *     def getCyclicExplicitMatrix(self):             # <<<<<<<<<<<<<<
  *         """
- *         Associates a spectral transformation object to the
+ *         Returns the flag indicating if ``H(A) = [ 0 A ; A^T 0 ]`` is
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setST", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.getCyclicExplicitMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -36637,36 +36972,30 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_56setST(struct PySlepcPEPObject
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":559
- *         CHKERR( PEPSetST(self.pep, st.st) )
+/* "SLEPc/SVD.pyx":769
+ *         return <bint>tval
  * 
- *     def getScale(self, Vec Dl=None, Vec Dr=None):             # <<<<<<<<<<<<<<
+ *     def setLanczosOneSide(self, flag=True):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the strategy used for scaling the polynomial eigenproblem.
+ *         Indicate if the variant of the Lanczos method to be used is
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_59getScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_58getScale[] = "PEP.getScale(self, Vec Dl=None, Vec Dr=None)\n\n        Gets the strategy used for scaling the polynomial eigenproblem.\n\n        Parameters\n        ----------\n        Dl: Vec, optional\n            Placeholder for the returned left diagonal matrix.\n        Dr: Vec, optional\n            Placeholder for the returned right diagonal matrix.\n\n        Returns\n        -------\n        scale: `PEP.Scale` enumerate\n             [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_59getScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscVecObject *__pyx_v_Dl = 0;
-  struct PyPetscVecObject *__pyx_v_Dr = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_83setLanczosOneSide(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_82setLanczosOneSide[] = "SVD.setLanczosOneSide(self, flag=True)\n\n        Indicate if the variant of the Lanczos method to be used is\n        one-sided or two-sided.\n\n        Parameters\n        ----------\n        flag: boolean\n              True if the method is one-sided.\n\n        Notes\n        -----\n        By default, a two-sided variant is selected, which is\n        sometimes slightly more robust. However, the one-sided variant\ [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_83setLanczosOneSide(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getScale (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setLanczosOneSide (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_Dl,&__pyx_n_s_Dr,0};
-    PyObject* values[2] = {0,0};
-    values[0] = (PyObject *)((struct PyPetscVecObject *)Py_None);
-    values[1] = (PyObject *)((struct PyPetscVecObject *)Py_None);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag,0};
+    PyObject* values[1] = {0};
+    values[0] = ((PyObject *)Py_True);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -36675,294 +37004,88 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_59getScale(PyObject *__pyx_v_sel
       switch (pos_args) {
         case  0:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Dl);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_flag);
           if (value) { values[0] = value; kw_args--; }
         }
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Dr);
-          if (value) { values[1] = value; kw_args--; }
-        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getScale") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLanczosOneSide") < 0)) __PYX_ERR(14, 769, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_Dl = ((struct PyPetscVecObject *)values[0]);
-    __pyx_v_Dr = ((struct PyPetscVecObject *)values[1]);
+    __pyx_v_flag = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getScale", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setLanczosOneSide", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(14, 769, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getScale", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setLanczosOneSide", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Dl), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "Dl", 0))) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Dr), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "Dr", 0))) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_58getScale(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_Dl, __pyx_v_Dr);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_82setLanczosOneSide(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_flag);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_58getScale(struct PySlepcPEPObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_Dl, struct PyPetscVecObject *__pyx_v_Dr) {
-  PEPScale __pyx_v_scale;
-  PetscReal __pyx_v_alpha;
-  PetscInt __pyx_v_its;
-  PetscReal __pyx_v_lbda;
-  Vec __pyx_v_vecl;
-  Vec __pyx_v_vecr;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_82setLanczosOneSide(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_flag) {
+  PetscBool __pyx_v_tval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  PyObject *__pyx_t_5 = NULL;
-  PyObject *__pyx_t_6 = NULL;
-  PyObject *__pyx_t_7 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getScale", 0);
+  __Pyx_RefNannySetupContext("setLanczosOneSide", 0);
 
-  /* "SLEPc/PEP.pyx":581
- *             Approximation of the wanted eigenvalues (modulus).
+  /* "SLEPc/SVD.pyx":787
+ *         for storing such vectors.
  *         """
- *         cdef SlepcPEPScale scale = PEP_SCALE_NONE             # <<<<<<<<<<<<<<
- *         cdef PetscReal alpha = 0
- *         cdef PetscInt its = 0
+ *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         if flag: tval = PETSC_TRUE
+ *         CHKERR( SVDLanczosSetOneSide(self.svd, tval) )
  */
-  __pyx_v_scale = PEP_SCALE_NONE;
+  __pyx_v_tval = PETSC_FALSE;
 
-  /* "SLEPc/PEP.pyx":582
+  /* "SLEPc/SVD.pyx":788
  *         """
- *         cdef SlepcPEPScale scale = PEP_SCALE_NONE
- *         cdef PetscReal alpha = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt its = 0
- *         cdef PetscReal lbda = 0
- */
-  __pyx_v_alpha = 0.0;
-
-  /* "SLEPc/PEP.pyx":583
- *         cdef SlepcPEPScale scale = PEP_SCALE_NONE
- *         cdef PetscReal alpha = 0
- *         cdef PetscInt its = 0             # <<<<<<<<<<<<<<
- *         cdef PetscReal lbda = 0
- *         cdef PetscVec vecl = NULL
- */
-  __pyx_v_its = 0;
-
-  /* "SLEPc/PEP.pyx":584
- *         cdef PetscReal alpha = 0
- *         cdef PetscInt its = 0
- *         cdef PetscReal lbda = 0             # <<<<<<<<<<<<<<
- *         cdef PetscVec vecl = NULL
- *         cdef PetscVec vecr = NULL
- */
-  __pyx_v_lbda = 0.0;
-
-  /* "SLEPc/PEP.pyx":585
- *         cdef PetscInt its = 0
- *         cdef PetscReal lbda = 0
- *         cdef PetscVec vecl = NULL             # <<<<<<<<<<<<<<
- *         cdef PetscVec vecr = NULL
- *         CHKERR( PEPGetScale(self.pep, &scale, &alpha, &vecl, &vecr, &its, &lbda) )
- */
-  __pyx_v_vecl = NULL;
-
-  /* "SLEPc/PEP.pyx":586
- *         cdef PetscReal lbda = 0
- *         cdef PetscVec vecl = NULL
- *         cdef PetscVec vecr = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( PEPGetScale(self.pep, &scale, &alpha, &vecl, &vecr, &its, &lbda) )
- *         if Dl.vec != NULL:
- */
-  __pyx_v_vecr = NULL;
-
-  /* "SLEPc/PEP.pyx":587
- *         cdef PetscVec vecl = NULL
- *         cdef PetscVec vecr = NULL
- *         CHKERR( PEPGetScale(self.pep, &scale, &alpha, &vecl, &vecr, &its, &lbda) )             # <<<<<<<<<<<<<<
- *         if Dl.vec != NULL:
- *             if vecl != NULL:
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetScale(__pyx_v_self->pep, (&__pyx_v_scale), (&__pyx_v_alpha), (&__pyx_v_vecl), (&__pyx_v_vecr), (&__pyx_v_its), (&__pyx_v_lbda))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/PEP.pyx":588
- *         cdef PetscVec vecr = NULL
- *         CHKERR( PEPGetScale(self.pep, &scale, &alpha, &vecl, &vecr, &its, &lbda) )
- *         if Dl.vec != NULL:             # <<<<<<<<<<<<<<
- *             if vecl != NULL:
- *                 CHKERR( VecCopy(vecl, Dl.vec) )
- */
-  __pyx_t_2 = ((__pyx_v_Dl->vec != NULL) != 0);
-  if (__pyx_t_2) {
-
-    /* "SLEPc/PEP.pyx":589
- *         CHKERR( PEPGetScale(self.pep, &scale, &alpha, &vecl, &vecr, &its, &lbda) )
- *         if Dl.vec != NULL:
- *             if vecl != NULL:             # <<<<<<<<<<<<<<
- *                 CHKERR( VecCopy(vecl, Dl.vec) )
- *             else:
- */
-    __pyx_t_2 = ((__pyx_v_vecl != NULL) != 0);
-    if (__pyx_t_2) {
-
-      /* "SLEPc/PEP.pyx":590
- *         if Dl.vec != NULL:
- *             if vecl != NULL:
- *                 CHKERR( VecCopy(vecl, Dl.vec) )             # <<<<<<<<<<<<<<
- *             else:
- *                 CHKERR( VecSet(Dl.vec, 1.0) )
- */
-      __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(VecCopy(__pyx_v_vecl, __pyx_v_Dl->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      goto __pyx_L4;
-    }
-    /*else*/ {
-
-      /* "SLEPc/PEP.pyx":592
- *                 CHKERR( VecCopy(vecl, Dl.vec) )
- *             else:
- *                 CHKERR( VecSet(Dl.vec, 1.0) )             # <<<<<<<<<<<<<<
- *         if Dr.vec != NULL:
- *             if vecr != NULL:
- */
-      __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(VecSet(__pyx_v_Dl->vec, 1.0)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 592; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    }
-    __pyx_L4:;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "SLEPc/PEP.pyx":593
- *             else:
- *                 CHKERR( VecSet(Dl.vec, 1.0) )
- *         if Dr.vec != NULL:             # <<<<<<<<<<<<<<
- *             if vecr != NULL:
- *                 CHKERR( VecCopy(vecr, Dr.vec) )
- */
-  __pyx_t_2 = ((__pyx_v_Dr->vec != NULL) != 0);
-  if (__pyx_t_2) {
-
-    /* "SLEPc/PEP.pyx":594
- *                 CHKERR( VecSet(Dl.vec, 1.0) )
- *         if Dr.vec != NULL:
- *             if vecr != NULL:             # <<<<<<<<<<<<<<
- *                 CHKERR( VecCopy(vecr, Dr.vec) )
- *             else:
- */
-    __pyx_t_2 = ((__pyx_v_vecr != NULL) != 0);
-    if (__pyx_t_2) {
-
-      /* "SLEPc/PEP.pyx":595
- *         if Dr.vec != NULL:
- *             if vecr != NULL:
- *                 CHKERR( VecCopy(vecr, Dr.vec) )             # <<<<<<<<<<<<<<
- *             else:
- *                 CHKERR( VecSet(Dr.vec, 1.0) )
- */
-      __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(VecCopy(__pyx_v_vecr, __pyx_v_Dr->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      goto __pyx_L6;
-    }
-    /*else*/ {
-
-      /* "SLEPc/PEP.pyx":597
- *                 CHKERR( VecCopy(vecr, Dr.vec) )
- *             else:
- *                 CHKERR( VecSet(Dr.vec, 1.0) )             # <<<<<<<<<<<<<<
- *         CHKERR( VecDestroy(&vecl) )
- *         CHKERR( VecDestroy(&vecr) )
- */
-      __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(VecSet(__pyx_v_Dr->vec, 1.0)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 597; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    }
-    __pyx_L6:;
-    goto __pyx_L5;
-  }
-  __pyx_L5:;
-
-  /* "SLEPc/PEP.pyx":598
- *             else:
- *                 CHKERR( VecSet(Dr.vec, 1.0) )
- *         CHKERR( VecDestroy(&vecl) )             # <<<<<<<<<<<<<<
- *         CHKERR( VecDestroy(&vecr) )
- *         return (scale, toReal(alpha), toInt(its), toReal(lbda))
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(VecDestroy((&__pyx_v_vecl))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/PEP.pyx":599
- *                 CHKERR( VecSet(Dr.vec, 1.0) )
- *         CHKERR( VecDestroy(&vecl) )
- *         CHKERR( VecDestroy(&vecr) )             # <<<<<<<<<<<<<<
- *         return (scale, toReal(alpha), toInt(its), toReal(lbda))
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         if flag: tval = PETSC_TRUE             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDLanczosSetOneSide(self.svd, tval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(VecDestroy((&__pyx_v_vecr))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_flag); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(14, 788, __pyx_L1_error)
+  if (__pyx_t_1) {
+    __pyx_v_tval = PETSC_TRUE;
+  }
 
-  /* "SLEPc/PEP.pyx":600
- *         CHKERR( VecDestroy(&vecl) )
- *         CHKERR( VecDestroy(&vecr) )
- *         return (scale, toReal(alpha), toInt(its), toReal(lbda))             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":789
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         if flag: tval = PETSC_TRUE
+ *         CHKERR( SVDLanczosSetOneSide(self.svd, tval) )             # <<<<<<<<<<<<<<
  * 
- *     def setScale(self, scale, alpha=None, Vec Dl=None, Vec Dr=None, its=None, lbda=None):
+ *     def setTRLanczosOneSide(self, flag=True):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = PyInt_FromLong(__pyx_v_scale); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_alpha); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_its); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_lbda); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = PyTuple_New(4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
-  __Pyx_GIVEREF(__pyx_t_3);
-  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_4);
-  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_4);
-  __Pyx_GIVEREF(__pyx_t_5);
-  PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_5);
-  __Pyx_GIVEREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_t_6);
-  __pyx_t_3 = 0;
-  __pyx_t_4 = 0;
-  __pyx_t_5 = 0;
-  __pyx_t_6 = 0;
-  __pyx_r = __pyx_t_7;
-  __pyx_t_7 = 0;
-  goto __pyx_L0;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDLanczosSetOneSide(__pyx_v_self->svd, __pyx_v_tval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(14, 789, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":559
- *         CHKERR( PEPSetST(self.pep, st.st) )
+  /* "SLEPc/SVD.pyx":769
+ *         return <bint>tval
  * 
- *     def getScale(self, Vec Dl=None, Vec Dr=None):             # <<<<<<<<<<<<<<
+ *     def setLanczosOneSide(self, flag=True):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the strategy used for scaling the polynomial eigenproblem.
+ *         Indicate if the variant of the Lanczos method to be used is
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_XDECREF(__pyx_t_6);
-  __Pyx_XDECREF(__pyx_t_7);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getScale", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setLanczosOneSide", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -36970,47 +37093,30 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_58getScale(struct PySlepcPEPObje
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":602
- *         return (scale, toReal(alpha), toInt(its), toReal(lbda))
+/* "SLEPc/SVD.pyx":791
+ *         CHKERR( SVDLanczosSetOneSide(self.svd, tval) )
  * 
- *     def setScale(self, scale, alpha=None, Vec Dl=None, Vec Dr=None, its=None, lbda=None):             # <<<<<<<<<<<<<<
+ *     def setTRLanczosOneSide(self, flag=True):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the scaling strategy to be used for scaling the polynomial problem
+ *         Indicate if the variant of the thick-restart Lanczos method to
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_61setScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_60setScale[] = "PEP.setScale(self, scale, alpha=None, Vec Dl=None, Vec Dr=None, its=None, lbda=None)\n\n        Sets the scaling strategy to be used for scaling the polynomial problem\n        before attempting to solve.\n\n        Parameters\n        ----------\n        scale: `PEP.Scale` enumerate\n            The scaling strategy.\n        alpha: real, optional\n            The scaling factor.\n        Dl: Vec, optional\n            The left [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_61setScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_scale = 0;
-  PyObject *__pyx_v_alpha = 0;
-  struct PyPetscVecObject *__pyx_v_Dl = 0;
-  struct PyPetscVecObject *__pyx_v_Dr = 0;
-  PyObject *__pyx_v_its = 0;
-  PyObject *__pyx_v_lbda = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_85setTRLanczosOneSide(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3SVD_84setTRLanczosOneSide[] = "SVD.setTRLanczosOneSide(self, flag=True)\n\n        Indicate if the variant of the thick-restart Lanczos method to\n        be used is one-sided or two-sided.\n\n        Parameters\n        ----------\n        flag: boolean\n              True if the method is one-sided.\n\n        Notes\n        -----\n        By default, a two-sided variant is selected, which is\n        sometimes slightly more robust. However, the  [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_85setTRLanczosOneSide(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setScale (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setTRLanczosOneSide (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_scale,&__pyx_n_s_alpha,&__pyx_n_s_Dl,&__pyx_n_s_Dr,&__pyx_n_s_its,&__pyx_n_s_lbda,0};
-    PyObject* values[6] = {0,0,0,0,0,0};
-    values[1] = ((PyObject *)Py_None);
-    values[2] = (PyObject *)((struct PyPetscVecObject *)Py_None);
-    values[3] = (PyObject *)((struct PyPetscVecObject *)Py_None);
-    values[4] = ((PyObject *)Py_None);
-    values[5] = ((PyObject *)Py_None);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag,0};
+    PyObject* values[1] = {0};
+    values[0] = ((PyObject *)Py_True);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
-        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
-        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
-        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -37018,255 +37124,89 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_61setScale(PyObject *__pyx_v_sel
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_scale)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha);
-          if (value) { values[1] = value; kw_args--; }
-        }
-        case  2:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Dl);
-          if (value) { values[2] = value; kw_args--; }
-        }
-        case  3:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Dr);
-          if (value) { values[3] = value; kw_args--; }
-        }
-        case  4:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_its);
-          if (value) { values[4] = value; kw_args--; }
-        }
-        case  5:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_lbda);
-          if (value) { values[5] = value; kw_args--; }
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_flag);
+          if (value) { values[0] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setScale") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTRLanczosOneSide") < 0)) __PYX_ERR(14, 791, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
-        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
-        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        break;
+        case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_scale = values[0];
-    __pyx_v_alpha = values[1];
-    __pyx_v_Dl = ((struct PyPetscVecObject *)values[2]);
-    __pyx_v_Dr = ((struct PyPetscVecObject *)values[3]);
-    __pyx_v_its = values[4];
-    __pyx_v_lbda = values[5];
+    __pyx_v_flag = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setScale", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setTRLanczosOneSide", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(14, 791, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setScale", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setTRLanczosOneSide", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Dl), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "Dl", 0))) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Dr), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "Dr", 0))) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_60setScale(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_scale, __pyx_v_alpha, __pyx_v_Dl, __pyx_v_Dr, __pyx_v_its, __pyx_v_lbda);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_84setTRLanczosOneSide(((struct PySlepcSVDObject *)__pyx_v_self), __pyx_v_flag);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_60setScale(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_scale, PyObject *__pyx_v_alpha, struct PyPetscVecObject *__pyx_v_Dl, struct PyPetscVecObject *__pyx_v_Dr, PyObject *__pyx_v_its, PyObject *__pyx_v_lbda) {
-  PEPScale __pyx_v_senum;
-  PetscReal __pyx_v_rval1;
-  PetscInt __pyx_v_ival;
-  PetscReal __pyx_v_rval2;
-  Vec __pyx_v_vecl;
-  Vec __pyx_v_vecr;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_84setTRLanczosOneSide(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_flag) {
+  PetscBool __pyx_v_tval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PEPScale __pyx_t_1;
+  int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_t_3;
-  PetscReal __pyx_t_4;
-  Vec __pyx_t_5;
-  PetscInt __pyx_t_6;
-  int __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setScale", 0);
+  __Pyx_RefNannySetupContext("setTRLanczosOneSide", 0);
 
-  /* "SLEPc/PEP.pyx":622
- *             Approximation of the wanted eigenvalues (modulus).
+  /* "SLEPc/SVD.pyx":808
+ *         to left singular vectors.
  *         """
- *         cdef SlepcPEPScale senum = scale             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval1 = PETSC_DEFAULT
- *         cdef PetscInt ival = PETSC_DEFAULT
+ *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         if flag: tval = PETSC_TRUE
+ *         CHKERR( SVDLanczosSetOneSide(self.svd, tval) )
  */
-  __pyx_t_1 = ((PEPScale)PyInt_AsLong(__pyx_v_scale)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_senum = __pyx_t_1;
+  __pyx_v_tval = PETSC_FALSE;
 
-  /* "SLEPc/PEP.pyx":623
+  /* "SLEPc/SVD.pyx":809
  *         """
- *         cdef SlepcPEPScale senum = scale
- *         cdef PetscReal rval1 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival = PETSC_DEFAULT
- *         cdef PetscReal rval2 = PETSC_DEFAULT
- */
-  __pyx_v_rval1 = PETSC_DEFAULT;
-
-  /* "SLEPc/PEP.pyx":624
- *         cdef SlepcPEPScale senum = scale
- *         cdef PetscReal rval1 = PETSC_DEFAULT
- *         cdef PetscInt ival = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval2 = PETSC_DEFAULT
- *         cdef PetscVec vecl = NULL
- */
-  __pyx_v_ival = PETSC_DEFAULT;
-
-  /* "SLEPc/PEP.pyx":625
- *         cdef PetscReal rval1 = PETSC_DEFAULT
- *         cdef PetscInt ival = PETSC_DEFAULT
- *         cdef PetscReal rval2 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscVec vecl = NULL
- *         cdef PetscVec vecr = NULL
- */
-  __pyx_v_rval2 = PETSC_DEFAULT;
-
-  /* "SLEPc/PEP.pyx":626
- *         cdef PetscInt ival = PETSC_DEFAULT
- *         cdef PetscReal rval2 = PETSC_DEFAULT
- *         cdef PetscVec vecl = NULL             # <<<<<<<<<<<<<<
- *         cdef PetscVec vecr = NULL
- *         if alpha is not None: rval1 = asReal(alpha)
- */
-  __pyx_v_vecl = NULL;
-
-  /* "SLEPc/PEP.pyx":627
- *         cdef PetscReal rval2 = PETSC_DEFAULT
- *         cdef PetscVec vecl = NULL
- *         cdef PetscVec vecr = NULL             # <<<<<<<<<<<<<<
- *         if alpha is not None: rval1 = asReal(alpha)
- *         if Dl is not None:    vecl = Dl.vec
- */
-  __pyx_v_vecr = NULL;
-
-  /* "SLEPc/PEP.pyx":628
- *         cdef PetscVec vecl = NULL
- *         cdef PetscVec vecr = NULL
- *         if alpha is not None: rval1 = asReal(alpha)             # <<<<<<<<<<<<<<
- *         if Dl is not None:    vecl = Dl.vec
- *         if Dr is not None:    vecr = Dr.vec
- */
-  __pyx_t_2 = (__pyx_v_alpha != Py_None);
-  __pyx_t_3 = (__pyx_t_2 != 0);
-  if (__pyx_t_3) {
-    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_alpha); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_rval1 = __pyx_t_4;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "SLEPc/PEP.pyx":629
- *         cdef PetscVec vecr = NULL
- *         if alpha is not None: rval1 = asReal(alpha)
- *         if Dl is not None:    vecl = Dl.vec             # <<<<<<<<<<<<<<
- *         if Dr is not None:    vecr = Dr.vec
- *         if its is not None:   ival = asInt(its)
- */
-  __pyx_t_3 = (((PyObject *)__pyx_v_Dl) != Py_None);
-  __pyx_t_2 = (__pyx_t_3 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_5 = __pyx_v_Dl->vec;
-    __pyx_v_vecl = __pyx_t_5;
-    goto __pyx_L4;
-  }
-  __pyx_L4:;
-
-  /* "SLEPc/PEP.pyx":630
- *         if alpha is not None: rval1 = asReal(alpha)
- *         if Dl is not None:    vecl = Dl.vec
- *         if Dr is not None:    vecr = Dr.vec             # <<<<<<<<<<<<<<
- *         if its is not None:   ival = asInt(its)
- *         if lbda is not None:  rval2 = asReal(lbda)
- */
-  __pyx_t_2 = (((PyObject *)__pyx_v_Dr) != Py_None);
-  __pyx_t_3 = (__pyx_t_2 != 0);
-  if (__pyx_t_3) {
-    __pyx_t_5 = __pyx_v_Dr->vec;
-    __pyx_v_vecr = __pyx_t_5;
-    goto __pyx_L5;
-  }
-  __pyx_L5:;
-
-  /* "SLEPc/PEP.pyx":631
- *         if Dl is not None:    vecl = Dl.vec
- *         if Dr is not None:    vecr = Dr.vec
- *         if its is not None:   ival = asInt(its)             # <<<<<<<<<<<<<<
- *         if lbda is not None:  rval2 = asReal(lbda)
- *         CHKERR( PEPSetScale(self.pep, senum, rval1, vecl, vecr, ival, rval2) )
- */
-  __pyx_t_3 = (__pyx_v_its != Py_None);
-  __pyx_t_2 = (__pyx_t_3 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_6 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_its); if (unlikely(__pyx_t_6 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival = __pyx_t_6;
-    goto __pyx_L6;
-  }
-  __pyx_L6:;
-
-  /* "SLEPc/PEP.pyx":632
- *         if Dr is not None:    vecr = Dr.vec
- *         if its is not None:   ival = asInt(its)
- *         if lbda is not None:  rval2 = asReal(lbda)             # <<<<<<<<<<<<<<
- *         CHKERR( PEPSetScale(self.pep, senum, rval1, vecl, vecr, ival, rval2) )
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         if flag: tval = PETSC_TRUE             # <<<<<<<<<<<<<<
+ *         CHKERR( SVDLanczosSetOneSide(self.svd, tval) )
  * 
  */
-  __pyx_t_2 = (__pyx_v_lbda != Py_None);
-  __pyx_t_3 = (__pyx_t_2 != 0);
-  if (__pyx_t_3) {
-    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_lbda); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_rval2 = __pyx_t_4;
-    goto __pyx_L7;
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_flag); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(14, 809, __pyx_L1_error)
+  if (__pyx_t_1) {
+    __pyx_v_tval = PETSC_TRUE;
   }
-  __pyx_L7:;
 
-  /* "SLEPc/PEP.pyx":633
- *         if its is not None:   ival = asInt(its)
- *         if lbda is not None:  rval2 = asReal(lbda)
- *         CHKERR( PEPSetScale(self.pep, senum, rval1, vecl, vecr, ival, rval2) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":810
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         if flag: tval = PETSC_TRUE
+ *         CHKERR( SVDLanczosSetOneSide(self.svd, tval) )             # <<<<<<<<<<<<<<
  * 
- *     def getBV(self):
+ *     #
  */
-  __pyx_t_7 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetScale(__pyx_v_self->pep, __pyx_v_senum, __pyx_v_rval1, __pyx_v_vecl, __pyx_v_vecr, __pyx_v_ival, __pyx_v_rval2)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SVDLanczosSetOneSide(__pyx_v_self->svd, __pyx_v_tval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(14, 810, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":602
- *         return (scale, toReal(alpha), toInt(its), toReal(lbda))
+  /* "SLEPc/SVD.pyx":791
+ *         CHKERR( SVDLanczosSetOneSide(self.svd, tval) )
  * 
- *     def setScale(self, scale, alpha=None, Vec Dl=None, Vec Dr=None, its=None, lbda=None):             # <<<<<<<<<<<<<<
+ *     def setTRLanczosOneSide(self, flag=True):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the scaling strategy to be used for scaling the polynomial problem
+ *         Indicate if the variant of the thick-restart Lanczos method to
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setScale", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.setTRLanczosOneSide", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -37274,842 +37214,580 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_60setScale(struct PySlepcPEPObje
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":635
- *         CHKERR( PEPSetScale(self.pep, senum, rval1, vecl, vecr, ival, rval2) )
+/* "SLEPc/SVD.pyx":815
  * 
- *     def getBV(self):             # <<<<<<<<<<<<<<
- *         """
- *         Obtain the basis vectors object associated to the eigensolver.
+ *     property transpose_mode:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getTransposeMode()
+ *         def __set__(self, value):
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_63getBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_62getBV[] = "PEP.getBV(self)\n\n        Obtain the basis vectors object associated to the eigensolver.\n\n        Returns\n        -------\n        bv: BV\n            The basis vectors context.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_63getBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_14transpose_mode_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_14transpose_mode_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getBV (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getBV", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getBV", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_62getBV(((struct PySlepcPEPObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_14transpose_mode___get__(((struct PySlepcSVDObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_62getBV(struct PySlepcPEPObject *__pyx_v_self) {
-  struct PySlepcBVObject *__pyx_v_bv = 0;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_14transpose_mode___get__(struct PySlepcSVDObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getBV", 0);
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "SLEPc/PEP.pyx":644
- *             The basis vectors context.
- *         """
- *         cdef BV bv = BV()             # <<<<<<<<<<<<<<
- *         CHKERR( PEPGetBV(self.pep, &bv.bv) )
- *         PetscINCREF(bv.obj)
+  /* "SLEPc/SVD.pyx":816
+ *     property transpose_mode:
+ *         def __get__(self):
+ *             return self.getTransposeMode()             # <<<<<<<<<<<<<<
+ *         def __set__(self, value):
+ *             self.setTransposeMode(value)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_BV)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getTransposeMode); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 816, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
+  }
+  if (__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 816, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  } else {
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 816, __pyx_L1_error)
+  }
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_bv = ((struct PySlepcBVObject *)__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
+  goto __pyx_L0;
 
-  /* "SLEPc/PEP.pyx":645
- *         """
- *         cdef BV bv = BV()
- *         CHKERR( PEPGetBV(self.pep, &bv.bv) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(bv.obj)
- *         return bv
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetBV(__pyx_v_self->pep, (&__pyx_v_bv->bv))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/PEP.pyx":646
- *         cdef BV bv = BV()
- *         CHKERR( PEPGetBV(self.pep, &bv.bv) )
- *         PetscINCREF(bv.obj)             # <<<<<<<<<<<<<<
- *         return bv
+  /* "SLEPc/SVD.pyx":815
  * 
- */
-  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_bv->__pyx_base.obj);
-
-  /* "SLEPc/PEP.pyx":647
- *         CHKERR( PEPGetBV(self.pep, &bv.bv) )
- *         PetscINCREF(bv.obj)
- *         return bv             # <<<<<<<<<<<<<<
- * 
- *     def setBV(self, BV bv not None):
- */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_bv));
-  __pyx_r = ((PyObject *)__pyx_v_bv);
-  goto __pyx_L0;
-
-  /* "SLEPc/PEP.pyx":635
- *         CHKERR( PEPSetScale(self.pep, senum, rval1, vecl, vecr, ival, rval2) )
- * 
- *     def getBV(self):             # <<<<<<<<<<<<<<
- *         """
- *         Obtain the basis vectors object associated to the eigensolver.
+ *     property transpose_mode:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getTransposeMode()
+ *         def __set__(self, value):
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.transpose_mode.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_bv);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":649
- *         return bv
+/* "SLEPc/SVD.pyx":817
+ *         def __get__(self):
+ *             return self.getTransposeMode()
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setTransposeMode(value)
  * 
- *     def setBV(self, BV bv not None):             # <<<<<<<<<<<<<<
- *         """
- *         Associates a basis vectors object to the eigensolver.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_65setBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_64setBV[] = "PEP.setBV(self, BV bv)\n\n        Associates a basis vectors object to the eigensolver.\n\n        Parameters\n        ----------\n        bv: BV\n            The basis vectors context.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_65setBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PySlepcBVObject *__pyx_v_bv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  PyObject *__pyx_r = 0;
+static int __pyx_pw_8slepc4py_5SLEPc_3SVD_14transpose_mode_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_8slepc4py_5SLEPc_3SVD_14transpose_mode_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setBV (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_bv,0};
-    PyObject* values[1] = {0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_bv)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setBV") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-    }
-    __pyx_v_bv = ((struct PySlepcBVObject *)values[0]);
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setBV", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_bv), __pyx_ptype_8slepc4py_5SLEPc_BV, 0, "bv", 0))) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_64setBV(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_bv);
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_14transpose_mode_2__set__(((struct PySlepcSVDObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_64setBV(struct PySlepcPEPObject *__pyx_v_self, struct PySlepcBVObject *__pyx_v_bv) {
-  PyObject *__pyx_r = NULL;
+static int __pyx_pf_8slepc4py_5SLEPc_3SVD_14transpose_mode_2__set__(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setBV", 0);
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "SLEPc/PEP.pyx":658
- *             The basis vectors context.
- *         """
- *         CHKERR( PEPSetBV(self.pep, bv.bv) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":818
+ *             return self.getTransposeMode()
+ *         def __set__(self, value):
+ *             self.setTransposeMode(value)             # <<<<<<<<<<<<<<
  * 
- *     def getOperators(self):
+ *     property which:
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetBV(__pyx_v_self->pep, __pyx_v_bv->bv)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTransposeMode); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 818, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
+  }
+  if (!__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 818, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+  } else {
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(14, 818, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+    __Pyx_INCREF(__pyx_v_value);
+    __Pyx_GIVEREF(__pyx_v_value);
+    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 818, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  }
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "SLEPc/PEP.pyx":649
- *         return bv
+  /* "SLEPc/SVD.pyx":817
+ *         def __get__(self):
+ *             return self.getTransposeMode()
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setTransposeMode(value)
  * 
- *     def setBV(self, BV bv not None):             # <<<<<<<<<<<<<<
- *         """
- *         Associates a basis vectors object to the eigensolver.
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.transpose_mode.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
   __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":660
- *         CHKERR( PEPSetBV(self.pep, bv.bv) )
+/* "SLEPc/SVD.pyx":821
  * 
- *     def getOperators(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the matrices associated with the eigenvalue problem.
+ *     property which:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getWhichSingularTriplets()
+ *         def __set__(self, value):
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_67getOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_66getOperators[] = "PEP.getOperators(self)\n\n        Gets the matrices associated with the eigenvalue problem.\n\n        Returns\n        -------\n        operators: tuple of Mat\n           The matrices associated with the eigensystem.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_67getOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_5which_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_5which_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getOperators (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getOperators", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getOperators", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_66getOperators(((struct PySlepcPEPObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_5which___get__(((struct PySlepcSVDObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_66getOperators(struct PySlepcPEPObject *__pyx_v_self) {
-  struct PyPetscMatObject *__pyx_v_A = 0;
-  Mat __pyx_v_mat;
-  PetscInt __pyx_v_k;
-  PetscInt __pyx_v_n;
-  PyObject *__pyx_v_operators = 0;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_5which___get__(struct PySlepcSVDObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
-  PetscInt __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getOperators", 0);
-
-  /* "SLEPc/PEP.pyx":670
- *         """
- *         cdef Mat A
- *         cdef PetscMat mat = NULL             # <<<<<<<<<<<<<<
- *         cdef PetscInt k=0, n=0
- *         CHKERR( PEPGetNumMatrices(self.pep, &n) )
- */
-  __pyx_v_mat = NULL;
-
-  /* "SLEPc/PEP.pyx":671
- *         cdef Mat A
- *         cdef PetscMat mat = NULL
- *         cdef PetscInt k=0, n=0             # <<<<<<<<<<<<<<
- *         CHKERR( PEPGetNumMatrices(self.pep, &n) )
- *         cdef object operators = []
- */
-  __pyx_v_k = 0;
-  __pyx_v_n = 0;
-
-  /* "SLEPc/PEP.pyx":672
- *         cdef PetscMat mat = NULL
- *         cdef PetscInt k=0, n=0
- *         CHKERR( PEPGetNumMatrices(self.pep, &n) )             # <<<<<<<<<<<<<<
- *         cdef object operators = []
- *         for k from 0 <= k < n:
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetNumMatrices(__pyx_v_self->pep, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 672; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/PEP.pyx":673
- *         cdef PetscInt k=0, n=0
- *         CHKERR( PEPGetNumMatrices(self.pep, &n) )
- *         cdef object operators = []             # <<<<<<<<<<<<<<
- *         for k from 0 <= k < n:
- *             CHKERR( PEPGetOperators(self.pep, k, &mat) )
- */
-  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_v_operators = __pyx_t_2;
-  __pyx_t_2 = 0;
-
-  /* "SLEPc/PEP.pyx":674
- *         CHKERR( PEPGetNumMatrices(self.pep, &n) )
- *         cdef object operators = []
- *         for k from 0 <= k < n:             # <<<<<<<<<<<<<<
- *             CHKERR( PEPGetOperators(self.pep, k, &mat) )
- *             A = Mat(); A.mat = mat; PetscINCREF(A.obj)
- */
-  __pyx_t_3 = __pyx_v_n;
-  for (__pyx_v_k = 0; __pyx_v_k < __pyx_t_3; __pyx_v_k++) {
-
-    /* "SLEPc/PEP.pyx":675
- *         cdef object operators = []
- *         for k from 0 <= k < n:
- *             CHKERR( PEPGetOperators(self.pep, k, &mat) )             # <<<<<<<<<<<<<<
- *             A = Mat(); A.mat = mat; PetscINCREF(A.obj)
- *             operators.append(A)
- */
-    __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetOperators(__pyx_v_self->pep, __pyx_v_k, (&__pyx_v_mat))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 675; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-    /* "SLEPc/PEP.pyx":676
- *         for k from 0 <= k < n:
- *             CHKERR( PEPGetOperators(self.pep, k, &mat) )
- *             A = Mat(); A.mat = mat; PetscINCREF(A.obj)             # <<<<<<<<<<<<<<
- *             operators.append(A)
- *         return tuple(operators)
- */
-    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Mat)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 676; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_XDECREF_SET(__pyx_v_A, ((struct PyPetscMatObject *)__pyx_t_2));
-    __pyx_t_2 = 0;
-    __pyx_v_A->mat = __pyx_v_mat;
-    __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_A->__pyx_base.obj);
-
-    /* "SLEPc/PEP.pyx":677
- *             CHKERR( PEPGetOperators(self.pep, k, &mat) )
- *             A = Mat(); A.mat = mat; PetscINCREF(A.obj)
- *             operators.append(A)             # <<<<<<<<<<<<<<
- *         return tuple(operators)
- * 
- */
-    __pyx_t_4 = __Pyx_PyObject_Append(__pyx_v_operators, ((PyObject *)__pyx_v_A)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 677; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "SLEPc/PEP.pyx":678
- *             A = Mat(); A.mat = mat; PetscINCREF(A.obj)
- *             operators.append(A)
- *         return tuple(operators)             # <<<<<<<<<<<<<<
- * 
- *     def setOperators(self, operators):
+  /* "SLEPc/SVD.pyx":822
+ *     property which:
+ *         def __get__(self):
+ *             return self.getWhichSingularTriplets()             # <<<<<<<<<<<<<<
+ *         def __set__(self, value):
+ *             self.setWhichSingularTriplets(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PySequence_Tuple(__pyx_v_operators); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getWhichSingularTriplets); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 822, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
+  }
+  if (__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 822, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  } else {
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 822, __pyx_L1_error)
+  }
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/PEP.pyx":660
- *         CHKERR( PEPSetBV(self.pep, bv.bv) )
+  /* "SLEPc/SVD.pyx":821
  * 
- *     def getOperators(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the matrices associated with the eigenvalue problem.
+ *     property which:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getWhichSingularTriplets()
+ *         def __set__(self, value):
  */
 
   /* function exit code */
   __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getOperators", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.which.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_A);
-  __Pyx_XDECREF(__pyx_v_operators);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":680
- *         return tuple(operators)
+/* "SLEPc/SVD.pyx":823
+ *         def __get__(self):
+ *             return self.getWhichSingularTriplets()
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setWhichSingularTriplets(value)
  * 
- *     def setOperators(self, operators):             # <<<<<<<<<<<<<<
- *         """
- *         Sets the matrices associated with the eigenvalue problem.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_69setOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_68setOperators[] = "PEP.setOperators(self, operators)\n\n        Sets the matrices associated with the eigenvalue problem.\n\n        Parameters\n        ----------\n        operators: sequence of Mat\n           The matrices associated with the eigensystem.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_69setOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_operators = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  PyObject *__pyx_r = 0;
+static int __pyx_pw_8slepc4py_5SLEPc_3SVD_5which_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_8slepc4py_5SLEPc_3SVD_5which_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setOperators (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_operators,0};
-    PyObject* values[1] = {0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_operators)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOperators") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-    }
-    __pyx_v_operators = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setOperators", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setOperators", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_68setOperators(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_operators);
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_5which_2__set__(((struct PySlepcSVDObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_68setOperators(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_operators) {
-  Mat *__pyx_v_mats;
-  Py_ssize_t __pyx_v_k;
-  Py_ssize_t __pyx_v_n;
-  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
-  PyObject *__pyx_r = NULL;
+static int __pyx_pf_8slepc4py_5SLEPc_3SVD_5which_2__set__(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  Py_ssize_t __pyx_t_2;
-  Mat __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setOperators", 0);
-  __Pyx_INCREF(__pyx_v_operators);
-
-  /* "SLEPc/PEP.pyx":689
- *            The matrices associated with the eigensystem.
- *         """
- *         operators = tuple(operators)             # <<<<<<<<<<<<<<
- *         cdef PetscMat *mats = NULL
- *         cdef Py_ssize_t k=0, n = len(operators)
- */
-  __pyx_t_1 = PySequence_Tuple(__pyx_v_operators); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 689; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_operators, __pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "SLEPc/PEP.pyx":690
- *         """
- *         operators = tuple(operators)
- *         cdef PetscMat *mats = NULL             # <<<<<<<<<<<<<<
- *         cdef Py_ssize_t k=0, n = len(operators)
- *         cdef tmp = allocate(<size_t>n*sizeof(PetscMat),<void**>&mats)
- */
-  __pyx_v_mats = NULL;
-
-  /* "SLEPc/PEP.pyx":691
- *         operators = tuple(operators)
- *         cdef PetscMat *mats = NULL
- *         cdef Py_ssize_t k=0, n = len(operators)             # <<<<<<<<<<<<<<
- *         cdef tmp = allocate(<size_t>n*sizeof(PetscMat),<void**>&mats)
- *         for k from 0 <= k < n: mats[k] = (<Mat?>operators[k]).mat
- */
-  __pyx_v_k = 0;
-  __pyx_t_2 = PyObject_Length(__pyx_v_operators); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 691; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_n = __pyx_t_2;
-
-  /* "SLEPc/PEP.pyx":692
- *         cdef PetscMat *mats = NULL
- *         cdef Py_ssize_t k=0, n = len(operators)
- *         cdef tmp = allocate(<size_t>n*sizeof(PetscMat),<void**>&mats)             # <<<<<<<<<<<<<<
- *         for k from 0 <= k < n: mats[k] = (<Mat?>operators[k]).mat
- *         CHKERR( PEPSetOperators(self.pep, <PetscInt>n, mats) )
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_allocate((((size_t)__pyx_v_n) * (sizeof(Mat))), ((void **)(&__pyx_v_mats))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 692; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_tmp = __pyx_t_1;
-  __pyx_t_1 = 0;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "SLEPc/PEP.pyx":693
- *         cdef Py_ssize_t k=0, n = len(operators)
- *         cdef tmp = allocate(<size_t>n*sizeof(PetscMat),<void**>&mats)
- *         for k from 0 <= k < n: mats[k] = (<Mat?>operators[k]).mat             # <<<<<<<<<<<<<<
- *         CHKERR( PEPSetOperators(self.pep, <PetscInt>n, mats) )
+  /* "SLEPc/SVD.pyx":824
+ *             return self.getWhichSingularTriplets()
+ *         def __set__(self, value):
+ *             self.setWhichSingularTriplets(value)             # <<<<<<<<<<<<<<
  * 
+ *     property tol:
  */
-  __pyx_t_2 = __pyx_v_n;
-  for (__pyx_v_k = 0; __pyx_v_k < __pyx_t_2; __pyx_v_k++) {
-    __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_operators, __pyx_v_k, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 693; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setWhichSingularTriplets); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 824, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
+  }
+  if (!__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 824, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Mat)))) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 693; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = ((struct PyPetscMatObject *)__pyx_t_1)->mat;
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    (__pyx_v_mats[__pyx_v_k]) = __pyx_t_3;
+  } else {
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(14, 824, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+    __Pyx_INCREF(__pyx_v_value);
+    __Pyx_GIVEREF(__pyx_v_value);
+    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 824, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "SLEPc/PEP.pyx":694
- *         cdef tmp = allocate(<size_t>n*sizeof(PetscMat),<void**>&mats)
- *         for k from 0 <= k < n: mats[k] = (<Mat?>operators[k]).mat
- *         CHKERR( PEPSetOperators(self.pep, <PetscInt>n, mats) )             # <<<<<<<<<<<<<<
- * 
- *     #
- */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetOperators(__pyx_v_self->pep, ((PetscInt)__pyx_v_n), __pyx_v_mats)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 694; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/PEP.pyx":680
- *         return tuple(operators)
+  /* "SLEPc/SVD.pyx":823
+ *         def __get__(self):
+ *             return self.getWhichSingularTriplets()
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setWhichSingularTriplets(value)
  * 
- *     def setOperators(self, operators):             # <<<<<<<<<<<<<<
- *         """
- *         Sets the matrices associated with the eigenvalue problem.
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setOperators", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.which.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_tmp);
-  __Pyx_XDECREF(__pyx_v_operators);
-  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":698
- *     #
+/* "SLEPc/SVD.pyx":827
  * 
- *     def setInitialSpace(self, space):             # <<<<<<<<<<<<<<
- *         """
- *         Sets the initial space from which the eigensolver starts to
+ *     property tol:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getTolerances()[0]
+ *         def __set__(self, value):
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_71setInitialSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_70setInitialSpace[] = "PEP.setInitialSpace(self, space)\n\n        Sets the initial space from which the eigensolver starts to\n        iterate.\n\n        Parameters\n        ----------\n        space: Vec or sequence of Vec\n           The initial space\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_71setInitialSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_space = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_3tol_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_3tol_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setInitialSpace (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_space,0};
-    PyObject* values[1] = {0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_space)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInitialSpace") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-    }
-    __pyx_v_space = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setInitialSpace", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setInitialSpace", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_70setInitialSpace(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_space);
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_3tol___get__(((struct PySlepcSVDObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_70setInitialSpace(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_space) {
-  Vec *__pyx_v_vs;
-  Py_ssize_t __pyx_v_i;
-  Py_ssize_t __pyx_v_ns;
-  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_3tol___get__(struct PySlepcSVDObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_t_2;
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
-  Py_ssize_t __pyx_t_4;
-  Py_ssize_t __pyx_t_5;
-  Vec __pyx_t_6;
-  int __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setInitialSpace", 0);
-  __Pyx_INCREF(__pyx_v_space);
+  __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "SLEPc/PEP.pyx":708
- *            The initial space
- *         """
- *         if isinstance(space, Vec): space = [space]             # <<<<<<<<<<<<<<
- *         cdef PetscVec *vs = NULL
- *         cdef Py_ssize_t i = 0, ns = len(space)
+  /* "SLEPc/SVD.pyx":828
+ *     property tol:
+ *         def __get__(self):
+ *             return self.getTolerances()[0]             # <<<<<<<<<<<<<<
+ *         def __set__(self, value):
+ *             self.setTolerances(tol=value)
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_space, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)); 
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_INCREF(__pyx_v_space);
-    __Pyx_GIVEREF(__pyx_v_space);
-    PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_space);
-    __Pyx_DECREF_SET(__pyx_v_space, __pyx_t_3);
-    __pyx_t_3 = 0;
-    goto __pyx_L3;
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getTolerances); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 828, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
   }
-  __pyx_L3:;
-
-  /* "SLEPc/PEP.pyx":709
- *         """
- *         if isinstance(space, Vec): space = [space]
- *         cdef PetscVec *vs = NULL             # <<<<<<<<<<<<<<
- *         cdef Py_ssize_t i = 0, ns = len(space)
- *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
- */
-  __pyx_v_vs = NULL;
-
-  /* "SLEPc/PEP.pyx":710
- *         if isinstance(space, Vec): space = [space]
- *         cdef PetscVec *vs = NULL
- *         cdef Py_ssize_t i = 0, ns = len(space)             # <<<<<<<<<<<<<<
- *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
- *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
- */
-  __pyx_v_i = 0;
-  __pyx_t_4 = PyObject_Length(__pyx_v_space); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ns = __pyx_t_4;
-
-  /* "SLEPc/PEP.pyx":711
- *         cdef PetscVec *vs = NULL
- *         cdef Py_ssize_t i = 0, ns = len(space)
- *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)             # <<<<<<<<<<<<<<
- *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
- *         CHKERR( PEPSetInitialSpace(self.pep, <PetscInt>ns, vs) )
- */
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_allocate((((size_t)__pyx_v_ns) * (sizeof(struct PyPetscVecObject))), ((void **)(&__pyx_v_vs))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 711; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_v_tmp = __pyx_t_3;
-  __pyx_t_3 = 0;
-
-  /* "SLEPc/PEP.pyx":712
- *         cdef Py_ssize_t i = 0, ns = len(space)
- *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
- *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec             # <<<<<<<<<<<<<<
- *         CHKERR( PEPSetInitialSpace(self.pep, <PetscInt>ns, vs) )
- * 
- */
-  __pyx_t_4 = __pyx_v_ns;
-  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
-    __pyx_v_i = __pyx_t_5;
-    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_space, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 712; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-    __Pyx_GOTREF(__pyx_t_3);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_Vec)))) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 712; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_6 = ((struct PyPetscVecObject *)__pyx_t_3)->vec;
+  if (__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 828, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    (__pyx_v_vs[__pyx_v_i]) = __pyx_t_6;
+  } else {
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 828, __pyx_L1_error)
   }
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 828, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
 
-  /* "SLEPc/PEP.pyx":713
- *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
- *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
- *         CHKERR( PEPSetInitialSpace(self.pep, <PetscInt>ns, vs) )             # <<<<<<<<<<<<<<
- * 
- *     #
- */
-  __pyx_t_7 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetInitialSpace(__pyx_v_self->pep, ((PetscInt)__pyx_v_ns), __pyx_v_vs)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 713; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/PEP.pyx":698
- *     #
+  /* "SLEPc/SVD.pyx":827
  * 
- *     def setInitialSpace(self, space):             # <<<<<<<<<<<<<<
- *         """
- *         Sets the initial space from which the eigensolver starts to
+ *     property tol:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getTolerances()[0]
+ *         def __set__(self, value):
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setInitialSpace", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.tol.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_tmp);
-  __Pyx_XDECREF(__pyx_v_space);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":717
- *     #
+/* "SLEPc/SVD.pyx":829
+ *         def __get__(self):
+ *             return self.getTolerances()[0]
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setTolerances(tol=value)
  * 
- *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
- *         """
- *         Clears all monitors for a PEP object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_73cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_72cancelMonitor[] = "PEP.cancelMonitor(self)\n\n        Clears all monitors for a PEP object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_73cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
+static int __pyx_pw_8slepc4py_5SLEPc_3SVD_3tol_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_8slepc4py_5SLEPc_3SVD_3tol_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("cancelMonitor (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("cancelMonitor", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "cancelMonitor", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_72cancelMonitor(((struct PySlepcPEPObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_3tol_2__set__(((struct PySlepcSVDObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_72cancelMonitor(struct PySlepcPEPObject *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
+static int __pyx_pf_8slepc4py_5SLEPc_3SVD_3tol_2__set__(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("cancelMonitor", 0);
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "SLEPc/PEP.pyx":721
- *         Clears all monitors for a PEP object.
- *         """
- *         CHKERR( PEPMonitorCancel(self.pep) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":830
+ *             return self.getTolerances()[0]
+ *         def __set__(self, value):
+ *             self.setTolerances(tol=value)             # <<<<<<<<<<<<<<
  * 
- *     #
+ *     property max_it:
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPMonitorCancel(__pyx_v_self->pep)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 721; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTolerances); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 830, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 830, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_tol, __pyx_v_value) < 0) __PYX_ERR(14, 830, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(14, 830, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "SLEPc/PEP.pyx":717
- *     #
+  /* "SLEPc/SVD.pyx":829
+ *         def __get__(self):
+ *             return self.getTolerances()[0]
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setTolerances(tol=value)
  * 
- *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
- *         """
- *         Clears all monitors for a PEP object.
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.cancelMonitor", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.tol.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
   __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":725
- *     #
+/* "SLEPc/SVD.pyx":833
  * 
- *     def setUp(self):             # <<<<<<<<<<<<<<
- *         """
- *         Sets up all the internal data structures necessary for the
+ *     property max_it:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getTolerances()[1]
+ *         def __set__(self, value):
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_75setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_74setUp[] = "PEP.setUp(self)\n\n        Sets up all the internal data structures necessary for the\n        execution of the eigensolver.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_75setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_6max_it_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_6max_it_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setUp (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("setUp", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setUp", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_74setUp(((struct PySlepcPEPObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_6max_it___get__(((struct PySlepcSVDObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_74setUp(struct PySlepcPEPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_6max_it___get__(struct PySlepcSVDObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setUp", 0);
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "SLEPc/PEP.pyx":730
- *         execution of the eigensolver.
- *         """
- *         CHKERR( PEPSetUp(self.pep) )             # <<<<<<<<<<<<<<
- * 
- *     def solve(self):
+  /* "SLEPc/SVD.pyx":834
+ *     property max_it:
+ *         def __get__(self):
+ *             return self.getTolerances()[1]             # <<<<<<<<<<<<<<
+ *         def __set__(self, value):
+ *             self.setTolerances(max_it=value)
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetUp(__pyx_v_self->pep)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getTolerances); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 834, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
+  }
+  if (__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 834, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  } else {
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 834, __pyx_L1_error)
+  }
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 834, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
 
-  /* "SLEPc/PEP.pyx":725
- *     #
+  /* "SLEPc/SVD.pyx":833
  * 
- *     def setUp(self):             # <<<<<<<<<<<<<<
- *         """
- *         Sets up all the internal data structures necessary for the
+ *     property max_it:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getTolerances()[1]
+ *         def __set__(self, value):
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setUp", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.max_it.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -38117,149 +37795,150 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_74setUp(struct PySlepcPEPObject
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":732
- *         CHKERR( PEPSetUp(self.pep) )
+/* "SLEPc/SVD.pyx":835
+ *         def __get__(self):
+ *             return self.getTolerances()[1]
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setTolerances(max_it=value)
  * 
- *     def solve(self):             # <<<<<<<<<<<<<<
- *         """
- *         Solves the eigensystem.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_77solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_76solve[] = "PEP.solve(self)\n\n        Solves the eigensystem.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_77solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
+static int __pyx_pw_8slepc4py_5SLEPc_3SVD_6max_it_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_8slepc4py_5SLEPc_3SVD_6max_it_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("solve (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("solve", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "solve", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_76solve(((struct PySlepcPEPObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_6max_it_2__set__(((struct PySlepcSVDObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_76solve(struct PySlepcPEPObject *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
+static int __pyx_pf_8slepc4py_5SLEPc_3SVD_6max_it_2__set__(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("solve", 0);
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "SLEPc/PEP.pyx":736
- *         Solves the eigensystem.
- *         """
- *         CHKERR( PEPSolve(self.pep) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/SVD.pyx":836
+ *             return self.getTolerances()[1]
+ *         def __set__(self, value):
+ *             self.setTolerances(max_it=value)             # <<<<<<<<<<<<<<
  * 
- *     def getIterationNumber(self):
+ *     property bv:
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSolve(__pyx_v_self->pep)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTolerances); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 836, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 836, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_max_it, __pyx_v_value) < 0) __PYX_ERR(14, 836, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(14, 836, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "SLEPc/PEP.pyx":732
- *         CHKERR( PEPSetUp(self.pep) )
+  /* "SLEPc/SVD.pyx":835
+ *         def __get__(self):
+ *             return self.getTolerances()[1]
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setTolerances(max_it=value)
  * 
- *     def solve(self):             # <<<<<<<<<<<<<<
- *         """
- *         Solves the eigensystem.
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.solve", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.max_it.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
   __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":738
- *         CHKERR( PEPSolve(self.pep) )
+/* "SLEPc/SVD.pyx":839
  * 
- *     def getIterationNumber(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the current iteration number. If the call to `solve()` is
+ *     property bv:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getBV()
+ *         def __set__(self, value):
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_79getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_78getIterationNumber[] = "PEP.getIterationNumber(self)\n\n        Gets the current iteration number. If the call to `solve()` is\n        complete, then it returns the number of iterations carried out\n        by the solution method.\n\n        Returns\n        -------\n        its: int\n             Iteration number.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_79getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_2bv_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3SVD_2bv_1__get__(PyObject *__pyx_v_self) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getIterationNumber (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getIterationNumber", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getIterationNumber", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_78getIterationNumber(((struct PySlepcPEPObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_2bv___get__(((struct PySlepcSVDObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_78getIterationNumber(struct PySlepcPEPObject *__pyx_v_self) {
-  PetscInt __pyx_v_ival;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3SVD_2bv___get__(struct PySlepcSVDObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getIterationNumber", 0);
-
-  /* "SLEPc/PEP.pyx":749
- *              Iteration number.
- *         """
- *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
- *         CHKERR( PEPGetIterationNumber(self.pep, &ival) )
- *         return toInt(ival)
- */
-  __pyx_v_ival = 0;
-
-  /* "SLEPc/PEP.pyx":750
- *         """
- *         cdef PetscInt ival = 0
- *         CHKERR( PEPGetIterationNumber(self.pep, &ival) )             # <<<<<<<<<<<<<<
- *         return toInt(ival)
- * 
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetIterationNumber(__pyx_v_self->pep, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 750; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "SLEPc/PEP.pyx":751
- *         cdef PetscInt ival = 0
- *         CHKERR( PEPGetIterationNumber(self.pep, &ival) )
- *         return toInt(ival)             # <<<<<<<<<<<<<<
- * 
- *     def getConvergedReason(self):
+  /* "SLEPc/SVD.pyx":840
+ *     property bv:
+ *         def __get__(self):
+ *             return self.getBV()             # <<<<<<<<<<<<<<
+ *         def __set__(self, value):
+ *             self.setBV(value)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 751; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getBV); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 840, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
+  }
+  if (__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 840, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  } else {
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 840, __pyx_L1_error)
+  }
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/PEP.pyx":738
- *         CHKERR( PEPSolve(self.pep) )
+  /* "SLEPc/SVD.pyx":839
  * 
- *     def getIterationNumber(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the current iteration number. If the call to `solve()` is
+ *     property bv:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getBV()
+ *         def __set__(self, value):
  */
 
   /* function exit code */
   __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getIterationNumber", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.bv.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -38267,212 +37946,180 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_78getIterationNumber(struct PySl
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":753
- *         return toInt(ival)
+/* "SLEPc/SVD.pyx":841
+ *         def __get__(self):
+ *             return self.getBV()
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setBV(value)
  * 
- *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the reason why the `solve()` iteration was stopped.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_81getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_80getConvergedReason[] = "PEP.getConvergedReason(self)\n\n        Gets the reason why the `solve()` iteration was stopped.\n\n        Returns\n        -------\n        reason: `PEP.ConvergedReason` enumerate\n            Negative value indicates diverged, positive value\n            converged.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_81getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
+static int __pyx_pw_8slepc4py_5SLEPc_3SVD_2bv_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_8slepc4py_5SLEPc_3SVD_2bv_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getConvergedReason (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getConvergedReason", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getConvergedReason", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_80getConvergedReason(((struct PySlepcPEPObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3SVD_2bv_2__set__(((struct PySlepcSVDObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_80getConvergedReason(struct PySlepcPEPObject *__pyx_v_self) {
-  PEPConvergedReason __pyx_v_val;
-  PyObject *__pyx_r = NULL;
+static int __pyx_pf_8slepc4py_5SLEPc_3SVD_2bv_2__set__(struct PySlepcSVDObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getConvergedReason", 0);
-
-  /* "SLEPc/PEP.pyx":763
- *             converged.
- *         """
- *         cdef SlepcPEPConvergedReason val = PEP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
- *         CHKERR( PEPGetConvergedReason(self.pep, &val) )
- *         return val
- */
-  __pyx_v_val = PEP_CONVERGED_ITERATING;
-
-  /* "SLEPc/PEP.pyx":764
- *         """
- *         cdef SlepcPEPConvergedReason val = PEP_CONVERGED_ITERATING
- *         CHKERR( PEPGetConvergedReason(self.pep, &val) )             # <<<<<<<<<<<<<<
- *         return val
- * 
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetConvergedReason(__pyx_v_self->pep, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 764; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "SLEPc/PEP.pyx":765
- *         cdef SlepcPEPConvergedReason val = PEP_CONVERGED_ITERATING
- *         CHKERR( PEPGetConvergedReason(self.pep, &val) )
- *         return val             # <<<<<<<<<<<<<<
- * 
+  /* "SLEPc/SVD.pyx":842
+ *             return self.getBV()
+ *         def __set__(self, value):
+ *             self.setBV(value)             # <<<<<<<<<<<<<<
  * 
+ * # -----------------------------------------------------------------------------
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setBV); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 842, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __pyx_t_3 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
+  }
+  if (!__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 842, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+  } else {
+    __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(14, 842, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+    __Pyx_INCREF(__pyx_v_value);
+    __Pyx_GIVEREF(__pyx_v_value);
+    PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 842, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  }
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "SLEPc/PEP.pyx":753
- *         return toInt(ival)
+  /* "SLEPc/SVD.pyx":841
+ *         def __get__(self):
+ *             return self.getBV()
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setBV(value)
  * 
- *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the reason why the `solve()` iteration was stopped.
  */
 
   /* function exit code */
+  __pyx_r = 0;
+  goto __pyx_L0;
   __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getConvergedReason", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("slepc4py.SLEPc.SVD.bv.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
   __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":768
- * 
+/* "SLEPc/PEP.pyx":185
+ *     ConvergedReason = PEPConvergedReason
  * 
- *     def getConverged(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the number of converged eigenpairs.
+ *     def __cinit__(self):             # <<<<<<<<<<<<<<
+ *         self.obj = <PetscObject*> &self.pep
+ *         self.pep = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_83getConverged(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_82getConverged[] = "PEP.getConverged(self)\n\n        Gets the number of converged eigenpairs.\n\n        Returns\n        -------\n        nconv: int\n            Number of converged eigenpairs.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_83getConverged(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
+static int __pyx_pw_8slepc4py_5SLEPc_3PEP_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pw_8slepc4py_5SLEPc_3PEP_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getConverged (wrapper)", 0);
+  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getConverged", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getConverged", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_82getConverged(((struct PySlepcPEPObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP___cinit__(((struct PySlepcPEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_82getConverged(struct PySlepcPEPObject *__pyx_v_self) {
-  PetscInt __pyx_v_ival;
-  PyObject *__pyx_r = NULL;
+static int __pyx_pf_8slepc4py_5SLEPc_3PEP___cinit__(struct PySlepcPEPObject *__pyx_v_self) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getConverged", 0);
+  __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "SLEPc/PEP.pyx":777
- *             Number of converged eigenpairs.
- *         """
- *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
- *         CHKERR( PEPGetConverged(self.pep, &ival) )
- *         return toInt(ival)
- */
-  __pyx_v_ival = 0;
-
-  /* "SLEPc/PEP.pyx":778
- *         """
- *         cdef PetscInt ival = 0
- *         CHKERR( PEPGetConverged(self.pep, &ival) )             # <<<<<<<<<<<<<<
- *         return toInt(ival)
+  /* "SLEPc/PEP.pyx":186
+ * 
+ *     def __cinit__(self):
+ *         self.obj = <PetscObject*> &self.pep             # <<<<<<<<<<<<<<
+ *         self.pep = NULL
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetConverged(__pyx_v_self->pep, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->pep));
 
-  /* "SLEPc/PEP.pyx":779
- *         cdef PetscInt ival = 0
- *         CHKERR( PEPGetConverged(self.pep, &ival) )
- *         return toInt(ival)             # <<<<<<<<<<<<<<
+  /* "SLEPc/PEP.pyx":187
+ *     def __cinit__(self):
+ *         self.obj = <PetscObject*> &self.pep
+ *         self.pep = NULL             # <<<<<<<<<<<<<<
  * 
- *     def getEigenpair(self, int i, Vec Vr=None, Vec Vi=None):
+ *     def view(self, Viewer viewer=None):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __pyx_v_self->pep = NULL;
 
-  /* "SLEPc/PEP.pyx":768
- * 
+  /* "SLEPc/PEP.pyx":185
+ *     ConvergedReason = PEPConvergedReason
  * 
- *     def getConverged(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the number of converged eigenpairs.
+ *     def __cinit__(self):             # <<<<<<<<<<<<<<
+ *         self.obj = <PetscObject*> &self.pep
+ *         self.pep = NULL
  */
 
   /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getConverged", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
+  __pyx_r = 0;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":781
- *         return toInt(ival)
+/* "SLEPc/PEP.pyx":189
+ *         self.pep = NULL
  * 
- *     def getEigenpair(self, int i, Vec Vr=None, Vec Vi=None):             # <<<<<<<<<<<<<<
+ *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the i-th solution of the eigenproblem as computed by
+ *         Prints the PEP data structure.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_85getEigenpair(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_84getEigenpair[] = "PEP.getEigenpair(self, int i, Vec Vr=None, Vec Vi=None)\n\n        Gets the i-th solution of the eigenproblem as computed by\n        `solve()`.  The solution consists of both the eigenvalue and\n        the eigenvector.\n\n        Parameters\n        ----------\n        i: int\n            Index of the solution to be obtained.\n        Vr: Vec, optional\n            Placeholder for the returned eigenvector (real part).\n    [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_85getEigenpair(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_v_i;
-  struct PyPetscVecObject *__pyx_v_Vr = 0;
-  struct PyPetscVecObject *__pyx_v_Vi = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_2view[] = "PEP.view(self, Viewer viewer=None)\n\n        Prints the PEP data structure.\n\n        Parameters\n        ----------\n        viewer: Viewer, optional.\n            Visualization context; if not provided, the standard\n            output is used.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscViewerObject *__pyx_v_viewer = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getEigenpair (wrapper)", 0);
+  __Pyx_RefNannySetupContext("view (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,&__pyx_n_s_Vr,&__pyx_n_s_Vi,0};
-    PyObject* values[3] = {0,0,0};
-    values[1] = (PyObject *)((struct PyPetscVecObject *)Py_None);
-    values[2] = (PyObject *)((struct PyPetscVecObject *)Py_None);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_viewer,0};
+    PyObject* values[1] = {0};
+    values[0] = (PyObject *)((struct PyPetscViewerObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -38480,46 +38127,33 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_85getEigenpair(PyObject *__pyx_v
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Vr);
-          if (value) { values[1] = value; kw_args--; }
-        }
-        case  2:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Vi);
-          if (value) { values[2] = value; kw_args--; }
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_viewer);
+          if (value) { values[0] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getEigenpair") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(15, 189, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        break;
+        case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_Vr = ((struct PyPetscVecObject *)values[1]);
-    __pyx_v_Vi = ((struct PyPetscVecObject *)values[2]);
+    __pyx_v_viewer = ((struct PyPetscViewerObject *)values[0]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getEigenpair", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 189, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getEigenpair", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Vr), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "Vr", 0))) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Vi), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "Vi", 0))) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_84getEigenpair(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_i, __pyx_v_Vr, __pyx_v_Vi);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) __PYX_ERR(15, 189, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_2view(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
   goto __pyx_L0;
@@ -38530,143 +38164,140 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_85getEigenpair(PyObject *__pyx_v
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_84getEigenpair(struct PySlepcPEPObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_Vr, struct PyPetscVecObject *__pyx_v_Vi) {
-  PetscScalar __pyx_v_sval1;
-  PetscScalar __pyx_v_sval2;
-  Vec __pyx_v_vecr;
-  Vec __pyx_v_veci;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_2view(struct PySlepcPEPObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
+  PetscViewer __pyx_v_vwr;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
-  Vec __pyx_t_3;
+  PetscViewer __pyx_t_3;
   int __pyx_t_4;
-  PyObject *__pyx_t_5 = NULL;
-  PyObject *__pyx_t_6 = NULL;
-  PyObject *__pyx_t_7 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getEigenpair", 0);
+  __Pyx_RefNannySetupContext("view", 0);
 
-  /* "SLEPc/PEP.pyx":801
- *             The computed eigenvalue.
+  /* "SLEPc/PEP.pyx":199
+ *             output is used.
  *         """
- *         cdef PetscScalar sval1 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscScalar sval2 = 0
- *         cdef PetscVec vecr = NULL
+ *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( PEPView(self.pep, vwr) )
  */
-  __pyx_v_sval1 = 0.0;
+  __pyx_v_vwr = NULL;
 
-  /* "SLEPc/PEP.pyx":802
+  /* "SLEPc/PEP.pyx":200
  *         """
- *         cdef PetscScalar sval1 = 0
- *         cdef PetscScalar sval2 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscVec vecr = NULL
- *         cdef PetscVec veci = NULL
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPView(self.pep, vwr) )
+ * 
  */
-  __pyx_v_sval2 = 0.0;
+  __pyx_t_1 = (((PyObject *)__pyx_v_viewer) != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_v_viewer->vwr;
+    __pyx_v_vwr = __pyx_t_3;
+  }
 
-  /* "SLEPc/PEP.pyx":803
- *         cdef PetscScalar sval1 = 0
- *         cdef PetscScalar sval2 = 0
- *         cdef PetscVec vecr = NULL             # <<<<<<<<<<<<<<
- *         cdef PetscVec veci = NULL
- *         if Vr is not None: vecr = Vr.vec
+  /* "SLEPc/PEP.pyx":201
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( PEPView(self.pep, vwr) )             # <<<<<<<<<<<<<<
+ * 
+ *     def destroy(self):
  */
-  __pyx_v_vecr = NULL;
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPView(__pyx_v_self->pep, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(15, 201, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":804
- *         cdef PetscScalar sval2 = 0
- *         cdef PetscVec vecr = NULL
- *         cdef PetscVec veci = NULL             # <<<<<<<<<<<<<<
- *         if Vr is not None: vecr = Vr.vec
- *         if Vi is not None: veci = Vi.vec
+  /* "SLEPc/PEP.pyx":189
+ *         self.pep = NULL
+ * 
+ *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Prints the PEP data structure.
  */
-  __pyx_v_veci = NULL;
 
-  /* "SLEPc/PEP.pyx":805
- *         cdef PetscVec vecr = NULL
- *         cdef PetscVec veci = NULL
- *         if Vr is not None: vecr = Vr.vec             # <<<<<<<<<<<<<<
- *         if Vi is not None: veci = Vi.vec
- *         CHKERR( PEPGetEigenpair(self.pep, i, &sval1, &sval2, vecr, veci) )
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/PEP.pyx":203
+ *         CHKERR( PEPView(self.pep, vwr) )
+ * 
+ *     def destroy(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Destroys the PEP object.
  */
-  __pyx_t_1 = (((PyObject *)__pyx_v_Vr) != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_v_Vr->vec;
-    __pyx_v_vecr = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
 
-  /* "SLEPc/PEP.pyx":806
- *         cdef PetscVec veci = NULL
- *         if Vr is not None: vecr = Vr.vec
- *         if Vi is not None: veci = Vi.vec             # <<<<<<<<<<<<<<
- *         CHKERR( PEPGetEigenpair(self.pep, i, &sval1, &sval2, vecr, veci) )
- *         return complex(toScalar(sval1), toScalar(sval2))
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_4destroy[] = "PEP.destroy(self)\n\n        Destroys the PEP object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("destroy (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("destroy", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "destroy", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_4destroy(((struct PySlepcPEPObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_4destroy(struct PySlepcPEPObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("destroy", 0);
+
+  /* "SLEPc/PEP.pyx":207
+ *         Destroys the PEP object.
+ *         """
+ *         CHKERR( PEPDestroy(&self.pep) )             # <<<<<<<<<<<<<<
+ *         self.pep = NULL
+ *         return self
  */
-  __pyx_t_2 = (((PyObject *)__pyx_v_Vi) != Py_None);
-  __pyx_t_1 = (__pyx_t_2 != 0);
-  if (__pyx_t_1) {
-    __pyx_t_3 = __pyx_v_Vi->vec;
-    __pyx_v_veci = __pyx_t_3;
-    goto __pyx_L4;
-  }
-  __pyx_L4:;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPDestroy((&__pyx_v_self->pep))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 207, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":807
- *         if Vr is not None: vecr = Vr.vec
- *         if Vi is not None: veci = Vi.vec
- *         CHKERR( PEPGetEigenpair(self.pep, i, &sval1, &sval2, vecr, veci) )             # <<<<<<<<<<<<<<
- *         return complex(toScalar(sval1), toScalar(sval2))
+  /* "SLEPc/PEP.pyx":208
+ *         """
+ *         CHKERR( PEPDestroy(&self.pep) )
+ *         self.pep = NULL             # <<<<<<<<<<<<<<
+ *         return self
  * 
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetEigenpair(__pyx_v_self->pep, __pyx_v_i, (&__pyx_v_sval1), (&__pyx_v_sval2), __pyx_v_vecr, __pyx_v_veci)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 807; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->pep = NULL;
 
-  /* "SLEPc/PEP.pyx":808
- *         if Vi is not None: veci = Vi.vec
- *         CHKERR( PEPGetEigenpair(self.pep, i, &sval1, &sval2, vecr, veci) )
- *         return complex(toScalar(sval1), toScalar(sval2))             # <<<<<<<<<<<<<<
+  /* "SLEPc/PEP.pyx":209
+ *         CHKERR( PEPDestroy(&self.pep) )
+ *         self.pep = NULL
+ *         return self             # <<<<<<<<<<<<<<
  * 
- *     def getErrorEstimate(self, int i):
+ *     def reset(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 808; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 808; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 808; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
-  __Pyx_GIVEREF(__pyx_t_5);
-  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5);
-  __Pyx_GIVEREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
-  __pyx_t_5 = 0;
-  __pyx_t_6 = 0;
-  __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyComplex_Type))), __pyx_t_7, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 808; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_r = __pyx_t_6;
-  __pyx_t_6 = 0;
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "SLEPc/PEP.pyx":781
- *         return toInt(ival)
+  /* "SLEPc/PEP.pyx":203
+ *         CHKERR( PEPView(self.pep, vwr) )
  * 
- *     def getEigenpair(self, int i, Vec Vr=None, Vec Vi=None):             # <<<<<<<<<<<<<<
+ *     def destroy(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the i-th solution of the eigenproblem as computed by
+ *         Destroys the PEP object.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_XDECREF(__pyx_t_6);
-  __Pyx_XDECREF(__pyx_t_7);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getEigenpair", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.destroy", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -38674,122 +38305,59 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_84getEigenpair(struct PySlepcPEP
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":810
- *         return complex(toScalar(sval1), toScalar(sval2))
+/* "SLEPc/PEP.pyx":211
+ *         return self
  * 
- *     def getErrorEstimate(self, int i):             # <<<<<<<<<<<<<<
+ *     def reset(self):             # <<<<<<<<<<<<<<
  *         """
- *         Returns the error estimate associated to the i-th computed
+ *         Resets the PEP object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_87getErrorEstimate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_86getErrorEstimate[] = "PEP.getErrorEstimate(self, int i)\n\n        Returns the error estimate associated to the i-th computed\n        eigenpair.\n\n        Parameters\n        ----------\n        i: int\n            Index of the solution to be considered.\n\n        Returns\n        -------\n        error: real\n            Error estimate.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_87getErrorEstimate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_v_i;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_7reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_6reset[] = "PEP.reset(self)\n\n        Resets the PEP object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_7reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getErrorEstimate (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,0};
-    PyObject* values[1] = {0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getErrorEstimate") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 810; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-    }
-    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 810; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getErrorEstimate", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 810; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getErrorEstimate", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_86getErrorEstimate(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_i);
+  __Pyx_RefNannySetupContext("reset (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("reset", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "reset", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_6reset(((struct PySlepcPEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_86getErrorEstimate(struct PySlepcPEPObject *__pyx_v_self, int __pyx_v_i) {
-  PetscReal __pyx_v_rval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_6reset(struct PySlepcPEPObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getErrorEstimate", 0);
-
-  /* "SLEPc/PEP.pyx":825
- *             Error estimate.
- *         """
- *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
- *         CHKERR( PEPGetErrorEstimate(self.pep, i, &rval) )
- *         return toReal(rval)
- */
-  __pyx_v_rval = 0.0;
+  __Pyx_RefNannySetupContext("reset", 0);
 
-  /* "SLEPc/PEP.pyx":826
+  /* "SLEPc/PEP.pyx":215
+ *         Resets the PEP object.
  *         """
- *         cdef PetscReal rval = 0
- *         CHKERR( PEPGetErrorEstimate(self.pep, i, &rval) )             # <<<<<<<<<<<<<<
- *         return toReal(rval)
- * 
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetErrorEstimate(__pyx_v_self->pep, __pyx_v_i, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/PEP.pyx":827
- *         cdef PetscReal rval = 0
- *         CHKERR( PEPGetErrorEstimate(self.pep, i, &rval) )
- *         return toReal(rval)             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPReset(self.pep) )             # <<<<<<<<<<<<<<
  * 
- *     def computeError(self, int i, etype=None):
+ *     def create(self, comm=None):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPReset(__pyx_v_self->pep)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 215, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":810
- *         return complex(toScalar(sval1), toScalar(sval2))
+  /* "SLEPc/PEP.pyx":211
+ *         return self
  * 
- *     def getErrorEstimate(self, int i):             # <<<<<<<<<<<<<<
+ *     def reset(self):             # <<<<<<<<<<<<<<
  *         """
- *         Returns the error estimate associated to the i-th computed
+ *         Resets the PEP object.
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getErrorEstimate", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.reset", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -38797,35 +38365,30 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_86getErrorEstimate(struct PySlep
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":829
- *         return toReal(rval)
+/* "SLEPc/PEP.pyx":217
+ *         CHKERR( PEPReset(self.pep) )
  * 
- *     def computeError(self, int i, etype=None):             # <<<<<<<<<<<<<<
+ *     def create(self, comm=None):             # <<<<<<<<<<<<<<
  *         """
- *         Computes the error (based on the residual norm) associated with the i-th
+ *         Creates the PEP object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_89computeError(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_88computeError[] = "PEP.computeError(self, int i, etype=None)\n\n        Computes the error (based on the residual norm) associated with the i-th\n        computed eigenpair.\n\n        Parameters\n        ----------\n        i: int\n           Index of the solution to be considered.\n        etype: `PEP.ErrorType` enumerate\n           The error type to compute.\n\n        Returns\n        -------\n        error: real\n           The error bou [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_89computeError(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_v_i;
-  PyObject *__pyx_v_etype = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_8create[] = "PEP.create(self, comm=None)\n\n        Creates the PEP object.\n\n        Parameters\n        ----------\n        comm: Comm, optional.\n            MPI communicator. If not provided, it defaults to all\n            processes.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("computeError (wrapper)", 0);
+  __Pyx_RefNannySetupContext("create (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,&__pyx_n_s_etype,0};
-    PyObject* values[2] = {0,0};
-    values[1] = ((PyObject *)Py_None);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,0};
+    PyObject* values[1] = {0};
+    values[0] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -38833,127 +38396,108 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_89computeError(PyObject *__pyx_v
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_etype);
-          if (value) { values[1] = value; kw_args--; }
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
+          if (value) { values[0] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeError") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(15, 217, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        break;
+        case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_etype = values[1];
+    __pyx_v_comm = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeError", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 217, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.computeError", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_88computeError(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_i, __pyx_v_etype);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_8create(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_88computeError(struct PySlepcPEPObject *__pyx_v_self, int __pyx_v_i, PyObject *__pyx_v_etype) {
-  PEPErrorType __pyx_v_et;
-  PetscReal __pyx_v_rval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_8create(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_comm) {
+  MPI_Comm __pyx_v_ccomm;
+  PEP __pyx_v_newpep;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  MPI_Comm __pyx_t_1;
   int __pyx_t_2;
-  PEPErrorType __pyx_t_3;
-  int __pyx_t_4;
-  PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("computeError", 0);
+  __Pyx_RefNannySetupContext("create", 0);
 
-  /* "SLEPc/PEP.pyx":853
- *         ``nconv-1`` (see `getConverged()`).
+  /* "SLEPc/PEP.pyx":227
+ *             processes.
  *         """
- *         cdef SlepcPEPErrorType et = PEP_ERROR_BACKWARD             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval = 0
- *         if etype is not None: et = etype
+ *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())             # <<<<<<<<<<<<<<
+ *         cdef SlepcPEP newpep = NULL
+ *         CHKERR( PEPCreate(ccomm, &newpep) )
  */
-  __pyx_v_et = PEP_ERROR_BACKWARD;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_def_Comm(__pyx_v_comm, __pyx_f_8slepc4py_5SLEPc_SLEPC_COMM_DEFAULT()); if (unlikely(PyErr_Occurred())) __PYX_ERR(15, 227, __pyx_L1_error)
+  __pyx_v_ccomm = __pyx_t_1;
 
-  /* "SLEPc/PEP.pyx":854
+  /* "SLEPc/PEP.pyx":228
  *         """
- *         cdef SlepcPEPErrorType et = PEP_ERROR_BACKWARD
- *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
- *         if etype is not None: et = etype
- *         CHKERR( PEPComputeError(self.pep, i, et, &rval) )
+ *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
+ *         cdef SlepcPEP newpep = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPCreate(ccomm, &newpep) )
+ *         SlepcCLEAR(self.obj); self.pep = newpep
  */
-  __pyx_v_rval = 0.0;
+  __pyx_v_newpep = NULL;
 
-  /* "SLEPc/PEP.pyx":855
- *         cdef SlepcPEPErrorType et = PEP_ERROR_BACKWARD
- *         cdef PetscReal rval = 0
- *         if etype is not None: et = etype             # <<<<<<<<<<<<<<
- *         CHKERR( PEPComputeError(self.pep, i, et, &rval) )
- *         return toReal(rval)
+  /* "SLEPc/PEP.pyx":229
+ *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
+ *         cdef SlepcPEP newpep = NULL
+ *         CHKERR( PEPCreate(ccomm, &newpep) )             # <<<<<<<<<<<<<<
+ *         SlepcCLEAR(self.obj); self.pep = newpep
+ *         return self
  */
-  __pyx_t_1 = (__pyx_v_etype != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = ((PEPErrorType)PyInt_AsLong(__pyx_v_etype)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 855; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_et = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPCreate(__pyx_v_ccomm, (&__pyx_v_newpep))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(15, 229, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":856
- *         cdef PetscReal rval = 0
- *         if etype is not None: et = etype
- *         CHKERR( PEPComputeError(self.pep, i, et, &rval) )             # <<<<<<<<<<<<<<
- *         return toReal(rval)
+  /* "SLEPc/PEP.pyx":230
+ *         cdef SlepcPEP newpep = NULL
+ *         CHKERR( PEPCreate(ccomm, &newpep) )
+ *         SlepcCLEAR(self.obj); self.pep = newpep             # <<<<<<<<<<<<<<
+ *         return self
  * 
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPComputeError(__pyx_v_self->pep, __pyx_v_i, __pyx_v_et, (&__pyx_v_rval))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 856; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_f_8slepc4py_5SLEPc_SlepcCLEAR(__pyx_v_self->__pyx_base.obj);
+  __pyx_v_self->pep = __pyx_v_newpep;
 
-  /* "SLEPc/PEP.pyx":857
- *         if etype is not None: et = etype
- *         CHKERR( PEPComputeError(self.pep, i, et, &rval) )
- *         return toReal(rval)             # <<<<<<<<<<<<<<
+  /* "SLEPc/PEP.pyx":231
+ *         CHKERR( PEPCreate(ccomm, &newpep) )
+ *         SlepcCLEAR(self.obj); self.pep = newpep
+ *         return self             # <<<<<<<<<<<<<<
  * 
- *     #
+ *     def setType(self, pep_type):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 857; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __pyx_r = __pyx_t_5;
-  __pyx_t_5 = 0;
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "SLEPc/PEP.pyx":829
- *         return toReal(rval)
+  /* "SLEPc/PEP.pyx":217
+ *         CHKERR( PEPReset(self.pep) )
  * 
- *     def computeError(self, int i, etype=None):             # <<<<<<<<<<<<<<
+ *     def create(self, comm=None):             # <<<<<<<<<<<<<<
  *         """
- *         Computes the error (based on the residual norm) associated with the i-th
+ *         Creates the PEP object.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.computeError", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -38961,27 +38505,24 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_88computeError(struct PySlepcPEP
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":861
- *     #
+/* "SLEPc/PEP.pyx":233
+ *         return self
  * 
- *     def setLinearEPS(self, EPS eps not None):             # <<<<<<<<<<<<<<
+ *     def setType(self, pep_type):             # <<<<<<<<<<<<<<
  *         """
- *         Associate an eigensolver object (EPS) to the polynomial eigenvalue solver.
+ *         Selects the particular solver to be used in the PEP object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_91setLinearEPS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_90setLinearEPS[] = "PEP.setLinearEPS(self, EPS eps)\n\n        Associate an eigensolver object (EPS) to the polynomial eigenvalue solver.\n\n        Parameters\n        ----------\n        eps: EPS\n            The linear eigensolver.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_91setLinearEPS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PySlepcEPSObject *__pyx_v_eps = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_10setType[] = "PEP.setType(self, pep_type)\n\n        Selects the particular solver to be used in the PEP object.\n\n        Parameters\n        ----------\n        pep_type: `PEP.Type` enumerate\n            The solver to be used.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_pep_type = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setLinearEPS (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setType (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_eps,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pep_type,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -38994,276 +38535,256 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_91setLinearEPS(PyObject *__pyx_v
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_eps)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_pep_type)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLinearEPS") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(15, 233, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_eps = ((struct PySlepcEPSObject *)values[0]);
+    __pyx_v_pep_type = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setLinearEPS", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 233, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setLinearEPS", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_eps), __pyx_ptype_8slepc4py_5SLEPc_EPS, 0, "eps", 0))) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_90setLinearEPS(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_eps);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_10setType(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_pep_type);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_90setLinearEPS(struct PySlepcPEPObject *__pyx_v_self, struct PySlepcEPSObject *__pyx_v_eps) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_10setType(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_pep_type) {
+  const char* __pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setLinearEPS", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setType", 0);
+  __Pyx_INCREF(__pyx_v_pep_type);
 
-  /* "SLEPc/PEP.pyx":870
- *             The linear eigensolver.
+  /* "SLEPc/PEP.pyx":242
+ *             The solver to be used.
  *         """
- *         CHKERR( PEPLinearSetEPS(self.pep, eps.eps) )             # <<<<<<<<<<<<<<
+ *         cdef SlepcPEPType cval = NULL             # <<<<<<<<<<<<<<
+ *         pep_type = str2bytes(pep_type, &cval)
+ *         CHKERR( PEPSetType(self.pep, cval) )
+ */
+  __pyx_v_cval = NULL;
+
+  /* "SLEPc/PEP.pyx":243
+ *         """
+ *         cdef SlepcPEPType cval = NULL
+ *         pep_type = str2bytes(pep_type, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPSetType(self.pep, cval) )
  * 
- *     def getLinearEPS(self):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPLinearSetEPS(__pyx_v_self->pep, __pyx_v_eps->eps)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 870; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_pep_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(15, 243, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_pep_type, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/PEP.pyx":861
- *     #
+  /* "SLEPc/PEP.pyx":244
+ *         cdef SlepcPEPType cval = NULL
+ *         pep_type = str2bytes(pep_type, &cval)
+ *         CHKERR( PEPSetType(self.pep, cval) )             # <<<<<<<<<<<<<<
  * 
- *     def setLinearEPS(self, EPS eps not None):             # <<<<<<<<<<<<<<
+ *     def getType(self):
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetType(__pyx_v_self->pep, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(15, 244, __pyx_L1_error)
+
+  /* "SLEPc/PEP.pyx":233
+ *         return self
+ * 
+ *     def setType(self, pep_type):             # <<<<<<<<<<<<<<
  *         """
- *         Associate an eigensolver object (EPS) to the polynomial eigenvalue solver.
+ *         Selects the particular solver to be used in the PEP object.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setLinearEPS", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_pep_type);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":872
- *         CHKERR( PEPLinearSetEPS(self.pep, eps.eps) )
+/* "SLEPc/PEP.pyx":246
+ *         CHKERR( PEPSetType(self.pep, cval) )
  * 
- *     def getLinearEPS(self):             # <<<<<<<<<<<<<<
+ *     def getType(self):             # <<<<<<<<<<<<<<
  *         """
- *         Retrieve the eigensolver object (EPS) associated to the polynomial
+ *         Gets the PEP type of this object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_93getLinearEPS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_92getLinearEPS[] = "PEP.getLinearEPS(self)\n\n        Retrieve the eigensolver object (EPS) associated to the polynomial\n        eigenvalue solver.\n \n        Returns\n        -------\n        eps: EPS\n            The linear eigensolver.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_93getLinearEPS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_12getType[] = "PEP.getType(self)\n\n        Gets the PEP type of this object.\n\n        Returns\n        -------\n        type: `PEP.Type` enumerate\n            The solver currently being used.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getLinearEPS (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getType (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getLinearEPS", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getLinearEPS", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_92getLinearEPS(((struct PySlepcPEPObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getType", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_12getType(((struct PySlepcPEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_92getLinearEPS(struct PySlepcPEPObject *__pyx_v_self) {
-  struct PySlepcEPSObject *__pyx_v_eps = 0;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_12getType(struct PySlepcPEPObject *__pyx_v_self) {
+  const char* __pyx_v_pep_type;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getLinearEPS", 0);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getType", 0);
 
-  /* "SLEPc/PEP.pyx":882
- *             The linear eigensolver.
+  /* "SLEPc/PEP.pyx":255
+ *             The solver currently being used.
  *         """
- *         cdef EPS eps = EPS()             # <<<<<<<<<<<<<<
- *         CHKERR( PEPLinearGetEPS(self.pep, &eps.eps) )
- *         PetscINCREF(eps.obj)
+ *         cdef SlepcPEPType pep_type = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPGetType(self.pep, &pep_type) )
+ *         return bytes2str(pep_type)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_EPS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 882; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_eps = ((struct PySlepcEPSObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_pep_type = NULL;
 
-  /* "SLEPc/PEP.pyx":883
+  /* "SLEPc/PEP.pyx":256
  *         """
- *         cdef EPS eps = EPS()
- *         CHKERR( PEPLinearGetEPS(self.pep, &eps.eps) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(eps.obj)
- *         return eps
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPLinearGetEPS(__pyx_v_self->pep, (&__pyx_v_eps->eps))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/PEP.pyx":884
- *         cdef EPS eps = EPS()
- *         CHKERR( PEPLinearGetEPS(self.pep, &eps.eps) )
- *         PetscINCREF(eps.obj)             # <<<<<<<<<<<<<<
- *         return eps
+ *         cdef SlepcPEPType pep_type = NULL
+ *         CHKERR( PEPGetType(self.pep, &pep_type) )             # <<<<<<<<<<<<<<
+ *         return bytes2str(pep_type)
  * 
  */
-  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_eps->__pyx_base.obj);
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetType(__pyx_v_self->pep, (&__pyx_v_pep_type))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 256, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":885
- *         CHKERR( PEPLinearGetEPS(self.pep, &eps.eps) )
- *         PetscINCREF(eps.obj)
- *         return eps             # <<<<<<<<<<<<<<
+  /* "SLEPc/PEP.pyx":257
+ *         cdef SlepcPEPType pep_type = NULL
+ *         CHKERR( PEPGetType(self.pep, &pep_type) )
+ *         return bytes2str(pep_type)             # <<<<<<<<<<<<<<
  * 
- *     def setLinearCompanionForm(self, cform not None):
+ *     def getOptionsPrefix(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_eps));
-  __pyx_r = ((PyObject *)__pyx_v_eps);
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_pep_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 257, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/PEP.pyx":872
- *         CHKERR( PEPLinearSetEPS(self.pep, eps.eps) )
+  /* "SLEPc/PEP.pyx":246
+ *         CHKERR( PEPSetType(self.pep, cval) )
  * 
- *     def getLinearEPS(self):             # <<<<<<<<<<<<<<
+ *     def getType(self):             # <<<<<<<<<<<<<<
  *         """
- *         Retrieve the eigensolver object (EPS) associated to the polynomial
+ *         Gets the PEP type of this object.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getLinearEPS", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_eps);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":887
- *         return eps
+/* "SLEPc/PEP.pyx":259
+ *         return bytes2str(pep_type)
  * 
- *     def setLinearCompanionForm(self, cform not None):             # <<<<<<<<<<<<<<
+ *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
  *         """
- *         Choose between the two companion forms available for the linearization of
+ *         Gets the prefix used for searching for all PEP options in the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_95setLinearCompanionForm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_94setLinearCompanionForm[] = "PEP.setLinearCompanionForm(self, cform)\n\n        Choose between the two companion forms available for the linearization of\n        a quadratic eigenproblem.\n\n        Parameters\n        ----------\n        cform: integer\n            1 or 2 (first or second companion form).\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_95setLinearCompanionForm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_cform = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_14getOptionsPrefix[] = "PEP.getOptionsPrefix(self)\n\n        Gets the prefix used for searching for all PEP options in the\n        database.\n\n        Returns\n        -------\n        prefix: string\n            The prefix string set for this PEP object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setLinearCompanionForm (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_cform,0};
-    PyObject* values[1] = {0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cform)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLinearCompanionForm") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-    }
-    __pyx_v_cform = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setLinearCompanionForm", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setLinearCompanionForm", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  if (unlikely(((PyObject *)__pyx_v_cform) == Py_None)) {
-    PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "cform"); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_94setLinearCompanionForm(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_cform);
+  __Pyx_RefNannySetupContext("getOptionsPrefix (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getOptionsPrefix", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getOptionsPrefix", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_14getOptionsPrefix(((struct PySlepcPEPObject *)__pyx_v_self));
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_94setLinearCompanionForm(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_cform) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_14getOptionsPrefix(struct PySlepcPEPObject *__pyx_v_self) {
+  const char *__pyx_v_prefix;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscInt __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setLinearCompanionForm", 0);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getOptionsPrefix", 0);
 
-  /* "SLEPc/PEP.pyx":897
- *             1 or 2 (first or second companion form).
+  /* "SLEPc/PEP.pyx":269
+ *             The prefix string set for this PEP object.
  *         """
- *         CHKERR( PEPLinearSetCompanionForm(self.pep, cform) )             # <<<<<<<<<<<<<<
+ *         cdef const_char *prefix = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPGetOptionsPrefix(self.pep, &prefix) )
+ *         return bytes2str(prefix)
+ */
+  __pyx_v_prefix = NULL;
+
+  /* "SLEPc/PEP.pyx":270
+ *         """
+ *         cdef const_char *prefix = NULL
+ *         CHKERR( PEPGetOptionsPrefix(self.pep, &prefix) )             # <<<<<<<<<<<<<<
+ *         return bytes2str(prefix)
  * 
- *     def getLinearCompanionForm(self):
  */
-  __pyx_t_1 = __Pyx_PyInt_As_PetscInt(__pyx_v_cform); if (unlikely((__pyx_t_1 == (PetscInt)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 897; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPLinearSetCompanionForm(__pyx_v_self->pep, __pyx_t_1)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 897; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetOptionsPrefix(__pyx_v_self->pep, (&__pyx_v_prefix))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 270, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":887
- *         return eps
+  /* "SLEPc/PEP.pyx":271
+ *         cdef const_char *prefix = NULL
+ *         CHKERR( PEPGetOptionsPrefix(self.pep, &prefix) )
+ *         return bytes2str(prefix)             # <<<<<<<<<<<<<<
  * 
- *     def setLinearCompanionForm(self, cform not None):             # <<<<<<<<<<<<<<
+ *     def setOptionsPrefix(self, prefix):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_prefix); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 271, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "SLEPc/PEP.pyx":259
+ *         return bytes2str(pep_type)
+ * 
+ *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
  *         """
- *         Choose between the two companion forms available for the linearization of
+ *         Gets the prefix used for searching for all PEP options in the
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setLinearCompanionForm", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -39271,114 +38792,143 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_94setLinearCompanionForm(struct
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":899
- *         CHKERR( PEPLinearSetCompanionForm(self.pep, cform) )
+/* "SLEPc/PEP.pyx":273
+ *         return bytes2str(prefix)
  * 
- *     def getLinearCompanionForm(self):             # <<<<<<<<<<<<<<
+ *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
  *         """
- *         Returns the number of the companion form that will be used for the
+ *         Sets the prefix used for searching for all PEP options in the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_97getLinearCompanionForm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_96getLinearCompanionForm[] = "PEP.getLinearCompanionForm(self)\n\n        Returns the number of the companion form that will be used for the\n        linearization of a quadratic eigenproblem. \n \n        Returns\n        -------\n        cform: integer\n            1 or 2 (first or second companion form).\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_97getLinearCompanionForm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_17setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_16setOptionsPrefix[] = "PEP.setOptionsPrefix(self, prefix)\n\n        Sets the prefix used for searching for all PEP options in the\n        database.\n\n        Parameters\n        ----------\n        prefix: string\n            The prefix string to prepend to all PEP option requests.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_17setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_prefix = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getLinearCompanionForm (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getLinearCompanionForm", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getLinearCompanionForm", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_96getLinearCompanionForm(((struct PySlepcPEPObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("setOptionsPrefix (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_prefix,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_prefix)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) __PYX_ERR(15, 273, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_prefix = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 273, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_16setOptionsPrefix(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_prefix);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_96getLinearCompanionForm(struct PySlepcPEPObject *__pyx_v_self) {
-  PetscInt __pyx_v_cform;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_16setOptionsPrefix(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
+  const char *__pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getLinearCompanionForm", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setOptionsPrefix", 0);
+  __Pyx_INCREF(__pyx_v_prefix);
 
-  /* "SLEPc/PEP.pyx":909
- *             1 or 2 (first or second companion form).
+  /* "SLEPc/PEP.pyx":283
+ *             The prefix string to prepend to all PEP option requests.
  *         """
- *         cdef PetscInt cform = 0             # <<<<<<<<<<<<<<
- *         CHKERR( PEPLinearGetCompanionForm(self.pep, &cform) )
- *         return cform
+ *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
+ *         prefix = str2bytes(prefix, &cval)
+ *         CHKERR( PEPSetOptionsPrefix(self.pep, cval) )
  */
-  __pyx_v_cform = 0;
+  __pyx_v_cval = NULL;
 
-  /* "SLEPc/PEP.pyx":910
+  /* "SLEPc/PEP.pyx":284
  *         """
- *         cdef PetscInt cform = 0
- *         CHKERR( PEPLinearGetCompanionForm(self.pep, &cform) )             # <<<<<<<<<<<<<<
- *         return cform
+ *         cdef const_char *cval = NULL
+ *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPSetOptionsPrefix(self.pep, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPLinearGetCompanionForm(__pyx_v_self->pep, (&__pyx_v_cform))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 910; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(15, 284, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/PEP.pyx":911
- *         cdef PetscInt cform = 0
- *         CHKERR( PEPLinearGetCompanionForm(self.pep, &cform) )
- *         return cform             # <<<<<<<<<<<<<<
+  /* "SLEPc/PEP.pyx":285
+ *         cdef const_char *cval = NULL
+ *         prefix = str2bytes(prefix, &cval)
+ *         CHKERR( PEPSetOptionsPrefix(self.pep, cval) )             # <<<<<<<<<<<<<<
  * 
- *     def setLinearExplicitMatrix(self, flag not None):
+ *     def appendOptionsPrefix(self, prefix):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscInt(__pyx_v_cform); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 911; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetOptionsPrefix(__pyx_v_self->pep, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(15, 285, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":899
- *         CHKERR( PEPLinearSetCompanionForm(self.pep, cform) )
+  /* "SLEPc/PEP.pyx":273
+ *         return bytes2str(prefix)
  * 
- *     def getLinearCompanionForm(self):             # <<<<<<<<<<<<<<
+ *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
  *         """
- *         Returns the number of the companion form that will be used for the
+ *         Sets the prefix used for searching for all PEP options in the
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getLinearCompanionForm", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_prefix);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":913
- *         return cform
+/* "SLEPc/PEP.pyx":287
+ *         CHKERR( PEPSetOptionsPrefix(self.pep, cval) )
  * 
- *     def setLinearExplicitMatrix(self, flag not None):             # <<<<<<<<<<<<<<
+ *     def appendOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
  *         """
- *         Indicate if the matrices A and B for the linearization of the problem
+ *         Appends to the prefix used for searching for all PEP options
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_99setLinearExplicitMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_98setLinearExplicitMatrix[] = "PEP.setLinearExplicitMatrix(self, flag)\n\n        Indicate if the matrices A and B for the linearization of the problem\n        must be built explicitly.\n\n        Parameters\n        ----------\n        flag: boolean\n            boolean flag indicating if the matrices are built explicitly .\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_99setLinearExplicitMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_flag = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_19appendOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_18appendOptionsPrefix[] = "PEP.appendOptionsPrefix(self, prefix)\n\n        Appends to the prefix used for searching for all PEP options\n        in the database.\n\n        Parameters\n        ----------\n        prefix: string\n            The prefix string to prepend to all PEP option requests.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_19appendOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_prefix = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setLinearExplicitMatrix (wrapper)", 0);
+  __Pyx_RefNannySetupContext("appendOptionsPrefix (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_prefix,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -39391,171 +38941,148 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_99setLinearExplicitMatrix(PyObje
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_flag)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_prefix)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLinearExplicitMatrix") < 0)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 913; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "appendOptionsPrefix") < 0)) __PYX_ERR(15, 287, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_flag = values[0];
+    __pyx_v_prefix = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setLinearExplicitMatrix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 913; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("appendOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 287, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setLinearExplicitMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.appendOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(((PyObject *)__pyx_v_flag) == Py_None)) {
-    PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "flag"); {__pyx_filename = __pyx_f[13]; __pyx_lineno = 913; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_98setLinearExplicitMatrix(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_flag);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_18appendOptionsPrefix(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_prefix);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_98setLinearExplicitMatrix(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_flag) {
-  PetscBool __pyx_v_sval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_18appendOptionsPrefix(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
+  const char *__pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscBool __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setLinearExplicitMatrix", 0);
+  __Pyx_RefNannySetupContext("appendOptionsPrefix", 0);
+  __Pyx_INCREF(__pyx_v_prefix);
 
-  /* "SLEPc/PEP.pyx":923
- *             boolean flag indicating if the matrices are built explicitly .
+  /* "SLEPc/PEP.pyx":297
+ *             The prefix string to prepend to all PEP option requests.
  *         """
- *         cdef PetscBool sval = flag             # <<<<<<<<<<<<<<
- *         CHKERR( PEPLinearSetExplicitMatrix(self.pep, sval) )
- * 
+ *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
+ *         prefix = str2bytes(prefix, &cval)
+ *         CHKERR( PEPAppendOptionsPrefix(self.pep, cval) )
  */
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 923; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_sval = __pyx_t_1;
+  __pyx_v_cval = NULL;
 
-  /* "SLEPc/PEP.pyx":924
+  /* "SLEPc/PEP.pyx":298
  *         """
- *         cdef PetscBool sval = flag
- *         CHKERR( PEPLinearSetExplicitMatrix(self.pep, sval) )             # <<<<<<<<<<<<<<
+ *         cdef const_char *cval = NULL
+ *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPAppendOptionsPrefix(self.pep, cval) )
  * 
- *     def getLinearExplicitMatrix(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPLinearSetExplicitMatrix(__pyx_v_self->pep, __pyx_v_sval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 924; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(15, 298, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/PEP.pyx":913
- *         return cform
+  /* "SLEPc/PEP.pyx":299
+ *         cdef const_char *cval = NULL
+ *         prefix = str2bytes(prefix, &cval)
+ *         CHKERR( PEPAppendOptionsPrefix(self.pep, cval) )             # <<<<<<<<<<<<<<
  * 
- *     def setLinearExplicitMatrix(self, flag not None):             # <<<<<<<<<<<<<<
+ *     def setFromOptions(self):
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPAppendOptionsPrefix(__pyx_v_self->pep, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(15, 299, __pyx_L1_error)
+
+  /* "SLEPc/PEP.pyx":287
+ *         CHKERR( PEPSetOptionsPrefix(self.pep, cval) )
+ * 
+ *     def appendOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
  *         """
- *         Indicate if the matrices A and B for the linearization of the problem
+ *         Appends to the prefix used for searching for all PEP options
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setLinearExplicitMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.appendOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_prefix);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/PEP.pyx":926
- *         CHKERR( PEPLinearSetExplicitMatrix(self.pep, sval) )
+/* "SLEPc/PEP.pyx":301
+ *         CHKERR( PEPAppendOptionsPrefix(self.pep, cval) )
  * 
- *     def getLinearExplicitMatrix(self):             # <<<<<<<<<<<<<<
+ *     def setFromOptions(self):             # <<<<<<<<<<<<<<
  *         """
- *         Returns the flag indicating if the matrices A and B for the linearization
+ *         Sets PEP options from the options database. This routine must
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_101getLinearExplicitMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3PEP_100getLinearExplicitMatrix[] = "PEP.getLinearExplicitMatrix(self)\n\n        Returns the flag indicating if the matrices A and B for the linearization\n        are built explicitly.\n \n        Returns\n        -------\n        flag: boolean\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_101getLinearExplicitMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_21setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_20setFromOptions[] = "PEP.setFromOptions(self)\n\n        Sets PEP options from the options database. This routine must\n        be called before `setUp()` if the user is to be allowed to set\n        the solver type.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_21setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getLinearExplicitMatrix (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setFromOptions (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getLinearExplicitMatrix", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getLinearExplicitMatrix", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_100getLinearExplicitMatrix(((struct PySlepcPEPObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("setFromOptions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setFromOptions", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_20setFromOptions(((struct PySlepcPEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_100getLinearExplicitMatrix(struct PySlepcPEPObject *__pyx_v_self) {
-  PetscBool __pyx_v_sval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_20setFromOptions(struct PySlepcPEPObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getLinearExplicitMatrix", 0);
-
-  /* "SLEPc/PEP.pyx":935
- *         flag: boolean
- *         """
- *         cdef PetscBool sval = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( PEPLinearGetExplicitMatrix(self.pep, &sval) )
- *         return sval
- */
-  __pyx_v_sval = PETSC_FALSE;
+  __Pyx_RefNannySetupContext("setFromOptions", 0);
 
-  /* "SLEPc/PEP.pyx":936
+  /* "SLEPc/PEP.pyx":307
+ *         the solver type.
  *         """
- *         cdef PetscBool sval = PETSC_FALSE
- *         CHKERR( PEPLinearGetExplicitMatrix(self.pep, &sval) )             # <<<<<<<<<<<<<<
- *         return sval
- * 
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPLinearGetExplicitMatrix(__pyx_v_self->pep, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 936; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/PEP.pyx":937
- *         cdef PetscBool sval = PETSC_FALSE
- *         CHKERR( PEPLinearGetExplicitMatrix(self.pep, &sval) )
- *         return sval             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPSetFromOptions(self.pep) )             # <<<<<<<<<<<<<<
  * 
- * # -----------------------------------------------------------------------------
+ *     def getBasis(self):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_sval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 937; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetFromOptions(__pyx_v_self->pep)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 307, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":926
- *         CHKERR( PEPLinearSetExplicitMatrix(self.pep, sval) )
+  /* "SLEPc/PEP.pyx":301
+ *         CHKERR( PEPAppendOptionsPrefix(self.pep, cval) )
  * 
- *     def getLinearExplicitMatrix(self):             # <<<<<<<<<<<<<<
+ *     def setFromOptions(self):             # <<<<<<<<<<<<<<
  *         """
- *         Returns the flag indicating if the matrices A and B for the linearization
+ *         Sets PEP options from the options database. This routine must
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getLinearExplicitMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setFromOptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -39563,90 +39090,109 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_100getLinearExplicitMatrix(struc
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":67
- *     ConvergedReason = NEPConvergedReason
+/* "SLEPc/PEP.pyx":309
+ *         CHKERR( PEPSetFromOptions(self.pep) )
  * 
- *     def __cinit__(self):             # <<<<<<<<<<<<<<
- *         self.obj = <PetscObject*> &self.nep
- *         self.nep = NULL
+ *     def getBasis(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the type of polynomial basis used to
  */
 
 /* Python wrapper */
-static int __pyx_pw_8slepc4py_5SLEPc_3NEP_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_8slepc4py_5SLEPc_3NEP_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  int __pyx_r;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_23getBasis(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_22getBasis[] = "PEP.getBasis(self)\n\n        Gets the type of polynomial basis used to \n        describe the polynomial eigenvalue problem.\n\n        Returns\n        -------\n        basis: `PEP.Basis` enumerate\n            the basis that was previously set.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_23getBasis(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getBasis (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP___cinit__(((struct PySlepcNEPObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getBasis", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getBasis", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_22getBasis(((struct PySlepcPEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_8slepc4py_5SLEPc_3NEP___cinit__(struct PySlepcNEPObject *__pyx_v_self) {
-  int __pyx_r;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_22getBasis(struct PySlepcPEPObject *__pyx_v_self) {
+  PEPBasis __pyx_v_val;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__cinit__", 0);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getBasis", 0);
 
-  /* "SLEPc/NEP.pyx":68
- * 
- *     def __cinit__(self):
- *         self.obj = <PetscObject*> &self.nep             # <<<<<<<<<<<<<<
- *         self.nep = NULL
+  /* "SLEPc/PEP.pyx":319
+ *             the basis that was previously set.
+ *         """
+ *         cdef SlepcPEPBasis val = PEP_BASIS_MONOMIAL             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPGetBasis(self.pep, &val) )
+ *         return val
+ */
+  __pyx_v_val = PEP_BASIS_MONOMIAL;
+
+  /* "SLEPc/PEP.pyx":320
+ *         """
+ *         cdef SlepcPEPBasis val = PEP_BASIS_MONOMIAL
+ *         CHKERR( PEPGetBasis(self.pep, &val) )             # <<<<<<<<<<<<<<
+ *         return val
  * 
  */
-  __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->nep));
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetBasis(__pyx_v_self->pep, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 320, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":69
- *     def __cinit__(self):
- *         self.obj = <PetscObject*> &self.nep
- *         self.nep = NULL             # <<<<<<<<<<<<<<
+  /* "SLEPc/PEP.pyx":321
+ *         cdef SlepcPEPBasis val = PEP_BASIS_MONOMIAL
+ *         CHKERR( PEPGetBasis(self.pep, &val) )
+ *         return val             # <<<<<<<<<<<<<<
  * 
- *     def view(self, Viewer viewer=None):
+ *     def setBasis(self, basis):
  */
-  __pyx_v_self->nep = NULL;
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyInt_From_PEPBasis(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 321, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
 
-  /* "SLEPc/NEP.pyx":67
- *     ConvergedReason = NEPConvergedReason
+  /* "SLEPc/PEP.pyx":309
+ *         CHKERR( PEPSetFromOptions(self.pep) )
  * 
- *     def __cinit__(self):             # <<<<<<<<<<<<<<
- *         self.obj = <PetscObject*> &self.nep
- *         self.nep = NULL
+ *     def getBasis(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the type of polynomial basis used to
  */
 
   /* function exit code */
-  __pyx_r = 0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getBasis", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":71
- *         self.nep = NULL
+/* "SLEPc/PEP.pyx":323
+ *         return val
  * 
- *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *     def setBasis(self, basis):             # <<<<<<<<<<<<<<
  *         """
- *         Prints the NEP data structure.
+ *         Specifies the type of polynomial basis used to
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_2view[] = "NEP.view(self, Viewer viewer=None)\n\n        Prints the NEP data structure.\n\n        Parameters\n        ----------\n        viewer: Viewer, optional.\n            Visualization context; if not provided, the standard\n            output is used.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscViewerObject *__pyx_v_viewer = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_25setBasis(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_24setBasis[] = "PEP.setBasis(self, basis)\n\n        Specifies the type of polynomial basis used to \n        describe the polynomial eigenvalue problem.\n\n        Parameters\n        ----------\n        basis: `PEP.Basis` enumerate\n            the basis to be set.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_25setBasis(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_basis = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("view (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setBasis (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_viewer,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_basis,0};
     PyObject* values[1] = {0};
-    values[0] = (PyObject *)((struct PyPetscViewerObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
@@ -39658,103 +39204,74 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_3view(PyObject *__pyx_v_self, Py
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_viewer);
-          if (value) { values[0] = value; kw_args--; }
-        }
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_basis)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setBasis") < 0)) __PYX_ERR(15, 323, __pyx_L3_error)
       }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
     } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_viewer = ((struct PyPetscViewerObject *)values[0]);
+    __pyx_v_basis = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[14]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setBasis", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 323, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setBasis", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_2view(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_viewer);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_24setBasis(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_basis);
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_2view(struct PySlepcNEPObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
-  PetscViewer __pyx_v_vwr;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_24setBasis(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_basis) {
+  PEPBasis __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PEPBasis __pyx_t_1;
   int __pyx_t_2;
-  PetscViewer __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("view", 0);
-
-  /* "SLEPc/NEP.pyx":81
- *             output is used.
- *         """
- *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
- *         if viewer is not None: vwr = viewer.vwr
- *         CHKERR( NEPView(self.nep, vwr) )
- */
-  __pyx_v_vwr = NULL;
+  __Pyx_RefNannySetupContext("setBasis", 0);
 
-  /* "SLEPc/NEP.pyx":82
+  /* "SLEPc/PEP.pyx":333
+ *             the basis to be set.
  *         """
- *         cdef PetscViewer vwr = NULL
- *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
- *         CHKERR( NEPView(self.nep, vwr) )
+ *         cdef SlepcPEPBasis val = basis             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPSetBasis(self.pep, val) )
  * 
  */
-  __pyx_t_1 = (((PyObject *)__pyx_v_viewer) != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_v_viewer->vwr;
-    __pyx_v_vwr = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+  __pyx_t_1 = ((PEPBasis)__Pyx_PyInt_As_PEPBasis(__pyx_v_basis)); if (unlikely(PyErr_Occurred())) __PYX_ERR(15, 333, __pyx_L1_error)
+  __pyx_v_val = __pyx_t_1;
 
-  /* "SLEPc/NEP.pyx":83
- *         cdef PetscViewer vwr = NULL
- *         if viewer is not None: vwr = viewer.vwr
- *         CHKERR( NEPView(self.nep, vwr) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/PEP.pyx":334
+ *         """
+ *         cdef SlepcPEPBasis val = basis
+ *         CHKERR( PEPSetBasis(self.pep, val) )             # <<<<<<<<<<<<<<
  * 
- *     def destroy(self):
+ *     def getProblemType(self):
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPView(__pyx_v_self->nep, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetBasis(__pyx_v_self->pep, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(15, 334, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":71
- *         self.nep = NULL
+  /* "SLEPc/PEP.pyx":323
+ *         return val
  * 
- *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *     def setBasis(self, basis):             # <<<<<<<<<<<<<<
  *         """
- *         Prints the NEP data structure.
+ *         Specifies the type of polynomial basis used to
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setBasis", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -39762,81 +39279,83 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_2view(struct PySlepcNEPObject *_
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":85
- *         CHKERR( NEPView(self.nep, vwr) )
+/* "SLEPc/PEP.pyx":336
+ *         CHKERR( PEPSetBasis(self.pep, val) )
  * 
- *     def destroy(self):             # <<<<<<<<<<<<<<
+ *     def getProblemType(self):             # <<<<<<<<<<<<<<
  *         """
- *         Destroys the NEP object.
+ *         Gets the problem type from the PEP object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_4destroy[] = "NEP.destroy(self)\n\n        Destroys the NEP object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_27getProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_26getProblemType[] = "PEP.getProblemType(self)\n\n        Gets the problem type from the PEP object.\n\n        Returns\n        -------\n        problem_type: `PEP.ProblemType` enumerate\n            The problem type that was previously set.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_27getProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("destroy (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getProblemType (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("destroy", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "destroy", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_4destroy(((struct PySlepcNEPObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getProblemType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getProblemType", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_26getProblemType(((struct PySlepcPEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_4destroy(struct PySlepcNEPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_26getProblemType(struct PySlepcPEPObject *__pyx_v_self) {
+  PEPProblemType __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("destroy", 0);
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getProblemType", 0);
 
-  /* "SLEPc/NEP.pyx":89
- *         Destroys the NEP object.
+  /* "SLEPc/PEP.pyx":345
+ *             The problem type that was previously set.
  *         """
- *         CHKERR( NEPDestroy(&self.nep) )             # <<<<<<<<<<<<<<
- *         self.nep = NULL
- *         return self
+ *         cdef SlepcPEPProblemType val = PEP_GENERAL             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPGetProblemType(self.pep, &val) )
+ *         return val
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPDestroy((&__pyx_v_self->nep))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_val = PEP_GENERAL;
 
-  /* "SLEPc/NEP.pyx":90
+  /* "SLEPc/PEP.pyx":346
  *         """
- *         CHKERR( NEPDestroy(&self.nep) )
- *         self.nep = NULL             # <<<<<<<<<<<<<<
- *         return self
+ *         cdef SlepcPEPProblemType val = PEP_GENERAL
+ *         CHKERR( PEPGetProblemType(self.pep, &val) )             # <<<<<<<<<<<<<<
+ *         return val
  * 
  */
-  __pyx_v_self->nep = NULL;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetProblemType(__pyx_v_self->pep, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 346, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":91
- *         CHKERR( NEPDestroy(&self.nep) )
- *         self.nep = NULL
- *         return self             # <<<<<<<<<<<<<<
+  /* "SLEPc/PEP.pyx":347
+ *         cdef SlepcPEPProblemType val = PEP_GENERAL
+ *         CHKERR( PEPGetProblemType(self.pep, &val) )
+ *         return val             # <<<<<<<<<<<<<<
  * 
- *     def reset(self):
+ *     def setProblemType(self, problem_type):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_r = ((PyObject *)__pyx_v_self);
+  __pyx_t_2 = __Pyx_PyInt_From_PEPProblemType(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 347, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/NEP.pyx":85
- *         CHKERR( NEPView(self.nep, vwr) )
+  /* "SLEPc/PEP.pyx":336
+ *         CHKERR( PEPSetBasis(self.pep, val) )
  * 
- *     def destroy(self):             # <<<<<<<<<<<<<<
+ *     def getProblemType(self):             # <<<<<<<<<<<<<<
  *         """
- *         Destroys the NEP object.
+ *         Gets the problem type from the PEP object.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.destroy", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getProblemType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -39844,62 +39363,104 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_4destroy(struct PySlepcNEPObject
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":93
- *         return self
+/* "SLEPc/PEP.pyx":349
+ *         return val
  * 
- *     def reset(self):             # <<<<<<<<<<<<<<
+ *     def setProblemType(self, problem_type):             # <<<<<<<<<<<<<<
  *         """
- *         Resets the NEP object.
+ *         Specifies the type of the eigenvalue problem.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_7reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_6reset[] = "NEP.reset(self)\n\n        Resets the NEP object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_7reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_29setProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_28setProblemType[] = "PEP.setProblemType(self, problem_type)\n\n        Specifies the type of the eigenvalue problem.\n\n        Parameters\n        ----------\n        problem_type: `PEP.ProblemType` enumerate\n            The problem type to be set.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_29setProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_problem_type = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("reset (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("reset", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "reset", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_6reset(((struct PySlepcNEPObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("setProblemType (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_problem_type,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_problem_type)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setProblemType") < 0)) __PYX_ERR(15, 349, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_problem_type = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setProblemType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 349, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setProblemType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_28setProblemType(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_problem_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_6reset(struct PySlepcNEPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_28setProblemType(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_problem_type) {
+  PEPProblemType __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("reset", 0);
+  PEPProblemType __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setProblemType", 0);
 
-  /* "SLEPc/NEP.pyx":97
- *         Resets the NEP object.
+  /* "SLEPc/PEP.pyx":358
+ *             The problem type to be set.
  *         """
- *         CHKERR( NEPReset(self.nep) )             # <<<<<<<<<<<<<<
+ *         cdef SlepcPEPProblemType val = problem_type             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPSetProblemType(self.pep, val) )
  * 
- *     def create(self, comm=None):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPReset(__pyx_v_self->nep)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PEPProblemType)__Pyx_PyInt_As_PEPProblemType(__pyx_v_problem_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(15, 358, __pyx_L1_error)
+  __pyx_v_val = __pyx_t_1;
 
-  /* "SLEPc/NEP.pyx":93
- *         return self
+  /* "SLEPc/PEP.pyx":359
+ *         """
+ *         cdef SlepcPEPProblemType val = problem_type
+ *         CHKERR( PEPSetProblemType(self.pep, val) )             # <<<<<<<<<<<<<<
  * 
- *     def reset(self):             # <<<<<<<<<<<<<<
+ *     def getWhichEigenpairs(self):
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetProblemType(__pyx_v_self->pep, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(15, 359, __pyx_L1_error)
+
+  /* "SLEPc/PEP.pyx":349
+ *         return val
+ * 
+ *     def setProblemType(self, problem_type):             # <<<<<<<<<<<<<<
  *         """
- *         Resets the NEP object.
+ *         Specifies the type of the eigenvalue problem.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.reset", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setProblemType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -39907,145 +39468,83 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_6reset(struct PySlepcNEPObject *
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":99
- *         CHKERR( NEPReset(self.nep) )
+/* "SLEPc/PEP.pyx":361
+ *         CHKERR( PEPSetProblemType(self.pep, val) )
  * 
- *     def create(self, comm=None):             # <<<<<<<<<<<<<<
+ *     def getWhichEigenpairs(self):             # <<<<<<<<<<<<<<
  *         """
- *         Creates the NEP object.
+ *         Returns which portion of the spectrum is to be sought.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_8create[] = "NEP.create(self, comm=None)\n\n        Creates the NEP object.\n\n        Parameters\n        ----------\n        comm: Comm, optional.\n            MPI communicator. If not provided, it defaults to all\n            processes.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_comm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_31getWhichEigenpairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_30getWhichEigenpairs[] = "PEP.getWhichEigenpairs(self)\n\n        Returns which portion of the spectrum is to be sought.\n\n        Returns\n        -------\n        which: `PEP.Which` enumerate\n            The portion of the spectrum to be sought by the solver.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_31getWhichEigenpairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("create (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,0};
-    PyObject* values[1] = {0};
-    values[0] = ((PyObject *)Py_None);
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
-          if (value) { values[0] = value; kw_args--; }
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-    }
-    __pyx_v_comm = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[14]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_8create(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_comm);
+  __Pyx_RefNannySetupContext("getWhichEigenpairs (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getWhichEigenpairs", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getWhichEigenpairs", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_30getWhichEigenpairs(((struct PySlepcPEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_8create(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_comm) {
-  MPI_Comm __pyx_v_ccomm;
-  NEP __pyx_v_newnep;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_30getWhichEigenpairs(struct PySlepcPEPObject *__pyx_v_self) {
+  PEPWhich __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  MPI_Comm __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("create", 0);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getWhichEigenpairs", 0);
 
-  /* "SLEPc/NEP.pyx":109
- *             processes.
+  /* "SLEPc/PEP.pyx":370
+ *             The portion of the spectrum to be sought by the solver.
  *         """
- *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())             # <<<<<<<<<<<<<<
- *         cdef SlepcNEP newnep = NULL
- *         CHKERR( NEPCreate(ccomm, &newnep) )
+ *         cdef SlepcPEPWhich val = PEP_LARGEST_MAGNITUDE             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPGetWhichEigenpairs(self.pep, &val) )
+ *         return val
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_def_Comm(__pyx_v_comm, __pyx_f_8slepc4py_5SLEPc_SLEPC_COMM_DEFAULT()); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ccomm = __pyx_t_1;
+  __pyx_v_val = PEP_LARGEST_MAGNITUDE;
 
-  /* "SLEPc/NEP.pyx":110
+  /* "SLEPc/PEP.pyx":371
  *         """
- *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
- *         cdef SlepcNEP newnep = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( NEPCreate(ccomm, &newnep) )
- *         SlepcCLEAR(self.obj); self.nep = newnep
- */
-  __pyx_v_newnep = NULL;
-
-  /* "SLEPc/NEP.pyx":111
- *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
- *         cdef SlepcNEP newnep = NULL
- *         CHKERR( NEPCreate(ccomm, &newnep) )             # <<<<<<<<<<<<<<
- *         SlepcCLEAR(self.obj); self.nep = newnep
- *         return self
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPCreate(__pyx_v_ccomm, (&__pyx_v_newnep))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/NEP.pyx":112
- *         cdef SlepcNEP newnep = NULL
- *         CHKERR( NEPCreate(ccomm, &newnep) )
- *         SlepcCLEAR(self.obj); self.nep = newnep             # <<<<<<<<<<<<<<
- *         return self
+ *         cdef SlepcPEPWhich val = PEP_LARGEST_MAGNITUDE
+ *         CHKERR( PEPGetWhichEigenpairs(self.pep, &val) )             # <<<<<<<<<<<<<<
+ *         return val
  * 
  */
-  __pyx_f_8slepc4py_5SLEPc_SlepcCLEAR(__pyx_v_self->__pyx_base.obj);
-  __pyx_v_self->nep = __pyx_v_newnep;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetWhichEigenpairs(__pyx_v_self->pep, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 371, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":113
- *         CHKERR( NEPCreate(ccomm, &newnep) )
- *         SlepcCLEAR(self.obj); self.nep = newnep
- *         return self             # <<<<<<<<<<<<<<
+  /* "SLEPc/PEP.pyx":372
+ *         cdef SlepcPEPWhich val = PEP_LARGEST_MAGNITUDE
+ *         CHKERR( PEPGetWhichEigenpairs(self.pep, &val) )
+ *         return val             # <<<<<<<<<<<<<<
  * 
- *     def setType(self, nep_type):
+ *     def setWhichEigenpairs(self, which):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_r = ((PyObject *)__pyx_v_self);
+  __pyx_t_2 = __Pyx_PyInt_From_PEPWhich(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 372, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/NEP.pyx":99
- *         CHKERR( NEPReset(self.nep) )
+  /* "SLEPc/PEP.pyx":361
+ *         CHKERR( PEPSetProblemType(self.pep, val) )
  * 
- *     def create(self, comm=None):             # <<<<<<<<<<<<<<
+ *     def getWhichEigenpairs(self):             # <<<<<<<<<<<<<<
  *         """
- *         Creates the NEP object.
+ *         Returns which portion of the spectrum is to be sought.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getWhichEigenpairs", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -40053,27 +39552,24 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_8create(struct PySlepcNEPObject
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":115
- *         return self
+/* "SLEPc/PEP.pyx":374
+ *         return val
  * 
- *     def setType(self, nep_type):             # <<<<<<<<<<<<<<
+ *     def setWhichEigenpairs(self, which):             # <<<<<<<<<<<<<<
  *         """
- *         Selects the particular solver to be used in the NEP object.
+ *         Specifies which portion of the spectrum is to be sought.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_10setType[] = "NEP.setType(self, nep_type)\n\n        Selects the particular solver to be used in the NEP object.\n\n        Parameters\n        ----------\n        nep_type: `NEP.Type` enumerate\n            The solver to be used.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_nep_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_33setWhichEigenpairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_32setWhichEigenpairs[] = "PEP.setWhichEigenpairs(self, which)\n\n        Specifies which portion of the spectrum is to be sought.\n\n        Parameters\n        ----------\n        which: `PEP.Which` enumerate\n            The portion of the spectrum to be sought by the solver.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_33setWhichEigenpairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_which = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setType (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setWhichEigenpairs (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nep_type,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_which,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -40086,178 +39582,182 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_11setType(PyObject *__pyx_v_self
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nep_type)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_which)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setWhichEigenpairs") < 0)) __PYX_ERR(15, 374, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_nep_type = values[0];
+    __pyx_v_which = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[14]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setWhichEigenpairs", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 374, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setWhichEigenpairs", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_10setType(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_nep_type);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_32setWhichEigenpairs(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_which);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_10setType(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_nep_type) {
-  const char* __pyx_v_cval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_32setWhichEigenpairs(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_which) {
+  PEPWhich __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  PEPWhich __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setType", 0);
-  __Pyx_INCREF(__pyx_v_nep_type);
-
-  /* "SLEPc/NEP.pyx":124
- *             The solver to be used.
- *         """
- *         cdef SlepcNEPType cval = NULL             # <<<<<<<<<<<<<<
- *         nep_type = str2bytes(nep_type, &cval)
- *         CHKERR( NEPSetType(self.nep, cval) )
- */
-  __pyx_v_cval = NULL;
+  __Pyx_RefNannySetupContext("setWhichEigenpairs", 0);
 
-  /* "SLEPc/NEP.pyx":125
+  /* "SLEPc/PEP.pyx":383
+ *             The portion of the spectrum to be sought by the solver.
  *         """
- *         cdef SlepcNEPType cval = NULL
- *         nep_type = str2bytes(nep_type, &cval)             # <<<<<<<<<<<<<<
- *         CHKERR( NEPSetType(self.nep, cval) )
+ *         cdef SlepcPEPWhich val = which             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPSetWhichEigenpairs(self.pep, val) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_nep_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_nep_type, __pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_1 = ((PEPWhich)__Pyx_PyInt_As_PEPWhich(__pyx_v_which)); if (unlikely(PyErr_Occurred())) __PYX_ERR(15, 383, __pyx_L1_error)
+  __pyx_v_val = __pyx_t_1;
 
-  /* "SLEPc/NEP.pyx":126
- *         cdef SlepcNEPType cval = NULL
- *         nep_type = str2bytes(nep_type, &cval)
- *         CHKERR( NEPSetType(self.nep, cval) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/PEP.pyx":384
+ *         """
+ *         cdef SlepcPEPWhich val = which
+ *         CHKERR( PEPSetWhichEigenpairs(self.pep, val) )             # <<<<<<<<<<<<<<
  * 
- *     def getType(self):
+ *     def getTolerances(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetType(__pyx_v_self->nep, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetWhichEigenpairs(__pyx_v_self->pep, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(15, 384, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":115
- *         return self
+  /* "SLEPc/PEP.pyx":374
+ *         return val
  * 
- *     def setType(self, nep_type):             # <<<<<<<<<<<<<<
+ *     def setWhichEigenpairs(self, which):             # <<<<<<<<<<<<<<
  *         """
- *         Selects the particular solver to be used in the NEP object.
+ *         Specifies which portion of the spectrum is to be sought.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setWhichEigenpairs", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_nep_type);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":128
- *         CHKERR( NEPSetType(self.nep, cval) )
+/* "SLEPc/PEP.pyx":386
+ *         CHKERR( PEPSetWhichEigenpairs(self.pep, val) )
  * 
- *     def getType(self):             # <<<<<<<<<<<<<<
+ *     def getTolerances(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the NEP type of this object.
+ *         Gets the tolerance and maximum iteration count used by the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_12getType[] = "NEP.getType(self)\n\n        Gets the NEP type of this object.\n\n        Returns\n        -------\n        type: `NEP.Type` enumerate\n            The solver currently being used.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_35getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_34getTolerances[] = "PEP.getTolerances(self)\n\n        Gets the tolerance and maximum iteration count used by the\n        default PEP convergence tests.\n\n        Returns\n        -------\n        tol: float\n            The convergence tolerance.\n        max_it: int\n            The maximum number of iterations\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_35getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getType (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getTolerances (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getType", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_12getType(((struct PySlepcNEPObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getTolerances", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTolerances", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_34getTolerances(((struct PySlepcPEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_12getType(struct PySlepcNEPObject *__pyx_v_self) {
-  const char* __pyx_v_nep_type;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_34getTolerances(struct PySlepcPEPObject *__pyx_v_self) {
+  PetscReal __pyx_v_rval;
+  PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getType", 0);
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("getTolerances", 0);
 
-  /* "SLEPc/NEP.pyx":137
- *             The solver currently being used.
+  /* "SLEPc/PEP.pyx":398
+ *             The maximum number of iterations
  *         """
- *         cdef SlepcNEPType nep_type = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( NEPGetType(self.nep, &nep_type) )
- *         return bytes2str(nep_type)
- */
-  __pyx_v_nep_type = NULL;
+ *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt  ival = 0
+ *         CHKERR( PEPGetTolerances(self.pep, &rval, &ival) )
+ */
+  __pyx_v_rval = 0.0;
 
-  /* "SLEPc/NEP.pyx":138
+  /* "SLEPc/PEP.pyx":399
  *         """
- *         cdef SlepcNEPType nep_type = NULL
- *         CHKERR( NEPGetType(self.nep, &nep_type) )             # <<<<<<<<<<<<<<
- *         return bytes2str(nep_type)
+ *         cdef PetscReal rval = 0
+ *         cdef PetscInt  ival = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPGetTolerances(self.pep, &rval, &ival) )
+ *         return (toReal(rval), toInt(ival))
+ */
+  __pyx_v_ival = 0;
+
+  /* "SLEPc/PEP.pyx":400
+ *         cdef PetscReal rval = 0
+ *         cdef PetscInt  ival = 0
+ *         CHKERR( PEPGetTolerances(self.pep, &rval, &ival) )             # <<<<<<<<<<<<<<
+ *         return (toReal(rval), toInt(ival))
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetType(__pyx_v_self->nep, (&__pyx_v_nep_type))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetTolerances(__pyx_v_self->pep, (&__pyx_v_rval), (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 400, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":139
- *         cdef SlepcNEPType nep_type = NULL
- *         CHKERR( NEPGetType(self.nep, &nep_type) )
- *         return bytes2str(nep_type)             # <<<<<<<<<<<<<<
+  /* "SLEPc/PEP.pyx":401
+ *         cdef PetscInt  ival = 0
+ *         CHKERR( PEPGetTolerances(self.pep, &rval, &ival) )
+ *         return (toReal(rval), toInt(ival))             # <<<<<<<<<<<<<<
  * 
- *     def getOptionsPrefix(self):
+ *     def setTolerances(self, tol=None, max_it=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_nep_type); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 401, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_3)) __PYX_ERR(15, 401, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(15, 401, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
   __pyx_t_2 = 0;
+  __pyx_t_3 = 0;
+  __pyx_r = __pyx_t_4;
+  __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/NEP.pyx":128
- *         CHKERR( NEPSetType(self.nep, cval) )
+  /* "SLEPc/PEP.pyx":386
+ *         CHKERR( PEPSetWhichEigenpairs(self.pep, val) )
  * 
- *     def getType(self):             # <<<<<<<<<<<<<<
+ *     def getTolerances(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the NEP type of this object.
+ *         Gets the tolerance and maximum iteration count used by the
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -40265,86 +39765,159 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_12getType(struct PySlepcNEPObjec
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":141
- *         return bytes2str(nep_type)
+/* "SLEPc/PEP.pyx":403
+ *         return (toReal(rval), toInt(ival))
  * 
- *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
+ *     def setTolerances(self, tol=None, max_it=None):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the prefix used for searching for all NEP options in the
+ *         Sets the tolerance and maximum iteration count used by the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_14getOptionsPrefix[] = "NEP.getOptionsPrefix(self)\n\n        Gets the prefix used for searching for all NEP options in the\n        database.\n\n        Returns\n        -------\n        prefix: string\n            The prefix string set for this NEP object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_37setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_36setTolerances[] = "PEP.setTolerances(self, tol=None, max_it=None)\n\n        Sets the tolerance and maximum iteration count used by the\n        default PEP convergence tests.\n\n        Parameters\n        ----------\n        tol: float, optional\n            The convergence tolerance.\n        max_it: int, optional\n            The maximum number of iterations\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_37setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_tol = 0;
+  PyObject *__pyx_v_max_it = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getOptionsPrefix (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getOptionsPrefix", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getOptionsPrefix", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_14getOptionsPrefix(((struct PySlepcNEPObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("setTolerances (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_tol,&__pyx_n_s_max_it,0};
+    PyObject* values[2] = {0,0};
+    values[0] = ((PyObject *)Py_None);
+    values[1] = ((PyObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_tol);
+          if (value) { values[0] = value; kw_args--; }
+        }
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_max_it);
+          if (value) { values[1] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTolerances") < 0)) __PYX_ERR(15, 403, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_tol = values[0];
+    __pyx_v_max_it = values[1];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setTolerances", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 403, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_36setTolerances(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_tol, __pyx_v_max_it);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_14getOptionsPrefix(struct PySlepcNEPObject *__pyx_v_self) {
-  const char *__pyx_v_prefix;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_36setTolerances(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_tol, PyObject *__pyx_v_max_it) {
+  PetscReal __pyx_v_rval;
+  PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getOptionsPrefix", 0);
+  int __pyx_t_2;
+  PetscReal __pyx_t_3;
+  PetscInt __pyx_t_4;
+  int __pyx_t_5;
+  __Pyx_RefNannySetupContext("setTolerances", 0);
 
-  /* "SLEPc/NEP.pyx":151
- *             The prefix string set for this NEP object.
+  /* "SLEPc/PEP.pyx":415
+ *             The maximum number of iterations
  *         """
- *         cdef const_char *prefix = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( NEPGetOptionsPrefix(self.nep, &prefix) )
- *         return bytes2str(prefix)
+ *         cdef PetscReal rval = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         cdef PetscInt  ival = PETSC_DEFAULT
+ *         if tol    is not None: rval = asReal(tol)
  */
-  __pyx_v_prefix = NULL;
+  __pyx_v_rval = PETSC_DEFAULT;
 
-  /* "SLEPc/NEP.pyx":152
+  /* "SLEPc/PEP.pyx":416
  *         """
- *         cdef const_char *prefix = NULL
- *         CHKERR( NEPGetOptionsPrefix(self.nep, &prefix) )             # <<<<<<<<<<<<<<
- *         return bytes2str(prefix)
+ *         cdef PetscReal rval = PETSC_DEFAULT
+ *         cdef PetscInt  ival = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         if tol    is not None: rval = asReal(tol)
+ *         if max_it is not None: ival = asInt(max_it)
+ */
+  __pyx_v_ival = PETSC_DEFAULT;
+
+  /* "SLEPc/PEP.pyx":417
+ *         cdef PetscReal rval = PETSC_DEFAULT
+ *         cdef PetscInt  ival = PETSC_DEFAULT
+ *         if tol    is not None: rval = asReal(tol)             # <<<<<<<<<<<<<<
+ *         if max_it is not None: ival = asInt(max_it)
+ *         CHKERR( PEPSetTolerances(self.pep, rval, ival) )
+ */
+  __pyx_t_1 = (__pyx_v_tol != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) __PYX_ERR(15, 417, __pyx_L1_error)
+    __pyx_v_rval = __pyx_t_3;
+  }
+
+  /* "SLEPc/PEP.pyx":418
+ *         cdef PetscInt  ival = PETSC_DEFAULT
+ *         if tol    is not None: rval = asReal(tol)
+ *         if max_it is not None: ival = asInt(max_it)             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPSetTolerances(self.pep, rval, ival) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetOptionsPrefix(__pyx_v_self->nep, (&__pyx_v_prefix))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = (__pyx_v_max_it != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_max_it); if (unlikely(__pyx_t_4 == -1L && PyErr_Occurred())) __PYX_ERR(15, 418, __pyx_L1_error)
+    __pyx_v_ival = __pyx_t_4;
+  }
 
-  /* "SLEPc/NEP.pyx":153
- *         cdef const_char *prefix = NULL
- *         CHKERR( NEPGetOptionsPrefix(self.nep, &prefix) )
- *         return bytes2str(prefix)             # <<<<<<<<<<<<<<
+  /* "SLEPc/PEP.pyx":419
+ *         if tol    is not None: rval = asReal(tol)
+ *         if max_it is not None: ival = asInt(max_it)
+ *         CHKERR( PEPSetTolerances(self.pep, rval, ival) )             # <<<<<<<<<<<<<<
  * 
- *     def setOptionsPrefix(self, prefix):
+ *     def getConvergenceTest(self):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_prefix); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetTolerances(__pyx_v_self->pep, __pyx_v_rval, __pyx_v_ival)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(15, 419, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":141
- *         return bytes2str(nep_type)
+  /* "SLEPc/PEP.pyx":403
+ *         return (toReal(rval), toInt(ival))
  * 
- *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
+ *     def setTolerances(self, tol=None, max_it=None):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the prefix used for searching for all NEP options in the
+ *         Sets the tolerance and maximum iteration count used by the
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -40352,152 +39925,108 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_14getOptionsPrefix(struct PySlep
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":155
- *         return bytes2str(prefix)
+/* "SLEPc/PEP.pyx":421
+ *         CHKERR( PEPSetTolerances(self.pep, rval, ival) )
  * 
- *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *     def getConvergenceTest(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the prefix used for searching for all NEP options in the
+ *         Return the method used to compute the error estimate
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_17setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_16setOptionsPrefix[] = "NEP.setOptionsPrefix(self, prefix)\n\n        Sets the prefix used for searching for all NEP options in the\n        database.\n\n        Parameters\n        ----------\n        prefix: string\n            The prefix string to prepend to all NEP option requests.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_17setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_prefix = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_39getConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_38getConvergenceTest[] = "PEP.getConvergenceTest(self)\n\n        Return the method used to compute the error estimate \n        used in the convergence test. \n\n        Returns\n        -------\n        conv: PEP.Conv\n            The method used to compute the error estimate \n            used in the convergence test. \n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_39getConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setOptionsPrefix (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_prefix,0};
-    PyObject* values[1] = {0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_prefix)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-    }
-    __pyx_v_prefix = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[14]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_16setOptionsPrefix(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_prefix);
+  __Pyx_RefNannySetupContext("getConvergenceTest (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getConvergenceTest", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getConvergenceTest", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_38getConvergenceTest(((struct PySlepcPEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_16setOptionsPrefix(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
-  const char *__pyx_v_cval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_38getConvergenceTest(struct PySlepcPEPObject *__pyx_v_self) {
+  PEPConv __pyx_v_conv;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setOptionsPrefix", 0);
-  __Pyx_INCREF(__pyx_v_prefix);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getConvergenceTest", 0);
 
-  /* "SLEPc/NEP.pyx":165
- *             The prefix string to prepend to all NEP option requests.
+  /* "SLEPc/PEP.pyx":432
+ *             used in the convergence test.
  *         """
- *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
- *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( NEPSetOptionsPrefix(self.nep, cval) )
+ *         cdef SlepcPEPConv conv = PEP_CONV_REL             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPGetConvergenceTest(self.pep, &conv) )
+ *         return conv
  */
-  __pyx_v_cval = NULL;
+  __pyx_v_conv = PEP_CONV_REL;
 
-  /* "SLEPc/NEP.pyx":166
+  /* "SLEPc/PEP.pyx":433
  *         """
- *         cdef const_char *cval = NULL
- *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
- *         CHKERR( NEPSetOptionsPrefix(self.nep, cval) )
+ *         cdef SlepcPEPConv conv = PEP_CONV_REL
+ *         CHKERR( PEPGetConvergenceTest(self.pep, &conv) )             # <<<<<<<<<<<<<<
+ *         return conv
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetConvergenceTest(__pyx_v_self->pep, (&__pyx_v_conv))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 433, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":167
- *         cdef const_char *cval = NULL
- *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( NEPSetOptionsPrefix(self.nep, cval) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/PEP.pyx":434
+ *         cdef SlepcPEPConv conv = PEP_CONV_REL
+ *         CHKERR( PEPGetConvergenceTest(self.pep, &conv) )
+ *         return conv             # <<<<<<<<<<<<<<
  * 
- *     def appendOptionsPrefix(self, prefix):
+ *     def setConvergenceTest(self, conv):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetOptionsPrefix(__pyx_v_self->nep, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyInt_From_PEPConv(__pyx_v_conv); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 434, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
 
-  /* "SLEPc/NEP.pyx":155
- *         return bytes2str(prefix)
+  /* "SLEPc/PEP.pyx":421
+ *         CHKERR( PEPSetTolerances(self.pep, rval, ival) )
  * 
- *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *     def getConvergenceTest(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the prefix used for searching for all NEP options in the
+ *         Return the method used to compute the error estimate
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getConvergenceTest", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_prefix);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":169
- *         CHKERR( NEPSetOptionsPrefix(self.nep, cval) )
+/* "SLEPc/PEP.pyx":436
+ *         return conv
  * 
- *     def appendOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *     def setConvergenceTest(self, conv):             # <<<<<<<<<<<<<<
  *         """
- *         Appends to the prefix used for searching for all NEP options
+ *         Specifies how to compute the error estimate
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_19appendOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_18appendOptionsPrefix[] = "NEP.appendOptionsPrefix(self, prefix)\n\n        Appends to the prefix used for searching for all NEP options\n        in the database.\n\n        Parameters\n        ----------\n        prefix: string\n            The prefix string to prepend to all NEP option requests.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_19appendOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_prefix = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_41setConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_40setConvergenceTest[] = "PEP.setConvergenceTest(self, conv)\n\n        Specifies how to compute the error estimate \n        used in the convergence test. \n\n        Parameters\n        ----------\n        conv: PEP.Conv\n            The method used to compute the error estimate \n            used in the convergence test.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_41setConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_conv = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("appendOptionsPrefix (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setConvergenceTest (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_prefix,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_conv,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -40510,154 +40039,233 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_19appendOptionsPrefix(PyObject *
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_prefix)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_conv)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "appendOptionsPrefix") < 0)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergenceTest") < 0)) __PYX_ERR(15, 436, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_prefix = values[0];
+    __pyx_v_conv = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("appendOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[14]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setConvergenceTest", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 436, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.appendOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setConvergenceTest", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_18appendOptionsPrefix(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_prefix);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_40setConvergenceTest(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_conv);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_18appendOptionsPrefix(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
-  const char *__pyx_v_cval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_40setConvergenceTest(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_conv) {
+  PEPConv __pyx_v_tconv;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  PEPConv __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("appendOptionsPrefix", 0);
-  __Pyx_INCREF(__pyx_v_prefix);
-
-  /* "SLEPc/NEP.pyx":179
- *             The prefix string to prepend to all NEP option requests.
- *         """
- *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
- *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( NEPAppendOptionsPrefix(self.nep, cval) )
- */
-  __pyx_v_cval = NULL;
+  __Pyx_RefNannySetupContext("setConvergenceTest", 0);
 
-  /* "SLEPc/NEP.pyx":180
+  /* "SLEPc/PEP.pyx":447
+ *             used in the convergence test.
  *         """
- *         cdef const_char *cval = NULL
- *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
- *         CHKERR( NEPAppendOptionsPrefix(self.nep, cval) )
+ *         cdef SlepcPEPConv tconv = conv             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPSetConvergenceTest(self.pep, tconv) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_1 = ((PEPConv)__Pyx_PyInt_As_PEPConv(__pyx_v_conv)); if (unlikely(PyErr_Occurred())) __PYX_ERR(15, 447, __pyx_L1_error)
+  __pyx_v_tconv = __pyx_t_1;
 
-  /* "SLEPc/NEP.pyx":181
- *         cdef const_char *cval = NULL
- *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( NEPAppendOptionsPrefix(self.nep, cval) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/PEP.pyx":448
+ *         """
+ *         cdef SlepcPEPConv tconv = conv
+ *         CHKERR( PEPSetConvergenceTest(self.pep, tconv) )             # <<<<<<<<<<<<<<
  * 
- *     def setFromOptions(self):
+ *     def getRefine(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPAppendOptionsPrefix(__pyx_v_self->nep, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetConvergenceTest(__pyx_v_self->pep, __pyx_v_tconv)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(15, 448, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":169
- *         CHKERR( NEPSetOptionsPrefix(self.nep, cval) )
+  /* "SLEPc/PEP.pyx":436
+ *         return conv
  * 
- *     def appendOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *     def setConvergenceTest(self, conv):             # <<<<<<<<<<<<<<
  *         """
- *         Appends to the prefix used for searching for all NEP options
+ *         Specifies how to compute the error estimate
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.appendOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setConvergenceTest", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_prefix);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":183
- *         CHKERR( NEPAppendOptionsPrefix(self.nep, cval) )
+/* "SLEPc/PEP.pyx":450
+ *         CHKERR( PEPSetConvergenceTest(self.pep, tconv) )
  * 
- *     def setFromOptions(self):             # <<<<<<<<<<<<<<
+ *     def getRefine(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets NEP options from the options database. This routine must
+ *         Gets the refinement strategy used by the PEP object,
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_21setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_20setFromOptions[] = "NEP.setFromOptions(self)\n\n        Sets NEP options from the options database. This routine must\n        be called before `setUp()` if the user is to be allowed to set\n        the solver type.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_21setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_43getRefine(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_42getRefine[] = "PEP.getRefine(self)\n\n        Gets the refinement strategy used by the PEP object, \n        and the associated parameters. \n\n        Returns\n        -------\n        ref: PEP.Refine\n            The refinement type.\n        npart: int\n            The number of partitions of the communicator.\n        tol: real\n            The convergence tolerance.\n        its: int\n            The maximum number of refinement iteratio [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_43getRefine(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setFromOptions (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getRefine (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("setFromOptions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setFromOptions", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_20setFromOptions(((struct PySlepcNEPObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getRefine", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getRefine", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_42getRefine(((struct PySlepcPEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_20setFromOptions(struct PySlepcNEPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_42getRefine(struct PySlepcPEPObject *__pyx_v_self) {
+  PEPRefine __pyx_v_ref;
+  PetscInt __pyx_v_npart;
+  PetscReal __pyx_v_tol;
+  PetscInt __pyx_v_its;
+  PEPRefineScheme __pyx_v_scheme;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setFromOptions", 0);
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  __Pyx_RefNannySetupContext("getRefine", 0);
 
-  /* "SLEPc/NEP.pyx":189
- *         the solver type.
+  /* "SLEPc/PEP.pyx":468
+ *             Scheme for solving linear systems
  *         """
- *         CHKERR( NEPSetFromOptions(self.nep) )             # <<<<<<<<<<<<<<
+ *         cdef SlepcPEPRefine ref = PEP_REFINE_NONE             # <<<<<<<<<<<<<<
+ *         cdef PetscInt npart = 1
+ *         cdef PetscReal tol = PETSC_DEFAULT
+ */
+  __pyx_v_ref = PEP_REFINE_NONE;
+
+  /* "SLEPc/PEP.pyx":469
+ *         """
+ *         cdef SlepcPEPRefine ref = PEP_REFINE_NONE
+ *         cdef PetscInt npart = 1             # <<<<<<<<<<<<<<
+ *         cdef PetscReal tol = PETSC_DEFAULT
+ *         cdef PetscInt its = PETSC_DEFAULT
+ */
+  __pyx_v_npart = 1;
+
+  /* "SLEPc/PEP.pyx":470
+ *         cdef SlepcPEPRefine ref = PEP_REFINE_NONE
+ *         cdef PetscInt npart = 1
+ *         cdef PetscReal tol = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         cdef PetscInt its = PETSC_DEFAULT
+ *         cdef SlepcPEPRefineScheme scheme = PEP_REFINE_SCHEME_MBE
+ */
+  __pyx_v_tol = PETSC_DEFAULT;
+
+  /* "SLEPc/PEP.pyx":471
+ *         cdef PetscInt npart = 1
+ *         cdef PetscReal tol = PETSC_DEFAULT
+ *         cdef PetscInt its = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         cdef SlepcPEPRefineScheme scheme = PEP_REFINE_SCHEME_MBE
+ *         CHKERR( PEPGetRefine(self.pep, &ref, &npart, &tol, &its, &scheme) )
+ */
+  __pyx_v_its = PETSC_DEFAULT;
+
+  /* "SLEPc/PEP.pyx":472
+ *         cdef PetscReal tol = PETSC_DEFAULT
+ *         cdef PetscInt its = PETSC_DEFAULT
+ *         cdef SlepcPEPRefineScheme scheme = PEP_REFINE_SCHEME_MBE             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPGetRefine(self.pep, &ref, &npart, &tol, &its, &scheme) )
+ *         return (ref, toInt(npart), toReal(tol), toInt(its), scheme)
+ */
+  __pyx_v_scheme = PEP_REFINE_SCHEME_MBE;
+
+  /* "SLEPc/PEP.pyx":473
+ *         cdef PetscInt its = PETSC_DEFAULT
+ *         cdef SlepcPEPRefineScheme scheme = PEP_REFINE_SCHEME_MBE
+ *         CHKERR( PEPGetRefine(self.pep, &ref, &npart, &tol, &its, &scheme) )             # <<<<<<<<<<<<<<
+ *         return (ref, toInt(npart), toReal(tol), toInt(its), scheme)
  * 
- *     def getWhichEigenpairs(self):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetFromOptions(__pyx_v_self->nep)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetRefine(__pyx_v_self->pep, (&__pyx_v_ref), (&__pyx_v_npart), (&__pyx_v_tol), (&__pyx_v_its), (&__pyx_v_scheme))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 473, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":183
- *         CHKERR( NEPAppendOptionsPrefix(self.nep, cval) )
+  /* "SLEPc/PEP.pyx":474
+ *         cdef SlepcPEPRefineScheme scheme = PEP_REFINE_SCHEME_MBE
+ *         CHKERR( PEPGetRefine(self.pep, &ref, &npart, &tol, &its, &scheme) )
+ *         return (ref, toInt(npart), toReal(tol), toInt(its), scheme)             # <<<<<<<<<<<<<<
  * 
- *     def setFromOptions(self):             # <<<<<<<<<<<<<<
+ *     def setRefine(self, ref, npart=None, tol=None, its=None, scheme=None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyInt_From_PEPRefine(__pyx_v_ref); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 474, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_npart); if (unlikely(!__pyx_t_3)) __PYX_ERR(15, 474, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_tol); if (unlikely(!__pyx_t_4)) __PYX_ERR(15, 474, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_its); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 474, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_6 = __Pyx_PyInt_From_PEPRefineScheme(__pyx_v_scheme); if (unlikely(!__pyx_t_6)) __PYX_ERR(15, 474, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_t_7 = PyTuple_New(5); if (unlikely(!__pyx_t_7)) __PYX_ERR(15, 474, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_4);
+  PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_4);
+  __Pyx_GIVEREF(__pyx_t_5);
+  PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_t_5);
+  __Pyx_GIVEREF(__pyx_t_6);
+  PyTuple_SET_ITEM(__pyx_t_7, 4, __pyx_t_6);
+  __pyx_t_2 = 0;
+  __pyx_t_3 = 0;
+  __pyx_t_4 = 0;
+  __pyx_t_5 = 0;
+  __pyx_t_6 = 0;
+  __pyx_r = __pyx_t_7;
+  __pyx_t_7 = 0;
+  goto __pyx_L0;
+
+  /* "SLEPc/PEP.pyx":450
+ *         CHKERR( PEPSetConvergenceTest(self.pep, tconv) )
+ * 
+ *     def getRefine(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets NEP options from the options database. This routine must
+ *         Gets the refinement strategy used by the PEP object,
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setFromOptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getRefine", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -40665,86 +40273,331 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_20setFromOptions(struct PySlepcN
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":191
- *         CHKERR( NEPSetFromOptions(self.nep) )
+/* "SLEPc/PEP.pyx":476
+ *         return (ref, toInt(npart), toReal(tol), toInt(its), scheme)
  * 
- *     def getWhichEigenpairs(self):             # <<<<<<<<<<<<<<
+ *     def setRefine(self, ref, npart=None, tol=None, its=None, scheme=None):             # <<<<<<<<<<<<<<
  *         """
- *         Returns which portion of the spectrum is to be sought.
+ *         Sets the refinement strategy used by the PEP object,
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_23getWhichEigenpairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_22getWhichEigenpairs[] = "NEP.getWhichEigenpairs(self)\n\n        Returns which portion of the spectrum is to be sought.\n\n        Returns\n        -------\n        which: `NEP.Which` enumerate\n            The portion of the spectrum to be sought by the solver.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_23getWhichEigenpairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_45setRefine(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_44setRefine[] = "PEP.setRefine(self, ref, npart=None, tol=None, its=None, scheme=None)\n\n        Sets the refinement strategy used by the PEP object, \n        and the associated parameters. \n\n        Parameters\n        ----------\n        ref: PEP.Refine\n            The refinement type.\n        npart: int, optional\n            The number of partitions of the communicator.\n        tol: real, optional\n            The convergence toleran [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_45setRefine(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_ref = 0;
+  PyObject *__pyx_v_npart = 0;
+  PyObject *__pyx_v_tol = 0;
+  PyObject *__pyx_v_its = 0;
+  PyObject *__pyx_v_scheme = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getWhichEigenpairs (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getWhichEigenpairs", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getWhichEigenpairs", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_22getWhichEigenpairs(((struct PySlepcNEPObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("setRefine (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ref,&__pyx_n_s_npart,&__pyx_n_s_tol,&__pyx_n_s_its,&__pyx_n_s_scheme,0};
+    PyObject* values[5] = {0,0,0,0,0};
+    values[1] = ((PyObject *)Py_None);
+    values[2] = ((PyObject *)Py_None);
+    values[3] = ((PyObject *)Py_None);
+    values[4] = ((PyObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ref)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_npart);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_tol);
+          if (value) { values[2] = value; kw_args--; }
+        }
+        case  3:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_its);
+          if (value) { values[3] = value; kw_args--; }
+        }
+        case  4:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_scheme);
+          if (value) { values[4] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRefine") < 0)) __PYX_ERR(15, 476, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_ref = values[0];
+    __pyx_v_npart = values[1];
+    __pyx_v_tol = values[2];
+    __pyx_v_its = values[3];
+    __pyx_v_scheme = values[4];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setRefine", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 476, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setRefine", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_44setRefine(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_ref, __pyx_v_npart, __pyx_v_tol, __pyx_v_its, __pyx_v_scheme);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_22getWhichEigenpairs(struct PySlepcNEPObject *__pyx_v_self) {
-  NEPWhich __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_44setRefine(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_ref, PyObject *__pyx_v_npart, PyObject *__pyx_v_tol, PyObject *__pyx_v_its, PyObject *__pyx_v_scheme) {
+  PEPRefine __pyx_v_tref;
+  PetscInt __pyx_v_tnpart;
+  PetscReal __pyx_v_ttol;
+  PetscInt __pyx_v_tits;
+  PEPRefineScheme __pyx_v_tscheme;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PEPRefine __pyx_t_1;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  PetscInt __pyx_t_4;
+  PetscReal __pyx_t_5;
+  PEPRefineScheme __pyx_t_6;
+  int __pyx_t_7;
+  __Pyx_RefNannySetupContext("setRefine", 0);
+
+  /* "SLEPc/PEP.pyx":494
+ *             Scheme for linear system solves
+ *         """
+ *         cdef SlepcPEPRefine tref = ref             # <<<<<<<<<<<<<<
+ *         cdef PetscInt tnpart = 1
+ *         cdef PetscReal ttol = PETSC_DEFAULT
+ */
+  __pyx_t_1 = ((PEPRefine)__Pyx_PyInt_As_PEPRefine(__pyx_v_ref)); if (unlikely(PyErr_Occurred())) __PYX_ERR(15, 494, __pyx_L1_error)
+  __pyx_v_tref = __pyx_t_1;
+
+  /* "SLEPc/PEP.pyx":495
+ *         """
+ *         cdef SlepcPEPRefine tref = ref
+ *         cdef PetscInt tnpart = 1             # <<<<<<<<<<<<<<
+ *         cdef PetscReal ttol = PETSC_DEFAULT
+ *         cdef PetscInt tits = PETSC_DEFAULT
+ */
+  __pyx_v_tnpart = 1;
+
+  /* "SLEPc/PEP.pyx":496
+ *         cdef SlepcPEPRefine tref = ref
+ *         cdef PetscInt tnpart = 1
+ *         cdef PetscReal ttol = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         cdef PetscInt tits = PETSC_DEFAULT
+ *         cdef SlepcPEPRefineScheme tscheme = PEP_REFINE_SCHEME_MBE
+ */
+  __pyx_v_ttol = PETSC_DEFAULT;
+
+  /* "SLEPc/PEP.pyx":497
+ *         cdef PetscInt tnpart = 1
+ *         cdef PetscReal ttol = PETSC_DEFAULT
+ *         cdef PetscInt tits = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         cdef SlepcPEPRefineScheme tscheme = PEP_REFINE_SCHEME_MBE
+ *         if npart is not None: tnpart = asInt(npart)
+ */
+  __pyx_v_tits = PETSC_DEFAULT;
+
+  /* "SLEPc/PEP.pyx":498
+ *         cdef PetscReal ttol = PETSC_DEFAULT
+ *         cdef PetscInt tits = PETSC_DEFAULT
+ *         cdef SlepcPEPRefineScheme tscheme = PEP_REFINE_SCHEME_MBE             # <<<<<<<<<<<<<<
+ *         if npart is not None: tnpart = asInt(npart)
+ *         if tol is not None: ttol = asReal(tol)
+ */
+  __pyx_v_tscheme = PEP_REFINE_SCHEME_MBE;
+
+  /* "SLEPc/PEP.pyx":499
+ *         cdef PetscInt tits = PETSC_DEFAULT
+ *         cdef SlepcPEPRefineScheme tscheme = PEP_REFINE_SCHEME_MBE
+ *         if npart is not None: tnpart = asInt(npart)             # <<<<<<<<<<<<<<
+ *         if tol is not None: ttol = asReal(tol)
+ *         if its is not None: tits = asInt(its)
+ */
+  __pyx_t_2 = (__pyx_v_npart != Py_None);
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_npart); if (unlikely(__pyx_t_4 == -1L && PyErr_Occurred())) __PYX_ERR(15, 499, __pyx_L1_error)
+    __pyx_v_tnpart = __pyx_t_4;
+  }
+
+  /* "SLEPc/PEP.pyx":500
+ *         cdef SlepcPEPRefineScheme tscheme = PEP_REFINE_SCHEME_MBE
+ *         if npart is not None: tnpart = asInt(npart)
+ *         if tol is not None: ttol = asReal(tol)             # <<<<<<<<<<<<<<
+ *         if its is not None: tits = asInt(its)
+ *         if scheme is not None: tscheme = scheme
+ */
+  __pyx_t_3 = (__pyx_v_tol != Py_None);
+  __pyx_t_2 = (__pyx_t_3 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_5 == -1.0 && PyErr_Occurred())) __PYX_ERR(15, 500, __pyx_L1_error)
+    __pyx_v_ttol = __pyx_t_5;
+  }
+
+  /* "SLEPc/PEP.pyx":501
+ *         if npart is not None: tnpart = asInt(npart)
+ *         if tol is not None: ttol = asReal(tol)
+ *         if its is not None: tits = asInt(its)             # <<<<<<<<<<<<<<
+ *         if scheme is not None: tscheme = scheme
+ *         CHKERR( PEPSetRefine(self.pep, tref, tnpart, ttol, tits, tscheme) )
+ */
+  __pyx_t_2 = (__pyx_v_its != Py_None);
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_its); if (unlikely(__pyx_t_4 == -1L && PyErr_Occurred())) __PYX_ERR(15, 501, __pyx_L1_error)
+    __pyx_v_tits = __pyx_t_4;
+  }
+
+  /* "SLEPc/PEP.pyx":502
+ *         if tol is not None: ttol = asReal(tol)
+ *         if its is not None: tits = asInt(its)
+ *         if scheme is not None: tscheme = scheme             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPSetRefine(self.pep, tref, tnpart, ttol, tits, tscheme) )
+ * 
+ */
+  __pyx_t_3 = (__pyx_v_scheme != Py_None);
+  __pyx_t_2 = (__pyx_t_3 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_6 = ((PEPRefineScheme)__Pyx_PyInt_As_PEPRefineScheme(__pyx_v_scheme)); if (unlikely(PyErr_Occurred())) __PYX_ERR(15, 502, __pyx_L1_error)
+    __pyx_v_tscheme = __pyx_t_6;
+  }
+
+  /* "SLEPc/PEP.pyx":503
+ *         if its is not None: tits = asInt(its)
+ *         if scheme is not None: tscheme = scheme
+ *         CHKERR( PEPSetRefine(self.pep, tref, tnpart, ttol, tits, tscheme) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getTrackAll(self):
+ */
+  __pyx_t_7 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetRefine(__pyx_v_self->pep, __pyx_v_tref, __pyx_v_tnpart, __pyx_v_ttol, __pyx_v_tits, __pyx_v_tscheme)); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(15, 503, __pyx_L1_error)
+
+  /* "SLEPc/PEP.pyx":476
+ *         return (ref, toInt(npart), toReal(tol), toInt(its), scheme)
+ * 
+ *     def setRefine(self, ref, npart=None, tol=None, its=None, scheme=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the refinement strategy used by the PEP object,
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setRefine", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/PEP.pyx":505
+ *         CHKERR( PEPSetRefine(self.pep, tref, tnpart, ttol, tits, tscheme) )
+ * 
+ *     def getTrackAll(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Returns the flag indicating whether all residual norms must be
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_47getTrackAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_46getTrackAll[] = "PEP.getTrackAll(self)\n\n        Returns the flag indicating whether all residual norms must be\n        computed or not.\n\n        Returns\n        -------\n        trackall: bool\n            Whether the solver compute all residuals or not.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_47getTrackAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getTrackAll (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getTrackAll", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTrackAll", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_46getTrackAll(((struct PySlepcPEPObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_46getTrackAll(struct PySlepcPEPObject *__pyx_v_self) {
+  PetscBool __pyx_v_tval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getWhichEigenpairs", 0);
+  __Pyx_RefNannySetupContext("getTrackAll", 0);
 
-  /* "SLEPc/NEP.pyx":200
- *             The portion of the spectrum to be sought by the solver.
+  /* "SLEPc/PEP.pyx":515
+ *             Whether the solver compute all residuals or not.
  *         """
- *         cdef SlepcNEPWhich val = NEP_LARGEST_MAGNITUDE             # <<<<<<<<<<<<<<
- *         CHKERR( NEPGetWhichEigenpairs(self.nep, &val) )
- *         return val
+ *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPGetTrackAll(self.pep, &tval) )
+ *         return <bint>tval
  */
-  __pyx_v_val = NEP_LARGEST_MAGNITUDE;
+  __pyx_v_tval = PETSC_FALSE;
 
-  /* "SLEPc/NEP.pyx":201
+  /* "SLEPc/PEP.pyx":516
  *         """
- *         cdef SlepcNEPWhich val = NEP_LARGEST_MAGNITUDE
- *         CHKERR( NEPGetWhichEigenpairs(self.nep, &val) )             # <<<<<<<<<<<<<<
- *         return val
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( PEPGetTrackAll(self.pep, &tval) )             # <<<<<<<<<<<<<<
+ *         return <bint>tval
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetWhichEigenpairs(__pyx_v_self->nep, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetTrackAll(__pyx_v_self->pep, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 516, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":202
- *         cdef SlepcNEPWhich val = NEP_LARGEST_MAGNITUDE
- *         CHKERR( NEPGetWhichEigenpairs(self.nep, &val) )
- *         return val             # <<<<<<<<<<<<<<
+  /* "SLEPc/PEP.pyx":517
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( PEPGetTrackAll(self.pep, &tval) )
+ *         return <bint>tval             # <<<<<<<<<<<<<<
  * 
- *     def setWhichEigenpairs(self, which):
+ *     def setTrackAll(self, trackall):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_tval); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 517, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/NEP.pyx":191
- *         CHKERR( NEPSetFromOptions(self.nep) )
+  /* "SLEPc/PEP.pyx":505
+ *         CHKERR( PEPSetRefine(self.pep, tref, tnpart, ttol, tits, tscheme) )
  * 
- *     def getWhichEigenpairs(self):             # <<<<<<<<<<<<<<
+ *     def getTrackAll(self):             # <<<<<<<<<<<<<<
  *         """
- *         Returns which portion of the spectrum is to be sought.
+ *         Returns the flag indicating whether all residual norms must be
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getWhichEigenpairs", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getTrackAll", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -40752,27 +40605,24 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_22getWhichEigenpairs(struct PySl
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":204
- *         return val
+/* "SLEPc/PEP.pyx":519
+ *         return <bint>tval
  * 
- *     def setWhichEigenpairs(self, which):             # <<<<<<<<<<<<<<
+ *     def setTrackAll(self, trackall):             # <<<<<<<<<<<<<<
  *         """
- *         Specifies which portion of the spectrum is to be sought.
+ *         Specifies if the solver must compute the residual of all
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_25setWhichEigenpairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_24setWhichEigenpairs[] = "NEP.setWhichEigenpairs(self, which)\n\n        Specifies which portion of the spectrum is to be sought.\n\n        Parameters\n        ----------\n        which: `NEP.Which` enumerate\n            The portion of the spectrum to be sought by the solver.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_25setWhichEigenpairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_which = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_49setTrackAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_48setTrackAll[] = "PEP.setTrackAll(self, trackall)\n\n        Specifies if the solver must compute the residual of all\n        approximate eigenpairs or not.\n\n        Parameters\n        ----------\n        trackall: bool\n            Whether compute all residuals or not.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_49setTrackAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_trackall = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setWhichEigenpairs (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setTrackAll (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_which,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_trackall,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -40785,77 +40635,74 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_25setWhichEigenpairs(PyObject *_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_which)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_trackall)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setWhichEigenpairs") < 0)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTrackAll") < 0)) __PYX_ERR(15, 519, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_which = values[0];
+    __pyx_v_trackall = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setWhichEigenpairs", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[14]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setTrackAll", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 519, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setWhichEigenpairs", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setTrackAll", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_24setWhichEigenpairs(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_which);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_48setTrackAll(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_trackall);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_24setWhichEigenpairs(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_which) {
-  NEPWhich __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_48setTrackAll(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_trackall) {
+  PetscBool __pyx_v_tval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  NEPWhich __pyx_t_1;
+  PetscBool __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setWhichEigenpairs", 0);
+  __Pyx_RefNannySetupContext("setTrackAll", 0);
 
-  /* "SLEPc/NEP.pyx":213
- *             The portion of the spectrum to be sought by the solver.
+  /* "SLEPc/PEP.pyx":529
+ *             Whether compute all residuals or not.
  *         """
- *         cdef SlepcNEPWhich val = which             # <<<<<<<<<<<<<<
- *         CHKERR( NEPSetWhichEigenpairs(self.nep, val) )
+ *         cdef PetscBool tval = trackall             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPSetTrackAll(self.pep, tval) )
  * 
  */
-  __pyx_t_1 = ((NEPWhich)PyInt_AsLong(__pyx_v_which)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_val = __pyx_t_1;
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_trackall)); if (unlikely(PyErr_Occurred())) __PYX_ERR(15, 529, __pyx_L1_error)
+  __pyx_v_tval = __pyx_t_1;
 
-  /* "SLEPc/NEP.pyx":214
+  /* "SLEPc/PEP.pyx":530
  *         """
- *         cdef SlepcNEPWhich val = which
- *         CHKERR( NEPSetWhichEigenpairs(self.nep, val) )             # <<<<<<<<<<<<<<
+ *         cdef PetscBool tval = trackall
+ *         CHKERR( PEPSetTrackAll(self.pep, tval) )             # <<<<<<<<<<<<<<
  * 
- *     def getTolerances(self):
+ *     def getDimensions(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetWhichEigenpairs(__pyx_v_self->nep, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetTrackAll(__pyx_v_self->pep, __pyx_v_tval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(15, 530, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":204
- *         return val
+  /* "SLEPc/PEP.pyx":519
+ *         return <bint>tval
  * 
- *     def setWhichEigenpairs(self, which):             # <<<<<<<<<<<<<<
+ *     def setTrackAll(self, trackall):             # <<<<<<<<<<<<<<
  *         """
- *         Specifies which portion of the spectrum is to be sought.
+ *         Specifies if the solver must compute the residual of all
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setWhichEigenpairs", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setTrackAll", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -40863,37 +40710,35 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_24setWhichEigenpairs(struct PySl
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":216
- *         CHKERR( NEPSetWhichEigenpairs(self.nep, val) )
+/* "SLEPc/PEP.pyx":532
+ *         CHKERR( PEPSetTrackAll(self.pep, tval) )
  * 
- *     def getTolerances(self):             # <<<<<<<<<<<<<<
+ *     def getDimensions(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the tolerance and maximum iteration count used by the
+ *         Gets the number of eigenvalues to compute and the dimension of
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_27getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_26getTolerances[] = "NEP.getTolerances(self)\n\n        Gets the tolerance and maximum iteration count used by the\n        default NEP convergence tests.\n\n        Returns\n        -------\n        abstol: float\n            The absolute convergence tolerance.\n        rtol: float\n            The relative convergence tolerance.\n        stol: float\n            Convergence tolerance in terms of the norm of the change in the\n            solu [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_27getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_51getDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_50getDimensions[] = "PEP.getDimensions(self)\n\n        Gets the number of eigenvalues to compute and the dimension of\n        the subspace.\n\n        Returns\n        -------\n        nev: int\n            Number of eigenvalues to compute.\n        ncv: int\n            Maximum dimension of the subspace to be used by the solver.\n        mpd: int\n            Maximum dimension allowed for the projected problem.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_51getDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getTolerances (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getDimensions (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getTolerances", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTolerances", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_26getTolerances(((struct PySlepcNEPObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getDimensions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDimensions", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_50getDimensions(((struct PySlepcPEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_26getTolerances(struct PySlepcNEPObject *__pyx_v_self) {
-  PetscReal __pyx_v_rval1;
-  PetscReal __pyx_v_rval2;
-  PetscReal __pyx_v_rval3;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_50getDimensions(struct PySlepcPEPObject *__pyx_v_self) {
   PetscInt __pyx_v_ival1;
   PetscInt __pyx_v_ival2;
+  PetscInt __pyx_v_ival3;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -40901,112 +40746,79 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_26getTolerances(struct PySlepcNE
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
-  PyObject *__pyx_t_6 = NULL;
-  PyObject *__pyx_t_7 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getTolerances", 0);
+  __Pyx_RefNannySetupContext("getDimensions", 0);
 
-  /* "SLEPc/NEP.pyx":235
- *             The maximum number of function evaluations.
+  /* "SLEPc/PEP.pyx":546
+ *             Maximum dimension allowed for the projected problem.
  *         """
- *         cdef PetscReal rval1 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval2 = 0
- *         cdef PetscReal rval3 = 0
+ *         cdef PetscInt ival1 = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival2 = 0
+ *         cdef PetscInt ival3 = 0
  */
-  __pyx_v_rval1 = 0.0;
+  __pyx_v_ival1 = 0;
 
-  /* "SLEPc/NEP.pyx":236
+  /* "SLEPc/PEP.pyx":547
  *         """
- *         cdef PetscReal rval1 = 0
- *         cdef PetscReal rval2 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval3 = 0
- *         cdef PetscInt  ival1 = 0
- */
-  __pyx_v_rval2 = 0.0;
-
-  /* "SLEPc/NEP.pyx":237
- *         cdef PetscReal rval1 = 0
- *         cdef PetscReal rval2 = 0
- *         cdef PetscReal rval3 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt  ival1 = 0
- *         cdef PetscInt  ival2 = 0
- */
-  __pyx_v_rval3 = 0.0;
-
-  /* "SLEPc/NEP.pyx":238
- *         cdef PetscReal rval2 = 0
- *         cdef PetscReal rval3 = 0
- *         cdef PetscInt  ival1 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt  ival2 = 0
- *         CHKERR( NEPGetTolerances(self.nep, &rval1, &rval2, &rval3, &ival1, &ival2) )
+ *         cdef PetscInt ival1 = 0
+ *         cdef PetscInt ival2 = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival3 = 0
+ *         CHKERR( PEPGetDimensions(self.pep, &ival1, &ival2, &ival3) )
  */
-  __pyx_v_ival1 = 0;
+  __pyx_v_ival2 = 0;
 
-  /* "SLEPc/NEP.pyx":239
- *         cdef PetscReal rval3 = 0
- *         cdef PetscInt  ival1 = 0
- *         cdef PetscInt  ival2 = 0             # <<<<<<<<<<<<<<
- *         CHKERR( NEPGetTolerances(self.nep, &rval1, &rval2, &rval3, &ival1, &ival2) )
- *         return (toReal(rval1), toReal(rval2), toReal(rval3), toInt(ival1), toInt(ival2))
+  /* "SLEPc/PEP.pyx":548
+ *         cdef PetscInt ival1 = 0
+ *         cdef PetscInt ival2 = 0
+ *         cdef PetscInt ival3 = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPGetDimensions(self.pep, &ival1, &ival2, &ival3) )
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3))
  */
-  __pyx_v_ival2 = 0;
+  __pyx_v_ival3 = 0;
 
-  /* "SLEPc/NEP.pyx":240
- *         cdef PetscInt  ival1 = 0
- *         cdef PetscInt  ival2 = 0
- *         CHKERR( NEPGetTolerances(self.nep, &rval1, &rval2, &rval3, &ival1, &ival2) )             # <<<<<<<<<<<<<<
- *         return (toReal(rval1), toReal(rval2), toReal(rval3), toInt(ival1), toInt(ival2))
+  /* "SLEPc/PEP.pyx":549
+ *         cdef PetscInt ival2 = 0
+ *         cdef PetscInt ival3 = 0
+ *         CHKERR( PEPGetDimensions(self.pep, &ival1, &ival2, &ival3) )             # <<<<<<<<<<<<<<
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3))
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetTolerances(__pyx_v_self->nep, (&__pyx_v_rval1), (&__pyx_v_rval2), (&__pyx_v_rval3), (&__pyx_v_ival1), (&__pyx_v_ival2))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetDimensions(__pyx_v_self->pep, (&__pyx_v_ival1), (&__pyx_v_ival2), (&__pyx_v_ival3))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 549, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":241
- *         cdef PetscInt  ival2 = 0
- *         CHKERR( NEPGetTolerances(self.nep, &rval1, &rval2, &rval3, &ival1, &ival2) )
- *         return (toReal(rval1), toReal(rval2), toReal(rval3), toInt(ival1), toInt(ival2))             # <<<<<<<<<<<<<<
+  /* "SLEPc/PEP.pyx":550
+ *         cdef PetscInt ival3 = 0
+ *         CHKERR( PEPGetDimensions(self.pep, &ival1, &ival2, &ival3) )
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3))             # <<<<<<<<<<<<<<
  * 
- *     def setTolerances(self, abstol=None, rtol=None, stol=None, maxit=None, maxf=None):
+ *     def setDimensions(self, nev=None, ncv=None, mpd=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival1); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 550, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) __PYX_ERR(15, 550, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival3); if (unlikely(!__pyx_t_4)) __PYX_ERR(15, 550, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 550, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = PyTuple_New(5); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
   __Pyx_GIVEREF(__pyx_t_2);
-  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_3);
-  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_4);
-  PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_4);
-  __Pyx_GIVEREF(__pyx_t_5);
-  PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_t_5);
-  __Pyx_GIVEREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_7, 4, __pyx_t_6);
+  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
   __pyx_t_2 = 0;
   __pyx_t_3 = 0;
   __pyx_t_4 = 0;
+  __pyx_r = __pyx_t_5;
   __pyx_t_5 = 0;
-  __pyx_t_6 = 0;
-  __pyx_r = __pyx_t_7;
-  __pyx_t_7 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/NEP.pyx":216
- *         CHKERR( NEPSetWhichEigenpairs(self.nep, val) )
+  /* "SLEPc/PEP.pyx":532
+ *         CHKERR( PEPSetTrackAll(self.pep, tval) )
  * 
- *     def getTolerances(self):             # <<<<<<<<<<<<<<
+ *     def getDimensions(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the tolerance and maximum iteration count used by the
+ *         Gets the number of eigenvalues to compute and the dimension of
  */
 
   /* function exit code */
@@ -41015,9 +40827,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_26getTolerances(struct PySlepcNE
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_XDECREF(__pyx_t_6);
-  __Pyx_XDECREF(__pyx_t_7);
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -41025,43 +40835,34 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_26getTolerances(struct PySlepcNE
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":243
- *         return (toReal(rval1), toReal(rval2), toReal(rval3), toInt(ival1), toInt(ival2))
+/* "SLEPc/PEP.pyx":552
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3))
  * 
- *     def setTolerances(self, abstol=None, rtol=None, stol=None, maxit=None, maxf=None):             # <<<<<<<<<<<<<<
+ *     def setDimensions(self, nev=None, ncv=None, mpd=None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets various parameters used in convergence tests.
+ *         Sets the number of eigenvalues to compute and the dimension of
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_29setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_28setTolerances[] = "NEP.setTolerances(self, abstol=None, rtol=None, stol=None, maxit=None, maxf=None)\n\n        Sets various parameters used in convergence tests.\n\n        Parameters\n        ----------\n        abstol: float, optional\n            The absolute convergence tolerance.\n        rtol: float, optional\n            The relative convergence tolerance.\n        stol: float, optional\n            Convergence tolerance in terms of t [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_29setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_abstol = 0;
-  PyObject *__pyx_v_rtol = 0;
-  PyObject *__pyx_v_stol = 0;
-  PyObject *__pyx_v_maxit = 0;
-  PyObject *__pyx_v_maxf = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_53setDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_52setDimensions[] = "PEP.setDimensions(self, nev=None, ncv=None, mpd=None)\n\n        Sets the number of eigenvalues to compute and the dimension of\n        the subspace.\n\n        Parameters\n        ----------\n        nev: int, optional\n            Number of eigenvalues to compute.\n        ncv: int, optional\n            Maximum dimension of the subspace to be used by the\n            solver.\n        mpd: int, optional\n            Maxi [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_53setDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_nev = 0;
+  PyObject *__pyx_v_ncv = 0;
+  PyObject *__pyx_v_mpd = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setTolerances (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setDimensions (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_abstol,&__pyx_n_s_rtol,&__pyx_n_s_stol,&__pyx_n_s_maxit,&__pyx_n_s_maxf,0};
-    PyObject* values[5] = {0,0,0,0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nev,&__pyx_n_s_ncv,&__pyx_n_s_mpd,0};
+    PyObject* values[3] = {0,0,0};
     values[0] = ((PyObject *)Py_None);
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
-    values[3] = ((PyObject *)Py_None);
-    values[4] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
-        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
-        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
@@ -41072,37 +40873,25 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_29setTolerances(PyObject *__pyx_
       switch (pos_args) {
         case  0:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_abstol);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nev);
           if (value) { values[0] = value; kw_args--; }
         }
         case  1:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rtol);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ncv);
           if (value) { values[1] = value; kw_args--; }
         }
         case  2:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_stol);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mpd);
           if (value) { values[2] = value; kw_args--; }
         }
-        case  3:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_maxit);
-          if (value) { values[3] = value; kw_args--; }
-        }
-        case  4:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_maxf);
-          if (value) { values[4] = value; kw_args--; }
-        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTolerances") < 0)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDimensions") < 0)) __PYX_ERR(15, 552, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
-        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
@@ -41110,192 +40899,128 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_29setTolerances(PyObject *__pyx_
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_abstol = values[0];
-    __pyx_v_rtol = values[1];
-    __pyx_v_stol = values[2];
-    __pyx_v_maxit = values[3];
-    __pyx_v_maxf = values[4];
+    __pyx_v_nev = values[0];
+    __pyx_v_ncv = values[1];
+    __pyx_v_mpd = values[2];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTolerances", 0, 0, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[14]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setDimensions", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 552, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_28setTolerances(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_abstol, __pyx_v_rtol, __pyx_v_stol, __pyx_v_maxit, __pyx_v_maxf);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_52setDimensions(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_nev, __pyx_v_ncv, __pyx_v_mpd);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_28setTolerances(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_abstol, PyObject *__pyx_v_rtol, PyObject *__pyx_v_stol, PyObject *__pyx_v_maxit, PyObject *__pyx_v_maxf) {
-  PetscReal __pyx_v_rval1;
-  PetscReal __pyx_v_rval2;
-  PetscReal __pyx_v_rval3;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_52setDimensions(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_nev, PyObject *__pyx_v_ncv, PyObject *__pyx_v_mpd) {
   PetscInt __pyx_v_ival1;
   PetscInt __pyx_v_ival2;
+  PetscInt __pyx_v_ival3;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
-  PetscReal __pyx_t_3;
-  PetscInt __pyx_t_4;
-  int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setTolerances", 0);
-
-  /* "SLEPc/NEP.pyx":261
- *             The maximum number of function evaluations.
- *         """
- *         cdef PetscReal rval1 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval2 = PETSC_DEFAULT
- *         cdef PetscReal rval3 = PETSC_DEFAULT
- */
-  __pyx_v_rval1 = PETSC_DEFAULT;
+  PetscInt __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("setDimensions", 0);
 
-  /* "SLEPc/NEP.pyx":262
+  /* "SLEPc/PEP.pyx":567
+ *             Maximum dimension allowed for the projected problem.
  *         """
- *         cdef PetscReal rval1 = PETSC_DEFAULT
- *         cdef PetscReal rval2 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval3 = PETSC_DEFAULT
- *         cdef PetscInt  ival1 = PETSC_DEFAULT
- */
-  __pyx_v_rval2 = PETSC_DEFAULT;
-
-  /* "SLEPc/NEP.pyx":263
- *         cdef PetscReal rval1 = PETSC_DEFAULT
- *         cdef PetscReal rval2 = PETSC_DEFAULT
- *         cdef PetscReal rval3 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscInt  ival1 = PETSC_DEFAULT
- *         cdef PetscInt  ival2 = PETSC_DEFAULT
- */
-  __pyx_v_rval3 = PETSC_DEFAULT;
-
-  /* "SLEPc/NEP.pyx":264
- *         cdef PetscReal rval2 = PETSC_DEFAULT
- *         cdef PetscReal rval3 = PETSC_DEFAULT
- *         cdef PetscInt  ival1 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscInt  ival2 = PETSC_DEFAULT
- *         if abstol is not None: rval1 = asReal(abstol)
+ *         cdef PetscInt ival1 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival2 = PETSC_DEFAULT
+ *         cdef PetscInt ival3 = PETSC_DEFAULT
  */
   __pyx_v_ival1 = PETSC_DEFAULT;
 
-  /* "SLEPc/NEP.pyx":265
- *         cdef PetscReal rval3 = PETSC_DEFAULT
- *         cdef PetscInt  ival1 = PETSC_DEFAULT
- *         cdef PetscInt  ival2 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         if abstol is not None: rval1 = asReal(abstol)
- *         if rtol   is not None: rval2 = asReal(rtol)
+  /* "SLEPc/PEP.pyx":568
+ *         """
+ *         cdef PetscInt ival1 = PETSC_DEFAULT
+ *         cdef PetscInt ival2 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival3 = PETSC_DEFAULT
+ *         if nev is not None: ival1 = asInt(nev)
  */
   __pyx_v_ival2 = PETSC_DEFAULT;
 
-  /* "SLEPc/NEP.pyx":266
- *         cdef PetscInt  ival1 = PETSC_DEFAULT
- *         cdef PetscInt  ival2 = PETSC_DEFAULT
- *         if abstol is not None: rval1 = asReal(abstol)             # <<<<<<<<<<<<<<
- *         if rtol   is not None: rval2 = asReal(rtol)
- *         if stol   is not None: rval3 = asReal(stol)
- */
-  __pyx_t_1 = (__pyx_v_abstol != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_abstol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_rval1 = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "SLEPc/NEP.pyx":267
- *         cdef PetscInt  ival2 = PETSC_DEFAULT
- *         if abstol is not None: rval1 = asReal(abstol)
- *         if rtol   is not None: rval2 = asReal(rtol)             # <<<<<<<<<<<<<<
- *         if stol   is not None: rval3 = asReal(stol)
- *         if maxit  is not None: ival1 = asInt(maxit)
+  /* "SLEPc/PEP.pyx":569
+ *         cdef PetscInt ival1 = PETSC_DEFAULT
+ *         cdef PetscInt ival2 = PETSC_DEFAULT
+ *         cdef PetscInt ival3 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         if nev is not None: ival1 = asInt(nev)
+ *         if ncv is not None: ival2 = asInt(ncv)
  */
-  __pyx_t_2 = (__pyx_v_rtol != Py_None);
-  __pyx_t_1 = (__pyx_t_2 != 0);
-  if (__pyx_t_1) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_rtol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_rval2 = __pyx_t_3;
-    goto __pyx_L4;
-  }
-  __pyx_L4:;
+  __pyx_v_ival3 = PETSC_DEFAULT;
 
-  /* "SLEPc/NEP.pyx":268
- *         if abstol is not None: rval1 = asReal(abstol)
- *         if rtol   is not None: rval2 = asReal(rtol)
- *         if stol   is not None: rval3 = asReal(stol)             # <<<<<<<<<<<<<<
- *         if maxit  is not None: ival1 = asInt(maxit)
- *         if maxf   is not None: ival2 = asInt(maxf)
+  /* "SLEPc/PEP.pyx":570
+ *         cdef PetscInt ival2 = PETSC_DEFAULT
+ *         cdef PetscInt ival3 = PETSC_DEFAULT
+ *         if nev is not None: ival1 = asInt(nev)             # <<<<<<<<<<<<<<
+ *         if ncv is not None: ival2 = asInt(ncv)
+ *         if mpd is not None: ival3 = asInt(mpd)
  */
-  __pyx_t_1 = (__pyx_v_stol != Py_None);
+  __pyx_t_1 = (__pyx_v_nev != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_stol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_rval3 = __pyx_t_3;
-    goto __pyx_L5;
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_nev); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(15, 570, __pyx_L1_error)
+    __pyx_v_ival1 = __pyx_t_3;
   }
-  __pyx_L5:;
 
-  /* "SLEPc/NEP.pyx":269
- *         if rtol   is not None: rval2 = asReal(rtol)
- *         if stol   is not None: rval3 = asReal(stol)
- *         if maxit  is not None: ival1 = asInt(maxit)             # <<<<<<<<<<<<<<
- *         if maxf   is not None: ival2 = asInt(maxf)
- *         CHKERR( NEPSetTolerances(self.nep, rval1, rval2, rval3, ival1, ival2) )
+  /* "SLEPc/PEP.pyx":571
+ *         cdef PetscInt ival3 = PETSC_DEFAULT
+ *         if nev is not None: ival1 = asInt(nev)
+ *         if ncv is not None: ival2 = asInt(ncv)             # <<<<<<<<<<<<<<
+ *         if mpd is not None: ival3 = asInt(mpd)
+ *         CHKERR( PEPSetDimensions(self.pep, ival1, ival2, ival3) )
  */
-  __pyx_t_2 = (__pyx_v_maxit != Py_None);
+  __pyx_t_2 = (__pyx_v_ncv != Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
-    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_maxit); if (unlikely(__pyx_t_4 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival1 = __pyx_t_4;
-    goto __pyx_L6;
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_ncv); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(15, 571, __pyx_L1_error)
+    __pyx_v_ival2 = __pyx_t_3;
   }
-  __pyx_L6:;
 
-  /* "SLEPc/NEP.pyx":270
- *         if stol   is not None: rval3 = asReal(stol)
- *         if maxit  is not None: ival1 = asInt(maxit)
- *         if maxf   is not None: ival2 = asInt(maxf)             # <<<<<<<<<<<<<<
- *         CHKERR( NEPSetTolerances(self.nep, rval1, rval2, rval3, ival1, ival2) )
+  /* "SLEPc/PEP.pyx":572
+ *         if nev is not None: ival1 = asInt(nev)
+ *         if ncv is not None: ival2 = asInt(ncv)
+ *         if mpd is not None: ival3 = asInt(mpd)             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPSetDimensions(self.pep, ival1, ival2, ival3) )
  * 
  */
-  __pyx_t_1 = (__pyx_v_maxf != Py_None);
+  __pyx_t_1 = (__pyx_v_mpd != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_maxf); if (unlikely(__pyx_t_4 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival2 = __pyx_t_4;
-    goto __pyx_L7;
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_mpd); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(15, 572, __pyx_L1_error)
+    __pyx_v_ival3 = __pyx_t_3;
   }
-  __pyx_L7:;
 
-  /* "SLEPc/NEP.pyx":271
- *         if maxit  is not None: ival1 = asInt(maxit)
- *         if maxf   is not None: ival2 = asInt(maxf)
- *         CHKERR( NEPSetTolerances(self.nep, rval1, rval2, rval3, ival1, ival2) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/PEP.pyx":573
+ *         if ncv is not None: ival2 = asInt(ncv)
+ *         if mpd is not None: ival3 = asInt(mpd)
+ *         CHKERR( PEPSetDimensions(self.pep, ival1, ival2, ival3) )             # <<<<<<<<<<<<<<
  * 
- *     def getLagPreconditioner(self):
+ *     def getST(self):
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetTolerances(__pyx_v_self->nep, __pyx_v_rval1, __pyx_v_rval2, __pyx_v_rval3, __pyx_v_ival1, __pyx_v_ival2)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetDimensions(__pyx_v_self->pep, __pyx_v_ival1, __pyx_v_ival2, __pyx_v_ival3)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(15, 573, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":243
- *         return (toReal(rval1), toReal(rval2), toReal(rval3), toInt(ival1), toInt(ival2))
+  /* "SLEPc/PEP.pyx":552
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3))
  * 
- *     def setTolerances(self, abstol=None, rtol=None, stol=None, maxit=None, maxf=None):             # <<<<<<<<<<<<<<
+ *     def setDimensions(self, nev=None, ncv=None, mpd=None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets various parameters used in convergence tests.
+ *         Sets the number of eigenvalues to compute and the dimension of
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -41303,114 +41028,119 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_28setTolerances(struct PySlepcNE
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":273
- *         CHKERR( NEPSetTolerances(self.nep, rval1, rval2, rval3, ival1, ival2) )
+/* "SLEPc/PEP.pyx":575
+ *         CHKERR( PEPSetDimensions(self.pep, ival1, ival2, ival3) )
  * 
- *     def getLagPreconditioner(self):             # <<<<<<<<<<<<<<
+ *     def getST(self):             # <<<<<<<<<<<<<<
  *         """
- *         Indicates how often the preconditioner is rebuilt.
+ *         Obtain the spectral transformation (`ST`) object associated to
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_31getLagPreconditioner(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_30getLagPreconditioner[] = "NEP.getLagPreconditioner(self)\n\n        Indicates how often the preconditioner is rebuilt.\n\n        Returns\n        -------\n        lag: int\n            The lag parameter.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_31getLagPreconditioner(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_55getST(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_54getST[] = "PEP.getST(self)\n\n        Obtain the spectral transformation (`ST`) object associated to\n        the eigensolver object.\n\n        Returns\n        -------\n        st: ST\n            The spectral transformation.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_55getST(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getLagPreconditioner (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getST (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getLagPreconditioner", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getLagPreconditioner", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_30getLagPreconditioner(((struct PySlepcNEPObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getST", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getST", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_54getST(((struct PySlepcPEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_30getLagPreconditioner(struct PySlepcNEPObject *__pyx_v_self) {
-  PetscInt __pyx_v_ival;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_54getST(struct PySlepcPEPObject *__pyx_v_self) {
+  struct PySlepcSTObject *__pyx_v_st = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getLagPreconditioner", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getST", 0);
 
-  /* "SLEPc/NEP.pyx":282
- *             The lag parameter.
+  /* "SLEPc/PEP.pyx":585
+ *             The spectral transformation.
  *         """
- *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
- *         CHKERR( NEPGetLagPreconditioner(self.nep, &ival) )
- *         return ival
+ *         cdef ST st = ST()             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPGetST(self.pep, &st.st) )
+ *         PetscINCREF(st.obj)
  */
-  __pyx_v_ival = 0;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_ST), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(15, 585, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_st = ((struct PySlepcSTObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/NEP.pyx":283
+  /* "SLEPc/PEP.pyx":586
  *         """
- *         cdef PetscInt ival = 0
- *         CHKERR( NEPGetLagPreconditioner(self.nep, &ival) )             # <<<<<<<<<<<<<<
- *         return ival
+ *         cdef ST st = ST()
+ *         CHKERR( PEPGetST(self.pep, &st.st) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(st.obj)
+ *         return st
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetST(__pyx_v_self->pep, (&__pyx_v_st->st))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(15, 586, __pyx_L1_error)
+
+  /* "SLEPc/PEP.pyx":587
+ *         cdef ST st = ST()
+ *         CHKERR( PEPGetST(self.pep, &st.st) )
+ *         PetscINCREF(st.obj)             # <<<<<<<<<<<<<<
+ *         return st
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetLagPreconditioner(__pyx_v_self->nep, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_st->__pyx_base.obj);
 
-  /* "SLEPc/NEP.pyx":284
- *         cdef PetscInt ival = 0
- *         CHKERR( NEPGetLagPreconditioner(self.nep, &ival) )
- *         return ival             # <<<<<<<<<<<<<<
+  /* "SLEPc/PEP.pyx":588
+ *         CHKERR( PEPGetST(self.pep, &st.st) )
+ *         PetscINCREF(st.obj)
+ *         return st             # <<<<<<<<<<<<<<
  * 
- *     def setLagPreconditioner(self, lag):
+ *     def setST(self, ST st not None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
+  __Pyx_INCREF(((PyObject *)__pyx_v_st));
+  __pyx_r = ((PyObject *)__pyx_v_st);
   goto __pyx_L0;
 
-  /* "SLEPc/NEP.pyx":273
- *         CHKERR( NEPSetTolerances(self.nep, rval1, rval2, rval3, ival1, ival2) )
+  /* "SLEPc/PEP.pyx":575
+ *         CHKERR( PEPSetDimensions(self.pep, ival1, ival2, ival3) )
  * 
- *     def getLagPreconditioner(self):             # <<<<<<<<<<<<<<
+ *     def getST(self):             # <<<<<<<<<<<<<<
  *         """
- *         Indicates how often the preconditioner is rebuilt.
+ *         Obtain the spectral transformation (`ST`) object associated to
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getLagPreconditioner", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getST", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_st);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":286
- *         return ival
+/* "SLEPc/PEP.pyx":590
+ *         return st
  * 
- *     def setLagPreconditioner(self, lag):             # <<<<<<<<<<<<<<
+ *     def setST(self, ST st not None):             # <<<<<<<<<<<<<<
  *         """
- *         Determines when the preconditioner is rebuilt in the
+ *         Associates a spectral transformation object to the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_33setLagPreconditioner(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_32setLagPreconditioner[] = "NEP.setLagPreconditioner(self, lag)\n\n        Determines when the preconditioner is rebuilt in the\n        nonlinear solve.\n\n        Parameters\n        ----------\n        lag: int\n            0 indicates NEVER rebuild, 1 means rebuild every time the Jacobian is\n            computed within the nonlinear iteration, 2 means every second time\n            the Jacobian is built, etc.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_33setLagPreconditioner(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_lag = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_57setST(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_56setST[] = "PEP.setST(self, ST st)\n\n        Associates a spectral transformation object to the\n        eigensolver.\n\n        Parameters\n        ----------\n        st: ST\n            The spectral transformation.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_57setST(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PySlepcSTObject *__pyx_v_st = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setLagPreconditioner (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setST (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_lag,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_st,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -41423,164 +41153,67 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_33setLagPreconditioner(PyObject
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_lag)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_st)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLagPreconditioner") < 0)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setST") < 0)) __PYX_ERR(15, 590, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_lag = values[0];
+    __pyx_v_st = ((struct PySlepcSTObject *)values[0]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setLagPreconditioner", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[14]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setST", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 590, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setLagPreconditioner", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setST", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_32setLagPreconditioner(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_lag);
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_32setLagPreconditioner(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_lag) {
-  PetscInt __pyx_v_ival;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PetscInt __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setLagPreconditioner", 0);
-
-  /* "SLEPc/NEP.pyx":298
- *             the Jacobian is built, etc.
- *         """
- *         cdef PetscInt ival = lag             # <<<<<<<<<<<<<<
- *         CHKERR( NEPSetLagPreconditioner(self.nep, ival) )
- * 
- */
-  __pyx_t_1 = __Pyx_PyInt_As_PetscInt(__pyx_v_lag); if (unlikely((__pyx_t_1 == (PetscInt)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ival = __pyx_t_1;
-
-  /* "SLEPc/NEP.pyx":299
- *         """
- *         cdef PetscInt ival = lag
- *         CHKERR( NEPSetLagPreconditioner(self.nep, ival) )             # <<<<<<<<<<<<<<
- * 
- *     def getTrackAll(self):
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetLagPreconditioner(__pyx_v_self->nep, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/NEP.pyx":286
- *         return ival
- * 
- *     def setLagPreconditioner(self, lag):             # <<<<<<<<<<<<<<
- *         """
- *         Determines when the preconditioner is rebuilt in the
- */
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_st), __pyx_ptype_8slepc4py_5SLEPc_ST, 0, "st", 0))) __PYX_ERR(15, 590, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_56setST(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_st);
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setLagPreconditioner", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "SLEPc/NEP.pyx":301
- *         CHKERR( NEPSetLagPreconditioner(self.nep, ival) )
- * 
- *     def getTrackAll(self):             # <<<<<<<<<<<<<<
- *         """
- *         Returns the flag indicating whether all residual norms must be
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_35getTrackAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_34getTrackAll[] = "NEP.getTrackAll(self)\n\n        Returns the flag indicating whether all residual norms must be\n        computed or not.\n\n        Returns\n        -------\n        trackall: bool\n            Whether the solver compute all residuals or not.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_35getTrackAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getTrackAll (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getTrackAll", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTrackAll", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_34getTrackAll(((struct PySlepcNEPObject *)__pyx_v_self));
-
-  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_34getTrackAll(struct PySlepcNEPObject *__pyx_v_self) {
-  PetscBool __pyx_v_tval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_56setST(struct PySlepcPEPObject *__pyx_v_self, struct PySlepcSTObject *__pyx_v_st) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getTrackAll", 0);
-
-  /* "SLEPc/NEP.pyx":311
- *             Whether the solver compute all residuals or not.
- *         """
- *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( NEPGetTrackAll(self.nep, &tval) )
- *         return <bint>tval
- */
-  __pyx_v_tval = PETSC_FALSE;
+  __Pyx_RefNannySetupContext("setST", 0);
 
-  /* "SLEPc/NEP.pyx":312
+  /* "SLEPc/PEP.pyx":600
+ *             The spectral transformation.
  *         """
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( NEPGetTrackAll(self.nep, &tval) )             # <<<<<<<<<<<<<<
- *         return <bint>tval
- * 
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetTrackAll(__pyx_v_self->nep, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/NEP.pyx":313
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( NEPGetTrackAll(self.nep, &tval) )
- *         return <bint>tval             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPSetST(self.pep, st.st) )             # <<<<<<<<<<<<<<
  * 
- *     def setTrackAll(self, trackall):
+ *     def getScale(self, Vec Dl=None, Vec Dr=None):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_tval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_r = __pyx_t_2;
-  __pyx_t_2 = 0;
-  goto __pyx_L0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetST(__pyx_v_self->pep, __pyx_v_st->st)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 600, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":301
- *         CHKERR( NEPSetLagPreconditioner(self.nep, ival) )
+  /* "SLEPc/PEP.pyx":590
+ *         return st
  * 
- *     def getTrackAll(self):             # <<<<<<<<<<<<<<
+ *     def setST(self, ST st not None):             # <<<<<<<<<<<<<<
  *         """
- *         Returns the flag indicating whether all residual norms must be
+ *         Associates a spectral transformation object to the
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getTrackAll", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setST", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -41588,32 +41221,33 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_34getTrackAll(struct PySlepcNEPO
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":315
- *         return <bint>tval
+/* "SLEPc/PEP.pyx":602
+ *         CHKERR( PEPSetST(self.pep, st.st) )
  * 
- *     def setTrackAll(self, trackall):             # <<<<<<<<<<<<<<
+ *     def getScale(self, Vec Dl=None, Vec Dr=None):             # <<<<<<<<<<<<<<
  *         """
- *         Specifies if the solver must compute the residual of all
+ *         Gets the strategy used for scaling the polynomial eigenproblem.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_37setTrackAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_36setTrackAll[] = "NEP.setTrackAll(self, trackall)\n\n        Specifies if the solver must compute the residual of all\n        approximate eigenpairs or not.\n\n        Parameters\n        ----------\n        trackall: bool\n            Whether compute all residuals or not.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_37setTrackAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_trackall = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_59getScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_58getScale[] = "PEP.getScale(self, Vec Dl=None, Vec Dr=None)\n\n        Gets the strategy used for scaling the polynomial eigenproblem.\n\n        Parameters\n        ----------\n        Dl: Vec, optional\n            Placeholder for the returned left diagonal matrix.\n        Dr: Vec, optional\n            Placeholder for the returned right diagonal matrix.\n\n        Returns\n        -------\n        scale: `PEP.Scale` enumerate\n             [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_59getScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscVecObject *__pyx_v_Dl = 0;
+  struct PyPetscVecObject *__pyx_v_Dr = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setTrackAll (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getScale (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_trackall,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_Dl,&__pyx_n_s_Dr,0};
+    PyObject* values[2] = {0,0};
+    values[0] = (PyObject *)((struct PyPetscVecObject *)Py_None);
+    values[1] = (PyObject *)((struct PyPetscVecObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -41621,205 +41255,320 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_37setTrackAll(PyObject *__pyx_v_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_trackall)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Dl);
+          if (value) { values[0] = value; kw_args--; }
+        }
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Dr);
+          if (value) { values[1] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTrackAll") < 0)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getScale") < 0)) __PYX_ERR(15, 602, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
     } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
     }
-    __pyx_v_trackall = values[0];
+    __pyx_v_Dl = ((struct PyPetscVecObject *)values[0]);
+    __pyx_v_Dr = ((struct PyPetscVecObject *)values[1]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTrackAll", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[14]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getScale", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 602, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setTrackAll", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getScale", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_36setTrackAll(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_trackall);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Dl), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "Dl", 0))) __PYX_ERR(15, 602, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Dr), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "Dr", 0))) __PYX_ERR(15, 602, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_58getScale(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_Dl, __pyx_v_Dr);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_36setTrackAll(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_trackall) {
-  PetscBool __pyx_v_tval;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_58getScale(struct PySlepcPEPObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_Dl, struct PyPetscVecObject *__pyx_v_Dr) {
+  PEPScale __pyx_v_scale;
+  PetscReal __pyx_v_alpha;
+  PetscInt __pyx_v_its;
+  PetscReal __pyx_v_lbda;
+  Vec __pyx_v_vecl;
+  Vec __pyx_v_vecr;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscBool __pyx_t_1;
+  int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setTrackAll", 0);
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  __Pyx_RefNannySetupContext("getScale", 0);
 
-  /* "SLEPc/NEP.pyx":325
- *             Whether compute all residuals or not.
+  /* "SLEPc/PEP.pyx":624
+ *             Approximation of the wanted eigenvalues (modulus).
  *         """
- *         cdef PetscBool tval = trackall             # <<<<<<<<<<<<<<
- *         CHKERR( NEPSetTrackAll(self.nep, tval) )
- * 
+ *         cdef SlepcPEPScale scale = PEP_SCALE_NONE             # <<<<<<<<<<<<<<
+ *         cdef PetscReal alpha = 0
+ *         cdef PetscInt its = 0
  */
-  __pyx_t_1 = ((PetscBool)PyInt_AsLong(__pyx_v_trackall)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_tval = __pyx_t_1;
+  __pyx_v_scale = PEP_SCALE_NONE;
 
-  /* "SLEPc/NEP.pyx":326
+  /* "SLEPc/PEP.pyx":625
  *         """
- *         cdef PetscBool tval = trackall
- *         CHKERR( NEPSetTrackAll(self.nep, tval) )             # <<<<<<<<<<<<<<
- * 
- *     def getDimensions(self):
+ *         cdef SlepcPEPScale scale = PEP_SCALE_NONE
+ *         cdef PetscReal alpha = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt its = 0
+ *         cdef PetscReal lbda = 0
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetTrackAll(__pyx_v_self->nep, __pyx_v_tval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_alpha = 0.0;
 
-  /* "SLEPc/NEP.pyx":315
- *         return <bint>tval
- * 
- *     def setTrackAll(self, trackall):             # <<<<<<<<<<<<<<
- *         """
- *         Specifies if the solver must compute the residual of all
+  /* "SLEPc/PEP.pyx":626
+ *         cdef SlepcPEPScale scale = PEP_SCALE_NONE
+ *         cdef PetscReal alpha = 0
+ *         cdef PetscInt its = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscReal lbda = 0
+ *         cdef PetscVec vecl = NULL
  */
+  __pyx_v_its = 0;
 
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setTrackAll", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "SLEPc/PEP.pyx":627
+ *         cdef PetscReal alpha = 0
+ *         cdef PetscInt its = 0
+ *         cdef PetscReal lbda = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscVec vecl = NULL
+ *         cdef PetscVec vecr = NULL
+ */
+  __pyx_v_lbda = 0.0;
 
-/* "SLEPc/NEP.pyx":328
- *         CHKERR( NEPSetTrackAll(self.nep, tval) )
- * 
- *     def getDimensions(self):             # <<<<<<<<<<<<<<
- *         """
- *         Gets the number of eigenvalues to compute and the dimension of
+  /* "SLEPc/PEP.pyx":628
+ *         cdef PetscInt its = 0
+ *         cdef PetscReal lbda = 0
+ *         cdef PetscVec vecl = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscVec vecr = NULL
+ *         CHKERR( PEPGetScale(self.pep, &scale, &alpha, &vecl, &vecr, &its, &lbda) )
  */
+  __pyx_v_vecl = NULL;
 
-/* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_39getDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_38getDimensions[] = "NEP.getDimensions(self)\n\n        Gets the number of eigenvalues to compute and the dimension of\n        the subspace.\n\n        Returns\n        -------\n        nev: int\n            Number of eigenvalues to compute.\n        ncv: int\n            Maximum dimension of the subspace to be used by the solver.\n        mpd: int\n            Maximum dimension allowed for the projected problem.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_39getDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getDimensions (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getDimensions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDimensions", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_38getDimensions(((struct PySlepcNEPObject *)__pyx_v_self));
+  /* "SLEPc/PEP.pyx":629
+ *         cdef PetscReal lbda = 0
+ *         cdef PetscVec vecl = NULL
+ *         cdef PetscVec vecr = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPGetScale(self.pep, &scale, &alpha, &vecl, &vecr, &its, &lbda) )
+ *         if Dl.vec != NULL:
+ */
+  __pyx_v_vecr = NULL;
 
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  /* "SLEPc/PEP.pyx":630
+ *         cdef PetscVec vecl = NULL
+ *         cdef PetscVec vecr = NULL
+ *         CHKERR( PEPGetScale(self.pep, &scale, &alpha, &vecl, &vecr, &its, &lbda) )             # <<<<<<<<<<<<<<
+ *         if Dl.vec != NULL:
+ *             if vecl != NULL:
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetScale(__pyx_v_self->pep, (&__pyx_v_scale), (&__pyx_v_alpha), (&__pyx_v_vecl), (&__pyx_v_vecr), (&__pyx_v_its), (&__pyx_v_lbda))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 630, __pyx_L1_error)
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_38getDimensions(struct PySlepcNEPObject *__pyx_v_self) {
-  PetscInt __pyx_v_ival1;
-  PetscInt __pyx_v_ival2;
-  PetscInt __pyx_v_ival3;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getDimensions", 0);
+  /* "SLEPc/PEP.pyx":631
+ *         cdef PetscVec vecr = NULL
+ *         CHKERR( PEPGetScale(self.pep, &scale, &alpha, &vecl, &vecr, &its, &lbda) )
+ *         if Dl.vec != NULL:             # <<<<<<<<<<<<<<
+ *             if vecl != NULL:
+ *                 CHKERR( VecCopy(vecl, Dl.vec) )
+ */
+  __pyx_t_2 = ((__pyx_v_Dl->vec != NULL) != 0);
+  if (__pyx_t_2) {
 
-  /* "SLEPc/NEP.pyx":342
- *             Maximum dimension allowed for the projected problem.
- *         """
- *         cdef PetscInt ival1 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival2 = 0
- *         cdef PetscInt ival3 = 0
+    /* "SLEPc/PEP.pyx":632
+ *         CHKERR( PEPGetScale(self.pep, &scale, &alpha, &vecl, &vecr, &its, &lbda) )
+ *         if Dl.vec != NULL:
+ *             if vecl != NULL:             # <<<<<<<<<<<<<<
+ *                 CHKERR( VecCopy(vecl, Dl.vec) )
+ *             else:
  */
-  __pyx_v_ival1 = 0;
+    __pyx_t_2 = ((__pyx_v_vecl != NULL) != 0);
+    if (__pyx_t_2) {
 
-  /* "SLEPc/NEP.pyx":343
- *         """
- *         cdef PetscInt ival1 = 0
- *         cdef PetscInt ival2 = 0             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival3 = 0
- *         CHKERR( NEPGetDimensions(self.nep, &ival1, &ival2, &ival3) )
+      /* "SLEPc/PEP.pyx":633
+ *         if Dl.vec != NULL:
+ *             if vecl != NULL:
+ *                 CHKERR( VecCopy(vecl, Dl.vec) )             # <<<<<<<<<<<<<<
+ *             else:
+ *                 CHKERR( VecSet(Dl.vec, 1.0) )
  */
-  __pyx_v_ival2 = 0;
+      __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(VecCopy(__pyx_v_vecl, __pyx_v_Dl->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 633, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":344
- *         cdef PetscInt ival1 = 0
- *         cdef PetscInt ival2 = 0
- *         cdef PetscInt ival3 = 0             # <<<<<<<<<<<<<<
- *         CHKERR( NEPGetDimensions(self.nep, &ival1, &ival2, &ival3) )
- *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+      /* "SLEPc/PEP.pyx":632
+ *         CHKERR( PEPGetScale(self.pep, &scale, &alpha, &vecl, &vecr, &its, &lbda) )
+ *         if Dl.vec != NULL:
+ *             if vecl != NULL:             # <<<<<<<<<<<<<<
+ *                 CHKERR( VecCopy(vecl, Dl.vec) )
+ *             else:
  */
-  __pyx_v_ival3 = 0;
+      goto __pyx_L4;
+    }
 
-  /* "SLEPc/NEP.pyx":345
- *         cdef PetscInt ival2 = 0
- *         cdef PetscInt ival3 = 0
- *         CHKERR( NEPGetDimensions(self.nep, &ival1, &ival2, &ival3) )             # <<<<<<<<<<<<<<
- *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+    /* "SLEPc/PEP.pyx":635
+ *                 CHKERR( VecCopy(vecl, Dl.vec) )
+ *             else:
+ *                 CHKERR( VecSet(Dl.vec, 1.0) )             # <<<<<<<<<<<<<<
+ *         if Dr.vec != NULL:
+ *             if vecr != NULL:
+ */
+    /*else*/ {
+      __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(VecSet(__pyx_v_Dl->vec, 1.0)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 635, __pyx_L1_error)
+    }
+    __pyx_L4:;
+
+    /* "SLEPc/PEP.pyx":631
+ *         cdef PetscVec vecr = NULL
+ *         CHKERR( PEPGetScale(self.pep, &scale, &alpha, &vecl, &vecr, &its, &lbda) )
+ *         if Dl.vec != NULL:             # <<<<<<<<<<<<<<
+ *             if vecl != NULL:
+ *                 CHKERR( VecCopy(vecl, Dl.vec) )
+ */
+  }
+
+  /* "SLEPc/PEP.pyx":636
+ *             else:
+ *                 CHKERR( VecSet(Dl.vec, 1.0) )
+ *         if Dr.vec != NULL:             # <<<<<<<<<<<<<<
+ *             if vecr != NULL:
+ *                 CHKERR( VecCopy(vecr, Dr.vec) )
+ */
+  __pyx_t_2 = ((__pyx_v_Dr->vec != NULL) != 0);
+  if (__pyx_t_2) {
+
+    /* "SLEPc/PEP.pyx":637
+ *                 CHKERR( VecSet(Dl.vec, 1.0) )
+ *         if Dr.vec != NULL:
+ *             if vecr != NULL:             # <<<<<<<<<<<<<<
+ *                 CHKERR( VecCopy(vecr, Dr.vec) )
+ *             else:
+ */
+    __pyx_t_2 = ((__pyx_v_vecr != NULL) != 0);
+    if (__pyx_t_2) {
+
+      /* "SLEPc/PEP.pyx":638
+ *         if Dr.vec != NULL:
+ *             if vecr != NULL:
+ *                 CHKERR( VecCopy(vecr, Dr.vec) )             # <<<<<<<<<<<<<<
+ *             else:
+ *                 CHKERR( VecSet(Dr.vec, 1.0) )
+ */
+      __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(VecCopy(__pyx_v_vecr, __pyx_v_Dr->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 638, __pyx_L1_error)
+
+      /* "SLEPc/PEP.pyx":637
+ *                 CHKERR( VecSet(Dl.vec, 1.0) )
+ *         if Dr.vec != NULL:
+ *             if vecr != NULL:             # <<<<<<<<<<<<<<
+ *                 CHKERR( VecCopy(vecr, Dr.vec) )
+ *             else:
+ */
+      goto __pyx_L6;
+    }
+
+    /* "SLEPc/PEP.pyx":640
+ *                 CHKERR( VecCopy(vecr, Dr.vec) )
+ *             else:
+ *                 CHKERR( VecSet(Dr.vec, 1.0) )             # <<<<<<<<<<<<<<
+ *         CHKERR( VecDestroy(&vecl) )
+ *         CHKERR( VecDestroy(&vecr) )
+ */
+    /*else*/ {
+      __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(VecSet(__pyx_v_Dr->vec, 1.0)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 640, __pyx_L1_error)
+    }
+    __pyx_L6:;
+
+    /* "SLEPc/PEP.pyx":636
+ *             else:
+ *                 CHKERR( VecSet(Dl.vec, 1.0) )
+ *         if Dr.vec != NULL:             # <<<<<<<<<<<<<<
+ *             if vecr != NULL:
+ *                 CHKERR( VecCopy(vecr, Dr.vec) )
+ */
+  }
+
+  /* "SLEPc/PEP.pyx":641
+ *             else:
+ *                 CHKERR( VecSet(Dr.vec, 1.0) )
+ *         CHKERR( VecDestroy(&vecl) )             # <<<<<<<<<<<<<<
+ *         CHKERR( VecDestroy(&vecr) )
+ *         return (scale, toReal(alpha), toInt(its), toReal(lbda))
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(VecDestroy((&__pyx_v_vecl))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 641, __pyx_L1_error)
+
+  /* "SLEPc/PEP.pyx":642
+ *                 CHKERR( VecSet(Dr.vec, 1.0) )
+ *         CHKERR( VecDestroy(&vecl) )
+ *         CHKERR( VecDestroy(&vecr) )             # <<<<<<<<<<<<<<
+ *         return (scale, toReal(alpha), toInt(its), toReal(lbda))
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetDimensions(__pyx_v_self->nep, (&__pyx_v_ival1), (&__pyx_v_ival2), (&__pyx_v_ival3))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(VecDestroy((&__pyx_v_vecr))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 642, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":346
- *         cdef PetscInt ival3 = 0
- *         CHKERR( NEPGetDimensions(self.nep, &ival1, &ival2, &ival3) )
- *         return (toInt(ival1), toInt(ival2), toInt(ival3))             # <<<<<<<<<<<<<<
+  /* "SLEPc/PEP.pyx":643
+ *         CHKERR( VecDestroy(&vecl) )
+ *         CHKERR( VecDestroy(&vecr) )
+ *         return (scale, toReal(alpha), toInt(its), toReal(lbda))             # <<<<<<<<<<<<<<
  * 
- *     def setDimensions(self, nev=None, ncv=None, mpd=None):
+ *     def setScale(self, scale, alpha=None, Vec Dl=None, Vec Dr=None, its=None, lbda=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_PEPScale(__pyx_v_scale); if (unlikely(!__pyx_t_3)) __PYX_ERR(15, 643, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_alpha); if (unlikely(!__pyx_t_4)) __PYX_ERR(15, 643, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_its); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 643, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __Pyx_GIVEREF(__pyx_t_2);
-  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
+  __pyx_t_6 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_lbda); if (unlikely(!__pyx_t_6)) __PYX_ERR(15, 643, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_t_7 = PyTuple_New(4); if (unlikely(!__pyx_t_7)) __PYX_ERR(15, 643, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
   __Pyx_GIVEREF(__pyx_t_3);
-  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_4);
-  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
-  __pyx_t_2 = 0;
+  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_4);
+  __Pyx_GIVEREF(__pyx_t_5);
+  PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_5);
+  __Pyx_GIVEREF(__pyx_t_6);
+  PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_t_6);
   __pyx_t_3 = 0;
   __pyx_t_4 = 0;
-  __pyx_r = __pyx_t_5;
   __pyx_t_5 = 0;
+  __pyx_t_6 = 0;
+  __pyx_r = __pyx_t_7;
+  __pyx_t_7 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/NEP.pyx":328
- *         CHKERR( NEPSetTrackAll(self.nep, tval) )
+  /* "SLEPc/PEP.pyx":602
+ *         CHKERR( PEPSetST(self.pep, st.st) )
  * 
- *     def getDimensions(self):             # <<<<<<<<<<<<<<
+ *     def getScale(self, Vec Dl=None, Vec Dr=None):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the number of eigenvalues to compute and the dimension of
+ *         Gets the strategy used for scaling the polynomial eigenproblem.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getScale", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -41827,37 +41576,42 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_38getDimensions(struct PySlepcNE
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":348
- *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+/* "SLEPc/PEP.pyx":645
+ *         return (scale, toReal(alpha), toInt(its), toReal(lbda))
  * 
- *     def setDimensions(self, nev=None, ncv=None, mpd=None):             # <<<<<<<<<<<<<<
+ *     def setScale(self, scale, alpha=None, Vec Dl=None, Vec Dr=None, its=None, lbda=None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the number of eigenvalues to compute and the dimension of
+ *         Sets the scaling strategy to be used for scaling the polynomial problem
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_41setDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_40setDimensions[] = "NEP.setDimensions(self, nev=None, ncv=None, mpd=None)\n\n        Sets the number of eigenvalues to compute and the dimension of\n        the subspace.\n\n        Parameters\n        ----------\n        nev: int, optional\n            Number of eigenvalues to compute.\n        ncv: int, optional\n            Maximum dimension of the subspace to be used by the\n            solver.\n        mpd: int, optional\n            Maxi [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_41setDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_nev = 0;
-  PyObject *__pyx_v_ncv = 0;
-  PyObject *__pyx_v_mpd = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_61setScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_60setScale[] = "PEP.setScale(self, scale, alpha=None, Vec Dl=None, Vec Dr=None, its=None, lbda=None)\n\n        Sets the scaling strategy to be used for scaling the polynomial problem\n        before attempting to solve.\n\n        Parameters\n        ----------\n        scale: `PEP.Scale` enumerate\n            The scaling strategy.\n        alpha: real, optional\n            The scaling factor.\n        Dl: Vec, optional\n            The left [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_61setScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_scale = 0;
+  PyObject *__pyx_v_alpha = 0;
+  struct PyPetscVecObject *__pyx_v_Dl = 0;
+  struct PyPetscVecObject *__pyx_v_Dr = 0;
+  PyObject *__pyx_v_its = 0;
+  PyObject *__pyx_v_lbda = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setDimensions (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setScale (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nev,&__pyx_n_s_ncv,&__pyx_n_s_mpd,0};
-    PyObject* values[3] = {0,0,0};
-    values[0] = ((PyObject *)Py_None);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_scale,&__pyx_n_s_alpha,&__pyx_n_s_Dl,&__pyx_n_s_Dr,&__pyx_n_s_its,&__pyx_n_s_lbda,0};
+    PyObject* values[6] = {0,0,0,0,0,0};
     values[1] = ((PyObject *)Py_None);
-    values[2] = ((PyObject *)Py_None);
+    values[2] = (PyObject *)((struct PyPetscVecObject *)Py_None);
+    values[3] = (PyObject *)((struct PyPetscVecObject *)Py_None);
+    values[4] = ((PyObject *)Py_None);
+    values[5] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
@@ -41867,164 +41621,242 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_41setDimensions(PyObject *__pyx_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nev);
-          if (value) { values[0] = value; kw_args--; }
-        }
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_scale)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
         case  1:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ncv);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha);
           if (value) { values[1] = value; kw_args--; }
         }
         case  2:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mpd);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Dl);
           if (value) { values[2] = value; kw_args--; }
         }
+        case  3:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Dr);
+          if (value) { values[3] = value; kw_args--; }
+        }
+        case  4:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_its);
+          if (value) { values[4] = value; kw_args--; }
+        }
+        case  5:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_lbda);
+          if (value) { values[5] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDimensions") < 0)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setScale") < 0)) __PYX_ERR(15, 645, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
+        break;
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_nev = values[0];
-    __pyx_v_ncv = values[1];
-    __pyx_v_mpd = values[2];
+    __pyx_v_scale = values[0];
+    __pyx_v_alpha = values[1];
+    __pyx_v_Dl = ((struct PyPetscVecObject *)values[2]);
+    __pyx_v_Dr = ((struct PyPetscVecObject *)values[3]);
+    __pyx_v_its = values[4];
+    __pyx_v_lbda = values[5];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDimensions", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[14]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setScale", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 645, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setScale", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_40setDimensions(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_nev, __pyx_v_ncv, __pyx_v_mpd);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Dl), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "Dl", 0))) __PYX_ERR(15, 645, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Dr), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "Dr", 0))) __PYX_ERR(15, 645, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_60setScale(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_scale, __pyx_v_alpha, __pyx_v_Dl, __pyx_v_Dr, __pyx_v_its, __pyx_v_lbda);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_40setDimensions(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_nev, PyObject *__pyx_v_ncv, PyObject *__pyx_v_mpd) {
-  PetscInt __pyx_v_ival1;
-  PetscInt __pyx_v_ival2;
-  PetscInt __pyx_v_ival3;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_60setScale(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_scale, PyObject *__pyx_v_alpha, struct PyPetscVecObject *__pyx_v_Dl, struct PyPetscVecObject *__pyx_v_Dr, PyObject *__pyx_v_its, PyObject *__pyx_v_lbda) {
+  PEPScale __pyx_v_senum;
+  PetscReal __pyx_v_rval1;
+  PetscInt __pyx_v_ival;
+  PetscReal __pyx_v_rval2;
+  Vec __pyx_v_vecl;
+  Vec __pyx_v_vecr;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PEPScale __pyx_t_1;
   int __pyx_t_2;
-  PetscInt __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setDimensions", 0);
+  int __pyx_t_3;
+  PetscReal __pyx_t_4;
+  Vec __pyx_t_5;
+  PetscInt __pyx_t_6;
+  int __pyx_t_7;
+  __Pyx_RefNannySetupContext("setScale", 0);
 
-  /* "SLEPc/NEP.pyx":363
- *             Maximum dimension allowed for the projected problem.
+  /* "SLEPc/PEP.pyx":665
+ *             Approximation of the wanted eigenvalues (modulus).
  *         """
- *         cdef PetscInt ival1 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival2 = PETSC_DEFAULT
- *         cdef PetscInt ival3 = PETSC_DEFAULT
+ *         cdef SlepcPEPScale senum = scale             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval1 = PETSC_DEFAULT
+ *         cdef PetscInt ival = PETSC_DEFAULT
  */
-  __pyx_v_ival1 = PETSC_DEFAULT;
+  __pyx_t_1 = ((PEPScale)__Pyx_PyInt_As_PEPScale(__pyx_v_scale)); if (unlikely(PyErr_Occurred())) __PYX_ERR(15, 665, __pyx_L1_error)
+  __pyx_v_senum = __pyx_t_1;
 
-  /* "SLEPc/NEP.pyx":364
+  /* "SLEPc/PEP.pyx":666
  *         """
- *         cdef PetscInt ival1 = PETSC_DEFAULT
- *         cdef PetscInt ival2 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival3 = PETSC_DEFAULT
- *         if nev is not None: ival1 = asInt(nev)
+ *         cdef SlepcPEPScale senum = scale
+ *         cdef PetscReal rval1 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival = PETSC_DEFAULT
+ *         cdef PetscReal rval2 = PETSC_DEFAULT
  */
-  __pyx_v_ival2 = PETSC_DEFAULT;
+  __pyx_v_rval1 = PETSC_DEFAULT;
 
-  /* "SLEPc/NEP.pyx":365
- *         cdef PetscInt ival1 = PETSC_DEFAULT
- *         cdef PetscInt ival2 = PETSC_DEFAULT
- *         cdef PetscInt ival3 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         if nev is not None: ival1 = asInt(nev)
- *         if ncv is not None: ival2 = asInt(ncv)
+  /* "SLEPc/PEP.pyx":667
+ *         cdef SlepcPEPScale senum = scale
+ *         cdef PetscReal rval1 = PETSC_DEFAULT
+ *         cdef PetscInt ival = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval2 = PETSC_DEFAULT
+ *         cdef PetscVec vecl = NULL
  */
-  __pyx_v_ival3 = PETSC_DEFAULT;
+  __pyx_v_ival = PETSC_DEFAULT;
 
-  /* "SLEPc/NEP.pyx":366
- *         cdef PetscInt ival2 = PETSC_DEFAULT
- *         cdef PetscInt ival3 = PETSC_DEFAULT
- *         if nev is not None: ival1 = asInt(nev)             # <<<<<<<<<<<<<<
- *         if ncv is not None: ival2 = asInt(ncv)
- *         if mpd is not None: ival3 = asInt(mpd)
+  /* "SLEPc/PEP.pyx":668
+ *         cdef PetscReal rval1 = PETSC_DEFAULT
+ *         cdef PetscInt ival = PETSC_DEFAULT
+ *         cdef PetscReal rval2 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         cdef PetscVec vecl = NULL
+ *         cdef PetscVec vecr = NULL
  */
-  __pyx_t_1 = (__pyx_v_nev != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
+  __pyx_v_rval2 = PETSC_DEFAULT;
+
+  /* "SLEPc/PEP.pyx":669
+ *         cdef PetscInt ival = PETSC_DEFAULT
+ *         cdef PetscReal rval2 = PETSC_DEFAULT
+ *         cdef PetscVec vecl = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscVec vecr = NULL
+ *         if alpha is not None: rval1 = asReal(alpha)
+ */
+  __pyx_v_vecl = NULL;
+
+  /* "SLEPc/PEP.pyx":670
+ *         cdef PetscReal rval2 = PETSC_DEFAULT
+ *         cdef PetscVec vecl = NULL
+ *         cdef PetscVec vecr = NULL             # <<<<<<<<<<<<<<
+ *         if alpha is not None: rval1 = asReal(alpha)
+ *         if Dl is not None:    vecl = Dl.vec
+ */
+  __pyx_v_vecr = NULL;
+
+  /* "SLEPc/PEP.pyx":671
+ *         cdef PetscVec vecl = NULL
+ *         cdef PetscVec vecr = NULL
+ *         if alpha is not None: rval1 = asReal(alpha)             # <<<<<<<<<<<<<<
+ *         if Dl is not None:    vecl = Dl.vec
+ *         if Dr is not None:    vecr = Dr.vec
+ */
+  __pyx_t_2 = (__pyx_v_alpha != Py_None);
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_alpha); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) __PYX_ERR(15, 671, __pyx_L1_error)
+    __pyx_v_rval1 = __pyx_t_4;
+  }
+
+  /* "SLEPc/PEP.pyx":672
+ *         cdef PetscVec vecr = NULL
+ *         if alpha is not None: rval1 = asReal(alpha)
+ *         if Dl is not None:    vecl = Dl.vec             # <<<<<<<<<<<<<<
+ *         if Dr is not None:    vecr = Dr.vec
+ *         if its is not None:   ival = asInt(its)
+ */
+  __pyx_t_3 = (((PyObject *)__pyx_v_Dl) != Py_None);
+  __pyx_t_2 = (__pyx_t_3 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_nev); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival1 = __pyx_t_3;
-    goto __pyx_L3;
+    __pyx_t_5 = __pyx_v_Dl->vec;
+    __pyx_v_vecl = __pyx_t_5;
   }
-  __pyx_L3:;
 
-  /* "SLEPc/NEP.pyx":367
- *         cdef PetscInt ival3 = PETSC_DEFAULT
- *         if nev is not None: ival1 = asInt(nev)
- *         if ncv is not None: ival2 = asInt(ncv)             # <<<<<<<<<<<<<<
- *         if mpd is not None: ival3 = asInt(mpd)
- *         CHKERR( NEPSetDimensions(self.nep, ival1, ival2, ival3) )
+  /* "SLEPc/PEP.pyx":673
+ *         if alpha is not None: rval1 = asReal(alpha)
+ *         if Dl is not None:    vecl = Dl.vec
+ *         if Dr is not None:    vecr = Dr.vec             # <<<<<<<<<<<<<<
+ *         if its is not None:   ival = asInt(its)
+ *         if lbda is not None:  rval2 = asReal(lbda)
  */
-  __pyx_t_2 = (__pyx_v_ncv != Py_None);
-  __pyx_t_1 = (__pyx_t_2 != 0);
-  if (__pyx_t_1) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_ncv); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival2 = __pyx_t_3;
-    goto __pyx_L4;
+  __pyx_t_2 = (((PyObject *)__pyx_v_Dr) != Py_None);
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
+    __pyx_t_5 = __pyx_v_Dr->vec;
+    __pyx_v_vecr = __pyx_t_5;
   }
-  __pyx_L4:;
 
-  /* "SLEPc/NEP.pyx":368
- *         if nev is not None: ival1 = asInt(nev)
- *         if ncv is not None: ival2 = asInt(ncv)
- *         if mpd is not None: ival3 = asInt(mpd)             # <<<<<<<<<<<<<<
- *         CHKERR( NEPSetDimensions(self.nep, ival1, ival2, ival3) )
- * 
+  /* "SLEPc/PEP.pyx":674
+ *         if Dl is not None:    vecl = Dl.vec
+ *         if Dr is not None:    vecr = Dr.vec
+ *         if its is not None:   ival = asInt(its)             # <<<<<<<<<<<<<<
+ *         if lbda is not None:  rval2 = asReal(lbda)
+ *         CHKERR( PEPSetScale(self.pep, senum, rval1, vecl, vecr, ival, rval2) )
  */
-  __pyx_t_1 = (__pyx_v_mpd != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
+  __pyx_t_3 = (__pyx_v_its != Py_None);
+  __pyx_t_2 = (__pyx_t_3 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_mpd); if (unlikely(__pyx_t_3 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_ival3 = __pyx_t_3;
-    goto __pyx_L5;
+    __pyx_t_6 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_its); if (unlikely(__pyx_t_6 == -1L && PyErr_Occurred())) __PYX_ERR(15, 674, __pyx_L1_error)
+    __pyx_v_ival = __pyx_t_6;
   }
-  __pyx_L5:;
 
-  /* "SLEPc/NEP.pyx":369
- *         if ncv is not None: ival2 = asInt(ncv)
- *         if mpd is not None: ival3 = asInt(mpd)
- *         CHKERR( NEPSetDimensions(self.nep, ival1, ival2, ival3) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/PEP.pyx":675
+ *         if Dr is not None:    vecr = Dr.vec
+ *         if its is not None:   ival = asInt(its)
+ *         if lbda is not None:  rval2 = asReal(lbda)             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPSetScale(self.pep, senum, rval1, vecl, vecr, ival, rval2) )
+ * 
+ */
+  __pyx_t_2 = (__pyx_v_lbda != Py_None);
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_lbda); if (unlikely(__pyx_t_4 == -1.0 && PyErr_Occurred())) __PYX_ERR(15, 675, __pyx_L1_error)
+    __pyx_v_rval2 = __pyx_t_4;
+  }
+
+  /* "SLEPc/PEP.pyx":676
+ *         if its is not None:   ival = asInt(its)
+ *         if lbda is not None:  rval2 = asReal(lbda)
+ *         CHKERR( PEPSetScale(self.pep, senum, rval1, vecl, vecr, ival, rval2) )             # <<<<<<<<<<<<<<
  * 
  *     def getBV(self):
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetDimensions(__pyx_v_self->nep, __pyx_v_ival1, __pyx_v_ival2, __pyx_v_ival3)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetScale(__pyx_v_self->pep, __pyx_v_senum, __pyx_v_rval1, __pyx_v_vecl, __pyx_v_vecr, __pyx_v_ival, __pyx_v_rval2)); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(15, 676, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":348
- *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+  /* "SLEPc/PEP.pyx":645
+ *         return (scale, toReal(alpha), toInt(its), toReal(lbda))
  * 
- *     def setDimensions(self, nev=None, ncv=None, mpd=None):             # <<<<<<<<<<<<<<
+ *     def setScale(self, scale, alpha=None, Vec Dl=None, Vec Dr=None, its=None, lbda=None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the number of eigenvalues to compute and the dimension of
+ *         Sets the scaling strategy to be used for scaling the polynomial problem
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setScale", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -42032,8 +41864,8 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_40setDimensions(struct PySlepcNE
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":371
- *         CHKERR( NEPSetDimensions(self.nep, ival1, ival2, ival3) )
+/* "SLEPc/PEP.pyx":678
+ *         CHKERR( PEPSetScale(self.pep, senum, rval1, vecl, vecr, ival, rval2) )
  * 
  *     def getBV(self):             # <<<<<<<<<<<<<<
  *         """
@@ -42041,65 +41873,62 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_40setDimensions(struct PySlepcNE
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_43getBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_42getBV[] = "NEP.getBV(self)\n\n        Obtain the basis vectors object associated to the eigensolver.\n\n        Returns\n        -------\n        bv: BV\n            The basis vectors context.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_43getBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_63getBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_62getBV[] = "PEP.getBV(self)\n\n        Obtain the basis vectors object associated to the eigensolver.\n\n        Returns\n        -------\n        bv: BV\n            The basis vectors context.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_63getBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getBV (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getBV", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getBV", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_42getBV(((struct PySlepcNEPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_62getBV(((struct PySlepcPEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_42getBV(struct PySlepcNEPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_62getBV(struct PySlepcPEPObject *__pyx_v_self) {
   struct PySlepcBVObject *__pyx_v_bv = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getBV", 0);
 
-  /* "SLEPc/NEP.pyx":380
+  /* "SLEPc/PEP.pyx":687
  *             The basis vectors context.
  *         """
  *         cdef BV bv = BV()             # <<<<<<<<<<<<<<
- *         CHKERR( NEPGetBV(self.nep, &bv.bv) )
+ *         CHKERR( PEPGetBV(self.pep, &bv.bv) )
  *         PetscINCREF(bv.obj)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_BV)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_BV), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(15, 687, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_bv = ((struct PySlepcBVObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "SLEPc/NEP.pyx":381
+  /* "SLEPc/PEP.pyx":688
  *         """
  *         cdef BV bv = BV()
- *         CHKERR( NEPGetBV(self.nep, &bv.bv) )             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPGetBV(self.pep, &bv.bv) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(bv.obj)
  *         return bv
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetBV(__pyx_v_self->nep, (&__pyx_v_bv->bv))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetBV(__pyx_v_self->pep, (&__pyx_v_bv->bv))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(15, 688, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":382
+  /* "SLEPc/PEP.pyx":689
  *         cdef BV bv = BV()
- *         CHKERR( NEPGetBV(self.nep, &bv.bv) )
+ *         CHKERR( PEPGetBV(self.pep, &bv.bv) )
  *         PetscINCREF(bv.obj)             # <<<<<<<<<<<<<<
  *         return bv
  * 
  */
   __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_bv->__pyx_base.obj);
 
-  /* "SLEPc/NEP.pyx":383
- *         CHKERR( NEPGetBV(self.nep, &bv.bv) )
+  /* "SLEPc/PEP.pyx":690
+ *         CHKERR( PEPGetBV(self.pep, &bv.bv) )
  *         PetscINCREF(bv.obj)
  *         return bv             # <<<<<<<<<<<<<<
  * 
@@ -42110,8 +41939,8 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_42getBV(struct PySlepcNEPObject
   __pyx_r = ((PyObject *)__pyx_v_bv);
   goto __pyx_L0;
 
-  /* "SLEPc/NEP.pyx":371
- *         CHKERR( NEPSetDimensions(self.nep, ival1, ival2, ival3) )
+  /* "SLEPc/PEP.pyx":678
+ *         CHKERR( PEPSetScale(self.pep, senum, rval1, vecl, vecr, ival, rval2) )
  * 
  *     def getBV(self):             # <<<<<<<<<<<<<<
  *         """
@@ -42121,7 +41950,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_42getBV(struct PySlepcNEPObject
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XDECREF((PyObject *)__pyx_v_bv);
@@ -42130,7 +41959,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_42getBV(struct PySlepcNEPObject
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":385
+/* "SLEPc/PEP.pyx":692
  *         return bv
  * 
  *     def setBV(self, BV bv not None):             # <<<<<<<<<<<<<<
@@ -42139,13 +41968,10 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_42getBV(struct PySlepcNEPObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_45setBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_44setBV[] = "NEP.setBV(self, BV bv)\n\n        Associates a basis vectors object to the eigensolver.\n\n        Parameters\n        ----------\n        bv: BV\n            The basis vectors context.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_45setBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_65setBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_64setBV[] = "PEP.setBV(self, BV bv)\n\n        Associates a basis vectors object to the eigensolver.\n\n        Parameters\n        ----------\n        bv: BV\n            The basis vectors context.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_65setBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PySlepcBVObject *__pyx_v_bv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setBV (wrapper)", 0);
@@ -42167,7 +41993,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_45setBV(PyObject *__pyx_v_self,
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setBV") < 0)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setBV") < 0)) __PYX_ERR(15, 692, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -42178,14 +42004,14 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_45setBV(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setBV", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[14]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setBV", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 692, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_bv), __pyx_ptype_8slepc4py_5SLEPc_BV, 0, "bv", 0))) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_44setBV(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_bv);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_bv), __pyx_ptype_8slepc4py_5SLEPc_BV, 0, "bv", 0))) __PYX_ERR(15, 692, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_64setBV(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_bv);
 
   /* function exit code */
   goto __pyx_L0;
@@ -42196,25 +42022,22 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_45setBV(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_44setBV(struct PySlepcNEPObject *__pyx_v_self, struct PySlepcBVObject *__pyx_v_bv) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_64setBV(struct PySlepcPEPObject *__pyx_v_self, struct PySlepcBVObject *__pyx_v_bv) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setBV", 0);
 
-  /* "SLEPc/NEP.pyx":394
+  /* "SLEPc/PEP.pyx":701
  *             The basis vectors context.
  *         """
- *         CHKERR( NEPSetBV(self.nep, bv.bv) )             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPSetBV(self.pep, bv.bv) )             # <<<<<<<<<<<<<<
  * 
- *     #
+ *     def getRG(self):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetBV(__pyx_v_self->nep, __pyx_v_bv->bv)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetBV(__pyx_v_self->pep, __pyx_v_bv->bv)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 701, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":385
+  /* "SLEPc/PEP.pyx":692
  *         return bv
  * 
  *     def setBV(self, BV bv not None):             # <<<<<<<<<<<<<<
@@ -42226,7 +42049,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_44setBV(struct PySlepcNEPObject
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -42234,27 +42057,119 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_44setBV(struct PySlepcNEPObject
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":398
- *     #
+/* "SLEPc/PEP.pyx":703
+ *         CHKERR( PEPSetBV(self.pep, bv.bv) )
  * 
- *     def setInitialSpace(self, space):             # <<<<<<<<<<<<<<
+ *     def getRG(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the initial space from which the eigensolver starts to
+ *         Obtain the region object associated to the eigensolver.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_47setInitialSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_46setInitialSpace[] = "NEP.setInitialSpace(self, space)\n\n        Sets the initial space from which the eigensolver starts to\n        iterate.\n\n        Parameters\n        ----------\n        space: Vec or sequence of Vec\n           The initial space\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_47setInitialSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_space = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_67getRG(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_66getRG[] = "PEP.getRG(self)\n\n        Obtain the region object associated to the eigensolver.\n\n        Returns\n        -------\n        rg: RG\n            The region context.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_67getRG(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setInitialSpace (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getRG (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getRG", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getRG", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_66getRG(((struct PySlepcPEPObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_66getRG(struct PySlepcPEPObject *__pyx_v_self) {
+  struct PySlepcRGObject *__pyx_v_rg = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getRG", 0);
+
+  /* "SLEPc/PEP.pyx":712
+ *             The region context.
+ *         """
+ *         cdef RG rg = RG()             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPGetRG(self.pep, &rg.rg) )
+ *         PetscINCREF(rg.obj)
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_RG), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(15, 712, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_rg = ((struct PySlepcRGObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "SLEPc/PEP.pyx":713
+ *         """
+ *         cdef RG rg = RG()
+ *         CHKERR( PEPGetRG(self.pep, &rg.rg) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(rg.obj)
+ *         return rg
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetRG(__pyx_v_self->pep, (&__pyx_v_rg->rg))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(15, 713, __pyx_L1_error)
+
+  /* "SLEPc/PEP.pyx":714
+ *         cdef RG rg = RG()
+ *         CHKERR( PEPGetRG(self.pep, &rg.rg) )
+ *         PetscINCREF(rg.obj)             # <<<<<<<<<<<<<<
+ *         return rg
+ * 
+ */
+  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_rg->__pyx_base.obj);
+
+  /* "SLEPc/PEP.pyx":715
+ *         CHKERR( PEPGetRG(self.pep, &rg.rg) )
+ *         PetscINCREF(rg.obj)
+ *         return rg             # <<<<<<<<<<<<<<
+ * 
+ *     def setRG(self, RG rg not None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_rg));
+  __pyx_r = ((PyObject *)__pyx_v_rg);
+  goto __pyx_L0;
+
+  /* "SLEPc/PEP.pyx":703
+ *         CHKERR( PEPSetBV(self.pep, bv.bv) )
+ * 
+ *     def getRG(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Obtain the region object associated to the eigensolver.
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getRG", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_rg);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/PEP.pyx":717
+ *         return rg
+ * 
+ *     def setRG(self, RG rg not None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Associates a region object to the eigensolver.
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_69setRG(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_68setRG[] = "PEP.setRG(self, RG rg)\n\n        Associates a region object to the eigensolver.\n\n        Parameters\n        ----------\n        rg: RG\n            The region context.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_69setRG(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PySlepcRGObject *__pyx_v_rg = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setRG (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_space,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rg,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -42267,213 +42182,625 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_47setInitialSpace(PyObject *__py
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_space)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rg)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInitialSpace") < 0)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRG") < 0)) __PYX_ERR(15, 717, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_space = values[0];
+    __pyx_v_rg = ((struct PySlepcRGObject *)values[0]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setInitialSpace", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[14]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setRG", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 717, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setInitialSpace", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setRG", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_46setInitialSpace(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_space);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rg), __pyx_ptype_8slepc4py_5SLEPc_RG, 0, "rg", 0))) __PYX_ERR(15, 717, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_68setRG(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_rg);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_46setInitialSpace(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_space) {
-  Vec *__pyx_v_vs;
-  Py_ssize_t __pyx_v_i;
-  Py_ssize_t __pyx_v_ns;
-  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_68setRG(struct PySlepcPEPObject *__pyx_v_self, struct PySlepcRGObject *__pyx_v_rg) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  Py_ssize_t __pyx_t_4;
-  Py_ssize_t __pyx_t_5;
-  Vec __pyx_t_6;
-  int __pyx_t_7;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setInitialSpace", 0);
-  __Pyx_INCREF(__pyx_v_space);
-
-  /* "SLEPc/NEP.pyx":408
- *            The initial space
- *         """
- *         if isinstance(space, Vec): space = [space]             # <<<<<<<<<<<<<<
- *         cdef PetscVec *vs = NULL
- *         cdef Py_ssize_t i = 0, ns = len(space)
- */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_space, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Vec)); 
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_INCREF(__pyx_v_space);
-    __Pyx_GIVEREF(__pyx_v_space);
-    PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_space);
-    __Pyx_DECREF_SET(__pyx_v_space, __pyx_t_3);
-    __pyx_t_3 = 0;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+  __Pyx_RefNannySetupContext("setRG", 0);
 
-  /* "SLEPc/NEP.pyx":409
+  /* "SLEPc/PEP.pyx":726
+ *             The region context.
  *         """
- *         if isinstance(space, Vec): space = [space]
- *         cdef PetscVec *vs = NULL             # <<<<<<<<<<<<<<
- *         cdef Py_ssize_t i = 0, ns = len(space)
- *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
- */
-  __pyx_v_vs = NULL;
-
-  /* "SLEPc/NEP.pyx":410
- *         if isinstance(space, Vec): space = [space]
- *         cdef PetscVec *vs = NULL
- *         cdef Py_ssize_t i = 0, ns = len(space)             # <<<<<<<<<<<<<<
- *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
- *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
- */
-  __pyx_v_i = 0;
-  __pyx_t_4 = PyObject_Length(__pyx_v_space); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ns = __pyx_t_4;
-
-  /* "SLEPc/NEP.pyx":411
- *         cdef PetscVec *vs = NULL
- *         cdef Py_ssize_t i = 0, ns = len(space)
- *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)             # <<<<<<<<<<<<<<
- *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
- *         CHKERR( NEPSetInitialSpace(self.nep, <PetscInt>ns, vs) )
- */
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_allocate((((size_t)__pyx_v_ns) * (sizeof(struct PyPetscVecObject))), ((void **)(&__pyx_v_vs))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_v_tmp = __pyx_t_3;
-  __pyx_t_3 = 0;
-
-  /* "SLEPc/NEP.pyx":412
- *         cdef Py_ssize_t i = 0, ns = len(space)
- *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
- *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec             # <<<<<<<<<<<<<<
- *         CHKERR( NEPSetInitialSpace(self.nep, <PetscInt>ns, vs) )
- * 
- */
-  __pyx_t_4 = __pyx_v_ns;
-  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
-    __pyx_v_i = __pyx_t_5;
-    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_space, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-    __Pyx_GOTREF(__pyx_t_3);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_Vec)))) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_6 = ((struct PyPetscVecObject *)__pyx_t_3)->vec;
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    (__pyx_v_vs[__pyx_v_i]) = __pyx_t_6;
-  }
-
-  /* "SLEPc/NEP.pyx":413
- *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
- *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
- *         CHKERR( NEPSetInitialSpace(self.nep, <PetscInt>ns, vs) )             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPSetRG(self.pep, rg.rg) )             # <<<<<<<<<<<<<<
  * 
- *     #
+ *     def getOperators(self):
  */
-  __pyx_t_7 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetInitialSpace(__pyx_v_self->nep, ((PetscInt)__pyx_v_ns), __pyx_v_vs)); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetRG(__pyx_v_self->pep, __pyx_v_rg->rg)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 726, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":398
- *     #
+  /* "SLEPc/PEP.pyx":717
+ *         return rg
  * 
- *     def setInitialSpace(self, space):             # <<<<<<<<<<<<<<
+ *     def setRG(self, RG rg not None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the initial space from which the eigensolver starts to
+ *         Associates a region object to the eigensolver.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setInitialSpace", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setRG", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_tmp);
-  __Pyx_XDECREF(__pyx_v_space);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":417
- *     #
+/* "SLEPc/PEP.pyx":728
+ *         CHKERR( PEPSetRG(self.pep, rg.rg) )
  * 
- *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
+ *     def getOperators(self):             # <<<<<<<<<<<<<<
  *         """
- *         Clears all monitors for a NEP object.
+ *         Gets the matrices associated with the eigenvalue problem.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_49cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_48cancelMonitor[] = "NEP.cancelMonitor(self)\n\n        Clears all monitors for a NEP object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_49cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_71getOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_70getOperators[] = "PEP.getOperators(self)\n\n        Gets the matrices associated with the eigenvalue problem.\n\n        Returns\n        -------\n        operators: tuple of Mat\n           The matrices associated with the eigensystem.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_71getOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("cancelMonitor (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getOperators (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("cancelMonitor", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "cancelMonitor", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_48cancelMonitor(((struct PySlepcNEPObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getOperators", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getOperators", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_70getOperators(((struct PySlepcPEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_48cancelMonitor(struct PySlepcNEPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_70getOperators(struct PySlepcPEPObject *__pyx_v_self) {
+  struct PyPetscMatObject *__pyx_v_A = 0;
+  Mat __pyx_v_mat;
+  PetscInt __pyx_v_k;
+  PetscInt __pyx_v_n;
+  PyObject *__pyx_v_operators = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("cancelMonitor", 0);
+  PyObject *__pyx_t_2 = NULL;
+  PetscInt __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("getOperators", 0);
 
-  /* "SLEPc/NEP.pyx":421
- *         Clears all monitors for a NEP object.
+  /* "SLEPc/PEP.pyx":738
  *         """
- *         CHKERR( NEPMonitorCancel(self.nep) )             # <<<<<<<<<<<<<<
- * 
- *     #
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPMonitorCancel(__pyx_v_self->nep)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/NEP.pyx":417
+ *         cdef Mat A
+ *         cdef PetscMat mat = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscInt k=0, n=0
+ *         CHKERR( PEPGetNumMatrices(self.pep, &n) )
+ */
+  __pyx_v_mat = NULL;
+
+  /* "SLEPc/PEP.pyx":739
+ *         cdef Mat A
+ *         cdef PetscMat mat = NULL
+ *         cdef PetscInt k=0, n=0             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPGetNumMatrices(self.pep, &n) )
+ *         cdef object operators = []
+ */
+  __pyx_v_k = 0;
+  __pyx_v_n = 0;
+
+  /* "SLEPc/PEP.pyx":740
+ *         cdef PetscMat mat = NULL
+ *         cdef PetscInt k=0, n=0
+ *         CHKERR( PEPGetNumMatrices(self.pep, &n) )             # <<<<<<<<<<<<<<
+ *         cdef object operators = []
+ *         for k from 0 <= k < n:
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetNumMatrices(__pyx_v_self->pep, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 740, __pyx_L1_error)
+
+  /* "SLEPc/PEP.pyx":741
+ *         cdef PetscInt k=0, n=0
+ *         CHKERR( PEPGetNumMatrices(self.pep, &n) )
+ *         cdef object operators = []             # <<<<<<<<<<<<<<
+ *         for k from 0 <= k < n:
+ *             CHKERR( PEPGetOperators(self.pep, k, &mat) )
+ */
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 741, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_v_operators = __pyx_t_2;
+  __pyx_t_2 = 0;
+
+  /* "SLEPc/PEP.pyx":742
+ *         CHKERR( PEPGetNumMatrices(self.pep, &n) )
+ *         cdef object operators = []
+ *         for k from 0 <= k < n:             # <<<<<<<<<<<<<<
+ *             CHKERR( PEPGetOperators(self.pep, k, &mat) )
+ *             A = Mat(); A.mat = mat; PetscINCREF(A.obj)
+ */
+  __pyx_t_3 = __pyx_v_n;
+  for (__pyx_v_k = 0; __pyx_v_k < __pyx_t_3; __pyx_v_k++) {
+
+    /* "SLEPc/PEP.pyx":743
+ *         cdef object operators = []
+ *         for k from 0 <= k < n:
+ *             CHKERR( PEPGetOperators(self.pep, k, &mat) )             # <<<<<<<<<<<<<<
+ *             A = Mat(); A.mat = mat; PetscINCREF(A.obj)
+ *             operators.append(A)
+ */
+    __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetOperators(__pyx_v_self->pep, __pyx_v_k, (&__pyx_v_mat))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 743, __pyx_L1_error)
+
+    /* "SLEPc/PEP.pyx":744
+ *         for k from 0 <= k < n:
+ *             CHKERR( PEPGetOperators(self.pep, k, &mat) )
+ *             A = Mat(); A.mat = mat; PetscINCREF(A.obj)             # <<<<<<<<<<<<<<
+ *             operators.append(A)
+ *         return tuple(operators)
+ */
+    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 744, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_XDECREF_SET(__pyx_v_A, ((struct PyPetscMatObject *)__pyx_t_2));
+    __pyx_t_2 = 0;
+    __pyx_v_A->mat = __pyx_v_mat;
+    __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_A->__pyx_base.obj);
+
+    /* "SLEPc/PEP.pyx":745
+ *             CHKERR( PEPGetOperators(self.pep, k, &mat) )
+ *             A = Mat(); A.mat = mat; PetscINCREF(A.obj)
+ *             operators.append(A)             # <<<<<<<<<<<<<<
+ *         return tuple(operators)
+ * 
+ */
+    __pyx_t_4 = __Pyx_PyObject_Append(__pyx_v_operators, ((PyObject *)__pyx_v_A)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(15, 745, __pyx_L1_error)
+  }
+
+  /* "SLEPc/PEP.pyx":746
+ *             A = Mat(); A.mat = mat; PetscINCREF(A.obj)
+ *             operators.append(A)
+ *         return tuple(operators)             # <<<<<<<<<<<<<<
+ * 
+ *     def setOperators(self, operators):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = PySequence_Tuple(__pyx_v_operators); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 746, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "SLEPc/PEP.pyx":728
+ *         CHKERR( PEPSetRG(self.pep, rg.rg) )
+ * 
+ *     def getOperators(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the matrices associated with the eigenvalue problem.
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getOperators", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_A);
+  __Pyx_XDECREF(__pyx_v_operators);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/PEP.pyx":748
+ *         return tuple(operators)
+ * 
+ *     def setOperators(self, operators):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the matrices associated with the eigenvalue problem.
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_73setOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_72setOperators[] = "PEP.setOperators(self, operators)\n\n        Sets the matrices associated with the eigenvalue problem.\n\n        Parameters\n        ----------\n        operators: sequence of Mat\n           The matrices associated with the eigensystem.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_73setOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_operators = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setOperators (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_operators,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_operators)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOperators") < 0)) __PYX_ERR(15, 748, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_operators = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setOperators", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 748, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setOperators", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_72setOperators(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_operators);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_72setOperators(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_operators) {
+  Mat *__pyx_v_mats;
+  Py_ssize_t __pyx_v_k;
+  Py_ssize_t __pyx_v_n;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  Py_ssize_t __pyx_t_2;
+  Mat __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("setOperators", 0);
+  __Pyx_INCREF(__pyx_v_operators);
+
+  /* "SLEPc/PEP.pyx":757
+ *            The matrices associated with the eigensystem.
+ *         """
+ *         operators = tuple(operators)             # <<<<<<<<<<<<<<
+ *         cdef PetscMat *mats = NULL
+ *         cdef Py_ssize_t k=0, n = len(operators)
+ */
+  __pyx_t_1 = PySequence_Tuple(__pyx_v_operators); if (unlikely(!__pyx_t_1)) __PYX_ERR(15, 757, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_operators, __pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "SLEPc/PEP.pyx":758
+ *         """
+ *         operators = tuple(operators)
+ *         cdef PetscMat *mats = NULL             # <<<<<<<<<<<<<<
+ *         cdef Py_ssize_t k=0, n = len(operators)
+ *         cdef tmp = allocate(<size_t>n*sizeof(PetscMat),<void**>&mats)
+ */
+  __pyx_v_mats = NULL;
+
+  /* "SLEPc/PEP.pyx":759
+ *         operators = tuple(operators)
+ *         cdef PetscMat *mats = NULL
+ *         cdef Py_ssize_t k=0, n = len(operators)             # <<<<<<<<<<<<<<
+ *         cdef tmp = allocate(<size_t>n*sizeof(PetscMat),<void**>&mats)
+ *         for k from 0 <= k < n: mats[k] = (<Mat?>operators[k]).mat
+ */
+  __pyx_v_k = 0;
+  __pyx_t_2 = PyObject_Length(__pyx_v_operators); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(15, 759, __pyx_L1_error)
+  __pyx_v_n = __pyx_t_2;
+
+  /* "SLEPc/PEP.pyx":760
+ *         cdef PetscMat *mats = NULL
+ *         cdef Py_ssize_t k=0, n = len(operators)
+ *         cdef tmp = allocate(<size_t>n*sizeof(PetscMat),<void**>&mats)             # <<<<<<<<<<<<<<
+ *         for k from 0 <= k < n: mats[k] = (<Mat?>operators[k]).mat
+ *         CHKERR( PEPSetOperators(self.pep, <PetscInt>n, mats) )
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_allocate((((size_t)__pyx_v_n) * (sizeof(Mat))), ((void **)(&__pyx_v_mats))); if (unlikely(!__pyx_t_1)) __PYX_ERR(15, 760, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_tmp = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "SLEPc/PEP.pyx":761
+ *         cdef Py_ssize_t k=0, n = len(operators)
+ *         cdef tmp = allocate(<size_t>n*sizeof(PetscMat),<void**>&mats)
+ *         for k from 0 <= k < n: mats[k] = (<Mat?>operators[k]).mat             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPSetOperators(self.pep, <PetscInt>n, mats) )
+ * 
+ */
+  __pyx_t_2 = __pyx_v_n;
+  for (__pyx_v_k = 0; __pyx_v_k < __pyx_t_2; __pyx_v_k++) {
+    __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_operators, __pyx_v_k, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(15, 761, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Mat)))) __PYX_ERR(15, 761, __pyx_L1_error)
+    __pyx_t_3 = ((struct PyPetscMatObject *)__pyx_t_1)->mat;
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    (__pyx_v_mats[__pyx_v_k]) = __pyx_t_3;
+  }
+
+  /* "SLEPc/PEP.pyx":762
+ *         cdef tmp = allocate(<size_t>n*sizeof(PetscMat),<void**>&mats)
+ *         for k from 0 <= k < n: mats[k] = (<Mat?>operators[k]).mat
+ *         CHKERR( PEPSetOperators(self.pep, <PetscInt>n, mats) )             # <<<<<<<<<<<<<<
+ * 
+ *     #
+ */
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetOperators(__pyx_v_self->pep, ((PetscInt)__pyx_v_n), __pyx_v_mats)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(15, 762, __pyx_L1_error)
+
+  /* "SLEPc/PEP.pyx":748
+ *         return tuple(operators)
+ * 
+ *     def setOperators(self, operators):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the matrices associated with the eigenvalue problem.
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setOperators", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_tmp);
+  __Pyx_XDECREF(__pyx_v_operators);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/PEP.pyx":766
+ *     #
+ * 
+ *     def setInitialSpace(self, space):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the initial space from which the eigensolver starts to
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_75setInitialSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_74setInitialSpace[] = "PEP.setInitialSpace(self, space)\n\n        Sets the initial space from which the eigensolver starts to\n        iterate.\n\n        Parameters\n        ----------\n        space: Vec or sequence of Vec\n           The initial space\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_75setInitialSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_space = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setInitialSpace (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_space,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_space)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInitialSpace") < 0)) __PYX_ERR(15, 766, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_space = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setInitialSpace", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 766, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setInitialSpace", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_74setInitialSpace(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_space);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_74setInitialSpace(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_space) {
+  Vec *__pyx_v_vs;
+  Py_ssize_t __pyx_v_i;
+  Py_ssize_t __pyx_v_ns;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  Py_ssize_t __pyx_t_4;
+  Py_ssize_t __pyx_t_5;
+  Vec __pyx_t_6;
+  int __pyx_t_7;
+  __Pyx_RefNannySetupContext("setInitialSpace", 0);
+  __Pyx_INCREF(__pyx_v_space);
+
+  /* "SLEPc/PEP.pyx":776
+ *            The initial space
+ *         """
+ *         if isinstance(space, Vec): space = [space]             # <<<<<<<<<<<<<<
+ *         cdef PetscVec *vs = NULL
+ *         cdef Py_ssize_t i = 0, ns = len(space)
+ */
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_space, __pyx_ptype_8petsc4py_5PETSc_Vec); 
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(15, 776, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_v_space);
+    __Pyx_GIVEREF(__pyx_v_space);
+    PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_space);
+    __Pyx_DECREF_SET(__pyx_v_space, __pyx_t_3);
+    __pyx_t_3 = 0;
+  }
+
+  /* "SLEPc/PEP.pyx":777
+ *         """
+ *         if isinstance(space, Vec): space = [space]
+ *         cdef PetscVec *vs = NULL             # <<<<<<<<<<<<<<
+ *         cdef Py_ssize_t i = 0, ns = len(space)
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
+ */
+  __pyx_v_vs = NULL;
+
+  /* "SLEPc/PEP.pyx":778
+ *         if isinstance(space, Vec): space = [space]
+ *         cdef PetscVec *vs = NULL
+ *         cdef Py_ssize_t i = 0, ns = len(space)             # <<<<<<<<<<<<<<
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
+ *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
+ */
+  __pyx_v_i = 0;
+  __pyx_t_4 = PyObject_Length(__pyx_v_space); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(15, 778, __pyx_L1_error)
+  __pyx_v_ns = __pyx_t_4;
+
+  /* "SLEPc/PEP.pyx":779
+ *         cdef PetscVec *vs = NULL
+ *         cdef Py_ssize_t i = 0, ns = len(space)
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)             # <<<<<<<<<<<<<<
+ *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
+ *         CHKERR( PEPSetInitialSpace(self.pep, <PetscInt>ns, vs) )
+ */
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_allocate((((size_t)__pyx_v_ns) * (sizeof(struct PyPetscVecObject))), ((void **)(&__pyx_v_vs))); if (unlikely(!__pyx_t_3)) __PYX_ERR(15, 779, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_v_tmp = __pyx_t_3;
+  __pyx_t_3 = 0;
+
+  /* "SLEPc/PEP.pyx":780
+ *         cdef Py_ssize_t i = 0, ns = len(space)
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
+ *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPSetInitialSpace(self.pep, <PetscInt>ns, vs) )
+ * 
+ */
+  __pyx_t_4 = __pyx_v_ns;
+  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
+    __pyx_v_i = __pyx_t_5;
+    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_space, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(15, 780, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(15, 780, __pyx_L1_error)
+    __pyx_t_6 = ((struct PyPetscVecObject *)__pyx_t_3)->vec;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    (__pyx_v_vs[__pyx_v_i]) = __pyx_t_6;
+  }
+
+  /* "SLEPc/PEP.pyx":781
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
+ *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
+ *         CHKERR( PEPSetInitialSpace(self.pep, <PetscInt>ns, vs) )             # <<<<<<<<<<<<<<
+ * 
+ *     #
+ */
+  __pyx_t_7 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetInitialSpace(__pyx_v_self->pep, ((PetscInt)__pyx_v_ns), __pyx_v_vs)); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(15, 781, __pyx_L1_error)
+
+  /* "SLEPc/PEP.pyx":766
+ *     #
+ * 
+ *     def setInitialSpace(self, space):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the initial space from which the eigensolver starts to
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setInitialSpace", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_tmp);
+  __Pyx_XDECREF(__pyx_v_space);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/PEP.pyx":785
  *     #
  * 
  *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
  *         """
- *         Clears all monitors for a NEP object.
+ *         Clears all monitors for a PEP object.
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_77cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_76cancelMonitor[] = "PEP.cancelMonitor(self)\n\n        Clears all monitors for a PEP object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_77cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("cancelMonitor (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("cancelMonitor", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "cancelMonitor", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_76cancelMonitor(((struct PySlepcPEPObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_76cancelMonitor(struct PySlepcPEPObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("cancelMonitor", 0);
+
+  /* "SLEPc/PEP.pyx":789
+ *         Clears all monitors for a PEP object.
+ *         """
+ *         CHKERR( PEPMonitorCancel(self.pep) )             # <<<<<<<<<<<<<<
+ * 
+ *     #
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPMonitorCancel(__pyx_v_self->pep)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 789, __pyx_L1_error)
+
+  /* "SLEPc/PEP.pyx":785
+ *     #
+ * 
+ *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Clears all monitors for a PEP object.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.cancelMonitor", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.cancelMonitor", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -42481,7 +42808,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_48cancelMonitor(struct PySlepcNE
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":425
+/* "SLEPc/PEP.pyx":793
  *     #
  * 
  *     def setUp(self):             # <<<<<<<<<<<<<<
@@ -42490,41 +42817,38 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_48cancelMonitor(struct PySlepcNE
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_51setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_50setUp[] = "NEP.setUp(self)\n\n        Sets up all the internal data structures necessary for the\n        execution of the eigensolver.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_51setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_79setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_78setUp[] = "PEP.setUp(self)\n\n        Sets up all the internal data structures necessary for the\n        execution of the eigensolver.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_79setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setUp (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("setUp", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setUp", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_50setUp(((struct PySlepcNEPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_78setUp(((struct PySlepcPEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_50setUp(struct PySlepcNEPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_78setUp(struct PySlepcPEPObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setUp", 0);
 
-  /* "SLEPc/NEP.pyx":430
+  /* "SLEPc/PEP.pyx":798
  *         execution of the eigensolver.
  *         """
- *         CHKERR( NEPSetUp(self.nep) )             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPSetUp(self.pep) )             # <<<<<<<<<<<<<<
  * 
  *     def solve(self):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetUp(__pyx_v_self->nep)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSetUp(__pyx_v_self->pep)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 798, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":425
+  /* "SLEPc/PEP.pyx":793
  *     #
  * 
  *     def setUp(self):             # <<<<<<<<<<<<<<
@@ -42536,7 +42860,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_50setUp(struct PySlepcNEPObject
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setUp", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setUp", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -42544,8 +42868,8 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_50setUp(struct PySlepcNEPObject
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":432
- *         CHKERR( NEPSetUp(self.nep) )
+/* "SLEPc/PEP.pyx":800
+ *         CHKERR( PEPSetUp(self.pep) )
  * 
  *     def solve(self):             # <<<<<<<<<<<<<<
  *         """
@@ -42553,42 +42877,39 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_50setUp(struct PySlepcNEPObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_53solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_52solve[] = "NEP.solve(self)\n\n        Solves the eigensystem.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_53solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_81solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_80solve[] = "PEP.solve(self)\n\n        Solves the eigensystem.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_81solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("solve (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("solve", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "solve", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_52solve(((struct PySlepcNEPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_80solve(((struct PySlepcPEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_52solve(struct PySlepcNEPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_80solve(struct PySlepcPEPObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("solve", 0);
 
-  /* "SLEPc/NEP.pyx":436
+  /* "SLEPc/PEP.pyx":804
  *         Solves the eigensystem.
  *         """
- *         CHKERR( NEPSolve(self.nep) )             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPSolve(self.pep) )             # <<<<<<<<<<<<<<
  * 
  *     def getIterationNumber(self):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSolve(__pyx_v_self->nep)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPSolve(__pyx_v_self->pep)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 804, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":432
- *         CHKERR( NEPSetUp(self.nep) )
+  /* "SLEPc/PEP.pyx":800
+ *         CHKERR( PEPSetUp(self.pep) )
  * 
  *     def solve(self):             # <<<<<<<<<<<<<<
  *         """
@@ -42599,7 +42920,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_52solve(struct PySlepcNEPObject
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.solve", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.solve", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -42607,8 +42928,8 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_52solve(struct PySlepcNEPObject
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":438
- *         CHKERR( NEPSolve(self.nep) )
+/* "SLEPc/PEP.pyx":806
+ *         CHKERR( PEPSolve(self.pep) )
  * 
  *     def getIterationNumber(self):             # <<<<<<<<<<<<<<
  *         """
@@ -42616,67 +42937,64 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_52solve(struct PySlepcNEPObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_55getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_54getIterationNumber[] = "NEP.getIterationNumber(self)\n\n        Gets the current iteration number. If the call to `solve()` is\n        complete, then it returns the number of iterations carried out\n        by the solution method.\n\n        Returns\n        -------\n        its: int\n             Iteration number.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_55getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_83getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_82getIterationNumber[] = "PEP.getIterationNumber(self)\n\n        Gets the current iteration number. If the call to `solve()` is\n        complete, then it returns the number of iterations carried out\n        by the solution method.\n\n        Returns\n        -------\n        its: int\n             Iteration number.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_83getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getIterationNumber (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getIterationNumber", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getIterationNumber", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_54getIterationNumber(((struct PySlepcNEPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_82getIterationNumber(((struct PySlepcPEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_54getIterationNumber(struct PySlepcNEPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_82getIterationNumber(struct PySlepcPEPObject *__pyx_v_self) {
   PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getIterationNumber", 0);
 
-  /* "SLEPc/NEP.pyx":449
+  /* "SLEPc/PEP.pyx":817
  *              Iteration number.
  *         """
  *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
- *         CHKERR( NEPGetIterationNumber(self.nep, &ival) )
+ *         CHKERR( PEPGetIterationNumber(self.pep, &ival) )
  *         return toInt(ival)
  */
   __pyx_v_ival = 0;
 
-  /* "SLEPc/NEP.pyx":450
+  /* "SLEPc/PEP.pyx":818
  *         """
  *         cdef PetscInt ival = 0
- *         CHKERR( NEPGetIterationNumber(self.nep, &ival) )             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPGetIterationNumber(self.pep, &ival) )             # <<<<<<<<<<<<<<
  *         return toInt(ival)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetIterationNumber(__pyx_v_self->nep, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetIterationNumber(__pyx_v_self->pep, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 818, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":451
+  /* "SLEPc/PEP.pyx":819
  *         cdef PetscInt ival = 0
- *         CHKERR( NEPGetIterationNumber(self.nep, &ival) )
+ *         CHKERR( PEPGetIterationNumber(self.pep, &ival) )
  *         return toInt(ival)             # <<<<<<<<<<<<<<
  * 
  *     def getConvergedReason(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 819, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/NEP.pyx":438
- *         CHKERR( NEPSolve(self.nep) )
+  /* "SLEPc/PEP.pyx":806
+ *         CHKERR( PEPSolve(self.pep) )
  * 
  *     def getIterationNumber(self):             # <<<<<<<<<<<<<<
  *         """
@@ -42686,7 +43004,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_54getIterationNumber(struct PySl
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getIterationNumber", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getIterationNumber", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -42694,7 +43012,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_54getIterationNumber(struct PySl
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":453
+/* "SLEPc/PEP.pyx":821
  *         return toInt(ival)
  * 
  *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
@@ -42703,66 +43021,63 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_54getIterationNumber(struct PySl
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_57getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_56getConvergedReason[] = "NEP.getConvergedReason(self)\n\n        Gets the reason why the `solve()` iteration was stopped.\n\n        Returns\n        -------\n        reason: `NEP.ConvergedReason` enumerate\n            Negative value indicates diverged, positive value\n            converged.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_57getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_85getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_84getConvergedReason[] = "PEP.getConvergedReason(self)\n\n        Gets the reason why the `solve()` iteration was stopped.\n\n        Returns\n        -------\n        reason: `PEP.ConvergedReason` enumerate\n            Negative value indicates diverged, positive value\n            converged.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_85getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getConvergedReason (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getConvergedReason", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getConvergedReason", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_56getConvergedReason(((struct PySlepcNEPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_84getConvergedReason(((struct PySlepcPEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_56getConvergedReason(struct PySlepcNEPObject *__pyx_v_self) {
-  NEPConvergedReason __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_84getConvergedReason(struct PySlepcPEPObject *__pyx_v_self) {
+  PEPConvergedReason __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getConvergedReason", 0);
 
-  /* "SLEPc/NEP.pyx":463
+  /* "SLEPc/PEP.pyx":831
  *             converged.
  *         """
- *         cdef SlepcNEPConvergedReason val = NEP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
- *         CHKERR( NEPGetConvergedReason(self.nep, &val) )
+ *         cdef SlepcPEPConvergedReason val = PEP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPGetConvergedReason(self.pep, &val) )
  *         return val
  */
-  __pyx_v_val = NEP_CONVERGED_ITERATING;
+  __pyx_v_val = PEP_CONVERGED_ITERATING;
 
-  /* "SLEPc/NEP.pyx":464
+  /* "SLEPc/PEP.pyx":832
  *         """
- *         cdef SlepcNEPConvergedReason val = NEP_CONVERGED_ITERATING
- *         CHKERR( NEPGetConvergedReason(self.nep, &val) )             # <<<<<<<<<<<<<<
+ *         cdef SlepcPEPConvergedReason val = PEP_CONVERGED_ITERATING
+ *         CHKERR( PEPGetConvergedReason(self.pep, &val) )             # <<<<<<<<<<<<<<
  *         return val
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetConvergedReason(__pyx_v_self->nep, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 464; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetConvergedReason(__pyx_v_self->pep, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 832, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":465
- *         cdef SlepcNEPConvergedReason val = NEP_CONVERGED_ITERATING
- *         CHKERR( NEPGetConvergedReason(self.nep, &val) )
+  /* "SLEPc/PEP.pyx":833
+ *         cdef SlepcPEPConvergedReason val = PEP_CONVERGED_ITERATING
+ *         CHKERR( PEPGetConvergedReason(self.pep, &val) )
  *         return val             # <<<<<<<<<<<<<<
  * 
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PEPConvergedReason(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 833, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/NEP.pyx":453
+  /* "SLEPc/PEP.pyx":821
  *         return toInt(ival)
  * 
  *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
@@ -42773,7 +43088,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_56getConvergedReason(struct PySl
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getConvergedReason", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getConvergedReason", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -42781,7 +43096,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_56getConvergedReason(struct PySl
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":468
+/* "SLEPc/PEP.pyx":836
  * 
  * 
  *     def getConverged(self):             # <<<<<<<<<<<<<<
@@ -42790,66 +43105,63 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_56getConvergedReason(struct PySl
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_59getConverged(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_58getConverged[] = "NEP.getConverged(self)\n\n        Gets the number of converged eigenpairs.\n\n        Returns\n        -------\n        nconv: int\n            Number of converged eigenpairs.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_59getConverged(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_87getConverged(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_86getConverged[] = "PEP.getConverged(self)\n\n        Gets the number of converged eigenpairs.\n\n        Returns\n        -------\n        nconv: int\n            Number of converged eigenpairs.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_87getConverged(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getConverged (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getConverged", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getConverged", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_58getConverged(((struct PySlepcNEPObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_86getConverged(((struct PySlepcPEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_58getConverged(struct PySlepcNEPObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_86getConverged(struct PySlepcPEPObject *__pyx_v_self) {
   PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getConverged", 0);
 
-  /* "SLEPc/NEP.pyx":477
+  /* "SLEPc/PEP.pyx":845
  *             Number of converged eigenpairs.
  *         """
  *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
- *         CHKERR( NEPGetConverged(self.nep, &ival) )
+ *         CHKERR( PEPGetConverged(self.pep, &ival) )
  *         return toInt(ival)
  */
   __pyx_v_ival = 0;
 
-  /* "SLEPc/NEP.pyx":478
+  /* "SLEPc/PEP.pyx":846
  *         """
  *         cdef PetscInt ival = 0
- *         CHKERR( NEPGetConverged(self.nep, &ival) )             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPGetConverged(self.pep, &ival) )             # <<<<<<<<<<<<<<
  *         return toInt(ival)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetConverged(__pyx_v_self->nep, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetConverged(__pyx_v_self->pep, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 846, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":479
+  /* "SLEPc/PEP.pyx":847
  *         cdef PetscInt ival = 0
- *         CHKERR( NEPGetConverged(self.nep, &ival) )
+ *         CHKERR( PEPGetConverged(self.pep, &ival) )
  *         return toInt(ival)             # <<<<<<<<<<<<<<
  * 
  *     def getEigenpair(self, int i, Vec Vr=None, Vec Vi=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 847, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/NEP.pyx":468
+  /* "SLEPc/PEP.pyx":836
  * 
  * 
  *     def getConverged(self):             # <<<<<<<<<<<<<<
@@ -42860,7 +43172,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_58getConverged(struct PySlepcNEP
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getConverged", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getConverged", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -42868,7 +43180,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_58getConverged(struct PySlepcNEP
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":481
+/* "SLEPc/PEP.pyx":849
  *         return toInt(ival)
  * 
  *     def getEigenpair(self, int i, Vec Vr=None, Vec Vi=None):             # <<<<<<<<<<<<<<
@@ -42877,15 +43189,12 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_58getConverged(struct PySlepcNEP
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_61getEigenpair(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_60getEigenpair[] = "NEP.getEigenpair(self, int i, Vec Vr=None, Vec Vi=None)\n\n        Gets the i-th solution of the eigenproblem as computed by\n        `solve()`.  The solution consists of both the eigenvalue and\n        the eigenvector.\n\n        Parameters\n        ----------\n        i: int\n            Index of the solution to be obtained.\n        Vr: Vec, optional\n            Placeholder for the returned eigenvector (real part).\n    [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_61getEigenpair(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_89getEigenpair(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_88getEigenpair[] = "PEP.getEigenpair(self, int i, Vec Vr=None, Vec Vi=None)\n\n        Gets the i-th solution of the eigenproblem as computed by\n        `solve()`.  The solution consists of both the eigenvalue and\n        the eigenvector.\n\n        Parameters\n        ----------\n        i: int\n            Index of the solution to be obtained.\n        Vr: Vec, optional\n            Placeholder for the returned eigenvector (real part).\n    [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_89getEigenpair(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int __pyx_v_i;
   struct PyPetscVecObject *__pyx_v_Vr = 0;
   struct PyPetscVecObject *__pyx_v_Vi = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getEigenpair (wrapper)", 0);
@@ -42921,7 +43230,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_61getEigenpair(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getEigenpair") < 0)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getEigenpair") < 0)) __PYX_ERR(15, 849, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -42932,21 +43241,21 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_61getEigenpair(PyObject *__pyx_v
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) __PYX_ERR(15, 849, __pyx_L3_error)
     __pyx_v_Vr = ((struct PyPetscVecObject *)values[1]);
     __pyx_v_Vi = ((struct PyPetscVecObject *)values[2]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getEigenpair", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[14]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getEigenpair", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 849, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getEigenpair", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getEigenpair", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Vr), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "Vr", 0))) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Vi), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "Vi", 0))) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_60getEigenpair(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_i, __pyx_v_Vr, __pyx_v_Vi);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Vr), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "Vr", 0))) __PYX_ERR(15, 849, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Vi), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "Vi", 0))) __PYX_ERR(15, 849, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_88getEigenpair(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_i, __pyx_v_Vr, __pyx_v_Vi);
 
   /* function exit code */
   goto __pyx_L0;
@@ -42957,7 +43266,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_61getEigenpair(PyObject *__pyx_v
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_60getEigenpair(struct PySlepcNEPObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_Vr, struct PyPetscVecObject *__pyx_v_Vi) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_88getEigenpair(struct PySlepcPEPObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_Vr, struct PyPetscVecObject *__pyx_v_Vi) {
   PetscScalar __pyx_v_sval1;
   PetscScalar __pyx_v_sval2;
   Vec __pyx_v_vecr;
@@ -42971,12 +43280,9 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_60getEigenpair(struct PySlepcNEP
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getEigenpair", 0);
 
-  /* "SLEPc/NEP.pyx":501
+  /* "SLEPc/PEP.pyx":869
  *             The computed eigenvalue.
  *         """
  *         cdef PetscScalar sval1 = 0             # <<<<<<<<<<<<<<
@@ -42985,7 +43291,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_60getEigenpair(struct PySlepcNEP
  */
   __pyx_v_sval1 = 0.0;
 
-  /* "SLEPc/NEP.pyx":502
+  /* "SLEPc/PEP.pyx":870
  *         """
  *         cdef PetscScalar sval1 = 0
  *         cdef PetscScalar sval2 = 0             # <<<<<<<<<<<<<<
@@ -42994,7 +43300,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_60getEigenpair(struct PySlepcNEP
  */
   __pyx_v_sval2 = 0.0;
 
-  /* "SLEPc/NEP.pyx":503
+  /* "SLEPc/PEP.pyx":871
  *         cdef PetscScalar sval1 = 0
  *         cdef PetscScalar sval2 = 0
  *         cdef PetscVec vecr = NULL             # <<<<<<<<<<<<<<
@@ -43003,7 +43309,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_60getEigenpair(struct PySlepcNEP
  */
   __pyx_v_vecr = NULL;
 
-  /* "SLEPc/NEP.pyx":504
+  /* "SLEPc/PEP.pyx":872
  *         cdef PetscScalar sval2 = 0
  *         cdef PetscVec vecr = NULL
  *         cdef PetscVec veci = NULL             # <<<<<<<<<<<<<<
@@ -43012,27 +43318,25 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_60getEigenpair(struct PySlepcNEP
  */
   __pyx_v_veci = NULL;
 
-  /* "SLEPc/NEP.pyx":505
+  /* "SLEPc/PEP.pyx":873
  *         cdef PetscVec vecr = NULL
  *         cdef PetscVec veci = NULL
  *         if Vr is not None: vecr = Vr.vec             # <<<<<<<<<<<<<<
  *         if Vi is not None: veci = Vi.vec
- *         CHKERR( NEPGetEigenpair(self.nep, i, &sval1, &sval2, vecr, veci) )
+ *         CHKERR( PEPGetEigenpair(self.pep, i, &sval1, &sval2, vecr, veci) )
  */
   __pyx_t_1 = (((PyObject *)__pyx_v_Vr) != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_Vr->vec;
     __pyx_v_vecr = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "SLEPc/NEP.pyx":506
+  /* "SLEPc/PEP.pyx":874
  *         cdef PetscVec veci = NULL
  *         if Vr is not None: vecr = Vr.vec
  *         if Vi is not None: veci = Vi.vec             # <<<<<<<<<<<<<<
- *         CHKERR( NEPGetEigenpair(self.nep, i, &sval1, &sval2, vecr, veci) )
+ *         CHKERR( PEPGetEigenpair(self.pep, i, &sval1, &sval2, vecr, veci) )
  *         return complex(toScalar(sval1), toScalar(sval2))
  */
   __pyx_t_2 = (((PyObject *)__pyx_v_Vi) != Py_None);
@@ -43040,32 +43344,30 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_60getEigenpair(struct PySlepcNEP
   if (__pyx_t_1) {
     __pyx_t_3 = __pyx_v_Vi->vec;
     __pyx_v_veci = __pyx_t_3;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "SLEPc/NEP.pyx":507
+  /* "SLEPc/PEP.pyx":875
  *         if Vr is not None: vecr = Vr.vec
  *         if Vi is not None: veci = Vi.vec
- *         CHKERR( NEPGetEigenpair(self.nep, i, &sval1, &sval2, vecr, veci) )             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPGetEigenpair(self.pep, i, &sval1, &sval2, vecr, veci) )             # <<<<<<<<<<<<<<
  *         return complex(toScalar(sval1), toScalar(sval2))
  * 
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetEigenpair(__pyx_v_self->nep, __pyx_v_i, (&__pyx_v_sval1), (&__pyx_v_sval2), __pyx_v_vecr, __pyx_v_veci)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetEigenpair(__pyx_v_self->pep, __pyx_v_i, (&__pyx_v_sval1), (&__pyx_v_sval2), __pyx_v_vecr, __pyx_v_veci)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(15, 875, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":508
+  /* "SLEPc/PEP.pyx":876
  *         if Vi is not None: veci = Vi.vec
- *         CHKERR( NEPGetEigenpair(self.nep, i, &sval1, &sval2, vecr, veci) )
+ *         CHKERR( PEPGetEigenpair(self.pep, i, &sval1, &sval2, vecr, veci) )
  *         return complex(toScalar(sval1), toScalar(sval2))             # <<<<<<<<<<<<<<
  * 
  *     def getErrorEstimate(self, int i):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval1); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 876, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval2); if (unlikely(!__pyx_t_6)) __PYX_ERR(15, 876, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(15, 876, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_GIVEREF(__pyx_t_5);
   PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5);
@@ -43073,14 +43375,14 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_60getEigenpair(struct PySlepcNEP
   PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
   __pyx_t_5 = 0;
   __pyx_t_6 = 0;
-  __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyComplex_Type))), __pyx_t_7, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)(&PyComplex_Type)), __pyx_t_7, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(15, 876, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __pyx_r = __pyx_t_6;
   __pyx_t_6 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/NEP.pyx":481
+  /* "SLEPc/PEP.pyx":849
  *         return toInt(ival)
  * 
  *     def getEigenpair(self, int i, Vec Vr=None, Vec Vi=None):             # <<<<<<<<<<<<<<
@@ -43093,7 +43395,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_60getEigenpair(struct PySlepcNEP
   __Pyx_XDECREF(__pyx_t_5);
   __Pyx_XDECREF(__pyx_t_6);
   __Pyx_XDECREF(__pyx_t_7);
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getEigenpair", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getEigenpair", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -43101,7 +43403,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_60getEigenpair(struct PySlepcNEP
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":510
+/* "SLEPc/PEP.pyx":878
  *         return complex(toScalar(sval1), toScalar(sval2))
  * 
  *     def getErrorEstimate(self, int i):             # <<<<<<<<<<<<<<
@@ -43110,13 +43412,10 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_60getEigenpair(struct PySlepcNEP
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_63getErrorEstimate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_62getErrorEstimate[] = "NEP.getErrorEstimate(self, int i)\n\n        Returns the error estimate associated to the i-th computed\n        eigenpair.\n\n        Parameters\n        ----------\n        i: int\n            Index of the solution to be considered.\n\n        Returns\n        -------\n        error: real\n            Error estimate.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_63getErrorEstimate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_91getErrorEstimate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_90getErrorEstimate[] = "PEP.getErrorEstimate(self, int i)\n\n        Returns the error estimate associated to the i-th computed\n        eigenpair.\n\n        Parameters\n        ----------\n        i: int\n            Index of the solution to be considered.\n\n        Returns\n        -------\n        error: real\n            Error estimate.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_91getErrorEstimate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int __pyx_v_i;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getErrorEstimate (wrapper)", 0);
@@ -43138,74 +43437,71 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_63getErrorEstimate(PyObject *__p
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getErrorEstimate") < 0)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getErrorEstimate") < 0)) __PYX_ERR(15, 878, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) __PYX_ERR(15, 878, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getErrorEstimate", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[14]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("getErrorEstimate", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 878, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getErrorEstimate", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getErrorEstimate", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_62getErrorEstimate(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_i);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_90getErrorEstimate(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_i);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_62getErrorEstimate(struct PySlepcNEPObject *__pyx_v_self, int __pyx_v_i) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_90getErrorEstimate(struct PySlepcPEPObject *__pyx_v_self, int __pyx_v_i) {
   PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getErrorEstimate", 0);
 
-  /* "SLEPc/NEP.pyx":525
+  /* "SLEPc/PEP.pyx":893
  *             Error estimate.
  *         """
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
- *         CHKERR( NEPGetErrorEstimate(self.nep, i, &rval) )
+ *         CHKERR( PEPGetErrorEstimate(self.pep, i, &rval) )
  *         return toReal(rval)
  */
   __pyx_v_rval = 0.0;
 
-  /* "SLEPc/NEP.pyx":526
+  /* "SLEPc/PEP.pyx":894
  *         """
  *         cdef PetscReal rval = 0
- *         CHKERR( NEPGetErrorEstimate(self.nep, i, &rval) )             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPGetErrorEstimate(self.pep, i, &rval) )             # <<<<<<<<<<<<<<
  *         return toReal(rval)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetErrorEstimate(__pyx_v_self->nep, __pyx_v_i, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPGetErrorEstimate(__pyx_v_self->pep, __pyx_v_i, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 894, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":527
+  /* "SLEPc/PEP.pyx":895
  *         cdef PetscReal rval = 0
- *         CHKERR( NEPGetErrorEstimate(self.nep, i, &rval) )
+ *         CHKERR( PEPGetErrorEstimate(self.pep, i, &rval) )
  *         return toReal(rval)             # <<<<<<<<<<<<<<
  * 
  *     def computeError(self, int i, etype=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 895, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/NEP.pyx":510
+  /* "SLEPc/PEP.pyx":878
  *         return complex(toScalar(sval1), toScalar(sval2))
  * 
  *     def getErrorEstimate(self, int i):             # <<<<<<<<<<<<<<
@@ -43216,7 +43512,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_62getErrorEstimate(struct PySlep
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getErrorEstimate", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getErrorEstimate", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -43224,7 +43520,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_62getErrorEstimate(struct PySlep
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":529
+/* "SLEPc/PEP.pyx":897
  *         return toReal(rval)
  * 
  *     def computeError(self, int i, etype=None):             # <<<<<<<<<<<<<<
@@ -43233,14 +43529,11 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_62getErrorEstimate(struct PySlep
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_65computeError(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_64computeError[] = "NEP.computeError(self, int i, etype=None)\n\n        Computes the error (based on the residual norm) associated with the i-th\n        computed eigenpair.\n\n        Parameters\n        ----------\n        i: int\n            Index of the solution to be considered.\n        etype: `NEP.ErrorType` enumerate\n            The error type to compute.\n\n        Returns\n        -------\n        error: real\n            The error  [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_65computeError(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_93computeError(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_92computeError[] = "PEP.computeError(self, int i, etype=None)\n\n        Computes the error (based on the residual norm) associated with the i-th\n        computed eigenpair.\n\n        Parameters\n        ----------\n        i: int\n           Index of the solution to be considered.\n        etype: `PEP.ErrorType` enumerate\n           The error type to compute.\n\n        Returns\n        -------\n        error: real\n           The error bou [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_93computeError(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int __pyx_v_i;
   PyObject *__pyx_v_etype = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("computeError (wrapper)", 0);
@@ -43269,7 +43562,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_65computeError(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeError") < 0)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeError") < 0)) __PYX_ERR(15, 897, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -43279,97 +43572,92 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_65computeError(PyObject *__pyx_v
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) __PYX_ERR(15, 897, __pyx_L3_error)
     __pyx_v_etype = values[1];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeError", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[14]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("computeError", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 897, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.computeError", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.computeError", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_64computeError(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_i, __pyx_v_etype);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_92computeError(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_i, __pyx_v_etype);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_64computeError(struct PySlepcNEPObject *__pyx_v_self, int __pyx_v_i, PyObject *__pyx_v_etype) {
-  NEPErrorType __pyx_v_et;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_92computeError(struct PySlepcPEPObject *__pyx_v_self, int __pyx_v_i, PyObject *__pyx_v_etype) {
+  PEPErrorType __pyx_v_et;
   PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
-  NEPErrorType __pyx_t_3;
+  PEPErrorType __pyx_t_3;
   int __pyx_t_4;
   PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("computeError", 0);
 
-  /* "SLEPc/NEP.pyx":548
- *             ``x`` is the eigenvector.
+  /* "SLEPc/PEP.pyx":921
+ *         ``nconv-1`` (see `getConverged()`).
  *         """
- *         cdef SlepcNEPErrorType et = NEP_ERROR_RELATIVE             # <<<<<<<<<<<<<<
+ *         cdef SlepcPEPErrorType et = PEP_ERROR_BACKWARD             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval = 0
  *         if etype is not None: et = etype
  */
-  __pyx_v_et = NEP_ERROR_RELATIVE;
+  __pyx_v_et = PEP_ERROR_BACKWARD;
 
-  /* "SLEPc/NEP.pyx":549
+  /* "SLEPc/PEP.pyx":922
  *         """
- *         cdef SlepcNEPErrorType et = NEP_ERROR_RELATIVE
+ *         cdef SlepcPEPErrorType et = PEP_ERROR_BACKWARD
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
  *         if etype is not None: et = etype
- *         CHKERR( NEPComputeError(self.nep, i, et, &rval) )
+ *         CHKERR( PEPComputeError(self.pep, i, et, &rval) )
  */
   __pyx_v_rval = 0.0;
 
-  /* "SLEPc/NEP.pyx":550
- *         cdef SlepcNEPErrorType et = NEP_ERROR_RELATIVE
+  /* "SLEPc/PEP.pyx":923
+ *         cdef SlepcPEPErrorType et = PEP_ERROR_BACKWARD
  *         cdef PetscReal rval = 0
  *         if etype is not None: et = etype             # <<<<<<<<<<<<<<
- *         CHKERR( NEPComputeError(self.nep, i, et, &rval) )
+ *         CHKERR( PEPComputeError(self.pep, i, et, &rval) )
  *         return toReal(rval)
  */
   __pyx_t_1 = (__pyx_v_etype != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = ((NEPErrorType)PyInt_AsLong(__pyx_v_etype)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((PEPErrorType)__Pyx_PyInt_As_PEPErrorType(__pyx_v_etype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(15, 923, __pyx_L1_error)
     __pyx_v_et = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "SLEPc/NEP.pyx":551
+  /* "SLEPc/PEP.pyx":924
  *         cdef PetscReal rval = 0
  *         if etype is not None: et = etype
- *         CHKERR( NEPComputeError(self.nep, i, et, &rval) )             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPComputeError(self.pep, i, et, &rval) )             # <<<<<<<<<<<<<<
  *         return toReal(rval)
  * 
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPComputeError(__pyx_v_self->nep, __pyx_v_i, __pyx_v_et, (&__pyx_v_rval))); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 551; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPComputeError(__pyx_v_self->pep, __pyx_v_i, __pyx_v_et, (&__pyx_v_rval))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(15, 924, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":552
+  /* "SLEPc/PEP.pyx":925
  *         if etype is not None: et = etype
- *         CHKERR( NEPComputeError(self.nep, i, et, &rval) )
+ *         CHKERR( PEPComputeError(self.pep, i, et, &rval) )
  *         return toReal(rval)             # <<<<<<<<<<<<<<
  * 
- *     def setFunction(self, function, Mat F, Mat P=None, args=None, kargs=None):
+ *     def errorView(self, etype=None, Viewer viewer=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 925, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_r = __pyx_t_5;
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/NEP.pyx":529
+  /* "SLEPc/PEP.pyx":897
  *         return toReal(rval)
  * 
  *     def computeError(self, int i, etype=None):             # <<<<<<<<<<<<<<
@@ -43380,7 +43668,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_64computeError(struct PySlepcNEP
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.computeError", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.computeError", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -43388,42 +43676,32 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_64computeError(struct PySlepcNEP
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":554
+/* "SLEPc/PEP.pyx":927
  *         return toReal(rval)
  * 
- *     def setFunction(self, function, Mat F, Mat P=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *     def errorView(self, etype=None, Viewer viewer=None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the function to compute the nonlinear Function T(lambda)
+ *         Displays the errors associated with the computed solution
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_67setFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_66setFunction[] = "NEP.setFunction(self, function, Mat F, Mat P=None, args=None, kargs=None)\n\n        Sets the function to compute the nonlinear Function T(lambda)\n        as well as the location to store the matrix.\n\n        Parameters\n        ----------\n        function:\n            Function evaluation routine\n        F: Mat\n            Function matrix\n        P: Mat\n            preconditioner matrix (usually same as the Function) [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_67setFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_function = 0;
-  struct PyPetscMatObject *__pyx_v_F = 0;
-  struct PyPetscMatObject *__pyx_v_P = 0;
-  PyObject *__pyx_v_args = 0;
-  PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_95errorView(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_94errorView[] = "PEP.errorView(self, etype=None, Viewer viewer=None)\n\n        Displays the errors associated with the computed solution\n        (as well as the eigenvalues).\n\n        Parameters\n        ----------\n        etype: `PEP.ErrorType` enumerate, optional\n           The error type to compute.\n        viewer: Viewer, optional.\n                Visualization context; if not provided, the standard\n                output is used.\ [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_95errorView(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_etype = 0;
+  struct PyPetscViewerObject *__pyx_v_viewer = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setFunction (wrapper)", 0);
+  __Pyx_RefNannySetupContext("errorView (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_function_2,&__pyx_n_s_F,&__pyx_n_s_P,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
-    PyObject* values[5] = {0,0,0,0,0};
-    values[2] = (PyObject *)((struct PyPetscMatObject *)Py_None);
-    values[3] = ((PyObject *)Py_None);
-    values[4] = ((PyObject *)Py_None);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_etype,&__pyx_n_s_viewer,0};
+    PyObject* values[2] = {0,0};
+    values[0] = ((PyObject *)Py_None);
+    values[1] = (PyObject *)((struct PyPetscViewerObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
-        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
-        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
@@ -43432,60 +43710,40 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_67setFunction(PyObject *__pyx_v_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_function_2)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_F)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("setFunction", 0, 2, 5, 1); {__pyx_filename = __pyx_f[14]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-        case  2:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_P);
-          if (value) { values[2] = value; kw_args--; }
-        }
-        case  3:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
-          if (value) { values[3] = value; kw_args--; }
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_etype);
+          if (value) { values[0] = value; kw_args--; }
         }
-        case  4:
+        case  1:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
-          if (value) { values[4] = value; kw_args--; }
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_viewer);
+          if (value) { values[1] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFunction") < 0)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "errorView") < 0)) __PYX_ERR(15, 927, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
-        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        break;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_function = values[0];
-    __pyx_v_F = ((struct PyPetscMatObject *)values[1]);
-    __pyx_v_P = ((struct PyPetscMatObject *)values[2]);
-    __pyx_v_args = values[3];
-    __pyx_v_kargs = values[4];
+    __pyx_v_etype = values[0];
+    __pyx_v_viewer = ((struct PyPetscViewerObject *)values[1]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFunction", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[14]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("errorView", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 927, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setFunction", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.errorView", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_F), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "F", 0))) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "P", 0))) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 554; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_66setFunction(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_function, __pyx_v_F, __pyx_v_P, __pyx_v_args, __pyx_v_kargs);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) __PYX_ERR(15, 927, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_94errorView(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_etype, __pyx_v_viewer);
 
   /* function exit code */
   goto __pyx_L0;
@@ -43496,198 +43754,116 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_67setFunction(PyObject *__pyx_v_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_66setFunction(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_function, struct PyPetscMatObject *__pyx_v_F, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
-  Mat __pyx_v_Fmat;
-  Mat __pyx_v_Pmat;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_94errorView(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_etype, struct PyPetscViewerObject *__pyx_v_viewer) {
+  PEPErrorType __pyx_v_et;
+  PetscViewer __pyx_v_vwr;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
-  Mat __pyx_t_3;
-  int __pyx_t_4;
-  PyObject *__pyx_t_5 = NULL;
-  PyObject *__pyx_t_6 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setFunction", 0);
-  __Pyx_INCREF(__pyx_v_args);
-  __Pyx_INCREF(__pyx_v_kargs);
+  PEPErrorType __pyx_t_3;
+  PetscViewer __pyx_t_4;
+  int __pyx_t_5;
+  __Pyx_RefNannySetupContext("errorView", 0);
 
-  /* "SLEPc/NEP.pyx":568
- *             preconditioner matrix (usually same as the Function)
+  /* "SLEPc/PEP.pyx":948
+ * 
  *         """
- *         cdef PetscMat Fmat=NULL             # <<<<<<<<<<<<<<
- *         if F is not None: Fmat = F.mat
- *         cdef PetscMat Pmat=Fmat
+ *         cdef SlepcPEPErrorType et = PEP_ERROR_RELATIVE             # <<<<<<<<<<<<<<
+ *         if etype is not None: et = etype
+ *         cdef PetscViewer vwr = NULL
  */
-  __pyx_v_Fmat = NULL;
+  __pyx_v_et = PEP_ERROR_RELATIVE;
 
-  /* "SLEPc/NEP.pyx":569
+  /* "SLEPc/PEP.pyx":949
  *         """
- *         cdef PetscMat Fmat=NULL
- *         if F is not None: Fmat = F.mat             # <<<<<<<<<<<<<<
- *         cdef PetscMat Pmat=Fmat
- *         if P is not None: Pmat = P.mat
+ *         cdef SlepcPEPErrorType et = PEP_ERROR_RELATIVE
+ *         if etype is not None: et = etype             # <<<<<<<<<<<<<<
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr
  */
-  __pyx_t_1 = (((PyObject *)__pyx_v_F) != Py_None);
+  __pyx_t_1 = (__pyx_v_etype != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_v_F->mat;
-    __pyx_v_Fmat = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "SLEPc/NEP.pyx":570
- *         cdef PetscMat Fmat=NULL
- *         if F is not None: Fmat = F.mat
- *         cdef PetscMat Pmat=Fmat             # <<<<<<<<<<<<<<
- *         if P is not None: Pmat = P.mat
- *         CHKERR( NEPSetFunction(self.nep, Fmat, Pmat, NEP_Function, NULL) )
- */
-  __pyx_v_Pmat = __pyx_v_Fmat;
-
-  /* "SLEPc/NEP.pyx":571
- *         if F is not None: Fmat = F.mat
- *         cdef PetscMat Pmat=Fmat
- *         if P is not None: Pmat = P.mat             # <<<<<<<<<<<<<<
- *         CHKERR( NEPSetFunction(self.nep, Fmat, Pmat, NEP_Function, NULL) )
- *         if args is None: args = ()
- */
-  __pyx_t_2 = (((PyObject *)__pyx_v_P) != Py_None);
-  __pyx_t_1 = (__pyx_t_2 != 0);
-  if (__pyx_t_1) {
-    __pyx_t_3 = __pyx_v_P->mat;
-    __pyx_v_Pmat = __pyx_t_3;
-    goto __pyx_L4;
+    __pyx_t_3 = ((PEPErrorType)__Pyx_PyInt_As_PEPErrorType(__pyx_v_etype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(15, 949, __pyx_L1_error)
+    __pyx_v_et = __pyx_t_3;
   }
-  __pyx_L4:;
-
-  /* "SLEPc/NEP.pyx":572
- *         cdef PetscMat Pmat=Fmat
- *         if P is not None: Pmat = P.mat
- *         CHKERR( NEPSetFunction(self.nep, Fmat, Pmat, NEP_Function, NULL) )             # <<<<<<<<<<<<<<
- *         if args is None: args = ()
- *         if kargs is None: kargs = {}
- */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetFunction(__pyx_v_self->nep, __pyx_v_Fmat, __pyx_v_Pmat, __pyx_f_8slepc4py_5SLEPc_NEP_Function, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "SLEPc/NEP.pyx":573
- *         if P is not None: Pmat = P.mat
- *         CHKERR( NEPSetFunction(self.nep, Fmat, Pmat, NEP_Function, NULL) )
- *         if args is None: args = ()             # <<<<<<<<<<<<<<
- *         if kargs is None: kargs = {}
- *         self.set_attr('__function__', (function, args, kargs))
+  /* "SLEPc/PEP.pyx":950
+ *         cdef SlepcPEPErrorType et = PEP_ERROR_RELATIVE
+ *         if etype is not None: et = etype
+ *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( PEPErrorView(self.pep, et, vwr) )
  */
-  __pyx_t_1 = (__pyx_v_args == Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __Pyx_INCREF(__pyx_empty_tuple);
-    __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-    goto __pyx_L5;
-  }
-  __pyx_L5:;
+  __pyx_v_vwr = NULL;
 
-  /* "SLEPc/NEP.pyx":574
- *         CHKERR( NEPSetFunction(self.nep, Fmat, Pmat, NEP_Function, NULL) )
- *         if args is None: args = ()
- *         if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
- *         self.set_attr('__function__', (function, args, kargs))
+  /* "SLEPc/PEP.pyx":951
+ *         if etype is not None: et = etype
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPErrorView(self.pep, et, vwr) )
  * 
  */
-  __pyx_t_2 = (__pyx_v_kargs == Py_None);
+  __pyx_t_2 = (((PyObject *)__pyx_v_viewer) != Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
-    __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_5);
-    __pyx_t_5 = 0;
-    goto __pyx_L6;
+    __pyx_t_4 = __pyx_v_viewer->vwr;
+    __pyx_v_vwr = __pyx_t_4;
   }
-  __pyx_L6:;
 
-  /* "SLEPc/NEP.pyx":575
- *         if args is None: args = ()
- *         if kargs is None: kargs = {}
- *         self.set_attr('__function__', (function, args, kargs))             # <<<<<<<<<<<<<<
+  /* "SLEPc/PEP.pyx":952
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( PEPErrorView(self.pep, et, vwr) )             # <<<<<<<<<<<<<<
  * 
- *     def setJacobian(self, jacobian, Mat J, args=None, kargs=None):
+ *     #
  */
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __Pyx_INCREF(__pyx_v_function);
-  __Pyx_GIVEREF(__pyx_v_function);
-  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_function);
-  __Pyx_INCREF(__pyx_v_args);
-  __Pyx_GIVEREF(__pyx_v_args);
-  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_args);
-  __Pyx_INCREF(__pyx_v_kargs);
-  __Pyx_GIVEREF(__pyx_v_kargs);
-  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_kargs);
-  __pyx_t_6 = ((struct __pyx_vtabstruct_8slepc4py_5SLEPc_NEP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_function, __pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPErrorView(__pyx_v_self->pep, __pyx_v_et, __pyx_v_vwr)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(15, 952, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":554
+  /* "SLEPc/PEP.pyx":927
  *         return toReal(rval)
  * 
- *     def setFunction(self, function, Mat F, Mat P=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *     def errorView(self, etype=None, Viewer viewer=None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the function to compute the nonlinear Function T(lambda)
+ *         Displays the errors associated with the computed solution
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_XDECREF(__pyx_t_6);
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setFunction", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.errorView", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_args);
-  __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":577
- *         self.set_attr('__function__', (function, args, kargs))
+/* "SLEPc/PEP.pyx":956
+ *     #
  * 
- *     def setJacobian(self, jacobian, Mat J, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *     def setLinearEPS(self, EPS eps not None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the function to compute Jacobian T'(lambda) as well
+ *         Associate an eigensolver object (EPS) to the polynomial eigenvalue solver.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_69setJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_68setJacobian[] = "NEP.setJacobian(self, jacobian, Mat J, args=None, kargs=None)\n\n        Sets the function to compute Jacobian T'(lambda) as well\n        as the location to store the matrix.\n\n        Parameters\n        ----------\n        jacobian:\n            Jacobian evaluation routine\n        J: Mat\n            Jacobian matrix\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_69setJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_jacobian = 0;
-  struct PyPetscMatObject *__pyx_v_J = 0;
-  PyObject *__pyx_v_args = 0;
-  PyObject *__pyx_v_kargs = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_97setLinearEPS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_96setLinearEPS[] = "PEP.setLinearEPS(self, EPS eps)\n\n        Associate an eigensolver object (EPS) to the polynomial eigenvalue solver.\n\n        Parameters\n        ----------\n        eps: EPS\n            The linear eigensolver.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_97setLinearEPS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PySlepcEPSObject *__pyx_v_eps = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setJacobian (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setLinearEPS (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_jacobian_2,&__pyx_n_s_J,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
-    PyObject* values[4] = {0,0,0,0};
-    values[2] = ((PyObject *)Py_None);
-    values[3] = ((PyObject *)Py_None);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_eps,0};
+    PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
-        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -43695,52 +43871,29 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_69setJacobian(PyObject *__pyx_v_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_jacobian_2)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_eps)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_J)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("setJacobian", 0, 2, 4, 1); {__pyx_filename = __pyx_f[14]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-        case  2:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
-          if (value) { values[2] = value; kw_args--; }
-        }
-        case  3:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
-          if (value) { values[3] = value; kw_args--; }
-        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setJacobian") < 0)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLinearEPS") < 0)) __PYX_ERR(15, 956, __pyx_L3_error)
       }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
     } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        break;
-        default: goto __pyx_L5_argtuple_error;
-      }
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_jacobian = values[0];
-    __pyx_v_J = ((struct PyPetscMatObject *)values[1]);
-    __pyx_v_args = values[2];
-    __pyx_v_kargs = values[3];
+    __pyx_v_eps = ((struct PySlepcEPSObject *)values[0]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setJacobian", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[14]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setLinearEPS", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 956, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setJacobian", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setLinearEPS", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "J", 0))) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_68setJacobian(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_jacobian, __pyx_v_J, __pyx_v_args, __pyx_v_kargs);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_eps), __pyx_ptype_8slepc4py_5SLEPc_EPS, 0, "eps", 0))) __PYX_ERR(15, 956, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_96setLinearEPS(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_eps);
 
   /* function exit code */
   goto __pyx_L0;
@@ -43751,169 +43904,159 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_69setJacobian(PyObject *__pyx_v_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_68setJacobian(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_jacobian, struct PyPetscMatObject *__pyx_v_J, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
-  Mat __pyx_v_Jmat;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_96setLinearEPS(struct PySlepcPEPObject *__pyx_v_self, struct PySlepcEPSObject *__pyx_v_eps) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_t_2;
-  Mat __pyx_t_3;
-  int __pyx_t_4;
-  PyObject *__pyx_t_5 = NULL;
-  PyObject *__pyx_t_6 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setJacobian", 0);
-  __Pyx_INCREF(__pyx_v_args);
-  __Pyx_INCREF(__pyx_v_kargs);
+  __Pyx_RefNannySetupContext("setLinearEPS", 0);
 
-  /* "SLEPc/NEP.pyx":589
- *             Jacobian matrix
+  /* "SLEPc/PEP.pyx":965
+ *             The linear eigensolver.
  *         """
- *         cdef PetscMat Jmat=NULL             # <<<<<<<<<<<<<<
- *         if J is not None: Jmat = J.mat
- *         CHKERR( NEPSetJacobian(self.nep, Jmat, NEP_Jacobian, NULL) )
+ *         CHKERR( PEPLinearSetEPS(self.pep, eps.eps) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getLinearEPS(self):
  */
-  __pyx_v_Jmat = NULL;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPLinearSetEPS(__pyx_v_self->pep, __pyx_v_eps->eps)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 965, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":590
+  /* "SLEPc/PEP.pyx":956
+ *     #
+ * 
+ *     def setLinearEPS(self, EPS eps not None):             # <<<<<<<<<<<<<<
  *         """
- *         cdef PetscMat Jmat=NULL
- *         if J is not None: Jmat = J.mat             # <<<<<<<<<<<<<<
- *         CHKERR( NEPSetJacobian(self.nep, Jmat, NEP_Jacobian, NULL) )
- *         if args is None: args = ()
+ *         Associate an eigensolver object (EPS) to the polynomial eigenvalue solver.
  */
-  __pyx_t_1 = (((PyObject *)__pyx_v_J) != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_v_J->mat;
-    __pyx_v_Jmat = __pyx_t_3;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
 
-  /* "SLEPc/NEP.pyx":591
- *         cdef PetscMat Jmat=NULL
- *         if J is not None: Jmat = J.mat
- *         CHKERR( NEPSetJacobian(self.nep, Jmat, NEP_Jacobian, NULL) )             # <<<<<<<<<<<<<<
- *         if args is None: args = ()
- *         if kargs is None: kargs = {}
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setLinearEPS", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/PEP.pyx":967
+ *         CHKERR( PEPLinearSetEPS(self.pep, eps.eps) )
+ * 
+ *     def getLinearEPS(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Retrieve the eigensolver object (EPS) associated to the polynomial
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetJacobian(__pyx_v_self->nep, __pyx_v_Jmat, __pyx_f_8slepc4py_5SLEPc_NEP_Jacobian, NULL)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "SLEPc/NEP.pyx":592
- *         if J is not None: Jmat = J.mat
- *         CHKERR( NEPSetJacobian(self.nep, Jmat, NEP_Jacobian, NULL) )
- *         if args is None: args = ()             # <<<<<<<<<<<<<<
- *         if kargs is None: kargs = {}
- *         self.set_attr('__jacobian__', (jacobian, args, kargs))
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_99getLinearEPS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_98getLinearEPS[] = "PEP.getLinearEPS(self)\n\n        Retrieve the eigensolver object (EPS) associated to the polynomial\n        eigenvalue solver.\n \n        Returns\n        -------\n        eps: EPS\n            The linear eigensolver.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_99getLinearEPS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getLinearEPS (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getLinearEPS", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getLinearEPS", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_98getLinearEPS(((struct PySlepcPEPObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_98getLinearEPS(struct PySlepcPEPObject *__pyx_v_self) {
+  struct PySlepcEPSObject *__pyx_v_eps = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getLinearEPS", 0);
+
+  /* "SLEPc/PEP.pyx":977
+ *             The linear eigensolver.
+ *         """
+ *         cdef EPS eps = EPS()             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPLinearGetEPS(self.pep, &eps.eps) )
+ *         PetscINCREF(eps.obj)
  */
-  __pyx_t_2 = (__pyx_v_args == Py_None);
-  __pyx_t_1 = (__pyx_t_2 != 0);
-  if (__pyx_t_1) {
-    __Pyx_INCREF(__pyx_empty_tuple);
-    __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
-    goto __pyx_L4;
-  }
-  __pyx_L4:;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_EPS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(15, 977, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_eps = ((struct PySlepcEPSObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/NEP.pyx":593
- *         CHKERR( NEPSetJacobian(self.nep, Jmat, NEP_Jacobian, NULL) )
- *         if args is None: args = ()
- *         if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
- *         self.set_attr('__jacobian__', (jacobian, args, kargs))
+  /* "SLEPc/PEP.pyx":978
+ *         """
+ *         cdef EPS eps = EPS()
+ *         CHKERR( PEPLinearGetEPS(self.pep, &eps.eps) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(eps.obj)
+ *         return eps
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPLinearGetEPS(__pyx_v_self->pep, (&__pyx_v_eps->eps))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(15, 978, __pyx_L1_error)
+
+  /* "SLEPc/PEP.pyx":979
+ *         cdef EPS eps = EPS()
+ *         CHKERR( PEPLinearGetEPS(self.pep, &eps.eps) )
+ *         PetscINCREF(eps.obj)             # <<<<<<<<<<<<<<
+ *         return eps
  * 
  */
-  __pyx_t_1 = (__pyx_v_kargs == Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_5);
-    __pyx_t_5 = 0;
-    goto __pyx_L5;
-  }
-  __pyx_L5:;
+  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_eps->__pyx_base.obj);
 
-  /* "SLEPc/NEP.pyx":594
- *         if args is None: args = ()
- *         if kargs is None: kargs = {}
- *         self.set_attr('__jacobian__', (jacobian, args, kargs))             # <<<<<<<<<<<<<<
+  /* "SLEPc/PEP.pyx":980
+ *         CHKERR( PEPLinearGetEPS(self.pep, &eps.eps) )
+ *         PetscINCREF(eps.obj)
+ *         return eps             # <<<<<<<<<<<<<<
  * 
- *     def setSplitOperator(self, A, f, structure=None):
+ *     def setLinearCompanionForm(self, cform not None):
  */
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __Pyx_INCREF(__pyx_v_jacobian);
-  __Pyx_GIVEREF(__pyx_v_jacobian);
-  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_jacobian);
-  __Pyx_INCREF(__pyx_v_args);
-  __Pyx_GIVEREF(__pyx_v_args);
-  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_args);
-  __Pyx_INCREF(__pyx_v_kargs);
-  __Pyx_GIVEREF(__pyx_v_kargs);
-  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_kargs);
-  __pyx_t_6 = ((struct __pyx_vtabstruct_8slepc4py_5SLEPc_NEP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_k_jacobian, __pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_eps));
+  __pyx_r = ((PyObject *)__pyx_v_eps);
+  goto __pyx_L0;
 
-  /* "SLEPc/NEP.pyx":577
- *         self.set_attr('__function__', (function, args, kargs))
+  /* "SLEPc/PEP.pyx":967
+ *         CHKERR( PEPLinearSetEPS(self.pep, eps.eps) )
  * 
- *     def setJacobian(self, jacobian, Mat J, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *     def getLinearEPS(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the function to compute Jacobian T'(lambda) as well
+ *         Retrieve the eigensolver object (EPS) associated to the polynomial
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_XDECREF(__pyx_t_6);
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setJacobian", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getLinearEPS", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_args);
-  __Pyx_XDECREF(__pyx_v_kargs);
+  __Pyx_XDECREF((PyObject *)__pyx_v_eps);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/NEP.pyx":596
- *         self.set_attr('__jacobian__', (jacobian, args, kargs))
+/* "SLEPc/PEP.pyx":982
+ *         return eps
  * 
- *     def setSplitOperator(self, A, f, structure=None):             # <<<<<<<<<<<<<<
+ *     def setLinearCompanionForm(self, cform not None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the operator of the nonlinear eigenvalue problem
+ *         Choose between the two companion forms available for the linearization of
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_71setSplitOperator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3NEP_70setSplitOperator[] = "NEP.setSplitOperator(self, A, f, structure=None)\n\n        Sets the operator of the nonlinear eigenvalue problem\n        in split form.\n\n        Parameters\n        ----------\n        A: Mat or sequence of Mat\n            Coefficient matrices of the split form.\n        f: sequence of FN\n            Scalar functions of the split form.\n        structure: `PETSc.Mat.Structure` enumerate, optional\n            Struc [...]
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_71setSplitOperator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_A = 0;
-  PyObject *__pyx_v_f = 0;
-  PyObject *__pyx_v_structure = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_101setLinearCompanionForm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_100setLinearCompanionForm[] = "PEP.setLinearCompanionForm(self, cform)\n\n        Choose between the two companion forms available for the linearization of\n        a quadratic eigenproblem.\n\n        Parameters\n        ----------\n        cform: integer\n            1 or 2 (first or second companion form).\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_101setLinearCompanionForm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_cform = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setSplitOperator (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setLinearCompanionForm (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_A,&__pyx_n_s_f,&__pyx_n_s_structure,0};
-    PyObject* values[3] = {0,0,0};
-    values[2] = ((PyObject *)Py_None);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_cform,0};
+    PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -43921,325 +44064,411 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_71setSplitOperator(PyObject *__p
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cform)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_f)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("setSplitOperator", 0, 2, 3, 1); {__pyx_filename = __pyx_f[14]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-        case  2:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_structure);
-          if (value) { values[2] = value; kw_args--; }
-        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSplitOperator") < 0)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLinearCompanionForm") < 0)) __PYX_ERR(15, 982, __pyx_L3_error)
       }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
     } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        break;
-        default: goto __pyx_L5_argtuple_error;
-      }
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_A = values[0];
-    __pyx_v_f = values[1];
-    __pyx_v_structure = values[2];
+    __pyx_v_cform = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setSplitOperator", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[14]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setLinearCompanionForm", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 982, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setSplitOperator", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setLinearCompanionForm", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_70setSplitOperator(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_A, __pyx_v_f, __pyx_v_structure);
+  if (unlikely(((PyObject *)__pyx_v_cform) == Py_None)) {
+    PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "cform"); __PYX_ERR(15, 982, __pyx_L1_error)
+  }
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_100setLinearCompanionForm(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_cform);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_70setSplitOperator(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_A, PyObject *__pyx_v_f, PyObject *__pyx_v_structure) {
-  Mat *__pyx_v_As;
-  FN *__pyx_v_Fs;
-  Py_ssize_t __pyx_v_i;
-  Py_ssize_t __pyx_v_n;
-  MatStructure __pyx_v_mstr;
-  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
-  CYTHON_UNUSED PyObject *__pyx_v_tmp2 = 0;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_100setLinearCompanionForm(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_cform) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PetscInt __pyx_t_1;
   int __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  Py_ssize_t __pyx_t_4;
-  MatStructure __pyx_t_5;
-  Py_ssize_t __pyx_t_6;
-  Mat __pyx_t_7;
-  FN __pyx_t_8;
-  int __pyx_t_9;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setSplitOperator", 0);
-  __Pyx_INCREF(__pyx_v_A);
-  __Pyx_INCREF(__pyx_v_f);
+  __Pyx_RefNannySetupContext("setLinearCompanionForm", 0);
 
-  /* "SLEPc/NEP.pyx":610
- *             Structure flag for matrices.
+  /* "SLEPc/PEP.pyx":992
+ *             1 or 2 (first or second companion form).
  *         """
- *         if isinstance(A, Mat): A = [A]             # <<<<<<<<<<<<<<
- *         if isinstance(f, FN):  f = [f]
- *         cdef PetscMat *As = NULL
+ *         CHKERR( PEPLinearSetCompanionForm(self.pep, cform) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getLinearCompanionForm(self):
  */
-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_A, ((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Mat)); 
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
-    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_INCREF(__pyx_v_A);
-    __Pyx_GIVEREF(__pyx_v_A);
-    PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_A);
-    __Pyx_DECREF_SET(__pyx_v_A, __pyx_t_3);
-    __pyx_t_3 = 0;
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+  __pyx_t_1 = __Pyx_PyInt_As_PetscInt(__pyx_v_cform); if (unlikely((__pyx_t_1 == (PetscInt)-1) && PyErr_Occurred())) __PYX_ERR(15, 992, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPLinearSetCompanionForm(__pyx_v_self->pep, __pyx_t_1)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(15, 992, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":611
+  /* "SLEPc/PEP.pyx":982
+ *         return eps
+ * 
+ *     def setLinearCompanionForm(self, cform not None):             # <<<<<<<<<<<<<<
  *         """
- *         if isinstance(A, Mat): A = [A]
- *         if isinstance(f, FN):  f = [f]             # <<<<<<<<<<<<<<
- *         cdef PetscMat *As = NULL
- *         cdef SlepcFN  *Fs = NULL
+ *         Choose between the two companion forms available for the linearization of
  */
-  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_f, ((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_FN)); 
-  __pyx_t_1 = (__pyx_t_2 != 0);
-  if (__pyx_t_1) {
-    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_INCREF(__pyx_v_f);
-    __Pyx_GIVEREF(__pyx_v_f);
-    PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_f);
-    __Pyx_DECREF_SET(__pyx_v_f, __pyx_t_3);
-    __pyx_t_3 = 0;
-    goto __pyx_L4;
-  }
-  __pyx_L4:;
 
-  /* "SLEPc/NEP.pyx":612
- *         if isinstance(A, Mat): A = [A]
- *         if isinstance(f, FN):  f = [f]
- *         cdef PetscMat *As = NULL             # <<<<<<<<<<<<<<
- *         cdef SlepcFN  *Fs = NULL
- *         cdef Py_ssize_t i = 0, n = len(A)
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setLinearCompanionForm", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/PEP.pyx":994
+ *         CHKERR( PEPLinearSetCompanionForm(self.pep, cform) )
+ * 
+ *     def getLinearCompanionForm(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Returns the number of the companion form that will be used for the
  */
-  __pyx_v_As = NULL;
 
-  /* "SLEPc/NEP.pyx":613
- *         if isinstance(f, FN):  f = [f]
- *         cdef PetscMat *As = NULL
- *         cdef SlepcFN  *Fs = NULL             # <<<<<<<<<<<<<<
- *         cdef Py_ssize_t i = 0, n = len(A)
- *         cdef PetscMatStructure mstr = matstructure(structure)
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_103getLinearCompanionForm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_102getLinearCompanionForm[] = "PEP.getLinearCompanionForm(self)\n\n        Returns the number of the companion form that will be used for the\n        linearization of a quadratic eigenproblem. \n \n        Returns\n        -------\n        cform: integer\n            1 or 2 (first or second companion form).\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_103getLinearCompanionForm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getLinearCompanionForm (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getLinearCompanionForm", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getLinearCompanionForm", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_102getLinearCompanionForm(((struct PySlepcPEPObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_102getLinearCompanionForm(struct PySlepcPEPObject *__pyx_v_self) {
+  PetscInt __pyx_v_cform;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getLinearCompanionForm", 0);
+
+  /* "SLEPc/PEP.pyx":1004
+ *             1 or 2 (first or second companion form).
+ *         """
+ *         cdef PetscInt cform = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPLinearGetCompanionForm(self.pep, &cform) )
+ *         return cform
  */
-  __pyx_v_Fs = NULL;
+  __pyx_v_cform = 0;
 
-  /* "SLEPc/NEP.pyx":614
- *         cdef PetscMat *As = NULL
- *         cdef SlepcFN  *Fs = NULL
- *         cdef Py_ssize_t i = 0, n = len(A)             # <<<<<<<<<<<<<<
- *         cdef PetscMatStructure mstr = matstructure(structure)
- *         assert n == len(f)
+  /* "SLEPc/PEP.pyx":1005
+ *         """
+ *         cdef PetscInt cform = 0
+ *         CHKERR( PEPLinearGetCompanionForm(self.pep, &cform) )             # <<<<<<<<<<<<<<
+ *         return cform
+ * 
  */
-  __pyx_v_i = 0;
-  __pyx_t_4 = PyObject_Length(__pyx_v_A); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_n = __pyx_t_4;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPLinearGetCompanionForm(__pyx_v_self->pep, (&__pyx_v_cform))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 1005, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":615
- *         cdef SlepcFN  *Fs = NULL
- *         cdef Py_ssize_t i = 0, n = len(A)
- *         cdef PetscMatStructure mstr = matstructure(structure)             # <<<<<<<<<<<<<<
- *         assert n == len(f)
- *         cdef tmp1 = allocate(<size_t>n*sizeof(Mat),<void**>&As)
+  /* "SLEPc/PEP.pyx":1006
+ *         cdef PetscInt cform = 0
+ *         CHKERR( PEPLinearGetCompanionForm(self.pep, &cform) )
+ *         return cform             # <<<<<<<<<<<<<<
+ * 
+ *     def setLinearExplicitMatrix(self, flag not None):
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_matstructure(__pyx_v_structure); if (unlikely(__pyx_t_5 == ((MatStructure)-1))) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_mstr = __pyx_t_5;
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyInt_From_PetscInt(__pyx_v_cform); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 1006, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
 
-  /* "SLEPc/NEP.pyx":616
- *         cdef Py_ssize_t i = 0, n = len(A)
- *         cdef PetscMatStructure mstr = matstructure(structure)
- *         assert n == len(f)             # <<<<<<<<<<<<<<
- *         cdef tmp1 = allocate(<size_t>n*sizeof(Mat),<void**>&As)
- *         cdef tmp2 = allocate(<size_t>n*sizeof(FN),<void**>&Fs)
+  /* "SLEPc/PEP.pyx":994
+ *         CHKERR( PEPLinearSetCompanionForm(self.pep, cform) )
+ * 
+ *     def getLinearCompanionForm(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Returns the number of the companion form that will be used for the
  */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
-    __pyx_t_4 = PyObject_Length(__pyx_v_f); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    if (unlikely(!((__pyx_v_n == __pyx_t_4) != 0))) {
-      PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[14]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getLinearCompanionForm", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/PEP.pyx":1008
+ *         return cform
+ * 
+ *     def setLinearExplicitMatrix(self, flag not None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Indicate if the matrices A and B for the linearization of the problem
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_105setLinearExplicitMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_104setLinearExplicitMatrix[] = "PEP.setLinearExplicitMatrix(self, flag)\n\n        Indicate if the matrices A and B for the linearization of the problem\n        must be built explicitly.\n\n        Parameters\n        ----------\n        flag: boolean\n            boolean flag indicating if the matrices are built explicitly .\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_105setLinearExplicitMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setLinearExplicitMatrix (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_flag)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLinearExplicitMatrix") < 0)) __PYX_ERR(15, 1008, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
+    __pyx_v_flag = values[0];
   }
-  #endif
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setLinearExplicitMatrix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 1008, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setLinearExplicitMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(((PyObject *)__pyx_v_flag) == Py_None)) {
+    PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "flag"); __PYX_ERR(15, 1008, __pyx_L1_error)
+  }
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_104setLinearExplicitMatrix(((struct PySlepcPEPObject *)__pyx_v_self), __pyx_v_flag);
 
-  /* "SLEPc/NEP.pyx":617
- *         cdef PetscMatStructure mstr = matstructure(structure)
- *         assert n == len(f)
- *         cdef tmp1 = allocate(<size_t>n*sizeof(Mat),<void**>&As)             # <<<<<<<<<<<<<<
- *         cdef tmp2 = allocate(<size_t>n*sizeof(FN),<void**>&Fs)
- *         for i in range(n):
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_104setLinearExplicitMatrix(struct PySlepcPEPObject *__pyx_v_self, PyObject *__pyx_v_flag) {
+  PetscBool __pyx_v_sval;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscBool __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setLinearExplicitMatrix", 0);
+
+  /* "SLEPc/PEP.pyx":1018
+ *             boolean flag indicating if the matrices are built explicitly .
+ *         """
+ *         cdef PetscBool sval = flag             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPLinearSetExplicitMatrix(self.pep, sval) )
+ * 
  */
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_allocate((((size_t)__pyx_v_n) * (sizeof(struct PyPetscMatObject))), ((void **)(&__pyx_v_As))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_v_tmp1 = __pyx_t_3;
-  __pyx_t_3 = 0;
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(15, 1018, __pyx_L1_error)
+  __pyx_v_sval = __pyx_t_1;
 
-  /* "SLEPc/NEP.pyx":618
- *         assert n == len(f)
- *         cdef tmp1 = allocate(<size_t>n*sizeof(Mat),<void**>&As)
- *         cdef tmp2 = allocate(<size_t>n*sizeof(FN),<void**>&Fs)             # <<<<<<<<<<<<<<
- *         for i in range(n):
- *             As[i] = (<Mat?>A[i]).mat
+  /* "SLEPc/PEP.pyx":1019
+ *         """
+ *         cdef PetscBool sval = flag
+ *         CHKERR( PEPLinearSetExplicitMatrix(self.pep, sval) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getLinearExplicitMatrix(self):
  */
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_allocate((((size_t)__pyx_v_n) * (sizeof(struct PySlepcFNObject))), ((void **)(&__pyx_v_Fs))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_v_tmp2 = __pyx_t_3;
-  __pyx_t_3 = 0;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPLinearSetExplicitMatrix(__pyx_v_self->pep, __pyx_v_sval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(15, 1019, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":619
- *         cdef tmp1 = allocate(<size_t>n*sizeof(Mat),<void**>&As)
- *         cdef tmp2 = allocate(<size_t>n*sizeof(FN),<void**>&Fs)
- *         for i in range(n):             # <<<<<<<<<<<<<<
- *             As[i] = (<Mat?>A[i]).mat
- *             Fs[i] = (<FN?>f[i]).fn
+  /* "SLEPc/PEP.pyx":1008
+ *         return cform
+ * 
+ *     def setLinearExplicitMatrix(self, flag not None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Indicate if the matrices A and B for the linearization of the problem
  */
-  __pyx_t_4 = __pyx_v_n;
-  for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_4; __pyx_t_6+=1) {
-    __pyx_v_i = __pyx_t_6;
 
-    /* "SLEPc/NEP.pyx":620
- *         cdef tmp2 = allocate(<size_t>n*sizeof(FN),<void**>&Fs)
- *         for i in range(n):
- *             As[i] = (<Mat?>A[i]).mat             # <<<<<<<<<<<<<<
- *             Fs[i] = (<FN?>f[i]).fn
- *         CHKERR( NEPSetSplitOperator(self.nep, <PetscInt>n, As, Fs, mstr) )
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.setLinearExplicitMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/PEP.pyx":1021
+ *         CHKERR( PEPLinearSetExplicitMatrix(self.pep, sval) )
+ * 
+ *     def getLinearExplicitMatrix(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Returns the flag indicating if the matrices A and B for the linearization
  */
-    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_A, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-    __Pyx_GOTREF(__pyx_t_3);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_Mat)))) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_7 = ((struct PyPetscMatObject *)__pyx_t_3)->mat;
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    (__pyx_v_As[__pyx_v_i]) = __pyx_t_7;
 
-    /* "SLEPc/NEP.pyx":621
- *         for i in range(n):
- *             As[i] = (<Mat?>A[i]).mat
- *             Fs[i] = (<FN?>f[i]).fn             # <<<<<<<<<<<<<<
- *         CHKERR( NEPSetSplitOperator(self.nep, <PetscInt>n, As, Fs, mstr) )
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_107getLinearExplicitMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3PEP_106getLinearExplicitMatrix[] = "PEP.getLinearExplicitMatrix(self)\n\n        Returns the flag indicating if the matrices A and B for the linearization\n        are built explicitly.\n \n        Returns\n        -------\n        flag: boolean\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3PEP_107getLinearExplicitMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getLinearExplicitMatrix (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getLinearExplicitMatrix", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getLinearExplicitMatrix", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3PEP_106getLinearExplicitMatrix(((struct PySlepcPEPObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3PEP_106getLinearExplicitMatrix(struct PySlepcPEPObject *__pyx_v_self) {
+  PetscBool __pyx_v_sval;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getLinearExplicitMatrix", 0);
+
+  /* "SLEPc/PEP.pyx":1030
+ *         flag: boolean
+ *         """
+ *         cdef PetscBool sval = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( PEPLinearGetExplicitMatrix(self.pep, &sval) )
+ *         return sval
+ */
+  __pyx_v_sval = PETSC_FALSE;
+
+  /* "SLEPc/PEP.pyx":1031
+ *         """
+ *         cdef PetscBool sval = PETSC_FALSE
+ *         CHKERR( PEPLinearGetExplicitMatrix(self.pep, &sval) )             # <<<<<<<<<<<<<<
+ *         return sval
  * 
  */
-    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_f, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-    __Pyx_GOTREF(__pyx_t_3);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8slepc4py_5SLEPc_FN)))) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_8 = ((struct PySlepcFNObject *)__pyx_t_3)->fn;
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    (__pyx_v_Fs[__pyx_v_i]) = __pyx_t_8;
-  }
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(PEPLinearGetExplicitMatrix(__pyx_v_self->pep, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(15, 1031, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":622
- *             As[i] = (<Mat?>A[i]).mat
- *             Fs[i] = (<FN?>f[i]).fn
- *         CHKERR( NEPSetSplitOperator(self.nep, <PetscInt>n, As, Fs, mstr) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/PEP.pyx":1032
+ *         cdef PetscBool sval = PETSC_FALSE
+ *         CHKERR( PEPLinearGetExplicitMatrix(self.pep, &sval) )
+ *         return sval             # <<<<<<<<<<<<<<
  * 
  * # -----------------------------------------------------------------------------
  */
-  __pyx_t_9 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetSplitOperator(__pyx_v_self->nep, ((PetscInt)__pyx_v_n), __pyx_v_As, __pyx_v_Fs, __pyx_v_mstr)); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_sval); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 1032, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
 
-  /* "SLEPc/NEP.pyx":596
- *         self.set_attr('__jacobian__', (jacobian, args, kargs))
+  /* "SLEPc/PEP.pyx":1021
+ *         CHKERR( PEPLinearSetExplicitMatrix(self.pep, sval) )
  * 
- *     def setSplitOperator(self, A, f, structure=None):             # <<<<<<<<<<<<<<
+ *     def getLinearExplicitMatrix(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the operator of the nonlinear eigenvalue problem
+ *         Returns the flag indicating if the matrices A and B for the linearization
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setSplitOperator", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PEP.getLinearExplicitMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_tmp1);
-  __Pyx_XDECREF(__pyx_v_tmp2);
-  __Pyx_XDECREF(__pyx_v_A);
-  __Pyx_XDECREF(__pyx_v_f);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":23
- *     ConvergedReason = MFNConvergedReason
+/* "SLEPc/NEP.pyx":96
+ *     RefineScheme    = NEPRefineScheme
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
- *         self.obj = <PetscObject*> &self.mfn
- *         self.mfn = NULL
+ *         self.obj = <PetscObject*> &self.nep
+ *         self.nep = NULL
  */
 
 /* Python wrapper */
-static int __pyx_pw_8slepc4py_5SLEPc_3MFN_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static int __pyx_pw_8slepc4py_5SLEPc_3MFN_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static int __pyx_pw_8slepc4py_5SLEPc_3NEP_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pw_8slepc4py_5SLEPc_3NEP_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN___cinit__(((struct PySlepcMFNObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP___cinit__(((struct PySlepcNEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static int __pyx_pf_8slepc4py_5SLEPc_3MFN___cinit__(struct PySlepcMFNObject *__pyx_v_self) {
+static int __pyx_pf_8slepc4py_5SLEPc_3NEP___cinit__(struct PySlepcNEPObject *__pyx_v_self) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "SLEPc/MFN.pyx":24
+  /* "SLEPc/NEP.pyx":97
  * 
  *     def __cinit__(self):
- *         self.obj = <PetscObject*> &self.mfn             # <<<<<<<<<<<<<<
- *         self.mfn = NULL
+ *         self.obj = <PetscObject*> &self.nep             # <<<<<<<<<<<<<<
+ *         self.nep = NULL
  * 
  */
-  __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->mfn));
+  __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->nep));
 
-  /* "SLEPc/MFN.pyx":25
+  /* "SLEPc/NEP.pyx":98
  *     def __cinit__(self):
- *         self.obj = <PetscObject*> &self.mfn
- *         self.mfn = NULL             # <<<<<<<<<<<<<<
+ *         self.obj = <PetscObject*> &self.nep
+ *         self.nep = NULL             # <<<<<<<<<<<<<<
  * 
  *     def view(self, Viewer viewer=None):
  */
-  __pyx_v_self->mfn = NULL;
+  __pyx_v_self->nep = NULL;
 
-  /* "SLEPc/MFN.pyx":23
- *     ConvergedReason = MFNConvergedReason
+  /* "SLEPc/NEP.pyx":96
+ *     RefineScheme    = NEPRefineScheme
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
- *         self.obj = <PetscObject*> &self.mfn
- *         self.mfn = NULL
+ *         self.obj = <PetscObject*> &self.nep
+ *         self.nep = NULL
  */
 
   /* function exit code */
@@ -44248,22 +44477,19 @@ static int __pyx_pf_8slepc4py_5SLEPc_3MFN___cinit__(struct PySlepcMFNObject *__p
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":27
- *         self.mfn = NULL
+/* "SLEPc/NEP.pyx":100
+ *         self.nep = NULL
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
  *         """
- *         Prints the MFN data structure.
+ *         Prints the NEP data structure.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3MFN_2view[] = "MFN.view(self, Viewer viewer=None)\n\n        Prints the MFN data structure.\n\n        Parameters\n        ----------\n        viewer: Viewer, optional.\n            Visualization context; if not provided, the standard\n            output is used.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_2view[] = "NEP.view(self, Viewer viewer=None)\n\n        Prints the NEP data structure.\n\n        Parameters\n        ----------\n        viewer: Viewer, optional.\n            Visualization context; if not provided, the standard\n            output is used.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscViewerObject *__pyx_v_viewer = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("view (wrapper)", 0);
@@ -44288,7 +44514,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_3view(PyObject *__pyx_v_self, Py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(16, 100, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -44301,14 +44527,14 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_3view(PyObject *__pyx_v_self, Py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[15]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(16, 100, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_2view(((struct PySlepcMFNObject *)__pyx_v_self), __pyx_v_viewer);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) __PYX_ERR(16, 100, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_2view(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
   goto __pyx_L0;
@@ -44319,7 +44545,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_3view(PyObject *__pyx_v_self, Py
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_2view(struct PySlepcMFNObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_2view(struct PySlepcNEPObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
   PetscViewer __pyx_v_vwr;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -44327,25 +44553,22 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_2view(struct PySlepcMFNObject *_
   int __pyx_t_2;
   PetscViewer __pyx_t_3;
   int __pyx_t_4;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("view", 0);
 
-  /* "SLEPc/MFN.pyx":37
+  /* "SLEPc/NEP.pyx":110
  *             output is used.
  *         """
  *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
  *         if viewer is not None: vwr = viewer.vwr
- *         CHKERR( MFNView(self.mfn, vwr) )
+ *         CHKERR( NEPView(self.nep, vwr) )
  */
   __pyx_v_vwr = NULL;
 
-  /* "SLEPc/MFN.pyx":38
+  /* "SLEPc/NEP.pyx":111
  *         """
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
- *         CHKERR( MFNView(self.mfn, vwr) )
+ *         CHKERR( NEPView(self.nep, vwr) )
  * 
  */
   __pyx_t_1 = (((PyObject *)__pyx_v_viewer) != Py_None);
@@ -44353,32 +44576,30 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_2view(struct PySlepcMFNObject *_
   if (__pyx_t_2) {
     __pyx_t_3 = __pyx_v_viewer->vwr;
     __pyx_v_vwr = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "SLEPc/MFN.pyx":39
+  /* "SLEPc/NEP.pyx":112
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr
- *         CHKERR( MFNView(self.mfn, vwr) )             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPView(self.nep, vwr) )             # <<<<<<<<<<<<<<
  * 
  *     def destroy(self):
  */
-  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNView(__pyx_v_self->mfn, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPView(__pyx_v_self->nep, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(16, 112, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":27
- *         self.mfn = NULL
+  /* "SLEPc/NEP.pyx":100
+ *         self.nep = NULL
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
  *         """
- *         Prints the MFN data structure.
+ *         Prints the NEP data structure.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -44386,61 +44607,58 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_2view(struct PySlepcMFNObject *_
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":41
- *         CHKERR( MFNView(self.mfn, vwr) )
+/* "SLEPc/NEP.pyx":114
+ *         CHKERR( NEPView(self.nep, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
  *         """
- *         Destroys the MFN object.
+ *         Destroys the NEP object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3MFN_4destroy[] = "MFN.destroy(self)\n\n        Destroys the MFN object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_4destroy[] = "NEP.destroy(self)\n\n        Destroys the NEP object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("destroy (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("destroy", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "destroy", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_4destroy(((struct PySlepcMFNObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_4destroy(((struct PySlepcNEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_4destroy(struct PySlepcMFNObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_4destroy(struct PySlepcNEPObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("destroy", 0);
 
-  /* "SLEPc/MFN.pyx":45
- *         Destroys the MFN object.
+  /* "SLEPc/NEP.pyx":118
+ *         Destroys the NEP object.
  *         """
- *         CHKERR( MFNDestroy(&self.mfn) )             # <<<<<<<<<<<<<<
- *         self.mfn = NULL
+ *         CHKERR( NEPDestroy(&self.nep) )             # <<<<<<<<<<<<<<
+ *         self.nep = NULL
  *         return self
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNDestroy((&__pyx_v_self->mfn))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPDestroy((&__pyx_v_self->nep))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(16, 118, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":46
+  /* "SLEPc/NEP.pyx":119
  *         """
- *         CHKERR( MFNDestroy(&self.mfn) )
- *         self.mfn = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPDestroy(&self.nep) )
+ *         self.nep = NULL             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __pyx_v_self->mfn = NULL;
+  __pyx_v_self->nep = NULL;
 
-  /* "SLEPc/MFN.pyx":47
- *         CHKERR( MFNDestroy(&self.mfn) )
- *         self.mfn = NULL
+  /* "SLEPc/NEP.pyx":120
+ *         CHKERR( NEPDestroy(&self.nep) )
+ *         self.nep = NULL
  *         return self             # <<<<<<<<<<<<<<
  * 
  *     def reset(self):
@@ -44450,17 +44668,17 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_4destroy(struct PySlepcMFNObject
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "SLEPc/MFN.pyx":41
- *         CHKERR( MFNView(self.mfn, vwr) )
+  /* "SLEPc/NEP.pyx":114
+ *         CHKERR( NEPView(self.nep, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
  *         """
- *         Destroys the MFN object.
+ *         Destroys the NEP object.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.destroy", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.destroy", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -44468,62 +44686,59 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_4destroy(struct PySlepcMFNObject
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":49
+/* "SLEPc/NEP.pyx":122
  *         return self
  * 
  *     def reset(self):             # <<<<<<<<<<<<<<
  *         """
- *         Resets the MFN object.
+ *         Resets the NEP object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_7reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3MFN_6reset[] = "MFN.reset(self)\n\n        Resets the MFN object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_7reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_7reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_6reset[] = "NEP.reset(self)\n\n        Resets the NEP object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_7reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("reset (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("reset", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "reset", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_6reset(((struct PySlepcMFNObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_6reset(((struct PySlepcNEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_6reset(struct PySlepcMFNObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_6reset(struct PySlepcNEPObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("reset", 0);
 
-  /* "SLEPc/MFN.pyx":53
- *         Resets the MFN object.
+  /* "SLEPc/NEP.pyx":126
+ *         Resets the NEP object.
  *         """
- *         CHKERR( MFNReset(self.mfn) )             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPReset(self.nep) )             # <<<<<<<<<<<<<<
  * 
  *     def create(self, comm=None):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNReset(__pyx_v_self->mfn)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPReset(__pyx_v_self->nep)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(16, 126, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":49
+  /* "SLEPc/NEP.pyx":122
  *         return self
  * 
  *     def reset(self):             # <<<<<<<<<<<<<<
  *         """
- *         Resets the MFN object.
+ *         Resets the NEP object.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.reset", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.reset", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -44531,22 +44746,19 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_6reset(struct PySlepcMFNObject *
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":55
- *         CHKERR( MFNReset(self.mfn) )
+/* "SLEPc/NEP.pyx":128
+ *         CHKERR( NEPReset(self.nep) )
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
  *         """
- *         Creates the MFN object.
+ *         Creates the NEP object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3MFN_8create[] = "MFN.create(self, comm=None)\n\n        Creates the MFN object.\n\n        Parameters\n        ----------\n        comm: Comm, optional.\n            MPI communicator. If not provided, it defaults to all\n            processes.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_8create[] = "NEP.create(self, comm=None)\n\n        Creates the NEP object.\n\n        Parameters\n        ----------\n        comm: Comm, optional.\n            MPI communicator. If not provided, it defaults to all\n            processes.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_comm = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("create (wrapper)", 0);
@@ -44571,7 +44783,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_9create(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(16, 128, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -44584,92 +44796,89 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_9create(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[15]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(16, 128, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_8create(((struct PySlepcMFNObject *)__pyx_v_self), __pyx_v_comm);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_8create(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_8create(struct PySlepcMFNObject *__pyx_v_self, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_8create(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_comm) {
   MPI_Comm __pyx_v_ccomm;
-  MFN __pyx_v_newmfn;
+  NEP __pyx_v_newnep;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   MPI_Comm __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("create", 0);
 
-  /* "SLEPc/MFN.pyx":65
+  /* "SLEPc/NEP.pyx":138
  *             processes.
  *         """
  *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())             # <<<<<<<<<<<<<<
- *         cdef SlepcMFN newmfn = NULL
- *         CHKERR( MFNCreate(ccomm, &newmfn) )
+ *         cdef SlepcNEP newnep = NULL
+ *         CHKERR( NEPCreate(ccomm, &newnep) )
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_def_Comm(__pyx_v_comm, __pyx_f_8slepc4py_5SLEPc_SLEPC_COMM_DEFAULT()); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_def_Comm(__pyx_v_comm, __pyx_f_8slepc4py_5SLEPc_SLEPC_COMM_DEFAULT()); if (unlikely(PyErr_Occurred())) __PYX_ERR(16, 138, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "SLEPc/MFN.pyx":66
+  /* "SLEPc/NEP.pyx":139
  *         """
  *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
- *         cdef SlepcMFN newmfn = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( MFNCreate(ccomm, &newmfn) )
- *         SlepcCLEAR(self.obj); self.mfn = newmfn
+ *         cdef SlepcNEP newnep = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPCreate(ccomm, &newnep) )
+ *         SlepcCLEAR(self.obj); self.nep = newnep
  */
-  __pyx_v_newmfn = NULL;
+  __pyx_v_newnep = NULL;
 
-  /* "SLEPc/MFN.pyx":67
+  /* "SLEPc/NEP.pyx":140
  *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
- *         cdef SlepcMFN newmfn = NULL
- *         CHKERR( MFNCreate(ccomm, &newmfn) )             # <<<<<<<<<<<<<<
- *         SlepcCLEAR(self.obj); self.mfn = newmfn
+ *         cdef SlepcNEP newnep = NULL
+ *         CHKERR( NEPCreate(ccomm, &newnep) )             # <<<<<<<<<<<<<<
+ *         SlepcCLEAR(self.obj); self.nep = newnep
  *         return self
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNCreate(__pyx_v_ccomm, (&__pyx_v_newmfn))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPCreate(__pyx_v_ccomm, (&__pyx_v_newnep))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(16, 140, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":68
- *         cdef SlepcMFN newmfn = NULL
- *         CHKERR( MFNCreate(ccomm, &newmfn) )
- *         SlepcCLEAR(self.obj); self.mfn = newmfn             # <<<<<<<<<<<<<<
+  /* "SLEPc/NEP.pyx":141
+ *         cdef SlepcNEP newnep = NULL
+ *         CHKERR( NEPCreate(ccomm, &newnep) )
+ *         SlepcCLEAR(self.obj); self.nep = newnep             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
   __pyx_f_8slepc4py_5SLEPc_SlepcCLEAR(__pyx_v_self->__pyx_base.obj);
-  __pyx_v_self->mfn = __pyx_v_newmfn;
+  __pyx_v_self->nep = __pyx_v_newnep;
 
-  /* "SLEPc/MFN.pyx":69
- *         CHKERR( MFNCreate(ccomm, &newmfn) )
- *         SlepcCLEAR(self.obj); self.mfn = newmfn
+  /* "SLEPc/NEP.pyx":142
+ *         CHKERR( NEPCreate(ccomm, &newnep) )
+ *         SlepcCLEAR(self.obj); self.nep = newnep
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     def setType(self, mfn_type):
+ *     def setType(self, nep_type):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "SLEPc/MFN.pyx":55
- *         CHKERR( MFNReset(self.mfn) )
+  /* "SLEPc/NEP.pyx":128
+ *         CHKERR( NEPReset(self.nep) )
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
  *         """
- *         Creates the MFN object.
+ *         Creates the NEP object.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -44677,27 +44886,24 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_8create(struct PySlepcMFNObject
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":71
+/* "SLEPc/NEP.pyx":144
  *         return self
  * 
- *     def setType(self, mfn_type):             # <<<<<<<<<<<<<<
+ *     def setType(self, nep_type):             # <<<<<<<<<<<<<<
  *         """
- *         Selects the particular solver to be used in the MFN object.
+ *         Selects the particular solver to be used in the NEP object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3MFN_10setType[] = "MFN.setType(self, mfn_type)\n\n        Selects the particular solver to be used in the MFN object.\n\n        Parameters\n        ----------\n        mfn_type: `MFN.Type` enumerate\n            The solver to be used.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_mfn_type = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_10setType[] = "NEP.setType(self, nep_type)\n\n        Selects the particular solver to be used in the NEP object.\n\n        Parameters\n        ----------\n        nep_type: `NEP.Type` enumerate\n            The solver to be used.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_nep_type = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setType (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mfn_type,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nep_type,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -44710,82 +44916,79 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_11setType(PyObject *__pyx_v_self
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mfn_type)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nep_type)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(16, 144, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_mfn_type = values[0];
+    __pyx_v_nep_type = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[15]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(16, 144, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_10setType(((struct PySlepcMFNObject *)__pyx_v_self), __pyx_v_mfn_type);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_10setType(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_nep_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_10setType(struct PySlepcMFNObject *__pyx_v_self, PyObject *__pyx_v_mfn_type) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_10setType(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_nep_type) {
   const char* __pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setType", 0);
-  __Pyx_INCREF(__pyx_v_mfn_type);
+  __Pyx_INCREF(__pyx_v_nep_type);
 
-  /* "SLEPc/MFN.pyx":80
+  /* "SLEPc/NEP.pyx":153
  *             The solver to be used.
  *         """
- *         cdef SlepcMFNType cval = NULL             # <<<<<<<<<<<<<<
- *         mfn_type = str2bytes(mfn_type, &cval)
- *         CHKERR( MFNSetType(self.mfn, cval) )
+ *         cdef SlepcNEPType cval = NULL             # <<<<<<<<<<<<<<
+ *         nep_type = str2bytes(nep_type, &cval)
+ *         CHKERR( NEPSetType(self.nep, cval) )
  */
   __pyx_v_cval = NULL;
 
-  /* "SLEPc/MFN.pyx":81
+  /* "SLEPc/NEP.pyx":154
  *         """
- *         cdef SlepcMFNType cval = NULL
- *         mfn_type = str2bytes(mfn_type, &cval)             # <<<<<<<<<<<<<<
- *         CHKERR( MFNSetType(self.mfn, cval) )
+ *         cdef SlepcNEPType cval = NULL
+ *         nep_type = str2bytes(nep_type, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPSetType(self.nep, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_mfn_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_nep_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(16, 154, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF_SET(__pyx_v_mfn_type, __pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_nep_type, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "SLEPc/MFN.pyx":82
- *         cdef SlepcMFNType cval = NULL
- *         mfn_type = str2bytes(mfn_type, &cval)
- *         CHKERR( MFNSetType(self.mfn, cval) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/NEP.pyx":155
+ *         cdef SlepcNEPType cval = NULL
+ *         nep_type = str2bytes(nep_type, &cval)
+ *         CHKERR( NEPSetType(self.nep, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def getType(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNSetType(__pyx_v_self->mfn, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetType(__pyx_v_self->nep, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(16, 155, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":71
+  /* "SLEPc/NEP.pyx":144
  *         return self
  * 
- *     def setType(self, mfn_type):             # <<<<<<<<<<<<<<
+ *     def setType(self, nep_type):             # <<<<<<<<<<<<<<
  *         """
- *         Selects the particular solver to be used in the MFN object.
+ *         Selects the particular solver to be used in the NEP object.
  */
 
   /* function exit code */
@@ -44793,95 +44996,92 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_10setType(struct PySlepcMFNObjec
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_mfn_type);
+  __Pyx_XDECREF(__pyx_v_nep_type);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":84
- *         CHKERR( MFNSetType(self.mfn, cval) )
+/* "SLEPc/NEP.pyx":157
+ *         CHKERR( NEPSetType(self.nep, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the MFN type of this object.
+ *         Gets the NEP type of this object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3MFN_12getType[] = "MFN.getType(self)\n\n        Gets the MFN type of this object.\n\n        Returns\n        -------\n        type: `MFN.Type` enumerate\n            The solver currently being used.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_12getType[] = "NEP.getType(self)\n\n        Gets the NEP type of this object.\n\n        Returns\n        -------\n        type: `NEP.Type` enumerate\n            The solver currently being used.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getType (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getType", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_12getType(((struct PySlepcMFNObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_12getType(((struct PySlepcNEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_12getType(struct PySlepcMFNObject *__pyx_v_self) {
-  const char* __pyx_v_mfn_type;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_12getType(struct PySlepcNEPObject *__pyx_v_self) {
+  const char* __pyx_v_nep_type;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getType", 0);
 
-  /* "SLEPc/MFN.pyx":93
+  /* "SLEPc/NEP.pyx":166
  *             The solver currently being used.
  *         """
- *         cdef SlepcMFNType mfn_type = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( MFNGetType(self.mfn, &mfn_type) )
- *         return bytes2str(mfn_type)
+ *         cdef SlepcNEPType nep_type = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPGetType(self.nep, &nep_type) )
+ *         return bytes2str(nep_type)
  */
-  __pyx_v_mfn_type = NULL;
+  __pyx_v_nep_type = NULL;
 
-  /* "SLEPc/MFN.pyx":94
+  /* "SLEPc/NEP.pyx":167
  *         """
- *         cdef SlepcMFNType mfn_type = NULL
- *         CHKERR( MFNGetType(self.mfn, &mfn_type) )             # <<<<<<<<<<<<<<
- *         return bytes2str(mfn_type)
+ *         cdef SlepcNEPType nep_type = NULL
+ *         CHKERR( NEPGetType(self.nep, &nep_type) )             # <<<<<<<<<<<<<<
+ *         return bytes2str(nep_type)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNGetType(__pyx_v_self->mfn, (&__pyx_v_mfn_type))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetType(__pyx_v_self->nep, (&__pyx_v_nep_type))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(16, 167, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":95
- *         cdef SlepcMFNType mfn_type = NULL
- *         CHKERR( MFNGetType(self.mfn, &mfn_type) )
- *         return bytes2str(mfn_type)             # <<<<<<<<<<<<<<
+  /* "SLEPc/NEP.pyx":168
+ *         cdef SlepcNEPType nep_type = NULL
+ *         CHKERR( NEPGetType(self.nep, &nep_type) )
+ *         return bytes2str(nep_type)             # <<<<<<<<<<<<<<
  * 
  *     def getOptionsPrefix(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_mfn_type); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_nep_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 168, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/MFN.pyx":84
- *         CHKERR( MFNSetType(self.mfn, cval) )
+  /* "SLEPc/NEP.pyx":157
+ *         CHKERR( NEPSetType(self.nep, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the MFN type of this object.
+ *         Gets the NEP type of this object.
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.getType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -44889,86 +45089,83 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_12getType(struct PySlepcMFNObjec
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":97
- *         return bytes2str(mfn_type)
+/* "SLEPc/NEP.pyx":170
+ *         return bytes2str(nep_type)
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the prefix used for searching for all MFN options in the
+ *         Gets the prefix used for searching for all NEP options in the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3MFN_14getOptionsPrefix[] = "MFN.getOptionsPrefix(self)\n\n        Gets the prefix used for searching for all MFN options in the\n        database.\n\n        Returns\n        -------\n        prefix: string\n            The prefix string set for this MFN object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_14getOptionsPrefix[] = "NEP.getOptionsPrefix(self)\n\n        Gets the prefix used for searching for all NEP options in the\n        database.\n\n        Returns\n        -------\n        prefix: string\n            The prefix string set for this NEP object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getOptionsPrefix (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getOptionsPrefix", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getOptionsPrefix", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_14getOptionsPrefix(((struct PySlepcMFNObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_14getOptionsPrefix(((struct PySlepcNEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_14getOptionsPrefix(struct PySlepcMFNObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_14getOptionsPrefix(struct PySlepcNEPObject *__pyx_v_self) {
   const char *__pyx_v_prefix;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getOptionsPrefix", 0);
 
-  /* "SLEPc/MFN.pyx":107
- *             The prefix string set for this MFN object.
+  /* "SLEPc/NEP.pyx":180
+ *             The prefix string set for this NEP object.
  *         """
  *         cdef const_char *prefix = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( MFNGetOptionsPrefix(self.mfn, &prefix) )
+ *         CHKERR( NEPGetOptionsPrefix(self.nep, &prefix) )
  *         return bytes2str(prefix)
  */
   __pyx_v_prefix = NULL;
 
-  /* "SLEPc/MFN.pyx":108
+  /* "SLEPc/NEP.pyx":181
  *         """
  *         cdef const_char *prefix = NULL
- *         CHKERR( MFNGetOptionsPrefix(self.mfn, &prefix) )             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPGetOptionsPrefix(self.nep, &prefix) )             # <<<<<<<<<<<<<<
  *         return bytes2str(prefix)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNGetOptionsPrefix(__pyx_v_self->mfn, (&__pyx_v_prefix))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetOptionsPrefix(__pyx_v_self->nep, (&__pyx_v_prefix))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(16, 181, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":109
+  /* "SLEPc/NEP.pyx":182
  *         cdef const_char *prefix = NULL
- *         CHKERR( MFNGetOptionsPrefix(self.mfn, &prefix) )
+ *         CHKERR( NEPGetOptionsPrefix(self.nep, &prefix) )
  *         return bytes2str(prefix)             # <<<<<<<<<<<<<<
  * 
  *     def setOptionsPrefix(self, prefix):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_prefix); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_prefix); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 182, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/MFN.pyx":97
- *         return bytes2str(mfn_type)
+  /* "SLEPc/NEP.pyx":170
+ *         return bytes2str(nep_type)
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the prefix used for searching for all MFN options in the
+ *         Gets the prefix used for searching for all NEP options in the
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.getOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -44976,22 +45173,19 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_14getOptionsPrefix(struct PySlep
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":111
+/* "SLEPc/NEP.pyx":184
  *         return bytes2str(prefix)
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the prefix used for searching for all MFN options in the
+ *         Sets the prefix used for searching for all NEP options in the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_17setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3MFN_16setOptionsPrefix[] = "MFN.setOptionsPrefix(self, prefix)\n\n        Sets the prefix used for searching for all MFN options in the\n        database.\n\n        Parameters\n        ----------\n        prefix: string\n            The prefix string to prepend to all MFN option requests.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_17setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_17setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_16setOptionsPrefix[] = "NEP.setOptionsPrefix(self, prefix)\n\n        Sets the prefix used for searching for all NEP options in the\n        database.\n\n        Parameters\n        ----------\n        prefix: string\n            The prefix string to prepend to all NEP option requests.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_17setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_prefix = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setOptionsPrefix (wrapper)", 0);
@@ -45013,7 +45207,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_17setOptionsPrefix(PyObject *__p
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) __PYX_ERR(16, 184, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -45024,67 +45218,64 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_17setOptionsPrefix(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[15]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(16, 184, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_16setOptionsPrefix(((struct PySlepcMFNObject *)__pyx_v_self), __pyx_v_prefix);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_16setOptionsPrefix(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_prefix);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_16setOptionsPrefix(struct PySlepcMFNObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_16setOptionsPrefix(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
   const char *__pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setOptionsPrefix", 0);
   __Pyx_INCREF(__pyx_v_prefix);
 
-  /* "SLEPc/MFN.pyx":121
- *             The prefix string to prepend to all MFN option requests.
+  /* "SLEPc/NEP.pyx":194
+ *             The prefix string to prepend to all NEP option requests.
  *         """
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
  *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( MFNSetOptionsPrefix(self.mfn, cval) )
+ *         CHKERR( NEPSetOptionsPrefix(self.nep, cval) )
  */
   __pyx_v_cval = NULL;
 
-  /* "SLEPc/MFN.pyx":122
+  /* "SLEPc/NEP.pyx":195
  *         """
  *         cdef const_char *cval = NULL
  *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
- *         CHKERR( MFNSetOptionsPrefix(self.mfn, cval) )
+ *         CHKERR( NEPSetOptionsPrefix(self.nep, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(16, 195, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "SLEPc/MFN.pyx":123
+  /* "SLEPc/NEP.pyx":196
  *         cdef const_char *cval = NULL
  *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( MFNSetOptionsPrefix(self.mfn, cval) )             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPSetOptionsPrefix(self.nep, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def appendOptionsPrefix(self, prefix):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNSetOptionsPrefix(__pyx_v_self->mfn, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetOptionsPrefix(__pyx_v_self->nep, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(16, 196, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":111
+  /* "SLEPc/NEP.pyx":184
  *         return bytes2str(prefix)
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the prefix used for searching for all MFN options in the
+ *         Sets the prefix used for searching for all NEP options in the
  */
 
   /* function exit code */
@@ -45092,7 +45283,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_16setOptionsPrefix(struct PySlep
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_prefix);
@@ -45101,22 +45292,19 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_16setOptionsPrefix(struct PySlep
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":125
- *         CHKERR( MFNSetOptionsPrefix(self.mfn, cval) )
+/* "SLEPc/NEP.pyx":198
+ *         CHKERR( NEPSetOptionsPrefix(self.nep, cval) )
  * 
  *     def appendOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
  *         """
- *         Appends to the prefix used for searching for all MFN options
+ *         Appends to the prefix used for searching for all NEP options
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_19appendOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3MFN_18appendOptionsPrefix[] = "MFN.appendOptionsPrefix(self, prefix)\n\n        Appends to the prefix used for searching for all MFN options\n        in the database.\n\n        Parameters\n        ----------\n        prefix: string\n            The prefix string to prepend to all MFN option requests.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_19appendOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_19appendOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_18appendOptionsPrefix[] = "NEP.appendOptionsPrefix(self, prefix)\n\n        Appends to the prefix used for searching for all NEP options\n        in the database.\n\n        Parameters\n        ----------\n        prefix: string\n            The prefix string to prepend to all NEP option requests.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_19appendOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_prefix = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("appendOptionsPrefix (wrapper)", 0);
@@ -45138,7 +45326,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_19appendOptionsPrefix(PyObject *
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "appendOptionsPrefix") < 0)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "appendOptionsPrefix") < 0)) __PYX_ERR(16, 198, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -45149,67 +45337,64 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_19appendOptionsPrefix(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("appendOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[15]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("appendOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(16, 198, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.appendOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.appendOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_18appendOptionsPrefix(((struct PySlepcMFNObject *)__pyx_v_self), __pyx_v_prefix);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_18appendOptionsPrefix(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_prefix);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_18appendOptionsPrefix(struct PySlepcMFNObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_18appendOptionsPrefix(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
   const char *__pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("appendOptionsPrefix", 0);
   __Pyx_INCREF(__pyx_v_prefix);
 
-  /* "SLEPc/MFN.pyx":135
- *             The prefix string to prepend to all MFN option requests.
+  /* "SLEPc/NEP.pyx":208
+ *             The prefix string to prepend to all NEP option requests.
  *         """
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
  *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( MFNAppendOptionsPrefix(self.mfn, cval) )
+ *         CHKERR( NEPAppendOptionsPrefix(self.nep, cval) )
  */
   __pyx_v_cval = NULL;
 
-  /* "SLEPc/MFN.pyx":136
+  /* "SLEPc/NEP.pyx":209
  *         """
  *         cdef const_char *cval = NULL
  *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
- *         CHKERR( MFNAppendOptionsPrefix(self.mfn, cval) )
+ *         CHKERR( NEPAppendOptionsPrefix(self.nep, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(16, 209, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "SLEPc/MFN.pyx":137
+  /* "SLEPc/NEP.pyx":210
  *         cdef const_char *cval = NULL
  *         prefix = str2bytes(prefix, &cval)
- *         CHKERR( MFNAppendOptionsPrefix(self.mfn, cval) )             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPAppendOptionsPrefix(self.nep, cval) )             # <<<<<<<<<<<<<<
  * 
  *     def setFromOptions(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNAppendOptionsPrefix(__pyx_v_self->mfn, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPAppendOptionsPrefix(__pyx_v_self->nep, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(16, 210, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":125
- *         CHKERR( MFNSetOptionsPrefix(self.mfn, cval) )
+  /* "SLEPc/NEP.pyx":198
+ *         CHKERR( NEPSetOptionsPrefix(self.nep, cval) )
  * 
  *     def appendOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
  *         """
- *         Appends to the prefix used for searching for all MFN options
+ *         Appends to the prefix used for searching for all NEP options
  */
 
   /* function exit code */
@@ -45217,7 +45402,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_18appendOptionsPrefix(struct PyS
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.appendOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.appendOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_prefix);
@@ -45226,62 +45411,59 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_18appendOptionsPrefix(struct PyS
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":139
- *         CHKERR( MFNAppendOptionsPrefix(self.mfn, cval) )
+/* "SLEPc/NEP.pyx":212
+ *         CHKERR( NEPAppendOptionsPrefix(self.nep, cval) )
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets MFN options from the options database. This routine must
+ *         Sets NEP options from the options database. This routine must
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_21setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3MFN_20setFromOptions[] = "MFN.setFromOptions(self)\n\n        Sets MFN options from the options database. This routine must\n        be called before `setUp()` if the user is to be allowed to set\n        the solver type.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_21setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_21setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_20setFromOptions[] = "NEP.setFromOptions(self)\n\n        Sets NEP options from the options database. This routine must\n        be called before `setUp()` if the user is to be allowed to set\n        the solver type.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_21setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setFromOptions (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("setFromOptions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setFromOptions", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_20setFromOptions(((struct PySlepcMFNObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_20setFromOptions(((struct PySlepcNEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_20setFromOptions(struct PySlepcMFNObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_20setFromOptions(struct PySlepcNEPObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setFromOptions", 0);
 
-  /* "SLEPc/MFN.pyx":145
+  /* "SLEPc/NEP.pyx":218
  *         the solver type.
  *         """
- *         CHKERR( MFNSetFromOptions(self.mfn) )             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPSetFromOptions(self.nep) )             # <<<<<<<<<<<<<<
  * 
- *     def getTolerances(self):
+ *     def getWhichEigenpairs(self):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNSetFromOptions(__pyx_v_self->mfn)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetFromOptions(__pyx_v_self->nep)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(16, 218, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":139
- *         CHKERR( MFNAppendOptionsPrefix(self.mfn, cval) )
+  /* "SLEPc/NEP.pyx":212
+ *         CHKERR( NEPAppendOptionsPrefix(self.nep, cval) )
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
  *         """
- *         Sets MFN options from the options database. This routine must
+ *         Sets NEP options from the options database. This routine must
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setFromOptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setFromOptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -45289,8 +45471,197 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_20setFromOptions(struct PySlepcM
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":147
- *         CHKERR( MFNSetFromOptions(self.mfn) )
+/* "SLEPc/NEP.pyx":220
+ *         CHKERR( NEPSetFromOptions(self.nep) )
+ * 
+ *     def getWhichEigenpairs(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Returns which portion of the spectrum is to be sought.
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_23getWhichEigenpairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_22getWhichEigenpairs[] = "NEP.getWhichEigenpairs(self)\n\n        Returns which portion of the spectrum is to be sought.\n\n        Returns\n        -------\n        which: `NEP.Which` enumerate\n            The portion of the spectrum to be sought by the solver.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_23getWhichEigenpairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getWhichEigenpairs (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getWhichEigenpairs", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getWhichEigenpairs", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_22getWhichEigenpairs(((struct PySlepcNEPObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_22getWhichEigenpairs(struct PySlepcNEPObject *__pyx_v_self) {
+  NEPWhich __pyx_v_val;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getWhichEigenpairs", 0);
+
+  /* "SLEPc/NEP.pyx":229
+ *             The portion of the spectrum to be sought by the solver.
+ *         """
+ *         cdef SlepcNEPWhich val = NEP_LARGEST_MAGNITUDE             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPGetWhichEigenpairs(self.nep, &val) )
+ *         return val
+ */
+  __pyx_v_val = NEP_LARGEST_MAGNITUDE;
+
+  /* "SLEPc/NEP.pyx":230
+ *         """
+ *         cdef SlepcNEPWhich val = NEP_LARGEST_MAGNITUDE
+ *         CHKERR( NEPGetWhichEigenpairs(self.nep, &val) )             # <<<<<<<<<<<<<<
+ *         return val
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetWhichEigenpairs(__pyx_v_self->nep, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(16, 230, __pyx_L1_error)
+
+  /* "SLEPc/NEP.pyx":231
+ *         cdef SlepcNEPWhich val = NEP_LARGEST_MAGNITUDE
+ *         CHKERR( NEPGetWhichEigenpairs(self.nep, &val) )
+ *         return val             # <<<<<<<<<<<<<<
+ * 
+ *     def setWhichEigenpairs(self, which):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyInt_From_NEPWhich(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 231, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "SLEPc/NEP.pyx":220
+ *         CHKERR( NEPSetFromOptions(self.nep) )
+ * 
+ *     def getWhichEigenpairs(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Returns which portion of the spectrum is to be sought.
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getWhichEigenpairs", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/NEP.pyx":233
+ *         return val
+ * 
+ *     def setWhichEigenpairs(self, which):             # <<<<<<<<<<<<<<
+ *         """
+ *         Specifies which portion of the spectrum is to be sought.
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_25setWhichEigenpairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_24setWhichEigenpairs[] = "NEP.setWhichEigenpairs(self, which)\n\n        Specifies which portion of the spectrum is to be sought.\n\n        Parameters\n        ----------\n        which: `NEP.Which` enumerate\n            The portion of the spectrum to be sought by the solver.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_25setWhichEigenpairs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_which = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setWhichEigenpairs (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_which,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_which)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setWhichEigenpairs") < 0)) __PYX_ERR(16, 233, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_which = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setWhichEigenpairs", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(16, 233, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setWhichEigenpairs", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_24setWhichEigenpairs(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_which);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_24setWhichEigenpairs(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_which) {
+  NEPWhich __pyx_v_val;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  NEPWhich __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setWhichEigenpairs", 0);
+
+  /* "SLEPc/NEP.pyx":242
+ *             The portion of the spectrum to be sought by the solver.
+ *         """
+ *         cdef SlepcNEPWhich val = which             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPSetWhichEigenpairs(self.nep, val) )
+ * 
+ */
+  __pyx_t_1 = ((NEPWhich)__Pyx_PyInt_As_NEPWhich(__pyx_v_which)); if (unlikely(PyErr_Occurred())) __PYX_ERR(16, 242, __pyx_L1_error)
+  __pyx_v_val = __pyx_t_1;
+
+  /* "SLEPc/NEP.pyx":243
+ *         """
+ *         cdef SlepcNEPWhich val = which
+ *         CHKERR( NEPSetWhichEigenpairs(self.nep, val) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getTolerances(self):
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetWhichEigenpairs(__pyx_v_self->nep, __pyx_v_val)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(16, 243, __pyx_L1_error)
+
+  /* "SLEPc/NEP.pyx":233
+ *         return val
+ * 
+ *     def setWhichEigenpairs(self, which):             # <<<<<<<<<<<<<<
+ *         """
+ *         Specifies which portion of the spectrum is to be sought.
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setWhichEigenpairs", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/NEP.pyx":245
+ *         CHKERR( NEPSetWhichEigenpairs(self.nep, val) )
  * 
  *     def getTolerances(self):             # <<<<<<<<<<<<<<
  *         """
@@ -45298,23 +45669,23 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_20setFromOptions(struct PySlepcM
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_23getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3MFN_22getTolerances[] = "MFN.getTolerances(self)\n\n        Gets the tolerance and maximum iteration count used by the\n        default MFN convergence tests.\n\n        Returns\n        -------\n        tol: float\n            The convergence tolerance.\n        max_it: int\n            The maximum number of iterations\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_23getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_27getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_26getTolerances[] = "NEP.getTolerances(self)\n\n        Gets the tolerance and maximum iteration count used by the\n        default NEP convergence tests.\n\n        Returns\n        -------\n        tol: float\n            The convergence tolerance.\n        maxit: int\n            The maximum number of iterations.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_27getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getTolerances (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getTolerances", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTolerances", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_22getTolerances(((struct PySlepcMFNObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_26getTolerances(((struct PySlepcNEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_22getTolerances(struct PySlepcMFNObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_26getTolerances(struct PySlepcNEPObject *__pyx_v_self) {
   PetscReal __pyx_v_rval;
   PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
@@ -45323,51 +45694,48 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_22getTolerances(struct PySlepcMF
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getTolerances", 0);
 
-  /* "SLEPc/MFN.pyx":159
- *             The maximum number of iterations
+  /* "SLEPc/NEP.pyx":257
+ *             The maximum number of iterations.
  *         """
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
  *         cdef PetscInt  ival = 0
- *         CHKERR( MFNGetTolerances(self.mfn, &rval, &ival) )
+ *         CHKERR( NEPGetTolerances(self.nep, &rval, &ival) )
  */
   __pyx_v_rval = 0.0;
 
-  /* "SLEPc/MFN.pyx":160
+  /* "SLEPc/NEP.pyx":258
  *         """
  *         cdef PetscReal rval = 0
  *         cdef PetscInt  ival = 0             # <<<<<<<<<<<<<<
- *         CHKERR( MFNGetTolerances(self.mfn, &rval, &ival) )
+ *         CHKERR( NEPGetTolerances(self.nep, &rval, &ival) )
  *         return (toReal(rval), toInt(ival))
  */
   __pyx_v_ival = 0;
 
-  /* "SLEPc/MFN.pyx":161
+  /* "SLEPc/NEP.pyx":259
  *         cdef PetscReal rval = 0
  *         cdef PetscInt  ival = 0
- *         CHKERR( MFNGetTolerances(self.mfn, &rval, &ival) )             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPGetTolerances(self.nep, &rval, &ival) )             # <<<<<<<<<<<<<<
  *         return (toReal(rval), toInt(ival))
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNGetTolerances(__pyx_v_self->mfn, (&__pyx_v_rval), (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetTolerances(__pyx_v_self->nep, (&__pyx_v_rval), (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(16, 259, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":162
+  /* "SLEPc/NEP.pyx":260
  *         cdef PetscInt  ival = 0
- *         CHKERR( MFNGetTolerances(self.mfn, &rval, &ival) )
+ *         CHKERR( NEPGetTolerances(self.nep, &rval, &ival) )
  *         return (toReal(rval), toInt(ival))             # <<<<<<<<<<<<<<
  * 
- *     def setTolerances(self, tol=None, max_it=None):
+ *     def setTolerances(self, tol=None, maxit=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 260, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 260, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(16, 260, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -45379,8 +45747,8 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_22getTolerances(struct PySlepcMF
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/MFN.pyx":147
- *         CHKERR( MFNSetFromOptions(self.mfn) )
+  /* "SLEPc/NEP.pyx":245
+ *         CHKERR( NEPSetWhichEigenpairs(self.nep, val) )
  * 
  *     def getTolerances(self):             # <<<<<<<<<<<<<<
  *         """
@@ -45392,7 +45760,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_22getTolerances(struct PySlepcMF
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.getTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -45400,28 +45768,25 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_22getTolerances(struct PySlepcMF
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":164
+/* "SLEPc/NEP.pyx":262
  *         return (toReal(rval), toInt(ival))
  * 
- *     def setTolerances(self, tol=None, max_it=None):             # <<<<<<<<<<<<<<
+ *     def setTolerances(self, tol=None, maxit=None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the tolerance and maximum iteration count used by the
+ *         Sets the tolerance and maximum iteration count used in convergence tests.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_25setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3MFN_24setTolerances[] = "MFN.setTolerances(self, tol=None, max_it=None)\n\n        Sets the tolerance and maximum iteration count used by the\n        default MFN convergence tests.\n\n        Parameters\n        ----------\n        tol: float, optional\n            The convergence tolerance.\n        max_it: int, optional\n            The maximum number of iterations\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_25setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_29setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_28setTolerances[] = "NEP.setTolerances(self, tol=None, maxit=None)\n\n        Sets the tolerance and maximum iteration count used in convergence tests.\n\n        Parameters\n        ----------\n        tol: float, optional\n            The convergence tolerance.\n        maxit: int, optional\n            The maximum number of iterations.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_29setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_tol = 0;
-  PyObject *__pyx_v_max_it = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+  PyObject *__pyx_v_maxit = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setTolerances (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_tol,&__pyx_n_s_max_it,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_tol,&__pyx_n_s_maxit,0};
     PyObject* values[2] = {0,0};
     values[0] = ((PyObject *)Py_None);
     values[1] = ((PyObject *)Py_None);
@@ -45443,12 +45808,12 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_25setTolerances(PyObject *__pyx_
         }
         case  1:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_max_it);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_maxit);
           if (value) { values[1] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTolerances") < 0)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTolerances") < 0)) __PYX_ERR(16, 262, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -45459,24 +45824,24 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_25setTolerances(PyObject *__pyx_
       }
     }
     __pyx_v_tol = values[0];
-    __pyx_v_max_it = values[1];
+    __pyx_v_maxit = values[1];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTolerances", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[15]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setTolerances", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(16, 262, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_24setTolerances(((struct PySlepcMFNObject *)__pyx_v_self), __pyx_v_tol, __pyx_v_max_it);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_28setTolerances(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_tol, __pyx_v_maxit);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_24setTolerances(struct PySlepcMFNObject *__pyx_v_self, PyObject *__pyx_v_tol, PyObject *__pyx_v_max_it) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_28setTolerances(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_tol, PyObject *__pyx_v_maxit) {
   PetscReal __pyx_v_rval;
   PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
@@ -45486,83 +45851,76 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_24setTolerances(struct PySlepcMF
   PetscReal __pyx_t_3;
   PetscInt __pyx_t_4;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setTolerances", 0);
 
-  /* "SLEPc/MFN.pyx":176
- *             The maximum number of iterations
+  /* "SLEPc/NEP.pyx":273
+ *             The maximum number of iterations.
  *         """
  *         cdef PetscReal rval = PETSC_DEFAULT             # <<<<<<<<<<<<<<
  *         cdef PetscInt  ival = PETSC_DEFAULT
- *         if tol    is not None: rval = asReal(tol)
+ *         if tol   is not None: rval = asReal(tol)
  */
   __pyx_v_rval = PETSC_DEFAULT;
 
-  /* "SLEPc/MFN.pyx":177
+  /* "SLEPc/NEP.pyx":274
  *         """
  *         cdef PetscReal rval = PETSC_DEFAULT
  *         cdef PetscInt  ival = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- *         if tol    is not None: rval = asReal(tol)
- *         if max_it is not None: ival = asInt(max_it)
+ *         if tol   is not None: rval = asReal(tol)
+ *         if maxit is not None: ival = asInt(maxit)
  */
   __pyx_v_ival = PETSC_DEFAULT;
 
-  /* "SLEPc/MFN.pyx":178
+  /* "SLEPc/NEP.pyx":275
  *         cdef PetscReal rval = PETSC_DEFAULT
  *         cdef PetscInt  ival = PETSC_DEFAULT
- *         if tol    is not None: rval = asReal(tol)             # <<<<<<<<<<<<<<
- *         if max_it is not None: ival = asInt(max_it)
- *         CHKERR( MFNSetTolerances(self.mfn, rval, ival) )
+ *         if tol   is not None: rval = asReal(tol)             # <<<<<<<<<<<<<<
+ *         if maxit is not None: ival = asInt(maxit)
+ *         CHKERR( NEPSetTolerances(self.nep, rval, ival) )
  */
   __pyx_t_1 = (__pyx_v_tol != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) __PYX_ERR(16, 275, __pyx_L1_error)
     __pyx_v_rval = __pyx_t_3;
-    goto __pyx_L3;
   }
-  __pyx_L3:;
 
-  /* "SLEPc/MFN.pyx":179
+  /* "SLEPc/NEP.pyx":276
  *         cdef PetscInt  ival = PETSC_DEFAULT
- *         if tol    is not None: rval = asReal(tol)
- *         if max_it is not None: ival = asInt(max_it)             # <<<<<<<<<<<<<<
- *         CHKERR( MFNSetTolerances(self.mfn, rval, ival) )
+ *         if tol   is not None: rval = asReal(tol)
+ *         if maxit is not None: ival = asInt(maxit)             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPSetTolerances(self.nep, rval, ival) )
  * 
  */
-  __pyx_t_2 = (__pyx_v_max_it != Py_None);
+  __pyx_t_2 = (__pyx_v_maxit != Py_None);
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
-    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_max_it); if (unlikely(__pyx_t_4 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_maxit); if (unlikely(__pyx_t_4 == -1L && PyErr_Occurred())) __PYX_ERR(16, 276, __pyx_L1_error)
     __pyx_v_ival = __pyx_t_4;
-    goto __pyx_L4;
   }
-  __pyx_L4:;
 
-  /* "SLEPc/MFN.pyx":180
- *         if tol    is not None: rval = asReal(tol)
- *         if max_it is not None: ival = asInt(max_it)
- *         CHKERR( MFNSetTolerances(self.mfn, rval, ival) )             # <<<<<<<<<<<<<<
+  /* "SLEPc/NEP.pyx":277
+ *         if tol   is not None: rval = asReal(tol)
+ *         if maxit is not None: ival = asInt(maxit)
+ *         CHKERR( NEPSetTolerances(self.nep, rval, ival) )             # <<<<<<<<<<<<<<
  * 
- *     def getDimensions(self):
+ *     def getRIILagPreconditioner(self):
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNSetTolerances(__pyx_v_self->mfn, __pyx_v_rval, __pyx_v_ival)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetTolerances(__pyx_v_self->nep, __pyx_v_rval, __pyx_v_ival)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(16, 277, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":164
+  /* "SLEPc/NEP.pyx":262
  *         return (toReal(rval), toInt(ival))
  * 
- *     def setTolerances(self, tol=None, max_it=None):             # <<<<<<<<<<<<<<
+ *     def setTolerances(self, tol=None, maxit=None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the tolerance and maximum iteration count used by the
+ *         Sets the tolerance and maximum iteration count used in convergence tests.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -45570,86 +45928,83 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_24setTolerances(struct PySlepcMF
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":182
- *         CHKERR( MFNSetTolerances(self.mfn, rval, ival) )
+/* "SLEPc/NEP.pyx":279
+ *         CHKERR( NEPSetTolerances(self.nep, rval, ival) )
  * 
- *     def getDimensions(self):             # <<<<<<<<<<<<<<
+ *     def getRIILagPreconditioner(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the dimension of the subspace used by the solver.
+ *         Indicates how often the preconditioner is rebuilt.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_27getDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3MFN_26getDimensions[] = "MFN.getDimensions(self)\n\n        Gets the dimension of the subspace used by the solver.\n\n        Returns\n        -------\n        ncv: int\n            Maximum dimension of the subspace to be used by the solver.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_27getDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_31getRIILagPreconditioner(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_30getRIILagPreconditioner[] = "NEP.getRIILagPreconditioner(self)\n\n        Indicates how often the preconditioner is rebuilt.\n\n        Returns\n        -------\n        lag: int\n            The lag parameter.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_31getRIILagPreconditioner(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getDimensions (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getRIILagPreconditioner (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getDimensions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDimensions", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_26getDimensions(((struct PySlepcMFNObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getRIILagPreconditioner", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getRIILagPreconditioner", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_30getRIILagPreconditioner(((struct PySlepcNEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_26getDimensions(struct PySlepcMFNObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_30getRIILagPreconditioner(struct PySlepcNEPObject *__pyx_v_self) {
   PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getDimensions", 0);
+  __Pyx_RefNannySetupContext("getRIILagPreconditioner", 0);
 
-  /* "SLEPc/MFN.pyx":191
- *             Maximum dimension of the subspace to be used by the solver.
+  /* "SLEPc/NEP.pyx":288
+ *             The lag parameter.
  *         """
  *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
- *         CHKERR( MFNGetDimensions(self.mfn, &ival) )
- *         return toInt(ival)
+ *         CHKERR( NEPRIIGetLagPreconditioner(self.nep, &ival) )
+ *         return ival
  */
   __pyx_v_ival = 0;
 
-  /* "SLEPc/MFN.pyx":192
+  /* "SLEPc/NEP.pyx":289
  *         """
  *         cdef PetscInt ival = 0
- *         CHKERR( MFNGetDimensions(self.mfn, &ival) )             # <<<<<<<<<<<<<<
- *         return toInt(ival)
+ *         CHKERR( NEPRIIGetLagPreconditioner(self.nep, &ival) )             # <<<<<<<<<<<<<<
+ *         return ival
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNGetDimensions(__pyx_v_self->mfn, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPRIIGetLagPreconditioner(__pyx_v_self->nep, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(16, 289, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":193
+  /* "SLEPc/NEP.pyx":290
  *         cdef PetscInt ival = 0
- *         CHKERR( MFNGetDimensions(self.mfn, &ival) )
- *         return toInt(ival)             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPRIIGetLagPreconditioner(self.nep, &ival) )
+ *         return ival             # <<<<<<<<<<<<<<
  * 
- *     def setDimensions(self, ncv):
+ *     def setRIILagPreconditioner(self, lag):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_PetscInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 290, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/MFN.pyx":182
- *         CHKERR( MFNSetTolerances(self.mfn, rval, ival) )
+  /* "SLEPc/NEP.pyx":279
+ *         CHKERR( NEPSetTolerances(self.nep, rval, ival) )
  * 
- *     def getDimensions(self):             # <<<<<<<<<<<<<<
+ *     def getRIILagPreconditioner(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the dimension of the subspace used by the solver.
+ *         Indicates how often the preconditioner is rebuilt.
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.getDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getRIILagPreconditioner", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -45657,27 +46012,24 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_26getDimensions(struct PySlepcMF
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":195
- *         return toInt(ival)
+/* "SLEPc/NEP.pyx":292
+ *         return ival
  * 
- *     def setDimensions(self, ncv):             # <<<<<<<<<<<<<<
+ *     def setRIILagPreconditioner(self, lag):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the dimension of the subspace to be used by the solver.
+ *         Determines when the preconditioner is rebuilt in the
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_29setDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3MFN_28setDimensions[] = "MFN.setDimensions(self, ncv)\n\n        Sets the dimension of the subspace to be used by the solver.\n\n        Parameters\n        ----------\n        ncv: int\n            Maximum dimension of the subspace to be used by the\n            solver.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_29setDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_ncv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_33setRIILagPreconditioner(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_32setRIILagPreconditioner[] = "NEP.setRIILagPreconditioner(self, lag)\n\n        Determines when the preconditioner is rebuilt in the\n        nonlinear solve.\n\n        Parameters\n        ----------\n        lag: int\n            0 indicates NEVER rebuild, 1 means rebuild every time the Jacobian is\n            computed within the nonlinear iteration, 2 means every second time\n            the Jacobian is built, etc.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_33setRIILagPreconditioner(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_lag = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setDimensions (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setRIILagPreconditioner (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ncv,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_lag,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -45690,77 +46042,74 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_29setDimensions(PyObject *__pyx_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ncv)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_lag)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDimensions") < 0)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRIILagPreconditioner") < 0)) __PYX_ERR(16, 292, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_ncv = values[0];
+    __pyx_v_lag = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDimensions", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[15]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setRIILagPreconditioner", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(16, 292, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setRIILagPreconditioner", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_28setDimensions(((struct PySlepcMFNObject *)__pyx_v_self), __pyx_v_ncv);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_32setRIILagPreconditioner(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_lag);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_28setDimensions(struct PySlepcMFNObject *__pyx_v_self, PyObject *__pyx_v_ncv) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_32setRIILagPreconditioner(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_lag) {
   PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PetscInt __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setDimensions", 0);
+  __Pyx_RefNannySetupContext("setRIILagPreconditioner", 0);
 
-  /* "SLEPc/MFN.pyx":205
- *             solver.
+  /* "SLEPc/NEP.pyx":304
+ *             the Jacobian is built, etc.
  *         """
- *         cdef PetscInt ival = asInt(ncv)             # <<<<<<<<<<<<<<
- *         CHKERR( MFNSetDimensions(self.mfn, ival) )
+ *         cdef PetscInt ival = lag             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPRIISetLagPreconditioner(self.nep, ival) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_ncv); if (unlikely(__pyx_t_1 == -1 && PyErr_Occurred())) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_PetscInt(__pyx_v_lag); if (unlikely((__pyx_t_1 == (PetscInt)-1) && PyErr_Occurred())) __PYX_ERR(16, 304, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "SLEPc/MFN.pyx":206
+  /* "SLEPc/NEP.pyx":305
  *         """
- *         cdef PetscInt ival = asInt(ncv)
- *         CHKERR( MFNSetDimensions(self.mfn, ival) )             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival = lag
+ *         CHKERR( NEPRIISetLagPreconditioner(self.nep, ival) )             # <<<<<<<<<<<<<<
  * 
- *     def getFN(self):
+ *     def getTrackAll(self):
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNSetDimensions(__pyx_v_self->mfn, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPRIISetLagPreconditioner(__pyx_v_self->nep, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(16, 305, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":195
- *         return toInt(ival)
+  /* "SLEPc/NEP.pyx":292
+ *         return ival
  * 
- *     def setDimensions(self, ncv):             # <<<<<<<<<<<<<<
+ *     def setRIILagPreconditioner(self, lag):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the dimension of the subspace to be used by the solver.
+ *         Determines when the preconditioner is rebuilt in the
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setRIILagPreconditioner", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -45768,125 +46117,108 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_28setDimensions(struct PySlepcMF
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":208
- *         CHKERR( MFNSetDimensions(self.mfn, ival) )
+/* "SLEPc/NEP.pyx":307
+ *         CHKERR( NEPRIISetLagPreconditioner(self.nep, ival) )
  * 
- *     def getFN(self):             # <<<<<<<<<<<<<<
+ *     def getTrackAll(self):             # <<<<<<<<<<<<<<
  *         """
- *         Obtain the math function object associated to the MFN object.
+ *         Returns the flag indicating whether all residual norms must be
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_31getFN(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3MFN_30getFN[] = "MFN.getFN(self)\n\n        Obtain the math function object associated to the MFN object.\n\n        Returns\n        -------\n        fn: FN\n            The math function context.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_31getFN(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_35getTrackAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_34getTrackAll[] = "NEP.getTrackAll(self)\n\n        Returns the flag indicating whether all residual norms must be\n        computed or not.\n\n        Returns\n        -------\n        trackall: bool\n            Whether the solver compute all residuals or not.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_35getTrackAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getFN (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getTrackAll (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getFN", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getFN", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_30getFN(((struct PySlepcMFNObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getTrackAll", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTrackAll", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_34getTrackAll(((struct PySlepcNEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_30getFN(struct PySlepcMFNObject *__pyx_v_self) {
-  struct PySlepcFNObject *__pyx_v_fn = 0;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_34getTrackAll(struct PySlepcNEPObject *__pyx_v_self) {
+  PetscBool __pyx_v_tval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getFN", 0);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getTrackAll", 0);
 
-  /* "SLEPc/MFN.pyx":217
- *             The math function context.
+  /* "SLEPc/NEP.pyx":317
+ *             Whether the solver compute all residuals or not.
  *         """
- *         cdef FN fn = FN()             # <<<<<<<<<<<<<<
- *         CHKERR( MFNGetFN(self.mfn, &fn.fn) )
- *         PetscINCREF(fn.obj)
+ *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPGetTrackAll(self.nep, &tval) )
+ *         return <bint>tval
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_FN)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_fn = ((struct PySlepcFNObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_tval = PETSC_FALSE;
 
-  /* "SLEPc/MFN.pyx":218
+  /* "SLEPc/NEP.pyx":318
  *         """
- *         cdef FN fn = FN()
- *         CHKERR( MFNGetFN(self.mfn, &fn.fn) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(fn.obj)
- *         return fn
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNGetFN(__pyx_v_self->mfn, (&__pyx_v_fn->fn))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/MFN.pyx":219
- *         cdef FN fn = FN()
- *         CHKERR( MFNGetFN(self.mfn, &fn.fn) )
- *         PetscINCREF(fn.obj)             # <<<<<<<<<<<<<<
- *         return fn
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( NEPGetTrackAll(self.nep, &tval) )             # <<<<<<<<<<<<<<
+ *         return <bint>tval
  * 
  */
-  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_fn->__pyx_base.obj);
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetTrackAll(__pyx_v_self->nep, (&__pyx_v_tval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(16, 318, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":220
- *         CHKERR( MFNGetFN(self.mfn, &fn.fn) )
- *         PetscINCREF(fn.obj)
- *         return fn             # <<<<<<<<<<<<<<
+  /* "SLEPc/NEP.pyx":319
+ *         cdef PetscBool tval = PETSC_FALSE
+ *         CHKERR( NEPGetTrackAll(self.nep, &tval) )
+ *         return <bint>tval             # <<<<<<<<<<<<<<
  * 
- *     def setFN(self, FN fn not None):
+ *     def setTrackAll(self, trackall):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_fn));
-  __pyx_r = ((PyObject *)__pyx_v_fn);
+  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_tval); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 319, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/MFN.pyx":208
- *         CHKERR( MFNSetDimensions(self.mfn, ival) )
+  /* "SLEPc/NEP.pyx":307
+ *         CHKERR( NEPRIISetLagPreconditioner(self.nep, ival) )
  * 
- *     def getFN(self):             # <<<<<<<<<<<<<<
+ *     def getTrackAll(self):             # <<<<<<<<<<<<<<
  *         """
- *         Obtain the math function object associated to the MFN object.
+ *         Returns the flag indicating whether all residual norms must be
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.getFN", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getTrackAll", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_fn);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":222
- *         return fn
+/* "SLEPc/NEP.pyx":321
+ *         return <bint>tval
  * 
- *     def setFN(self, FN fn not None):             # <<<<<<<<<<<<<<
+ *     def setTrackAll(self, trackall):             # <<<<<<<<<<<<<<
  *         """
- *         Associates a math function object to the MFN object.
+ *         Specifies if the solver must compute the residual of all
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_33setFN(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3MFN_32setFN[] = "MFN.setFN(self, FN fn)\n\n        Associates a math function object to the MFN object.\n\n        Parameters\n        ----------\n        fn: FN\n            The math function context.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_33setFN(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PySlepcFNObject *__pyx_v_fn = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_37setTrackAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_36setTrackAll[] = "NEP.setTrackAll(self, trackall)\n\n        Specifies if the solver must compute the residual of all\n        approximate eigenpairs or not.\n\n        Parameters\n        ----------\n        trackall: bool\n            Whether compute all residuals or not.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_37setTrackAll(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_trackall = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setFN (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setTrackAll (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fn,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_trackall,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -45899,70 +46231,392 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_33setFN(PyObject *__pyx_v_self,
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fn)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_trackall)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFN") < 0)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTrackAll") < 0)) __PYX_ERR(16, 321, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_fn = ((struct PySlepcFNObject *)values[0]);
+    __pyx_v_trackall = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFN", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[15]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setTrackAll", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(16, 321, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setFN", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setTrackAll", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fn), __pyx_ptype_8slepc4py_5SLEPc_FN, 0, "fn", 0))) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_32setFN(((struct PySlepcMFNObject *)__pyx_v_self), __pyx_v_fn);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_36setTrackAll(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_trackall);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_36setTrackAll(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_trackall) {
+  PetscBool __pyx_v_tval;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscBool __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setTrackAll", 0);
+
+  /* "SLEPc/NEP.pyx":331
+ *             Whether compute all residuals or not.
+ *         """
+ *         cdef PetscBool tval = trackall             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPSetTrackAll(self.nep, tval) )
+ * 
+ */
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_trackall)); if (unlikely(PyErr_Occurred())) __PYX_ERR(16, 331, __pyx_L1_error)
+  __pyx_v_tval = __pyx_t_1;
+
+  /* "SLEPc/NEP.pyx":332
+ *         """
+ *         cdef PetscBool tval = trackall
+ *         CHKERR( NEPSetTrackAll(self.nep, tval) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getDimensions(self):
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetTrackAll(__pyx_v_self->nep, __pyx_v_tval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(16, 332, __pyx_L1_error)
+
+  /* "SLEPc/NEP.pyx":321
+ *         return <bint>tval
+ * 
+ *     def setTrackAll(self, trackall):             # <<<<<<<<<<<<<<
+ *         """
+ *         Specifies if the solver must compute the residual of all
+ */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setTrackAll", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_32setFN(struct PySlepcMFNObject *__pyx_v_self, struct PySlepcFNObject *__pyx_v_fn) {
+/* "SLEPc/NEP.pyx":334
+ *         CHKERR( NEPSetTrackAll(self.nep, tval) )
+ * 
+ *     def getDimensions(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the number of eigenvalues to compute and the dimension of
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_39getDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_38getDimensions[] = "NEP.getDimensions(self)\n\n        Gets the number of eigenvalues to compute and the dimension of\n        the subspace.\n\n        Returns\n        -------\n        nev: int\n            Number of eigenvalues to compute.\n        ncv: int\n            Maximum dimension of the subspace to be used by the solver.\n        mpd: int\n            Maximum dimension allowed for the projected problem.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_39getDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getDimensions (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getDimensions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDimensions", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_38getDimensions(((struct PySlepcNEPObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_38getDimensions(struct PySlepcNEPObject *__pyx_v_self) {
+  PetscInt __pyx_v_ival1;
+  PetscInt __pyx_v_ival2;
+  PetscInt __pyx_v_ival3;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setFN", 0);
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("getDimensions", 0);
 
-  /* "SLEPc/MFN.pyx":231
- *             The math function context.
+  /* "SLEPc/NEP.pyx":348
+ *             Maximum dimension allowed for the projected problem.
  *         """
- *         CHKERR( MFNSetFN(self.mfn, fn.fn) )             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival1 = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival2 = 0
+ *         cdef PetscInt ival3 = 0
+ */
+  __pyx_v_ival1 = 0;
+
+  /* "SLEPc/NEP.pyx":349
+ *         """
+ *         cdef PetscInt ival1 = 0
+ *         cdef PetscInt ival2 = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival3 = 0
+ *         CHKERR( NEPGetDimensions(self.nep, &ival1, &ival2, &ival3) )
+ */
+  __pyx_v_ival2 = 0;
+
+  /* "SLEPc/NEP.pyx":350
+ *         cdef PetscInt ival1 = 0
+ *         cdef PetscInt ival2 = 0
+ *         cdef PetscInt ival3 = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPGetDimensions(self.nep, &ival1, &ival2, &ival3) )
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+ */
+  __pyx_v_ival3 = 0;
+
+  /* "SLEPc/NEP.pyx":351
+ *         cdef PetscInt ival2 = 0
+ *         cdef PetscInt ival3 = 0
+ *         CHKERR( NEPGetDimensions(self.nep, &ival1, &ival2, &ival3) )             # <<<<<<<<<<<<<<
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetDimensions(__pyx_v_self->nep, (&__pyx_v_ival1), (&__pyx_v_ival2), (&__pyx_v_ival3))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(16, 351, __pyx_L1_error)
+
+  /* "SLEPc/NEP.pyx":352
+ *         cdef PetscInt ival3 = 0
+ *         CHKERR( NEPGetDimensions(self.nep, &ival1, &ival2, &ival3) )
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3))             # <<<<<<<<<<<<<<
+ * 
+ *     def setDimensions(self, nev=None, ncv=None, mpd=None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival1); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 352, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 352, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival3); if (unlikely(!__pyx_t_4)) __PYX_ERR(16, 352, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 352, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_4);
+  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
+  __pyx_t_2 = 0;
+  __pyx_t_3 = 0;
+  __pyx_t_4 = 0;
+  __pyx_r = __pyx_t_5;
+  __pyx_t_5 = 0;
+  goto __pyx_L0;
+
+  /* "SLEPc/NEP.pyx":334
+ *         CHKERR( NEPSetTrackAll(self.nep, tval) )
+ * 
+ *     def getDimensions(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the number of eigenvalues to compute and the dimension of
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/NEP.pyx":354
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3))
+ * 
+ *     def setDimensions(self, nev=None, ncv=None, mpd=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the number of eigenvalues to compute and the dimension of
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_41setDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_40setDimensions[] = "NEP.setDimensions(self, nev=None, ncv=None, mpd=None)\n\n        Sets the number of eigenvalues to compute and the dimension of\n        the subspace.\n\n        Parameters\n        ----------\n        nev: int, optional\n            Number of eigenvalues to compute.\n        ncv: int, optional\n            Maximum dimension of the subspace to be used by the\n            solver.\n        mpd: int, optional\n            Maxi [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_41setDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_nev = 0;
+  PyObject *__pyx_v_ncv = 0;
+  PyObject *__pyx_v_mpd = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setDimensions (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nev,&__pyx_n_s_ncv,&__pyx_n_s_mpd,0};
+    PyObject* values[3] = {0,0,0};
+    values[0] = ((PyObject *)Py_None);
+    values[1] = ((PyObject *)Py_None);
+    values[2] = ((PyObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nev);
+          if (value) { values[0] = value; kw_args--; }
+        }
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ncv);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mpd);
+          if (value) { values[2] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDimensions") < 0)) __PYX_ERR(16, 354, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_nev = values[0];
+    __pyx_v_ncv = values[1];
+    __pyx_v_mpd = values[2];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setDimensions", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(16, 354, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_40setDimensions(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_nev, __pyx_v_ncv, __pyx_v_mpd);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_40setDimensions(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_nev, PyObject *__pyx_v_ncv, PyObject *__pyx_v_mpd) {
+  PetscInt __pyx_v_ival1;
+  PetscInt __pyx_v_ival2;
+  PetscInt __pyx_v_ival3;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PetscInt __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("setDimensions", 0);
+
+  /* "SLEPc/NEP.pyx":369
+ *             Maximum dimension allowed for the projected problem.
+ *         """
+ *         cdef PetscInt ival1 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival2 = PETSC_DEFAULT
+ *         cdef PetscInt ival3 = PETSC_DEFAULT
+ */
+  __pyx_v_ival1 = PETSC_DEFAULT;
+
+  /* "SLEPc/NEP.pyx":370
+ *         """
+ *         cdef PetscInt ival1 = PETSC_DEFAULT
+ *         cdef PetscInt ival2 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival3 = PETSC_DEFAULT
+ *         if nev is not None: ival1 = asInt(nev)
+ */
+  __pyx_v_ival2 = PETSC_DEFAULT;
+
+  /* "SLEPc/NEP.pyx":371
+ *         cdef PetscInt ival1 = PETSC_DEFAULT
+ *         cdef PetscInt ival2 = PETSC_DEFAULT
+ *         cdef PetscInt ival3 = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         if nev is not None: ival1 = asInt(nev)
+ *         if ncv is not None: ival2 = asInt(ncv)
+ */
+  __pyx_v_ival3 = PETSC_DEFAULT;
+
+  /* "SLEPc/NEP.pyx":372
+ *         cdef PetscInt ival2 = PETSC_DEFAULT
+ *         cdef PetscInt ival3 = PETSC_DEFAULT
+ *         if nev is not None: ival1 = asInt(nev)             # <<<<<<<<<<<<<<
+ *         if ncv is not None: ival2 = asInt(ncv)
+ *         if mpd is not None: ival3 = asInt(mpd)
+ */
+  __pyx_t_1 = (__pyx_v_nev != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_nev); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(16, 372, __pyx_L1_error)
+    __pyx_v_ival1 = __pyx_t_3;
+  }
+
+  /* "SLEPc/NEP.pyx":373
+ *         cdef PetscInt ival3 = PETSC_DEFAULT
+ *         if nev is not None: ival1 = asInt(nev)
+ *         if ncv is not None: ival2 = asInt(ncv)             # <<<<<<<<<<<<<<
+ *         if mpd is not None: ival3 = asInt(mpd)
+ *         CHKERR( NEPSetDimensions(self.nep, ival1, ival2, ival3) )
+ */
+  __pyx_t_2 = (__pyx_v_ncv != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_ncv); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(16, 373, __pyx_L1_error)
+    __pyx_v_ival2 = __pyx_t_3;
+  }
+
+  /* "SLEPc/NEP.pyx":374
+ *         if nev is not None: ival1 = asInt(nev)
+ *         if ncv is not None: ival2 = asInt(ncv)
+ *         if mpd is not None: ival3 = asInt(mpd)             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPSetDimensions(self.nep, ival1, ival2, ival3) )
+ * 
+ */
+  __pyx_t_1 = (__pyx_v_mpd != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_mpd); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(16, 374, __pyx_L1_error)
+    __pyx_v_ival3 = __pyx_t_3;
+  }
+
+  /* "SLEPc/NEP.pyx":375
+ *         if ncv is not None: ival2 = asInt(ncv)
+ *         if mpd is not None: ival3 = asInt(mpd)
+ *         CHKERR( NEPSetDimensions(self.nep, ival1, ival2, ival3) )             # <<<<<<<<<<<<<<
  * 
  *     def getBV(self):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNSetFN(__pyx_v_self->mfn, __pyx_v_fn->fn)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetDimensions(__pyx_v_self->nep, __pyx_v_ival1, __pyx_v_ival2, __pyx_v_ival3)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(16, 375, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":222
- *         return fn
+  /* "SLEPc/NEP.pyx":354
+ *         return (toInt(ival1), toInt(ival2), toInt(ival3))
  * 
- *     def setFN(self, FN fn not None):             # <<<<<<<<<<<<<<
+ *     def setDimensions(self, nev=None, ncv=None, mpd=None):             # <<<<<<<<<<<<<<
  *         """
- *         Associates a math function object to the MFN object.
+ *         Sets the number of eigenvalues to compute and the dimension of
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setFN", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -45970,74 +46624,71 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_32setFN(struct PySlepcMFNObject
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":233
- *         CHKERR( MFNSetFN(self.mfn, fn.fn) )
+/* "SLEPc/NEP.pyx":377
+ *         CHKERR( NEPSetDimensions(self.nep, ival1, ival2, ival3) )
  * 
  *     def getBV(self):             # <<<<<<<<<<<<<<
  *         """
- *         Obtain the basis vector object associated to the MFN object.
+ *         Obtain the basis vectors object associated to the eigensolver.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_35getBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3MFN_34getBV[] = "MFN.getBV(self)\n\n        Obtain the basis vector object associated to the MFN object.\n\n        Returns\n        -------\n        bv: BV\n            The basis vectors context.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_35getBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_43getBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_42getBV[] = "NEP.getBV(self)\n\n        Obtain the basis vectors object associated to the eigensolver.\n\n        Returns\n        -------\n        bv: BV\n            The basis vectors context.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_43getBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getBV (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getBV", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getBV", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_34getBV(((struct PySlepcMFNObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_42getBV(((struct PySlepcNEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_34getBV(struct PySlepcMFNObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_42getBV(struct PySlepcNEPObject *__pyx_v_self) {
   struct PySlepcBVObject *__pyx_v_bv = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getBV", 0);
 
-  /* "SLEPc/MFN.pyx":242
+  /* "SLEPc/NEP.pyx":386
  *             The basis vectors context.
  *         """
  *         cdef BV bv = BV()             # <<<<<<<<<<<<<<
- *         CHKERR( MFNGetBV(self.mfn, &bv.bv) )
+ *         CHKERR( NEPGetBV(self.nep, &bv.bv) )
  *         PetscINCREF(bv.obj)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_BV)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_BV), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(16, 386, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_bv = ((struct PySlepcBVObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "SLEPc/MFN.pyx":243
+  /* "SLEPc/NEP.pyx":387
  *         """
  *         cdef BV bv = BV()
- *         CHKERR( MFNGetBV(self.mfn, &bv.bv) )             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPGetBV(self.nep, &bv.bv) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(bv.obj)
  *         return bv
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNGetBV(__pyx_v_self->mfn, (&__pyx_v_bv->bv))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetBV(__pyx_v_self->nep, (&__pyx_v_bv->bv))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(16, 387, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":244
+  /* "SLEPc/NEP.pyx":388
  *         cdef BV bv = BV()
- *         CHKERR( MFNGetBV(self.mfn, &bv.bv) )
+ *         CHKERR( NEPGetBV(self.nep, &bv.bv) )
  *         PetscINCREF(bv.obj)             # <<<<<<<<<<<<<<
  *         return bv
  * 
  */
   __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_bv->__pyx_base.obj);
 
-  /* "SLEPc/MFN.pyx":245
- *         CHKERR( MFNGetBV(self.mfn, &bv.bv) )
+  /* "SLEPc/NEP.pyx":389
+ *         CHKERR( NEPGetBV(self.nep, &bv.bv) )
  *         PetscINCREF(bv.obj)
  *         return bv             # <<<<<<<<<<<<<<
  * 
@@ -46048,18 +46699,18 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_34getBV(struct PySlepcMFNObject
   __pyx_r = ((PyObject *)__pyx_v_bv);
   goto __pyx_L0;
 
-  /* "SLEPc/MFN.pyx":233
- *         CHKERR( MFNSetFN(self.mfn, fn.fn) )
+  /* "SLEPc/NEP.pyx":377
+ *         CHKERR( NEPSetDimensions(self.nep, ival1, ival2, ival3) )
  * 
  *     def getBV(self):             # <<<<<<<<<<<<<<
  *         """
- *         Obtain the basis vector object associated to the MFN object.
+ *         Obtain the basis vectors object associated to the eigensolver.
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.getBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XDECREF((PyObject *)__pyx_v_bv);
@@ -46068,22 +46719,19 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_34getBV(struct PySlepcMFNObject
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":247
+/* "SLEPc/NEP.pyx":391
  *         return bv
  * 
  *     def setBV(self, BV bv not None):             # <<<<<<<<<<<<<<
  *         """
- *         Associates a basis vector object to the MFN object.
+ *         Associates a basis vectors object to the eigensolver.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_37setBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3MFN_36setBV[] = "MFN.setBV(self, BV bv)\n\n        Associates a basis vector object to the MFN object.\n\n        Parameters\n        ----------\n        bv: BV\n            The basis vectors context.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_37setBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_45setBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_44setBV[] = "NEP.setBV(self, BV bv)\n\n        Associates a basis vectors object to the eigensolver.\n\n        Parameters\n        ----------\n        bv: BV\n            The basis vectors context.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_45setBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PySlepcBVObject *__pyx_v_bv = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setBV (wrapper)", 0);
@@ -46105,7 +46753,7 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_37setBV(PyObject *__pyx_v_self,
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setBV") < 0)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setBV") < 0)) __PYX_ERR(16, 391, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -46116,14 +46764,14 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_37setBV(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setBV", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[15]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setBV", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(16, 391, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_bv), __pyx_ptype_8slepc4py_5SLEPc_BV, 0, "bv", 0))) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_36setBV(((struct PySlepcMFNObject *)__pyx_v_self), __pyx_v_bv);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_bv), __pyx_ptype_8slepc4py_5SLEPc_BV, 0, "bv", 0))) __PYX_ERR(16, 391, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_44setBV(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_bv);
 
   /* function exit code */
   goto __pyx_L0;
@@ -46134,37 +46782,34 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_37setBV(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_36setBV(struct PySlepcMFNObject *__pyx_v_self, struct PySlepcBVObject *__pyx_v_bv) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_44setBV(struct PySlepcNEPObject *__pyx_v_self, struct PySlepcBVObject *__pyx_v_bv) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setBV", 0);
 
-  /* "SLEPc/MFN.pyx":256
+  /* "SLEPc/NEP.pyx":400
  *             The basis vectors context.
  *         """
- *         CHKERR( MFNSetBV(self.mfn, bv.bv) )             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPSetBV(self.nep, bv.bv) )             # <<<<<<<<<<<<<<
  * 
- *     def getOperator(self):
+ *     def getRG(self):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNSetBV(__pyx_v_self->mfn, __pyx_v_bv->bv)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetBV(__pyx_v_self->nep, __pyx_v_bv->bv)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(16, 400, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":247
+  /* "SLEPc/NEP.pyx":391
  *         return bv
  * 
  *     def setBV(self, BV bv not None):             # <<<<<<<<<<<<<<
  *         """
- *         Associates a basis vector object to the MFN object.
+ *         Associates a basis vectors object to the eigensolver.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -46172,125 +46817,119 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_36setBV(struct PySlepcMFNObject
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":258
- *         CHKERR( MFNSetBV(self.mfn, bv.bv) )
+/* "SLEPc/NEP.pyx":402
+ *         CHKERR( NEPSetBV(self.nep, bv.bv) )
  * 
- *     def getOperator(self):             # <<<<<<<<<<<<<<
+ *     def getRG(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the matrix associated with the MFN object.
+ *         Obtain the region object associated to the eigensolver.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_39getOperator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3MFN_38getOperator[] = "MFN.getOperator(self)\n\n        Gets the matrix associated with the MFN object.\n\n        Returns\n        -------\n        A: Mat\n            The matrix for which the matrix function is to be computed.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_39getOperator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_47getRG(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_46getRG[] = "NEP.getRG(self)\n\n        Obtain the region object associated to the eigensolver.\n\n        Returns\n        -------\n        rg: RG\n            The region context.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_47getRG(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getOperator (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getRG (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("getOperator", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getOperator", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_38getOperator(((struct PySlepcMFNObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getRG", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getRG", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_46getRG(((struct PySlepcNEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_38getOperator(struct PySlepcMFNObject *__pyx_v_self) {
-  struct PyPetscMatObject *__pyx_v_A = 0;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_46getRG(struct PySlepcNEPObject *__pyx_v_self) {
+  struct PySlepcRGObject *__pyx_v_rg = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("getOperator", 0);
+  __Pyx_RefNannySetupContext("getRG", 0);
 
-  /* "SLEPc/MFN.pyx":267
- *             The matrix for which the matrix function is to be computed.
+  /* "SLEPc/NEP.pyx":411
+ *             The region context.
  *         """
- *         cdef Mat A = Mat()             # <<<<<<<<<<<<<<
- *         CHKERR( MFNGetOperator(self.mfn, &A.mat) )
- *         PetscINCREF(A.obj)
+ *         cdef RG rg = RG()             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPGetRG(self.nep, &rg.rg) )
+ *         PetscINCREF(rg.obj)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8petsc4py_5PETSc_Mat)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_RG), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(16, 411, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_A = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_v_rg = ((struct PySlepcRGObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "SLEPc/MFN.pyx":268
+  /* "SLEPc/NEP.pyx":412
  *         """
- *         cdef Mat A = Mat()
- *         CHKERR( MFNGetOperator(self.mfn, &A.mat) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(A.obj)
- *         return A
+ *         cdef RG rg = RG()
+ *         CHKERR( NEPGetRG(self.nep, &rg.rg) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(rg.obj)
+ *         return rg
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNGetOperator(__pyx_v_self->mfn, (&__pyx_v_A->mat))); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetRG(__pyx_v_self->nep, (&__pyx_v_rg->rg))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(16, 412, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":269
- *         cdef Mat A = Mat()
- *         CHKERR( MFNGetOperator(self.mfn, &A.mat) )
- *         PetscINCREF(A.obj)             # <<<<<<<<<<<<<<
- *         return A
+  /* "SLEPc/NEP.pyx":413
+ *         cdef RG rg = RG()
+ *         CHKERR( NEPGetRG(self.nep, &rg.rg) )
+ *         PetscINCREF(rg.obj)             # <<<<<<<<<<<<<<
+ *         return rg
  * 
  */
-  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_A->__pyx_base.obj);
+  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_rg->__pyx_base.obj);
 
-  /* "SLEPc/MFN.pyx":270
- *         CHKERR( MFNGetOperator(self.mfn, &A.mat) )
- *         PetscINCREF(A.obj)
- *         return A             # <<<<<<<<<<<<<<
+  /* "SLEPc/NEP.pyx":414
+ *         CHKERR( NEPGetRG(self.nep, &rg.rg) )
+ *         PetscINCREF(rg.obj)
+ *         return rg             # <<<<<<<<<<<<<<
  * 
- *     def setOperator(self, Mat A not None):
+ *     def setRG(self, RG rg not None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_A));
-  __pyx_r = ((PyObject *)__pyx_v_A);
+  __Pyx_INCREF(((PyObject *)__pyx_v_rg));
+  __pyx_r = ((PyObject *)__pyx_v_rg);
   goto __pyx_L0;
 
-  /* "SLEPc/MFN.pyx":258
- *         CHKERR( MFNSetBV(self.mfn, bv.bv) )
+  /* "SLEPc/NEP.pyx":402
+ *         CHKERR( NEPSetBV(self.nep, bv.bv) )
  * 
- *     def getOperator(self):             # <<<<<<<<<<<<<<
+ *     def getRG(self):             # <<<<<<<<<<<<<<
  *         """
- *         Gets the matrix associated with the MFN object.
+ *         Obtain the region object associated to the eigensolver.
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.getOperator", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getRG", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_A);
+  __Pyx_XDECREF((PyObject *)__pyx_v_rg);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":272
- *         return A
+/* "SLEPc/NEP.pyx":416
+ *         return rg
  * 
- *     def setOperator(self, Mat A not None):             # <<<<<<<<<<<<<<
+ *     def setRG(self, RG rg not None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the matrix associated with the MFN object.
+ *         Associates a region object to the eigensolver.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_41setOperator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3MFN_40setOperator[] = "MFN.setOperator(self, Mat A)\n\n        Sets the matrix associated with the MFN object.\n\n        Parameters\n        ----------\n        A: Mat\n            The problem matrix.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_41setOperator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscMatObject *__pyx_v_A = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_49setRG(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_48setRG[] = "NEP.setRG(self, RG rg)\n\n        Associates a region object to the eigensolver.\n\n        Parameters\n        ----------\n        rg: RG\n            The region context.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_49setRG(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PySlepcRGObject *__pyx_v_rg = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setOperator (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setRG (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_A,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rg,0};
     PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
@@ -46303,29 +46942,29 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_41setOperator(PyObject *__pyx_v_
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rg)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOperator") < 0)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRG") < 0)) __PYX_ERR(16, 416, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_A = ((struct PyPetscMatObject *)values[0]);
+    __pyx_v_rg = ((struct PySlepcRGObject *)values[0]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setOperator", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[15]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setRG", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(16, 416, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setOperator", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setRG", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_A), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "A", 0))) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_40setOperator(((struct PySlepcMFNObject *)__pyx_v_self), __pyx_v_A);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rg), __pyx_ptype_8slepc4py_5SLEPc_RG, 0, "rg", 0))) __PYX_ERR(16, 416, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_48setRG(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_rg);
 
   /* function exit code */
   goto __pyx_L0;
@@ -46336,100 +46975,270 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_41setOperator(PyObject *__pyx_v_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_40setOperator(struct PySlepcMFNObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_48setRG(struct PySlepcNEPObject *__pyx_v_self, struct PySlepcRGObject *__pyx_v_rg) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setOperator", 0);
+  __Pyx_RefNannySetupContext("setRG", 0);
 
-  /* "SLEPc/MFN.pyx":281
- *             The problem matrix.
+  /* "SLEPc/NEP.pyx":425
+ *             The region context.
  *         """
- *         CHKERR( MFNSetOperator(self.mfn, A.mat) )             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPSetRG(self.nep, rg.rg) )             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNSetOperator(__pyx_v_self->mfn, __pyx_v_A->mat)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetRG(__pyx_v_self->nep, __pyx_v_rg->rg)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(16, 425, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":272
- *         return A
+  /* "SLEPc/NEP.pyx":416
+ *         return rg
  * 
- *     def setOperator(self, Mat A not None):             # <<<<<<<<<<<<<<
+ *     def setRG(self, RG rg not None):             # <<<<<<<<<<<<<<
  *         """
- *         Sets the matrix associated with the MFN object.
+ *         Associates a region object to the eigensolver.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setOperator", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setRG", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/NEP.pyx":429
+ *     #
+ * 
+ *     def setInitialSpace(self, space):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the initial space from which the eigensolver starts to
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_51setInitialSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_50setInitialSpace[] = "NEP.setInitialSpace(self, space)\n\n        Sets the initial space from which the eigensolver starts to\n        iterate.\n\n        Parameters\n        ----------\n        space: Vec or sequence of Vec\n           The initial space\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_51setInitialSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_space = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setInitialSpace (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_space,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_space)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInitialSpace") < 0)) __PYX_ERR(16, 429, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_space = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setInitialSpace", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(16, 429, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setInitialSpace", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_50setInitialSpace(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_space);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_50setInitialSpace(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_space) {
+  Vec *__pyx_v_vs;
+  Py_ssize_t __pyx_v_i;
+  Py_ssize_t __pyx_v_ns;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  Py_ssize_t __pyx_t_4;
+  Py_ssize_t __pyx_t_5;
+  Vec __pyx_t_6;
+  int __pyx_t_7;
+  __Pyx_RefNannySetupContext("setInitialSpace", 0);
+  __Pyx_INCREF(__pyx_v_space);
+
+  /* "SLEPc/NEP.pyx":439
+ *            The initial space
+ *         """
+ *         if isinstance(space, Vec): space = [space]             # <<<<<<<<<<<<<<
+ *         cdef PetscVec *vs = NULL
+ *         cdef Py_ssize_t i = 0, ns = len(space)
+ */
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_space, __pyx_ptype_8petsc4py_5PETSc_Vec); 
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 439, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_v_space);
+    __Pyx_GIVEREF(__pyx_v_space);
+    PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_space);
+    __Pyx_DECREF_SET(__pyx_v_space, __pyx_t_3);
+    __pyx_t_3 = 0;
+  }
+
+  /* "SLEPc/NEP.pyx":440
+ *         """
+ *         if isinstance(space, Vec): space = [space]
+ *         cdef PetscVec *vs = NULL             # <<<<<<<<<<<<<<
+ *         cdef Py_ssize_t i = 0, ns = len(space)
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
+ */
+  __pyx_v_vs = NULL;
+
+  /* "SLEPc/NEP.pyx":441
+ *         if isinstance(space, Vec): space = [space]
+ *         cdef PetscVec *vs = NULL
+ *         cdef Py_ssize_t i = 0, ns = len(space)             # <<<<<<<<<<<<<<
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
+ *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
+ */
+  __pyx_v_i = 0;
+  __pyx_t_4 = PyObject_Length(__pyx_v_space); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(16, 441, __pyx_L1_error)
+  __pyx_v_ns = __pyx_t_4;
+
+  /* "SLEPc/NEP.pyx":442
+ *         cdef PetscVec *vs = NULL
+ *         cdef Py_ssize_t i = 0, ns = len(space)
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)             # <<<<<<<<<<<<<<
+ *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
+ *         CHKERR( NEPSetInitialSpace(self.nep, <PetscInt>ns, vs) )
+ */
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_allocate((((size_t)__pyx_v_ns) * (sizeof(struct PyPetscVecObject))), ((void **)(&__pyx_v_vs))); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 442, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_v_tmp = __pyx_t_3;
+  __pyx_t_3 = 0;
+
+  /* "SLEPc/NEP.pyx":443
+ *         cdef Py_ssize_t i = 0, ns = len(space)
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
+ *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPSetInitialSpace(self.nep, <PetscInt>ns, vs) )
+ * 
+ */
+  __pyx_t_4 = __pyx_v_ns;
+  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
+    __pyx_v_i = __pyx_t_5;
+    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_space, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 443, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(16, 443, __pyx_L1_error)
+    __pyx_t_6 = ((struct PyPetscVecObject *)__pyx_t_3)->vec;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    (__pyx_v_vs[__pyx_v_i]) = __pyx_t_6;
+  }
+
+  /* "SLEPc/NEP.pyx":444
+ *         cdef tmp = allocate(<size_t>ns*sizeof(Vec),<void**>&vs)
+ *         for i in range(ns): vs[i] = (<Vec?>space[i]).vec
+ *         CHKERR( NEPSetInitialSpace(self.nep, <PetscInt>ns, vs) )             # <<<<<<<<<<<<<<
+ * 
+ *     #
+ */
+  __pyx_t_7 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetInitialSpace(__pyx_v_self->nep, ((PetscInt)__pyx_v_ns), __pyx_v_vs)); if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(16, 444, __pyx_L1_error)
+
+  /* "SLEPc/NEP.pyx":429
+ *     #
+ * 
+ *     def setInitialSpace(self, space):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the initial space from which the eigensolver starts to
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setInitialSpace", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_tmp);
+  __Pyx_XDECREF(__pyx_v_space);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":285
+/* "SLEPc/NEP.pyx":448
  *     #
  * 
  *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
  *         """
- *         Clears all monitors for a MFN object.
+ *         Clears all monitors for a NEP object.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_43cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3MFN_42cancelMonitor[] = "MFN.cancelMonitor(self)\n\n        Clears all monitors for a MFN object.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_43cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_53cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_52cancelMonitor[] = "NEP.cancelMonitor(self)\n\n        Clears all monitors for a NEP object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_53cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("cancelMonitor (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("cancelMonitor", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "cancelMonitor", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_42cancelMonitor(((struct PySlepcMFNObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_52cancelMonitor(((struct PySlepcNEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_42cancelMonitor(struct PySlepcMFNObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_52cancelMonitor(struct PySlepcNEPObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("cancelMonitor", 0);
 
-  /* "SLEPc/MFN.pyx":289
- *         Clears all monitors for a MFN object.
+  /* "SLEPc/NEP.pyx":452
+ *         Clears all monitors for a NEP object.
  *         """
- *         CHKERR( MFNMonitorCancel(self.mfn) )             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPMonitorCancel(self.nep) )             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNMonitorCancel(__pyx_v_self->mfn)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPMonitorCancel(__pyx_v_self->nep)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(16, 452, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":285
+  /* "SLEPc/NEP.pyx":448
  *     #
  * 
  *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
  *         """
- *         Clears all monitors for a MFN object.
+ *         Clears all monitors for a NEP object.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.cancelMonitor", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.cancelMonitor", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -46437,7 +47246,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_42cancelMonitor(struct PySlepcMF
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":293
+/* "SLEPc/NEP.pyx":456
  *     #
  * 
  *     def setUp(self):             # <<<<<<<<<<<<<<
@@ -46446,41 +47255,38 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_42cancelMonitor(struct PySlepcMF
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_45setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3MFN_44setUp[] = "MFN.setUp(self)\n\n        Sets up all the internal data structures necessary for the\n        execution of the eigensolver.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_45setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_55setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_54setUp[] = "NEP.setUp(self)\n\n        Sets up all the internal data structures necessary for the\n        execution of the eigensolver.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_55setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("setUp (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("setUp", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setUp", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_44setUp(((struct PySlepcMFNObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_54setUp(((struct PySlepcNEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_44setUp(struct PySlepcMFNObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_54setUp(struct PySlepcNEPObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setUp", 0);
 
-  /* "SLEPc/MFN.pyx":298
+  /* "SLEPc/NEP.pyx":461
  *         execution of the eigensolver.
  *         """
- *         CHKERR( MFNSetUp(self.mfn) )             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPSetUp(self.nep) )             # <<<<<<<<<<<<<<
  * 
- *     def solve(self, Vec b not None, Vec x not None):
+ *     def solve(self):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNSetUp(__pyx_v_self->mfn)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetUp(__pyx_v_self->nep)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(16, 461, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":293
+  /* "SLEPc/NEP.pyx":456
  *     #
  * 
  *     def setUp(self):             # <<<<<<<<<<<<<<
@@ -46492,7 +47298,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_44setUp(struct PySlepcMFNObject
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setUp", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setUp", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -46500,113 +47306,59 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_44setUp(struct PySlepcMFNObject
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":300
- *         CHKERR( MFNSetUp(self.mfn) )
+/* "SLEPc/NEP.pyx":463
+ *         CHKERR( NEPSetUp(self.nep) )
  * 
- *     def solve(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def solve(self):             # <<<<<<<<<<<<<<
  *         """
- *         Solves the matrix function problem. Given a vector b, the
+ *         Solves the eigensystem.
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_47solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3MFN_46solve[] = "MFN.solve(self, Vec b, Vec x)\n\n        Solves the matrix function problem. Given a vector b, the\n        vector x = f(alpha*A)*b is returned.\n\n        Parameters\n        ----------\n        b: Vec\n            The right hand side vector.\n        x: Vec\n            The solution.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_47solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  struct PyPetscVecObject *__pyx_v_b = 0;
-  struct PyPetscVecObject *__pyx_v_x = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_57solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_56solve[] = "NEP.solve(self)\n\n        Solves the eigensystem.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_57solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("solve (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_b,&__pyx_n_s_x,0};
-    PyObject* values[2] = {0,0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_b)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("solve", 1, 2, 2, 1); {__pyx_filename = __pyx_f[15]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solve") < 0)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-    }
-    __pyx_v_b = ((struct PyPetscVecObject *)values[0]);
-    __pyx_v_x = ((struct PyPetscVecObject *)values[1]);
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("solve", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[15]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.solve", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "b", 0))) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_46solve(((struct PySlepcMFNObject *)__pyx_v_self), __pyx_v_b, __pyx_v_x);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("solve", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "solve", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_56solve(((struct PySlepcNEPObject *)__pyx_v_self));
 
   /* function exit code */
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_46solve(struct PySlepcMFNObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_56solve(struct PySlepcNEPObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("solve", 0);
 
-  /* "SLEPc/MFN.pyx":312
- *             The solution.
+  /* "SLEPc/NEP.pyx":467
+ *         Solves the eigensystem.
  *         """
- *         CHKERR( MFNSolve(self.mfn, b.vec, x.vec) )             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPSolve(self.nep) )             # <<<<<<<<<<<<<<
  * 
  *     def getIterationNumber(self):
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNSolve(__pyx_v_self->mfn, __pyx_v_b->vec, __pyx_v_x->vec)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSolve(__pyx_v_self->nep)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(16, 467, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":300
- *         CHKERR( MFNSetUp(self.mfn) )
+  /* "SLEPc/NEP.pyx":463
+ *         CHKERR( NEPSetUp(self.nep) )
  * 
- *     def solve(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def solve(self):             # <<<<<<<<<<<<<<
  *         """
- *         Solves the matrix function problem. Given a vector b, the
+ *         Solves the eigensystem.
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.solve", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.solve", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -46614,8 +47366,8 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_46solve(struct PySlepcMFNObject
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":314
- *         CHKERR( MFNSolve(self.mfn, b.vec, x.vec) )
+/* "SLEPc/NEP.pyx":469
+ *         CHKERR( NEPSolve(self.nep) )
  * 
  *     def getIterationNumber(self):             # <<<<<<<<<<<<<<
  *         """
@@ -46623,67 +47375,64 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_46solve(struct PySlepcMFNObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_49getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3MFN_48getIterationNumber[] = "MFN.getIterationNumber(self)\n\n        Gets the current iteration number. If the call to `solve()` is\n        complete, then it returns the number of iterations carried out\n        by the solution method.\n\n        Returns\n        -------\n        its: int\n             Iteration number.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_49getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_59getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_58getIterationNumber[] = "NEP.getIterationNumber(self)\n\n        Gets the current iteration number. If the call to `solve()` is\n        complete, then it returns the number of iterations carried out\n        by the solution method.\n\n        Returns\n        -------\n        its: int\n             Iteration number.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_59getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getIterationNumber (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getIterationNumber", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getIterationNumber", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_48getIterationNumber(((struct PySlepcMFNObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_58getIterationNumber(((struct PySlepcNEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_48getIterationNumber(struct PySlepcMFNObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_58getIterationNumber(struct PySlepcNEPObject *__pyx_v_self) {
   PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getIterationNumber", 0);
 
-  /* "SLEPc/MFN.pyx":325
+  /* "SLEPc/NEP.pyx":480
  *              Iteration number.
  *         """
  *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
- *         CHKERR( MFNGetIterationNumber(self.mfn, &ival) )
+ *         CHKERR( NEPGetIterationNumber(self.nep, &ival) )
  *         return toInt(ival)
  */
   __pyx_v_ival = 0;
 
-  /* "SLEPc/MFN.pyx":326
+  /* "SLEPc/NEP.pyx":481
  *         """
  *         cdef PetscInt ival = 0
- *         CHKERR( MFNGetIterationNumber(self.mfn, &ival) )             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPGetIterationNumber(self.nep, &ival) )             # <<<<<<<<<<<<<<
  *         return toInt(ival)
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNGetIterationNumber(__pyx_v_self->mfn, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetIterationNumber(__pyx_v_self->nep, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(16, 481, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":327
+  /* "SLEPc/NEP.pyx":482
  *         cdef PetscInt ival = 0
- *         CHKERR( MFNGetIterationNumber(self.mfn, &ival) )
+ *         CHKERR( NEPGetIterationNumber(self.nep, &ival) )
  *         return toInt(ival)             # <<<<<<<<<<<<<<
  * 
  *     def getConvergedReason(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 482, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/MFN.pyx":314
- *         CHKERR( MFNSolve(self.mfn, b.vec, x.vec) )
+  /* "SLEPc/NEP.pyx":469
+ *         CHKERR( NEPSolve(self.nep) )
  * 
  *     def getIterationNumber(self):             # <<<<<<<<<<<<<<
  *         """
@@ -46693,7 +47442,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_48getIterationNumber(struct PySl
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.getIterationNumber", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getIterationNumber", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -46701,7 +47450,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_48getIterationNumber(struct PySl
   return __pyx_r;
 }
 
-/* "SLEPc/MFN.pyx":329
+/* "SLEPc/NEP.pyx":484
  *         return toInt(ival)
  * 
  *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
@@ -46710,66 +47459,63 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_48getIterationNumber(struct PySl
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_51getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_3MFN_50getConvergedReason[] = "MFN.getConvergedReason(self)\n\n        Gets the reason why the `solve()` iteration was stopped.\n\n        Returns\n        -------\n        reason: `MFN.ConvergedReason` enumerate\n            Negative value indicates diverged, positive value\n            converged.\n        ";
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_51getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_61getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_60getConvergedReason[] = "NEP.getConvergedReason(self)\n\n        Gets the reason why the `solve()` iteration was stopped.\n\n        Returns\n        -------\n        reason: `NEP.ConvergedReason` enumerate\n            Negative value indicates diverged, positive value\n            converged.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_61getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getConvergedReason (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getConvergedReason", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getConvergedReason", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_50getConvergedReason(((struct PySlepcMFNObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_60getConvergedReason(((struct PySlepcNEPObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_50getConvergedReason(struct PySlepcMFNObject *__pyx_v_self) {
-  MFNConvergedReason __pyx_v_val;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_60getConvergedReason(struct PySlepcNEPObject *__pyx_v_self) {
+  NEPConvergedReason __pyx_v_val;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("getConvergedReason", 0);
 
-  /* "SLEPc/MFN.pyx":339
+  /* "SLEPc/NEP.pyx":494
  *             converged.
  *         """
- *         cdef SlepcMFNConvergedReason val = MFN_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
- *         CHKERR( MFNGetConvergedReason(self.mfn, &val) )
+ *         cdef SlepcNEPConvergedReason val = NEP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPGetConvergedReason(self.nep, &val) )
  *         return val
  */
-  __pyx_v_val = MFN_CONVERGED_ITERATING;
+  __pyx_v_val = NEP_CONVERGED_ITERATING;
 
-  /* "SLEPc/MFN.pyx":340
+  /* "SLEPc/NEP.pyx":495
  *         """
- *         cdef SlepcMFNConvergedReason val = MFN_CONVERGED_ITERATING
- *         CHKERR( MFNGetConvergedReason(self.mfn, &val) )             # <<<<<<<<<<<<<<
+ *         cdef SlepcNEPConvergedReason val = NEP_CONVERGED_ITERATING
+ *         CHKERR( NEPGetConvergedReason(self.nep, &val) )             # <<<<<<<<<<<<<<
  *         return val
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNGetConvergedReason(__pyx_v_self->mfn, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetConvergedReason(__pyx_v_self->nep, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(16, 495, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":341
- *         cdef SlepcMFNConvergedReason val = MFN_CONVERGED_ITERATING
- *         CHKERR( MFNGetConvergedReason(self.mfn, &val) )
+  /* "SLEPc/NEP.pyx":496
+ *         cdef SlepcNEPConvergedReason val = NEP_CONVERGED_ITERATING
+ *         CHKERR( NEPGetConvergedReason(self.nep, &val) )
  *         return val             # <<<<<<<<<<<<<<
  * 
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_val); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_NEPConvergedReason(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 496, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/MFN.pyx":329
+  /* "SLEPc/NEP.pyx":484
  *         return toInt(ival)
  * 
  *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
@@ -46780,7 +47526,7 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_50getConvergedReason(struct PySl
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.getConvergedReason", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getConvergedReason", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -46788,1937 +47534,2409 @@ static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_50getConvergedReason(struct PySl
   return __pyx_r;
 }
 
-/* "SLEPc/CAPI.pyx":3
- * # -----------------------------------------------------------------------------
- * 
- * cdef inline int setref(void *d, void *s) except -1:             # <<<<<<<<<<<<<<
- *     cdef PetscObject *dest  = <PetscObject*> d
- *     cdef PetscObject source = <PetscObject>  s
- */
-
-static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_setref(void *__pyx_v_d, void *__pyx_v_s) {
-  PetscObject *__pyx_v_dest;
-  PetscObject __pyx_v_source;
-  int __pyx_r;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("setref", 0);
-
-  /* "SLEPc/CAPI.pyx":4
- * 
- * cdef inline int setref(void *d, void *s) except -1:
- *     cdef PetscObject *dest  = <PetscObject*> d             # <<<<<<<<<<<<<<
- *     cdef PetscObject source = <PetscObject>  s
- *     CHKERR( PetscINCREF(&source) )
- */
-  __pyx_v_dest = ((PetscObject *)__pyx_v_d);
-
-  /* "SLEPc/CAPI.pyx":5
- * cdef inline int setref(void *d, void *s) except -1:
- *     cdef PetscObject *dest  = <PetscObject*> d
- *     cdef PetscObject source = <PetscObject>  s             # <<<<<<<<<<<<<<
- *     CHKERR( PetscINCREF(&source) )
- *     dest[0] = source
- */
-  __pyx_v_source = ((PetscObject)__pyx_v_s);
-
-  /* "SLEPc/CAPI.pyx":6
- *     cdef PetscObject *dest  = <PetscObject*> d
- *     cdef PetscObject source = <PetscObject>  s
- *     CHKERR( PetscINCREF(&source) )             # <<<<<<<<<<<<<<
- *     dest[0] = source
- *     return 0
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(__pyx_f_8slepc4py_5SLEPc_PetscINCREF((&__pyx_v_source))); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/CAPI.pyx":7
- *     cdef PetscObject source = <PetscObject>  s
- *     CHKERR( PetscINCREF(&source) )
- *     dest[0] = source             # <<<<<<<<<<<<<<
- *     return 0
+/* "SLEPc/NEP.pyx":499
  * 
- */
-  (__pyx_v_dest[0]) = __pyx_v_source;
-
-  /* "SLEPc/CAPI.pyx":8
- *     CHKERR( PetscINCREF(&source) )
- *     dest[0] = source
- *     return 0             # <<<<<<<<<<<<<<
  * 
- * # -----------------------------------------------------------------------------
+ *     def getConverged(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the number of converged eigenpairs.
  */
-  __pyx_r = 0;
-  goto __pyx_L0;
 
-  /* "SLEPc/CAPI.pyx":3
- * # -----------------------------------------------------------------------------
- * 
- * cdef inline int setref(void *d, void *s) except -1:             # <<<<<<<<<<<<<<
- *     cdef PetscObject *dest  = <PetscObject*> d
- *     cdef PetscObject source = <PetscObject>  s
- */
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_63getConverged(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_62getConverged[] = "NEP.getConverged(self)\n\n        Gets the number of converged eigenpairs.\n\n        Returns\n        -------\n        nconv: int\n            Number of converged eigenpairs.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_63getConverged(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getConverged (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getConverged", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getConverged", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_62getConverged(((struct PySlepcNEPObject *)__pyx_v_self));
 
   /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.setref", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
-  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/CAPI.pyx":14
- * # -- ST --
- * 
- * cdef api object PySlepcST_New(SlepcST arg):             # <<<<<<<<<<<<<<
- *     cdef ST retv = ST()
- *     setref(&retv.st, arg)
- */
-
-static PyObject *__pyx_f_8slepc4py_5SLEPc_PySlepcST_New(ST __pyx_v_arg) {
-  struct PySlepcSTObject *__pyx_v_retv = 0;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_62getConverged(struct PySlepcNEPObject *__pyx_v_self) {
+  PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PySlepcST_New", 0);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getConverged", 0);
 
-  /* "SLEPc/CAPI.pyx":15
- * 
- * cdef api object PySlepcST_New(SlepcST arg):
- *     cdef ST retv = ST()             # <<<<<<<<<<<<<<
- *     setref(&retv.st, arg)
- *     return retv
+  /* "SLEPc/NEP.pyx":508
+ *             Number of converged eigenpairs.
+ *         """
+ *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPGetConverged(self.nep, &ival) )
+ *         return toInt(ival)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_ST)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_retv = ((struct PySlepcSTObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_ival = 0;
 
-  /* "SLEPc/CAPI.pyx":16
- * cdef api object PySlepcST_New(SlepcST arg):
- *     cdef ST retv = ST()
- *     setref(&retv.st, arg)             # <<<<<<<<<<<<<<
- *     return retv
+  /* "SLEPc/NEP.pyx":509
+ *         """
+ *         cdef PetscInt ival = 0
+ *         CHKERR( NEPGetConverged(self.nep, &ival) )             # <<<<<<<<<<<<<<
+ *         return toInt(ival)
  * 
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_setref((&__pyx_v_retv->st), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetConverged(__pyx_v_self->nep, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(16, 509, __pyx_L1_error)
 
-  /* "SLEPc/CAPI.pyx":17
- *     cdef ST retv = ST()
- *     setref(&retv.st, arg)
- *     return retv             # <<<<<<<<<<<<<<
+  /* "SLEPc/NEP.pyx":510
+ *         cdef PetscInt ival = 0
+ *         CHKERR( NEPGetConverged(self.nep, &ival) )
+ *         return toInt(ival)             # <<<<<<<<<<<<<<
  * 
- * cdef api SlepcST PySlepcST_Get(object arg) except ? NULL:
+ *     def getEigenpair(self, int i, Vec Vr=None, Vec Vi=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_retv));
-  __pyx_r = ((PyObject *)__pyx_v_retv);
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 510, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/CAPI.pyx":14
- * # -- ST --
+  /* "SLEPc/NEP.pyx":499
  * 
- * cdef api object PySlepcST_New(SlepcST arg):             # <<<<<<<<<<<<<<
- *     cdef ST retv = ST()
- *     setref(&retv.st, arg)
+ * 
+ *     def getConverged(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the number of converged eigenpairs.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcST_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getConverged", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_retv);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/CAPI.pyx":19
- *     return retv
+/* "SLEPc/NEP.pyx":512
+ *         return toInt(ival)
  * 
- * cdef api SlepcST PySlepcST_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
- *     cdef SlepcST retv = NULL
- *     cdef ST ob = <ST?> arg
+ *     def getEigenpair(self, int i, Vec Vr=None, Vec Vi=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the i-th solution of the eigenproblem as computed by
  */
 
-static ST __pyx_f_8slepc4py_5SLEPc_PySlepcST_Get(PyObject *__pyx_v_arg) {
-  ST __pyx_v_retv;
-  struct PySlepcSTObject *__pyx_v_ob = 0;
-  ST __pyx_r;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  ST __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PySlepcST_Get", 0);
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_65getEigenpair(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_64getEigenpair[] = "NEP.getEigenpair(self, int i, Vec Vr=None, Vec Vi=None)\n\n        Gets the i-th solution of the eigenproblem as computed by\n        `solve()`.  The solution consists of both the eigenvalue and\n        the eigenvector.\n\n        Parameters\n        ----------\n        i: int\n            Index of the solution to be obtained.\n        Vr: Vec, optional\n            Placeholder for the returned eigenvector (real part).\n    [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_65getEigenpair(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_i;
+  struct PyPetscVecObject *__pyx_v_Vr = 0;
+  struct PyPetscVecObject *__pyx_v_Vi = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getEigenpair (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,&__pyx_n_s_Vr,&__pyx_n_s_Vi,0};
+    PyObject* values[3] = {0,0,0};
+    values[1] = (PyObject *)((struct PyPetscVecObject *)Py_None);
+    values[2] = (PyObject *)((struct PyPetscVecObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Vr);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_Vi);
+          if (value) { values[2] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getEigenpair") < 0)) __PYX_ERR(16, 512, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) __PYX_ERR(16, 512, __pyx_L3_error)
+    __pyx_v_Vr = ((struct PyPetscVecObject *)values[1]);
+    __pyx_v_Vi = ((struct PyPetscVecObject *)values[2]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getEigenpair", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(16, 512, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getEigenpair", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Vr), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "Vr", 0))) __PYX_ERR(16, 512, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Vi), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "Vi", 0))) __PYX_ERR(16, 512, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_64getEigenpair(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_i, __pyx_v_Vr, __pyx_v_Vi);
 
-  /* "SLEPc/CAPI.pyx":20
- * 
- * cdef api SlepcST PySlepcST_Get(object arg) except ? NULL:
- *     cdef SlepcST retv = NULL             # <<<<<<<<<<<<<<
- *     cdef ST ob = <ST?> arg
- *     retv = ob.st
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_64getEigenpair(struct PySlepcNEPObject *__pyx_v_self, int __pyx_v_i, struct PyPetscVecObject *__pyx_v_Vr, struct PyPetscVecObject *__pyx_v_Vi) {
+  PetscScalar __pyx_v_sval1;
+  PetscScalar __pyx_v_sval2;
+  Vec __pyx_v_vecr;
+  Vec __pyx_v_veci;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  Vec __pyx_t_3;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  __Pyx_RefNannySetupContext("getEigenpair", 0);
+
+  /* "SLEPc/NEP.pyx":532
+ *             The computed eigenvalue.
+ *         """
+ *         cdef PetscScalar sval1 = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscScalar sval2 = 0
+ *         cdef PetscVec vecr = NULL
  */
-  __pyx_v_retv = NULL;
+  __pyx_v_sval1 = 0.0;
 
-  /* "SLEPc/CAPI.pyx":21
- * cdef api SlepcST PySlepcST_Get(object arg) except ? NULL:
- *     cdef SlepcST retv = NULL
- *     cdef ST ob = <ST?> arg             # <<<<<<<<<<<<<<
- *     retv = ob.st
- *     return retv
+  /* "SLEPc/NEP.pyx":533
+ *         """
+ *         cdef PetscScalar sval1 = 0
+ *         cdef PetscScalar sval2 = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscVec vecr = NULL
+ *         cdef PetscVec veci = NULL
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8slepc4py_5SLEPc_ST)))) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_1 = __pyx_v_arg;
-  __Pyx_INCREF(__pyx_t_1);
-  __pyx_v_ob = ((struct PySlepcSTObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_sval2 = 0.0;
 
-  /* "SLEPc/CAPI.pyx":22
- *     cdef SlepcST retv = NULL
- *     cdef ST ob = <ST?> arg
- *     retv = ob.st             # <<<<<<<<<<<<<<
- *     return retv
+  /* "SLEPc/NEP.pyx":534
+ *         cdef PetscScalar sval1 = 0
+ *         cdef PetscScalar sval2 = 0
+ *         cdef PetscVec vecr = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscVec veci = NULL
+ *         if Vr is not None: vecr = Vr.vec
+ */
+  __pyx_v_vecr = NULL;
+
+  /* "SLEPc/NEP.pyx":535
+ *         cdef PetscScalar sval2 = 0
+ *         cdef PetscVec vecr = NULL
+ *         cdef PetscVec veci = NULL             # <<<<<<<<<<<<<<
+ *         if Vr is not None: vecr = Vr.vec
+ *         if Vi is not None: veci = Vi.vec
+ */
+  __pyx_v_veci = NULL;
+
+  /* "SLEPc/NEP.pyx":536
+ *         cdef PetscVec vecr = NULL
+ *         cdef PetscVec veci = NULL
+ *         if Vr is not None: vecr = Vr.vec             # <<<<<<<<<<<<<<
+ *         if Vi is not None: veci = Vi.vec
+ *         CHKERR( NEPGetEigenpair(self.nep, i, &sval1, &sval2, vecr, veci) )
+ */
+  __pyx_t_1 = (((PyObject *)__pyx_v_Vr) != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_v_Vr->vec;
+    __pyx_v_vecr = __pyx_t_3;
+  }
+
+  /* "SLEPc/NEP.pyx":537
+ *         cdef PetscVec veci = NULL
+ *         if Vr is not None: vecr = Vr.vec
+ *         if Vi is not None: veci = Vi.vec             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPGetEigenpair(self.nep, i, &sval1, &sval2, vecr, veci) )
+ *         return complex(toScalar(sval1), toScalar(sval2))
+ */
+  __pyx_t_2 = (((PyObject *)__pyx_v_Vi) != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_3 = __pyx_v_Vi->vec;
+    __pyx_v_veci = __pyx_t_3;
+  }
+
+  /* "SLEPc/NEP.pyx":538
+ *         if Vr is not None: vecr = Vr.vec
+ *         if Vi is not None: veci = Vi.vec
+ *         CHKERR( NEPGetEigenpair(self.nep, i, &sval1, &sval2, vecr, veci) )             # <<<<<<<<<<<<<<
+ *         return complex(toScalar(sval1), toScalar(sval2))
  * 
  */
-  __pyx_t_2 = __pyx_v_ob->st;
-  __pyx_v_retv = __pyx_t_2;
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetEigenpair(__pyx_v_self->nep, __pyx_v_i, (&__pyx_v_sval1), (&__pyx_v_sval2), __pyx_v_vecr, __pyx_v_veci)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(16, 538, __pyx_L1_error)
 
-  /* "SLEPc/CAPI.pyx":23
- *     cdef ST ob = <ST?> arg
- *     retv = ob.st
- *     return retv             # <<<<<<<<<<<<<<
+  /* "SLEPc/NEP.pyx":539
+ *         if Vi is not None: veci = Vi.vec
+ *         CHKERR( NEPGetEigenpair(self.nep, i, &sval1, &sval2, vecr, veci) )
+ *         return complex(toScalar(sval1), toScalar(sval2))             # <<<<<<<<<<<<<<
  * 
- * # -----------------------------------------------------------------------------
+ *     def getErrorEstimate(self, int i):
  */
-  __pyx_r = __pyx_v_retv;
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval1); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 539, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_6 = __pyx_f_8slepc4py_5SLEPc_toScalar(__pyx_v_sval2); if (unlikely(!__pyx_t_6)) __PYX_ERR(16, 539, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(16, 539, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_GIVEREF(__pyx_t_5);
+  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5);
+  __Pyx_GIVEREF(__pyx_t_6);
+  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
+  __pyx_t_5 = 0;
+  __pyx_t_6 = 0;
+  __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)(&PyComplex_Type)), __pyx_t_7, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(16, 539, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_r = __pyx_t_6;
+  __pyx_t_6 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/CAPI.pyx":19
- *     return retv
+  /* "SLEPc/NEP.pyx":512
+ *         return toInt(ival)
  * 
- * cdef api SlepcST PySlepcST_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
- *     cdef SlepcST retv = NULL
- *     cdef ST ob = <ST?> arg
+ *     def getEigenpair(self, int i, Vec Vr=None, Vec Vi=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the i-th solution of the eigenproblem as computed by
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcST_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getEigenpair", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_ob);
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/CAPI.pyx":29
- * # -- BV --
+/* "SLEPc/NEP.pyx":541
+ *         return complex(toScalar(sval1), toScalar(sval2))
  * 
- * cdef api object PySlepcBV_New(SlepcBV arg):             # <<<<<<<<<<<<<<
- *     cdef BV retv = BV()
- *     setref(&retv.bv, arg)
+ *     def getErrorEstimate(self, int i):             # <<<<<<<<<<<<<<
+ *         """
+ *         Returns the error estimate associated to the i-th computed
  */
 
-static PyObject *__pyx_f_8slepc4py_5SLEPc_PySlepcBV_New(BV __pyx_v_arg) {
-  struct PySlepcBVObject *__pyx_v_retv = 0;
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_67getErrorEstimate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_66getErrorEstimate[] = "NEP.getErrorEstimate(self, int i)\n\n        Returns the error estimate associated to the i-th computed\n        eigenpair.\n\n        Parameters\n        ----------\n        i: int\n            Index of the solution to be considered.\n\n        Returns\n        -------\n        error: real\n            Error estimate.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_67getErrorEstimate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_i;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getErrorEstimate (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getErrorEstimate") < 0)) __PYX_ERR(16, 541, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) __PYX_ERR(16, 541, __pyx_L3_error)
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getErrorEstimate", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(16, 541, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getErrorEstimate", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_66getErrorEstimate(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_i);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_66getErrorEstimate(struct PySlepcNEPObject *__pyx_v_self, int __pyx_v_i) {
+  PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PySlepcBV_New", 0);
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getErrorEstimate", 0);
 
-  /* "SLEPc/CAPI.pyx":30
- * 
- * cdef api object PySlepcBV_New(SlepcBV arg):
- *     cdef BV retv = BV()             # <<<<<<<<<<<<<<
- *     setref(&retv.bv, arg)
- *     return retv
+  /* "SLEPc/NEP.pyx":556
+ *             Error estimate.
+ *         """
+ *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPGetErrorEstimate(self.nep, i, &rval) )
+ *         return toReal(rval)
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_BV)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_retv = ((struct PySlepcBVObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_rval = 0.0;
 
-  /* "SLEPc/CAPI.pyx":31
- * cdef api object PySlepcBV_New(SlepcBV arg):
- *     cdef BV retv = BV()
- *     setref(&retv.bv, arg)             # <<<<<<<<<<<<<<
- *     return retv
+  /* "SLEPc/NEP.pyx":557
+ *         """
+ *         cdef PetscReal rval = 0
+ *         CHKERR( NEPGetErrorEstimate(self.nep, i, &rval) )             # <<<<<<<<<<<<<<
+ *         return toReal(rval)
  * 
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_setref((&__pyx_v_retv->bv), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPGetErrorEstimate(__pyx_v_self->nep, __pyx_v_i, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(16, 557, __pyx_L1_error)
 
-  /* "SLEPc/CAPI.pyx":32
- *     cdef BV retv = BV()
- *     setref(&retv.bv, arg)
- *     return retv             # <<<<<<<<<<<<<<
+  /* "SLEPc/NEP.pyx":558
+ *         cdef PetscReal rval = 0
+ *         CHKERR( NEPGetErrorEstimate(self.nep, i, &rval) )
+ *         return toReal(rval)             # <<<<<<<<<<<<<<
  * 
- * cdef api SlepcBV PySlepcBV_Get(object arg) except ? NULL:
+ *     def computeError(self, int i, etype=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_retv));
-  __pyx_r = ((PyObject *)__pyx_v_retv);
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 558, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/CAPI.pyx":29
- * # -- BV --
+  /* "SLEPc/NEP.pyx":541
+ *         return complex(toScalar(sval1), toScalar(sval2))
  * 
- * cdef api object PySlepcBV_New(SlepcBV arg):             # <<<<<<<<<<<<<<
- *     cdef BV retv = BV()
- *     setref(&retv.bv, arg)
+ *     def getErrorEstimate(self, int i):             # <<<<<<<<<<<<<<
+ *         """
+ *         Returns the error estimate associated to the i-th computed
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcBV_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.getErrorEstimate", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_retv);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/CAPI.pyx":34
- *     return retv
+/* "SLEPc/NEP.pyx":560
+ *         return toReal(rval)
  * 
- * cdef api SlepcBV PySlepcBV_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
- *     cdef SlepcBV retv = NULL
- *     cdef BV ob = <BV?> arg
+ *     def computeError(self, int i, etype=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Computes the error (based on the residual norm) associated with the i-th
  */
 
-static BV __pyx_f_8slepc4py_5SLEPc_PySlepcBV_Get(PyObject *__pyx_v_arg) {
-  BV __pyx_v_retv;
-  struct PySlepcBVObject *__pyx_v_ob = 0;
-  BV __pyx_r;
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_69computeError(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_68computeError[] = "NEP.computeError(self, int i, etype=None)\n\n        Computes the error (based on the residual norm) associated with the i-th\n        computed eigenpair.\n\n        Parameters\n        ----------\n        i: int\n            Index of the solution to be considered.\n        etype: `NEP.ErrorType` enumerate\n            The error type to compute.\n\n        Returns\n        -------\n        error: real\n            The error  [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_69computeError(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_i;
+  PyObject *__pyx_v_etype = 0;
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  BV __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PySlepcBV_Get", 0);
+  __Pyx_RefNannySetupContext("computeError (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,&__pyx_n_s_etype,0};
+    PyObject* values[2] = {0,0};
+    values[1] = ((PyObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_i)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_etype);
+          if (value) { values[1] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeError") < 0)) __PYX_ERR(16, 560, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) __PYX_ERR(16, 560, __pyx_L3_error)
+    __pyx_v_etype = values[1];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("computeError", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(16, 560, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.computeError", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_68computeError(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_i, __pyx_v_etype);
 
-  /* "SLEPc/CAPI.pyx":35
- * 
- * cdef api SlepcBV PySlepcBV_Get(object arg) except ? NULL:
- *     cdef SlepcBV retv = NULL             # <<<<<<<<<<<<<<
- *     cdef BV ob = <BV?> arg
- *     retv = ob.bv
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_68computeError(struct PySlepcNEPObject *__pyx_v_self, int __pyx_v_i, PyObject *__pyx_v_etype) {
+  NEPErrorType __pyx_v_et;
+  PetscReal __pyx_v_rval;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  NEPErrorType __pyx_t_3;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("computeError", 0);
+
+  /* "SLEPc/NEP.pyx":579
+ *             ``x`` is the eigenvector.
+ *         """
+ *         cdef SlepcNEPErrorType et = NEP_ERROR_RELATIVE             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = 0
+ *         if etype is not None: et = etype
  */
-  __pyx_v_retv = NULL;
+  __pyx_v_et = NEP_ERROR_RELATIVE;
 
-  /* "SLEPc/CAPI.pyx":36
- * cdef api SlepcBV PySlepcBV_Get(object arg) except ? NULL:
- *     cdef SlepcBV retv = NULL
- *     cdef BV ob = <BV?> arg             # <<<<<<<<<<<<<<
- *     retv = ob.bv
- *     return retv
+  /* "SLEPc/NEP.pyx":580
+ *         """
+ *         cdef SlepcNEPErrorType et = NEP_ERROR_RELATIVE
+ *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
+ *         if etype is not None: et = etype
+ *         CHKERR( NEPComputeError(self.nep, i, et, &rval) )
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8slepc4py_5SLEPc_BV)))) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_1 = __pyx_v_arg;
-  __Pyx_INCREF(__pyx_t_1);
-  __pyx_v_ob = ((struct PySlepcBVObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_rval = 0.0;
 
-  /* "SLEPc/CAPI.pyx":37
- *     cdef SlepcBV retv = NULL
- *     cdef BV ob = <BV?> arg
- *     retv = ob.bv             # <<<<<<<<<<<<<<
- *     return retv
+  /* "SLEPc/NEP.pyx":581
+ *         cdef SlepcNEPErrorType et = NEP_ERROR_RELATIVE
+ *         cdef PetscReal rval = 0
+ *         if etype is not None: et = etype             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPComputeError(self.nep, i, et, &rval) )
+ *         return toReal(rval)
+ */
+  __pyx_t_1 = (__pyx_v_etype != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = ((NEPErrorType)__Pyx_PyInt_As_NEPErrorType(__pyx_v_etype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(16, 581, __pyx_L1_error)
+    __pyx_v_et = __pyx_t_3;
+  }
+
+  /* "SLEPc/NEP.pyx":582
+ *         cdef PetscReal rval = 0
+ *         if etype is not None: et = etype
+ *         CHKERR( NEPComputeError(self.nep, i, et, &rval) )             # <<<<<<<<<<<<<<
+ *         return toReal(rval)
  * 
  */
-  __pyx_t_2 = __pyx_v_ob->bv;
-  __pyx_v_retv = __pyx_t_2;
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPComputeError(__pyx_v_self->nep, __pyx_v_i, __pyx_v_et, (&__pyx_v_rval))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(16, 582, __pyx_L1_error)
 
-  /* "SLEPc/CAPI.pyx":38
- *     cdef BV ob = <BV?> arg
- *     retv = ob.bv
- *     return retv             # <<<<<<<<<<<<<<
+  /* "SLEPc/NEP.pyx":583
+ *         if etype is not None: et = etype
+ *         CHKERR( NEPComputeError(self.nep, i, et, &rval) )
+ *         return toReal(rval)             # <<<<<<<<<<<<<<
  * 
- * # -----------------------------------------------------------------------------
+ *     def errorView(self, etype=None, Viewer viewer=None):
  */
-  __pyx_r = __pyx_v_retv;
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 583, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_r = __pyx_t_5;
+  __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/CAPI.pyx":34
- *     return retv
+  /* "SLEPc/NEP.pyx":560
+ *         return toReal(rval)
  * 
- * cdef api SlepcBV PySlepcBV_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
- *     cdef SlepcBV retv = NULL
- *     cdef BV ob = <BV?> arg
+ *     def computeError(self, int i, etype=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Computes the error (based on the residual norm) associated with the i-th
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcBV_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.computeError", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_ob);
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/CAPI.pyx":44
- * # -- DS --
+/* "SLEPc/NEP.pyx":585
+ *         return toReal(rval)
  * 
- * cdef api object PySlepcDS_New(SlepcDS arg):             # <<<<<<<<<<<<<<
- *     cdef DS retv = DS()
- *     setref(&retv.ds, arg)
+ *     def errorView(self, etype=None, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Displays the errors associated with the computed solution
  */
 
-static PyObject *__pyx_f_8slepc4py_5SLEPc_PySlepcDS_New(DS __pyx_v_arg) {
-  struct PySlepcDSObject *__pyx_v_retv = 0;
-  PyObject *__pyx_r = NULL;
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_71errorView(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_70errorView[] = "NEP.errorView(self, etype=None, Viewer viewer=None)\n\n        Displays the errors associated with the computed solution\n        (as well as the eigenvalues).\n\n        Parameters\n        ----------\n        etype: `NEP.ErrorType` enumerate, optional\n           The error type to compute.\n        viewer: Viewer, optional.\n                Visualization context; if not provided, the standard\n                output is used.\ [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_71errorView(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_etype = 0;
+  struct PyPetscViewerObject *__pyx_v_viewer = 0;
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PySlepcDS_New", 0);
-
-  /* "SLEPc/CAPI.pyx":45
- * 
- * cdef api object PySlepcDS_New(SlepcDS arg):
- *     cdef DS retv = DS()             # <<<<<<<<<<<<<<
- *     setref(&retv.ds, arg)
- *     return retv
- */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_DS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_retv = ((struct PySlepcDSObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "SLEPc/CAPI.pyx":46
- * cdef api object PySlepcDS_New(SlepcDS arg):
- *     cdef DS retv = DS()
- *     setref(&retv.ds, arg)             # <<<<<<<<<<<<<<
- *     return retv
- * 
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_setref((&__pyx_v_retv->ds), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/CAPI.pyx":47
- *     cdef DS retv = DS()
- *     setref(&retv.ds, arg)
- *     return retv             # <<<<<<<<<<<<<<
- * 
- * cdef api SlepcDS PySlepcDS_Get(object arg) except ? NULL:
- */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_retv));
-  __pyx_r = ((PyObject *)__pyx_v_retv);
-  goto __pyx_L0;
-
-  /* "SLEPc/CAPI.pyx":44
- * # -- DS --
- * 
- * cdef api object PySlepcDS_New(SlepcDS arg):             # <<<<<<<<<<<<<<
- *     cdef DS retv = DS()
- *     setref(&retv.ds, arg)
- */
+  __Pyx_RefNannySetupContext("errorView (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_etype,&__pyx_n_s_viewer,0};
+    PyObject* values[2] = {0,0};
+    values[0] = ((PyObject *)Py_None);
+    values[1] = (PyObject *)((struct PyPetscViewerObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_etype);
+          if (value) { values[0] = value; kw_args--; }
+        }
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_viewer);
+          if (value) { values[1] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "errorView") < 0)) __PYX_ERR(16, 585, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_etype = values[0];
+    __pyx_v_viewer = ((struct PyPetscViewerObject *)values[1]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("errorView", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(16, 585, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.errorView", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) __PYX_ERR(16, 585, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_70errorView(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_etype, __pyx_v_viewer);
 
   /* function exit code */
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcDS_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
+  __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_retv);
-  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/CAPI.pyx":49
- *     return retv
- * 
- * cdef api SlepcDS PySlepcDS_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
- *     cdef SlepcDS retv = NULL
- *     cdef DS ob = <DS?> arg
- */
-
-static DS __pyx_f_8slepc4py_5SLEPc_PySlepcDS_Get(PyObject *__pyx_v_arg) {
-  DS __pyx_v_retv;
-  struct PySlepcDSObject *__pyx_v_ob = 0;
-  DS __pyx_r;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_70errorView(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_etype, struct PyPetscViewerObject *__pyx_v_viewer) {
+  NEPErrorType __pyx_v_et;
+  PetscViewer __pyx_v_vwr;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  DS __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PySlepcDS_Get", 0);
+  int __pyx_t_1;
+  int __pyx_t_2;
+  NEPErrorType __pyx_t_3;
+  PetscViewer __pyx_t_4;
+  int __pyx_t_5;
+  __Pyx_RefNannySetupContext("errorView", 0);
 
-  /* "SLEPc/CAPI.pyx":50
+  /* "SLEPc/NEP.pyx":606
  * 
- * cdef api SlepcDS PySlepcDS_Get(object arg) except ? NULL:
- *     cdef SlepcDS retv = NULL             # <<<<<<<<<<<<<<
- *     cdef DS ob = <DS?> arg
- *     retv = ob.ds
+ *         """
+ *         cdef SlepcNEPErrorType et = NEP_ERROR_RELATIVE             # <<<<<<<<<<<<<<
+ *         if etype is not None: et = etype
+ *         cdef PetscViewer vwr = NULL
  */
-  __pyx_v_retv = NULL;
+  __pyx_v_et = NEP_ERROR_RELATIVE;
 
-  /* "SLEPc/CAPI.pyx":51
- * cdef api SlepcDS PySlepcDS_Get(object arg) except ? NULL:
- *     cdef SlepcDS retv = NULL
- *     cdef DS ob = <DS?> arg             # <<<<<<<<<<<<<<
- *     retv = ob.ds
- *     return retv
+  /* "SLEPc/NEP.pyx":607
+ *         """
+ *         cdef SlepcNEPErrorType et = NEP_ERROR_RELATIVE
+ *         if etype is not None: et = etype             # <<<<<<<<<<<<<<
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8slepc4py_5SLEPc_DS)))) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_1 = __pyx_v_arg;
-  __Pyx_INCREF(__pyx_t_1);
-  __pyx_v_ob = ((struct PySlepcDSObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_1 = (__pyx_v_etype != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = ((NEPErrorType)__Pyx_PyInt_As_NEPErrorType(__pyx_v_etype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(16, 607, __pyx_L1_error)
+    __pyx_v_et = __pyx_t_3;
+  }
 
-  /* "SLEPc/CAPI.pyx":52
- *     cdef SlepcDS retv = NULL
- *     cdef DS ob = <DS?> arg
- *     retv = ob.ds             # <<<<<<<<<<<<<<
- *     return retv
+  /* "SLEPc/NEP.pyx":608
+ *         cdef SlepcNEPErrorType et = NEP_ERROR_RELATIVE
+ *         if etype is not None: et = etype
+ *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( NEPErrorView(self.nep, et, vwr) )
+ */
+  __pyx_v_vwr = NULL;
+
+  /* "SLEPc/NEP.pyx":609
+ *         if etype is not None: et = etype
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPErrorView(self.nep, et, vwr) )
  * 
  */
-  __pyx_t_2 = __pyx_v_ob->ds;
-  __pyx_v_retv = __pyx_t_2;
+  __pyx_t_2 = (((PyObject *)__pyx_v_viewer) != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_4 = __pyx_v_viewer->vwr;
+    __pyx_v_vwr = __pyx_t_4;
+  }
 
-  /* "SLEPc/CAPI.pyx":53
- *     cdef DS ob = <DS?> arg
- *     retv = ob.ds
- *     return retv             # <<<<<<<<<<<<<<
+  /* "SLEPc/NEP.pyx":610
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( NEPErrorView(self.nep, et, vwr) )             # <<<<<<<<<<<<<<
  * 
- * # -----------------------------------------------------------------------------
+ *     def setFunction(self, function, Mat F, Mat P=None, args=None, kargs=None):
  */
-  __pyx_r = __pyx_v_retv;
-  goto __pyx_L0;
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPErrorView(__pyx_v_self->nep, __pyx_v_et, __pyx_v_vwr)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(16, 610, __pyx_L1_error)
 
-  /* "SLEPc/CAPI.pyx":49
- *     return retv
+  /* "SLEPc/NEP.pyx":585
+ *         return toReal(rval)
  * 
- * cdef api SlepcDS PySlepcDS_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
- *     cdef SlepcDS retv = NULL
- *     cdef DS ob = <DS?> arg
+ *     def errorView(self, etype=None, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Displays the errors associated with the computed solution
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcDS_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.errorView", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_ob);
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/CAPI.pyx":59
- * # -- FN --
+/* "SLEPc/NEP.pyx":612
+ *         CHKERR( NEPErrorView(self.nep, et, vwr) )
  * 
- * cdef api object PySlepcFN_New(SlepcFN arg):             # <<<<<<<<<<<<<<
- *     cdef FN retv = FN()
- *     setref(&retv.fn, arg)
+ *     def setFunction(self, function, Mat F, Mat P=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the function to compute the nonlinear Function T(lambda)
  */
 
-static PyObject *__pyx_f_8slepc4py_5SLEPc_PySlepcFN_New(FN __pyx_v_arg) {
-  struct PySlepcFNObject *__pyx_v_retv = 0;
-  PyObject *__pyx_r = NULL;
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_73setFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_72setFunction[] = "NEP.setFunction(self, function, Mat F, Mat P=None, args=None, kargs=None)\n\n        Sets the function to compute the nonlinear Function T(lambda)\n        as well as the location to store the matrix.\n\n        Parameters\n        ----------\n        function:\n            Function evaluation routine\n        F: Mat\n            Function matrix\n        P: Mat\n            preconditioner matrix (usually same as the Function) [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_73setFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_function = 0;
+  struct PyPetscMatObject *__pyx_v_F = 0;
+  struct PyPetscMatObject *__pyx_v_P = 0;
+  PyObject *__pyx_v_args = 0;
+  PyObject *__pyx_v_kargs = 0;
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PySlepcFN_New", 0);
-
-  /* "SLEPc/CAPI.pyx":60
- * 
- * cdef api object PySlepcFN_New(SlepcFN arg):
- *     cdef FN retv = FN()             # <<<<<<<<<<<<<<
- *     setref(&retv.fn, arg)
- *     return retv
- */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_FN)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_retv = ((struct PySlepcFNObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "SLEPc/CAPI.pyx":61
- * cdef api object PySlepcFN_New(SlepcFN arg):
- *     cdef FN retv = FN()
- *     setref(&retv.fn, arg)             # <<<<<<<<<<<<<<
- *     return retv
- * 
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_setref((&__pyx_v_retv->fn), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/CAPI.pyx":62
- *     cdef FN retv = FN()
- *     setref(&retv.fn, arg)
- *     return retv             # <<<<<<<<<<<<<<
- * 
- * cdef api SlepcFN PySlepcFN_Get(object arg) except ? NULL:
- */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_retv));
-  __pyx_r = ((PyObject *)__pyx_v_retv);
-  goto __pyx_L0;
-
-  /* "SLEPc/CAPI.pyx":59
- * # -- FN --
- * 
- * cdef api object PySlepcFN_New(SlepcFN arg):             # <<<<<<<<<<<<<<
- *     cdef FN retv = FN()
- *     setref(&retv.fn, arg)
- */
+  __Pyx_RefNannySetupContext("setFunction (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_function,&__pyx_n_s_F,&__pyx_n_s_P,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    PyObject* values[5] = {0,0,0,0,0};
+    values[2] = (PyObject *)((struct PyPetscMatObject *)Py_None);
+    values[3] = ((PyObject *)Py_None);
+    values[4] = ((PyObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_function)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_F)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setFunction", 0, 2, 5, 1); __PYX_ERR(16, 612, __pyx_L3_error)
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_P);
+          if (value) { values[2] = value; kw_args--; }
+        }
+        case  3:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
+          if (value) { values[3] = value; kw_args--; }
+        }
+        case  4:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
+          if (value) { values[4] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFunction") < 0)) __PYX_ERR(16, 612, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_function = values[0];
+    __pyx_v_F = ((struct PyPetscMatObject *)values[1]);
+    __pyx_v_P = ((struct PyPetscMatObject *)values[2]);
+    __pyx_v_args = values[3];
+    __pyx_v_kargs = values[4];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setFunction", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(16, 612, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setFunction", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_F), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "F", 0))) __PYX_ERR(16, 612, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "P", 0))) __PYX_ERR(16, 612, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_72setFunction(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_function, __pyx_v_F, __pyx_v_P, __pyx_v_args, __pyx_v_kargs);
 
   /* function exit code */
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcFN_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
+  __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_retv);
-  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/CAPI.pyx":64
- *     return retv
- * 
- * cdef api SlepcFN PySlepcFN_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
- *     cdef SlepcFN retv = NULL
- *     cdef FN ob = <FN?> arg
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_72setFunction(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_function, struct PyPetscMatObject *__pyx_v_F, struct PyPetscMatObject *__pyx_v_P, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+  Mat __pyx_v_Fmat;
+  Mat __pyx_v_Pmat;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  Mat __pyx_t_3;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  __Pyx_RefNannySetupContext("setFunction", 0);
+  __Pyx_INCREF(__pyx_v_args);
+  __Pyx_INCREF(__pyx_v_kargs);
+
+  /* "SLEPc/NEP.pyx":626
+ *             preconditioner matrix (usually same as the Function)
+ *         """
+ *         cdef PetscMat Fmat=NULL             # <<<<<<<<<<<<<<
+ *         if F is not None: Fmat = F.mat
+ *         cdef PetscMat Pmat=Fmat
  */
+  __pyx_v_Fmat = NULL;
 
-static FN __pyx_f_8slepc4py_5SLEPc_PySlepcFN_Get(PyObject *__pyx_v_arg) {
-  FN __pyx_v_retv;
-  struct PySlepcFNObject *__pyx_v_ob = 0;
-  FN __pyx_r;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  FN __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PySlepcFN_Get", 0);
+  /* "SLEPc/NEP.pyx":627
+ *         """
+ *         cdef PetscMat Fmat=NULL
+ *         if F is not None: Fmat = F.mat             # <<<<<<<<<<<<<<
+ *         cdef PetscMat Pmat=Fmat
+ *         if P is not None: Pmat = P.mat
+ */
+  __pyx_t_1 = (((PyObject *)__pyx_v_F) != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_v_F->mat;
+    __pyx_v_Fmat = __pyx_t_3;
+  }
 
-  /* "SLEPc/CAPI.pyx":65
- * 
- * cdef api SlepcFN PySlepcFN_Get(object arg) except ? NULL:
- *     cdef SlepcFN retv = NULL             # <<<<<<<<<<<<<<
- *     cdef FN ob = <FN?> arg
- *     retv = ob.fn
+  /* "SLEPc/NEP.pyx":628
+ *         cdef PetscMat Fmat=NULL
+ *         if F is not None: Fmat = F.mat
+ *         cdef PetscMat Pmat=Fmat             # <<<<<<<<<<<<<<
+ *         if P is not None: Pmat = P.mat
+ *         CHKERR( NEPSetFunction(self.nep, Fmat, Pmat, NEP_Function, NULL) )
  */
-  __pyx_v_retv = NULL;
+  __pyx_v_Pmat = __pyx_v_Fmat;
 
-  /* "SLEPc/CAPI.pyx":66
- * cdef api SlepcFN PySlepcFN_Get(object arg) except ? NULL:
- *     cdef SlepcFN retv = NULL
- *     cdef FN ob = <FN?> arg             # <<<<<<<<<<<<<<
- *     retv = ob.fn
- *     return retv
+  /* "SLEPc/NEP.pyx":629
+ *         if F is not None: Fmat = F.mat
+ *         cdef PetscMat Pmat=Fmat
+ *         if P is not None: Pmat = P.mat             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPSetFunction(self.nep, Fmat, Pmat, NEP_Function, NULL) )
+ *         if args is None: args = ()
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8slepc4py_5SLEPc_FN)))) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_1 = __pyx_v_arg;
-  __Pyx_INCREF(__pyx_t_1);
-  __pyx_v_ob = ((struct PySlepcFNObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_2 = (((PyObject *)__pyx_v_P) != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_3 = __pyx_v_P->mat;
+    __pyx_v_Pmat = __pyx_t_3;
+  }
 
-  /* "SLEPc/CAPI.pyx":67
- *     cdef SlepcFN retv = NULL
- *     cdef FN ob = <FN?> arg
- *     retv = ob.fn             # <<<<<<<<<<<<<<
- *     return retv
+  /* "SLEPc/NEP.pyx":630
+ *         cdef PetscMat Pmat=Fmat
+ *         if P is not None: Pmat = P.mat
+ *         CHKERR( NEPSetFunction(self.nep, Fmat, Pmat, NEP_Function, NULL) )             # <<<<<<<<<<<<<<
+ *         if args is None: args = ()
+ *         if kargs is None: kargs = {}
+ */
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetFunction(__pyx_v_self->nep, __pyx_v_Fmat, __pyx_v_Pmat, __pyx_f_8slepc4py_5SLEPc_NEP_Function, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(16, 630, __pyx_L1_error)
+
+  /* "SLEPc/NEP.pyx":631
+ *         if P is not None: Pmat = P.mat
+ *         CHKERR( NEPSetFunction(self.nep, Fmat, Pmat, NEP_Function, NULL) )
+ *         if args is None: args = ()             # <<<<<<<<<<<<<<
+ *         if kargs is None: kargs = {}
+ *         self.set_attr('__function__', (function, args, kargs))
+ */
+  __pyx_t_1 = (__pyx_v_args == Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __Pyx_INCREF(__pyx_empty_tuple);
+    __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
+  }
+
+  /* "SLEPc/NEP.pyx":632
+ *         CHKERR( NEPSetFunction(self.nep, Fmat, Pmat, NEP_Function, NULL) )
+ *         if args is None: args = ()
+ *         if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
+ *         self.set_attr('__function__', (function, args, kargs))
  * 
  */
-  __pyx_t_2 = __pyx_v_ob->fn;
-  __pyx_v_retv = __pyx_t_2;
+  __pyx_t_2 = (__pyx_v_kargs == Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 632, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_5);
+    __pyx_t_5 = 0;
+  }
 
-  /* "SLEPc/CAPI.pyx":68
- *     cdef FN ob = <FN?> arg
- *     retv = ob.fn
- *     return retv             # <<<<<<<<<<<<<<
+  /* "SLEPc/NEP.pyx":633
+ *         if args is None: args = ()
+ *         if kargs is None: kargs = {}
+ *         self.set_attr('__function__', (function, args, kargs))             # <<<<<<<<<<<<<<
  * 
- * # -----------------------------------------------------------------------------
+ *     def setJacobian(self, jacobian, Mat J, args=None, kargs=None):
  */
-  __pyx_r = __pyx_v_retv;
-  goto __pyx_L0;
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 633, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_INCREF(__pyx_v_function);
+  __Pyx_GIVEREF(__pyx_v_function);
+  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_function);
+  __Pyx_INCREF(__pyx_v_args);
+  __Pyx_GIVEREF(__pyx_v_args);
+  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_args);
+  __Pyx_INCREF(__pyx_v_kargs);
+  __Pyx_GIVEREF(__pyx_v_kargs);
+  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_kargs);
+  __pyx_t_6 = ((struct __pyx_vtabstruct_8slepc4py_5SLEPc_NEP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__function__"), __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(16, 633, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "SLEPc/CAPI.pyx":64
- *     return retv
+  /* "SLEPc/NEP.pyx":612
+ *         CHKERR( NEPErrorView(self.nep, et, vwr) )
  * 
- * cdef api SlepcFN PySlepcFN_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
- *     cdef SlepcFN retv = NULL
- *     cdef FN ob = <FN?> arg
+ *     def setFunction(self, function, Mat F, Mat P=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the function to compute the nonlinear Function T(lambda)
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcFN_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setFunction", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_ob);
+  __Pyx_XDECREF(__pyx_v_args);
+  __Pyx_XDECREF(__pyx_v_kargs);
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/CAPI.pyx":74
- * # -- RG --
+/* "SLEPc/NEP.pyx":635
+ *         self.set_attr('__function__', (function, args, kargs))
  * 
- * cdef api object PySlepcRG_New(SlepcRG arg):             # <<<<<<<<<<<<<<
- *     cdef RG retv = RG()
- *     setref(&retv.rg, arg)
+ *     def setJacobian(self, jacobian, Mat J, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the function to compute Jacobian T'(lambda) as well
  */
 
-static PyObject *__pyx_f_8slepc4py_5SLEPc_PySlepcRG_New(RG __pyx_v_arg) {
-  struct PySlepcRGObject *__pyx_v_retv = 0;
-  PyObject *__pyx_r = NULL;
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_75setJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_74setJacobian[] = "NEP.setJacobian(self, jacobian, Mat J, args=None, kargs=None)\n\n        Sets the function to compute Jacobian T'(lambda) as well\n        as the location to store the matrix.\n\n        Parameters\n        ----------\n        jacobian:\n            Jacobian evaluation routine\n        J: Mat\n            Jacobian matrix\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_75setJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_jacobian = 0;
+  struct PyPetscMatObject *__pyx_v_J = 0;
+  PyObject *__pyx_v_args = 0;
+  PyObject *__pyx_v_kargs = 0;
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PySlepcRG_New", 0);
-
-  /* "SLEPc/CAPI.pyx":75
- * 
- * cdef api object PySlepcRG_New(SlepcRG arg):
- *     cdef RG retv = RG()             # <<<<<<<<<<<<<<
- *     setref(&retv.rg, arg)
- *     return retv
- */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_RG)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_retv = ((struct PySlepcRGObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "SLEPc/CAPI.pyx":76
- * cdef api object PySlepcRG_New(SlepcRG arg):
- *     cdef RG retv = RG()
- *     setref(&retv.rg, arg)             # <<<<<<<<<<<<<<
- *     return retv
- * 
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_setref((&__pyx_v_retv->rg), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/CAPI.pyx":77
- *     cdef RG retv = RG()
- *     setref(&retv.rg, arg)
- *     return retv             # <<<<<<<<<<<<<<
- * 
- * cdef api SlepcRG PySlepcRG_Get(object arg) except ? NULL:
- */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_retv));
-  __pyx_r = ((PyObject *)__pyx_v_retv);
-  goto __pyx_L0;
-
-  /* "SLEPc/CAPI.pyx":74
- * # -- RG --
- * 
- * cdef api object PySlepcRG_New(SlepcRG arg):             # <<<<<<<<<<<<<<
- *     cdef RG retv = RG()
- *     setref(&retv.rg, arg)
- */
+  __Pyx_RefNannySetupContext("setJacobian (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_jacobian,&__pyx_n_s_J,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    PyObject* values[4] = {0,0,0,0};
+    values[2] = ((PyObject *)Py_None);
+    values[3] = ((PyObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_jacobian)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_J)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setJacobian", 0, 2, 4, 1); __PYX_ERR(16, 635, __pyx_L3_error)
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
+          if (value) { values[2] = value; kw_args--; }
+        }
+        case  3:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
+          if (value) { values[3] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setJacobian") < 0)) __PYX_ERR(16, 635, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_jacobian = values[0];
+    __pyx_v_J = ((struct PyPetscMatObject *)values[1]);
+    __pyx_v_args = values[2];
+    __pyx_v_kargs = values[3];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setJacobian", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(16, 635, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setJacobian", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "J", 0))) __PYX_ERR(16, 635, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_74setJacobian(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_jacobian, __pyx_v_J, __pyx_v_args, __pyx_v_kargs);
 
   /* function exit code */
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcRG_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
+  __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_retv);
-  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/CAPI.pyx":79
- *     return retv
- * 
- * cdef api SlepcRG PySlepcRG_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
- *     cdef SlepcRG retv = NULL
- *     cdef RG ob = <RG?> arg
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_74setJacobian(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_jacobian, struct PyPetscMatObject *__pyx_v_J, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+  Mat __pyx_v_Jmat;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  Mat __pyx_t_3;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  __Pyx_RefNannySetupContext("setJacobian", 0);
+  __Pyx_INCREF(__pyx_v_args);
+  __Pyx_INCREF(__pyx_v_kargs);
+
+  /* "SLEPc/NEP.pyx":647
+ *             Jacobian matrix
+ *         """
+ *         cdef PetscMat Jmat=NULL             # <<<<<<<<<<<<<<
+ *         if J is not None: Jmat = J.mat
+ *         CHKERR( NEPSetJacobian(self.nep, Jmat, NEP_Jacobian, NULL) )
  */
+  __pyx_v_Jmat = NULL;
 
-static RG __pyx_f_8slepc4py_5SLEPc_PySlepcRG_Get(PyObject *__pyx_v_arg) {
-  RG __pyx_v_retv;
-  struct PySlepcRGObject *__pyx_v_ob = 0;
-  RG __pyx_r;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  RG __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PySlepcRG_Get", 0);
+  /* "SLEPc/NEP.pyx":648
+ *         """
+ *         cdef PetscMat Jmat=NULL
+ *         if J is not None: Jmat = J.mat             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPSetJacobian(self.nep, Jmat, NEP_Jacobian, NULL) )
+ *         if args is None: args = ()
+ */
+  __pyx_t_1 = (((PyObject *)__pyx_v_J) != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_v_J->mat;
+    __pyx_v_Jmat = __pyx_t_3;
+  }
 
-  /* "SLEPc/CAPI.pyx":80
- * 
- * cdef api SlepcRG PySlepcRG_Get(object arg) except ? NULL:
- *     cdef SlepcRG retv = NULL             # <<<<<<<<<<<<<<
- *     cdef RG ob = <RG?> arg
- *     retv = ob.rg
+  /* "SLEPc/NEP.pyx":649
+ *         cdef PetscMat Jmat=NULL
+ *         if J is not None: Jmat = J.mat
+ *         CHKERR( NEPSetJacobian(self.nep, Jmat, NEP_Jacobian, NULL) )             # <<<<<<<<<<<<<<
+ *         if args is None: args = ()
+ *         if kargs is None: kargs = {}
  */
-  __pyx_v_retv = NULL;
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetJacobian(__pyx_v_self->nep, __pyx_v_Jmat, __pyx_f_8slepc4py_5SLEPc_NEP_Jacobian, NULL)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(16, 649, __pyx_L1_error)
 
-  /* "SLEPc/CAPI.pyx":81
- * cdef api SlepcRG PySlepcRG_Get(object arg) except ? NULL:
- *     cdef SlepcRG retv = NULL
- *     cdef RG ob = <RG?> arg             # <<<<<<<<<<<<<<
- *     retv = ob.rg
- *     return retv
+  /* "SLEPc/NEP.pyx":650
+ *         if J is not None: Jmat = J.mat
+ *         CHKERR( NEPSetJacobian(self.nep, Jmat, NEP_Jacobian, NULL) )
+ *         if args is None: args = ()             # <<<<<<<<<<<<<<
+ *         if kargs is None: kargs = {}
+ *         self.set_attr('__jacobian__', (jacobian, args, kargs))
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8slepc4py_5SLEPc_RG)))) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_1 = __pyx_v_arg;
-  __Pyx_INCREF(__pyx_t_1);
-  __pyx_v_ob = ((struct PySlepcRGObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_2 = (__pyx_v_args == Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __Pyx_INCREF(__pyx_empty_tuple);
+    __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
+  }
 
-  /* "SLEPc/CAPI.pyx":82
- *     cdef SlepcRG retv = NULL
- *     cdef RG ob = <RG?> arg
- *     retv = ob.rg             # <<<<<<<<<<<<<<
- *     return retv
+  /* "SLEPc/NEP.pyx":651
+ *         CHKERR( NEPSetJacobian(self.nep, Jmat, NEP_Jacobian, NULL) )
+ *         if args is None: args = ()
+ *         if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
+ *         self.set_attr('__jacobian__', (jacobian, args, kargs))
  * 
  */
-  __pyx_t_2 = __pyx_v_ob->rg;
-  __pyx_v_retv = __pyx_t_2;
+  __pyx_t_1 = (__pyx_v_kargs == Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 651, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_5);
+    __pyx_t_5 = 0;
+  }
 
-  /* "SLEPc/CAPI.pyx":83
- *     cdef RG ob = <RG?> arg
- *     retv = ob.rg
- *     return retv             # <<<<<<<<<<<<<<
+  /* "SLEPc/NEP.pyx":652
+ *         if args is None: args = ()
+ *         if kargs is None: kargs = {}
+ *         self.set_attr('__jacobian__', (jacobian, args, kargs))             # <<<<<<<<<<<<<<
  * 
- * # -----------------------------------------------------------------------------
+ *     def setSplitOperator(self, A, f, structure=None):
  */
-  __pyx_r = __pyx_v_retv;
-  goto __pyx_L0;
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 652, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_INCREF(__pyx_v_jacobian);
+  __Pyx_GIVEREF(__pyx_v_jacobian);
+  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_jacobian);
+  __Pyx_INCREF(__pyx_v_args);
+  __Pyx_GIVEREF(__pyx_v_args);
+  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_args);
+  __Pyx_INCREF(__pyx_v_kargs);
+  __Pyx_GIVEREF(__pyx_v_kargs);
+  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_kargs);
+  __pyx_t_6 = ((struct __pyx_vtabstruct_8slepc4py_5SLEPc_NEP *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__jacobian__"), __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(16, 652, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "SLEPc/CAPI.pyx":79
- *     return retv
+  /* "SLEPc/NEP.pyx":635
+ *         self.set_attr('__function__', (function, args, kargs))
  * 
- * cdef api SlepcRG PySlepcRG_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
- *     cdef SlepcRG retv = NULL
- *     cdef RG ob = <RG?> arg
+ *     def setJacobian(self, jacobian, Mat J, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the function to compute Jacobian T'(lambda) as well
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcRG_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setJacobian", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_ob);
+  __Pyx_XDECREF(__pyx_v_args);
+  __Pyx_XDECREF(__pyx_v_kargs);
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/CAPI.pyx":89
- * # -- EPS --
+/* "SLEPc/NEP.pyx":654
+ *         self.set_attr('__jacobian__', (jacobian, args, kargs))
  * 
- * cdef api object PySlepcEPS_New(SlepcEPS arg):             # <<<<<<<<<<<<<<
- *     cdef EPS retv = EPS()
- *     setref(&retv.eps, arg)
+ *     def setSplitOperator(self, A, f, structure=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the operator of the nonlinear eigenvalue problem
  */
 
-static PyObject *__pyx_f_8slepc4py_5SLEPc_PySlepcEPS_New(EPS __pyx_v_arg) {
-  struct PySlepcEPSObject *__pyx_v_retv = 0;
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_77setSplitOperator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3NEP_76setSplitOperator[] = "NEP.setSplitOperator(self, A, f, structure=None)\n\n        Sets the operator of the nonlinear eigenvalue problem\n        in split form.\n\n        Parameters\n        ----------\n        A: Mat or sequence of Mat\n            Coefficient matrices of the split form.\n        f: sequence of FN\n            Scalar functions of the split form.\n        structure: `PETSc.Mat.Structure` enumerate, optional\n            Struc [...]
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3NEP_77setSplitOperator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_A = 0;
+  PyObject *__pyx_v_f = 0;
+  PyObject *__pyx_v_structure = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setSplitOperator (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_A,&__pyx_n_s_f,&__pyx_n_s_structure,0};
+    PyObject* values[3] = {0,0,0};
+    values[2] = ((PyObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_f)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setSplitOperator", 0, 2, 3, 1); __PYX_ERR(16, 654, __pyx_L3_error)
+        }
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_structure);
+          if (value) { values[2] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSplitOperator") < 0)) __PYX_ERR(16, 654, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_A = values[0];
+    __pyx_v_f = values[1];
+    __pyx_v_structure = values[2];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setSplitOperator", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(16, 654, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setSplitOperator", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3NEP_76setSplitOperator(((struct PySlepcNEPObject *)__pyx_v_self), __pyx_v_A, __pyx_v_f, __pyx_v_structure);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3NEP_76setSplitOperator(struct PySlepcNEPObject *__pyx_v_self, PyObject *__pyx_v_A, PyObject *__pyx_v_f, PyObject *__pyx_v_structure) {
+  Mat *__pyx_v_As;
+  FN *__pyx_v_Fs;
+  Py_ssize_t __pyx_v_i;
+  Py_ssize_t __pyx_v_n;
+  MatStructure __pyx_v_mstr;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp2 = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PySlepcEPS_New", 0);
+  PyObject *__pyx_t_3 = NULL;
+  Py_ssize_t __pyx_t_4;
+  MatStructure __pyx_t_5;
+  Py_ssize_t __pyx_t_6;
+  Mat __pyx_t_7;
+  FN __pyx_t_8;
+  int __pyx_t_9;
+  __Pyx_RefNannySetupContext("setSplitOperator", 0);
+  __Pyx_INCREF(__pyx_v_A);
+  __Pyx_INCREF(__pyx_v_f);
 
-  /* "SLEPc/CAPI.pyx":90
- * 
- * cdef api object PySlepcEPS_New(SlepcEPS arg):
- *     cdef EPS retv = EPS()             # <<<<<<<<<<<<<<
- *     setref(&retv.eps, arg)
- *     return retv
+  /* "SLEPc/NEP.pyx":668
+ *             Structure flag for matrices.
+ *         """
+ *         if isinstance(A, Mat): A = [A]             # <<<<<<<<<<<<<<
+ *         if isinstance(f, FN):  f = [f]
+ *         cdef PetscMat *As = NULL
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_EPS)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_retv = ((struct PySlepcEPSObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_A, __pyx_ptype_8petsc4py_5PETSc_Mat); 
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 668, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_v_A);
+    __Pyx_GIVEREF(__pyx_v_A);
+    PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_A);
+    __Pyx_DECREF_SET(__pyx_v_A, __pyx_t_3);
+    __pyx_t_3 = 0;
+  }
 
-  /* "SLEPc/CAPI.pyx":91
- * cdef api object PySlepcEPS_New(SlepcEPS arg):
- *     cdef EPS retv = EPS()
- *     setref(&retv.eps, arg)             # <<<<<<<<<<<<<<
- *     return retv
+  /* "SLEPc/NEP.pyx":669
+ *         """
+ *         if isinstance(A, Mat): A = [A]
+ *         if isinstance(f, FN):  f = [f]             # <<<<<<<<<<<<<<
+ *         cdef PetscMat *As = NULL
+ *         cdef SlepcFN  *Fs = NULL
+ */
+  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_f, __pyx_ptype_8slepc4py_5SLEPc_FN); 
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 669, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_v_f);
+    __Pyx_GIVEREF(__pyx_v_f);
+    PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_f);
+    __Pyx_DECREF_SET(__pyx_v_f, __pyx_t_3);
+    __pyx_t_3 = 0;
+  }
+
+  /* "SLEPc/NEP.pyx":670
+ *         if isinstance(A, Mat): A = [A]
+ *         if isinstance(f, FN):  f = [f]
+ *         cdef PetscMat *As = NULL             # <<<<<<<<<<<<<<
+ *         cdef SlepcFN  *Fs = NULL
+ *         cdef Py_ssize_t i = 0, n = len(A)
+ */
+  __pyx_v_As = NULL;
+
+  /* "SLEPc/NEP.pyx":671
+ *         if isinstance(f, FN):  f = [f]
+ *         cdef PetscMat *As = NULL
+ *         cdef SlepcFN  *Fs = NULL             # <<<<<<<<<<<<<<
+ *         cdef Py_ssize_t i = 0, n = len(A)
+ *         cdef PetscMatStructure mstr = matstructure(structure)
+ */
+  __pyx_v_Fs = NULL;
+
+  /* "SLEPc/NEP.pyx":672
+ *         cdef PetscMat *As = NULL
+ *         cdef SlepcFN  *Fs = NULL
+ *         cdef Py_ssize_t i = 0, n = len(A)             # <<<<<<<<<<<<<<
+ *         cdef PetscMatStructure mstr = matstructure(structure)
+ *         assert n == len(f)
+ */
+  __pyx_v_i = 0;
+  __pyx_t_4 = PyObject_Length(__pyx_v_A); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(16, 672, __pyx_L1_error)
+  __pyx_v_n = __pyx_t_4;
+
+  /* "SLEPc/NEP.pyx":673
+ *         cdef SlepcFN  *Fs = NULL
+ *         cdef Py_ssize_t i = 0, n = len(A)
+ *         cdef PetscMatStructure mstr = matstructure(structure)             # <<<<<<<<<<<<<<
+ *         assert n == len(f)
+ *         cdef tmp1 = allocate(<size_t>n*sizeof(Mat),<void**>&As)
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_matstructure(__pyx_v_structure); if (unlikely(__pyx_t_5 == ((MatStructure)-1L))) __PYX_ERR(16, 673, __pyx_L1_error)
+  __pyx_v_mstr = __pyx_t_5;
+
+  /* "SLEPc/NEP.pyx":674
+ *         cdef Py_ssize_t i = 0, n = len(A)
+ *         cdef PetscMatStructure mstr = matstructure(structure)
+ *         assert n == len(f)             # <<<<<<<<<<<<<<
+ *         cdef tmp1 = allocate(<size_t>n*sizeof(Mat),<void**>&As)
+ *         cdef tmp2 = allocate(<size_t>n*sizeof(FN),<void**>&Fs)
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!Py_OptimizeFlag)) {
+    __pyx_t_4 = PyObject_Length(__pyx_v_f); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(16, 674, __pyx_L1_error)
+    if (unlikely(!((__pyx_v_n == __pyx_t_4) != 0))) {
+      PyErr_SetNone(PyExc_AssertionError);
+      __PYX_ERR(16, 674, __pyx_L1_error)
+    }
+  }
+  #endif
+
+  /* "SLEPc/NEP.pyx":675
+ *         cdef PetscMatStructure mstr = matstructure(structure)
+ *         assert n == len(f)
+ *         cdef tmp1 = allocate(<size_t>n*sizeof(Mat),<void**>&As)             # <<<<<<<<<<<<<<
+ *         cdef tmp2 = allocate(<size_t>n*sizeof(FN),<void**>&Fs)
+ *         for i in range(n):
+ */
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_allocate((((size_t)__pyx_v_n) * (sizeof(struct PyPetscMatObject))), ((void **)(&__pyx_v_As))); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 675, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_v_tmp1 = __pyx_t_3;
+  __pyx_t_3 = 0;
+
+  /* "SLEPc/NEP.pyx":676
+ *         assert n == len(f)
+ *         cdef tmp1 = allocate(<size_t>n*sizeof(Mat),<void**>&As)
+ *         cdef tmp2 = allocate(<size_t>n*sizeof(FN),<void**>&Fs)             # <<<<<<<<<<<<<<
+ *         for i in range(n):
+ *             As[i] = (<Mat?>A[i]).mat
+ */
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_allocate((((size_t)__pyx_v_n) * (sizeof(struct PySlepcFNObject))), ((void **)(&__pyx_v_Fs))); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 676, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_v_tmp2 = __pyx_t_3;
+  __pyx_t_3 = 0;
+
+  /* "SLEPc/NEP.pyx":677
+ *         cdef tmp1 = allocate(<size_t>n*sizeof(Mat),<void**>&As)
+ *         cdef tmp2 = allocate(<size_t>n*sizeof(FN),<void**>&Fs)
+ *         for i in range(n):             # <<<<<<<<<<<<<<
+ *             As[i] = (<Mat?>A[i]).mat
+ *             Fs[i] = (<FN?>f[i]).fn
+ */
+  __pyx_t_4 = __pyx_v_n;
+  for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_4; __pyx_t_6+=1) {
+    __pyx_v_i = __pyx_t_6;
+
+    /* "SLEPc/NEP.pyx":678
+ *         cdef tmp2 = allocate(<size_t>n*sizeof(FN),<void**>&Fs)
+ *         for i in range(n):
+ *             As[i] = (<Mat?>A[i]).mat             # <<<<<<<<<<<<<<
+ *             Fs[i] = (<FN?>f[i]).fn
+ *         CHKERR( NEPSetSplitOperator(self.nep, <PetscInt>n, As, Fs, mstr) )
+ */
+    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_A, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 678, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_Mat)))) __PYX_ERR(16, 678, __pyx_L1_error)
+    __pyx_t_7 = ((struct PyPetscMatObject *)__pyx_t_3)->mat;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    (__pyx_v_As[__pyx_v_i]) = __pyx_t_7;
+
+    /* "SLEPc/NEP.pyx":679
+ *         for i in range(n):
+ *             As[i] = (<Mat?>A[i]).mat
+ *             Fs[i] = (<FN?>f[i]).fn             # <<<<<<<<<<<<<<
+ *         CHKERR( NEPSetSplitOperator(self.nep, <PetscInt>n, As, Fs, mstr) )
  * 
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_setref((&__pyx_v_retv->eps), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_f, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 679, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8slepc4py_5SLEPc_FN)))) __PYX_ERR(16, 679, __pyx_L1_error)
+    __pyx_t_8 = ((struct PySlepcFNObject *)__pyx_t_3)->fn;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    (__pyx_v_Fs[__pyx_v_i]) = __pyx_t_8;
+  }
 
-  /* "SLEPc/CAPI.pyx":92
- *     cdef EPS retv = EPS()
- *     setref(&retv.eps, arg)
- *     return retv             # <<<<<<<<<<<<<<
+  /* "SLEPc/NEP.pyx":680
+ *             As[i] = (<Mat?>A[i]).mat
+ *             Fs[i] = (<FN?>f[i]).fn
+ *         CHKERR( NEPSetSplitOperator(self.nep, <PetscInt>n, As, Fs, mstr) )             # <<<<<<<<<<<<<<
  * 
- * cdef api SlepcEPS PySlepcEPS_Get(object arg) except ? NULL:
+ * # -----------------------------------------------------------------------------
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_retv));
-  __pyx_r = ((PyObject *)__pyx_v_retv);
-  goto __pyx_L0;
+  __pyx_t_9 = __pyx_f_8slepc4py_5SLEPc_CHKERR(NEPSetSplitOperator(__pyx_v_self->nep, ((PetscInt)__pyx_v_n), __pyx_v_As, __pyx_v_Fs, __pyx_v_mstr)); if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(16, 680, __pyx_L1_error)
 
-  /* "SLEPc/CAPI.pyx":89
- * # -- EPS --
+  /* "SLEPc/NEP.pyx":654
+ *         self.set_attr('__jacobian__', (jacobian, args, kargs))
  * 
- * cdef api object PySlepcEPS_New(SlepcEPS arg):             # <<<<<<<<<<<<<<
- *     cdef EPS retv = EPS()
- *     setref(&retv.eps, arg)
+ *     def setSplitOperator(self, A, f, structure=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the operator of the nonlinear eigenvalue problem
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcEPS_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("slepc4py.SLEPc.NEP.setSplitOperator", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_retv);
+  __Pyx_XDECREF(__pyx_v_tmp1);
+  __Pyx_XDECREF(__pyx_v_tmp2);
+  __Pyx_XDECREF(__pyx_v_A);
+  __Pyx_XDECREF(__pyx_v_f);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/CAPI.pyx":94
- *     return retv
+/* "SLEPc/MFN.pyx":34
+ *     ConvergedReason = MFNConvergedReason
  * 
- * cdef api SlepcEPS PySlepcEPS_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
- *     cdef SlepcEPS retv = NULL
- *     cdef EPS ob = <EPS?> arg
+ *     def __cinit__(self):             # <<<<<<<<<<<<<<
+ *         self.obj = <PetscObject*> &self.mfn
+ *         self.mfn = NULL
  */
 
-static EPS __pyx_f_8slepc4py_5SLEPc_PySlepcEPS_Get(PyObject *__pyx_v_arg) {
-  EPS __pyx_v_retv;
-  struct PySlepcEPSObject *__pyx_v_ob = 0;
-  EPS __pyx_r;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  EPS __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PySlepcEPS_Get", 0);
-
-  /* "SLEPc/CAPI.pyx":95
- * 
- * cdef api SlepcEPS PySlepcEPS_Get(object arg) except ? NULL:
- *     cdef SlepcEPS retv = NULL             # <<<<<<<<<<<<<<
- *     cdef EPS ob = <EPS?> arg
- *     retv = ob.eps
- */
-  __pyx_v_retv = NULL;
-
-  /* "SLEPc/CAPI.pyx":96
- * cdef api SlepcEPS PySlepcEPS_Get(object arg) except ? NULL:
- *     cdef SlepcEPS retv = NULL
- *     cdef EPS ob = <EPS?> arg             # <<<<<<<<<<<<<<
- *     retv = ob.eps
- *     return retv
- */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8slepc4py_5SLEPc_EPS)))) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_1 = __pyx_v_arg;
-  __Pyx_INCREF(__pyx_t_1);
-  __pyx_v_ob = ((struct PySlepcEPSObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "SLEPc/CAPI.pyx":97
- *     cdef SlepcEPS retv = NULL
- *     cdef EPS ob = <EPS?> arg
- *     retv = ob.eps             # <<<<<<<<<<<<<<
- *     return retv
- * 
- */
-  __pyx_t_2 = __pyx_v_ob->eps;
-  __pyx_v_retv = __pyx_t_2;
-
-  /* "SLEPc/CAPI.pyx":98
- *     cdef EPS ob = <EPS?> arg
- *     retv = ob.eps
- *     return retv             # <<<<<<<<<<<<<<
- * 
- * # -----------------------------------------------------------------------------
- */
-  __pyx_r = __pyx_v_retv;
-  goto __pyx_L0;
-
-  /* "SLEPc/CAPI.pyx":94
- *     return retv
- * 
- * cdef api SlepcEPS PySlepcEPS_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
- *     cdef SlepcEPS retv = NULL
- *     cdef EPS ob = <EPS?> arg
- */
+/* Python wrapper */
+static int __pyx_pw_8slepc4py_5SLEPc_3MFN_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pw_8slepc4py_5SLEPc_3MFN_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN___cinit__(((struct PySlepcMFNObject *)__pyx_v_self));
 
   /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcEPS_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_ob);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/CAPI.pyx":104
- * # -- SVD --
- * 
- * cdef api object PySlepcSVD_New(SlepcSVD arg):             # <<<<<<<<<<<<<<
- *     cdef SVD retv = SVD()
- *     setref(&retv.svd, arg)
- */
-
-static PyObject *__pyx_f_8slepc4py_5SLEPc_PySlepcSVD_New(SVD __pyx_v_arg) {
-  struct PySlepcSVDObject *__pyx_v_retv = 0;
-  PyObject *__pyx_r = NULL;
+static int __pyx_pf_8slepc4py_5SLEPc_3MFN___cinit__(struct PySlepcMFNObject *__pyx_v_self) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PySlepcSVD_New", 0);
+  __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "SLEPc/CAPI.pyx":105
+  /* "SLEPc/MFN.pyx":35
  * 
- * cdef api object PySlepcSVD_New(SlepcSVD arg):
- *     cdef SVD retv = SVD()             # <<<<<<<<<<<<<<
- *     setref(&retv.svd, arg)
- *     return retv
- */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_SVD)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_retv = ((struct PySlepcSVDObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "SLEPc/CAPI.pyx":106
- * cdef api object PySlepcSVD_New(SlepcSVD arg):
- *     cdef SVD retv = SVD()
- *     setref(&retv.svd, arg)             # <<<<<<<<<<<<<<
- *     return retv
+ *     def __cinit__(self):
+ *         self.obj = <PetscObject*> &self.mfn             # <<<<<<<<<<<<<<
+ *         self.mfn = NULL
  * 
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_setref((&__pyx_v_retv->svd), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->__pyx_base.obj = ((PetscObject *)(&__pyx_v_self->mfn));
 
-  /* "SLEPc/CAPI.pyx":107
- *     cdef SVD retv = SVD()
- *     setref(&retv.svd, arg)
- *     return retv             # <<<<<<<<<<<<<<
+  /* "SLEPc/MFN.pyx":36
+ *     def __cinit__(self):
+ *         self.obj = <PetscObject*> &self.mfn
+ *         self.mfn = NULL             # <<<<<<<<<<<<<<
  * 
- * cdef api SlepcSVD PySlepcSVD_Get(object arg) except ? NULL:
+ *     def view(self, Viewer viewer=None):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_retv));
-  __pyx_r = ((PyObject *)__pyx_v_retv);
-  goto __pyx_L0;
+  __pyx_v_self->mfn = NULL;
 
-  /* "SLEPc/CAPI.pyx":104
- * # -- SVD --
+  /* "SLEPc/MFN.pyx":34
+ *     ConvergedReason = MFNConvergedReason
  * 
- * cdef api object PySlepcSVD_New(SlepcSVD arg):             # <<<<<<<<<<<<<<
- *     cdef SVD retv = SVD()
- *     setref(&retv.svd, arg)
+ *     def __cinit__(self):             # <<<<<<<<<<<<<<
+ *         self.obj = <PetscObject*> &self.mfn
+ *         self.mfn = NULL
  */
 
   /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcSVD_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
-  __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_retv);
-  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/CAPI.pyx":109
- *     return retv
+/* "SLEPc/MFN.pyx":38
+ *         self.mfn = NULL
  * 
- * cdef api SlepcSVD PySlepcSVD_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
- *     cdef SlepcSVD retv = NULL
- *     cdef SVD ob = <SVD?> arg
+ *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Prints the MFN data structure.
  */
 
-static SVD __pyx_f_8slepc4py_5SLEPc_PySlepcSVD_Get(PyObject *__pyx_v_arg) {
-  SVD __pyx_v_retv;
-  struct PySlepcSVDObject *__pyx_v_ob = 0;
-  SVD __pyx_r;
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3MFN_2view[] = "MFN.view(self, Viewer viewer=None)\n\n        Prints the MFN data structure.\n\n        Parameters\n        ----------\n        viewer: Viewer, optional.\n            Visualization context; if not provided, the standard\n            output is used.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_3view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscViewerObject *__pyx_v_viewer = 0;
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  SVD __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PySlepcSVD_Get", 0);
-
-  /* "SLEPc/CAPI.pyx":110
- * 
- * cdef api SlepcSVD PySlepcSVD_Get(object arg) except ? NULL:
- *     cdef SlepcSVD retv = NULL             # <<<<<<<<<<<<<<
- *     cdef SVD ob = <SVD?> arg
- *     retv = ob.svd
- */
-  __pyx_v_retv = NULL;
-
-  /* "SLEPc/CAPI.pyx":111
- * cdef api SlepcSVD PySlepcSVD_Get(object arg) except ? NULL:
- *     cdef SlepcSVD retv = NULL
- *     cdef SVD ob = <SVD?> arg             # <<<<<<<<<<<<<<
- *     retv = ob.svd
- *     return retv
- */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8slepc4py_5SLEPc_SVD)))) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_1 = __pyx_v_arg;
-  __Pyx_INCREF(__pyx_t_1);
-  __pyx_v_ob = ((struct PySlepcSVDObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "SLEPc/CAPI.pyx":112
- *     cdef SlepcSVD retv = NULL
- *     cdef SVD ob = <SVD?> arg
- *     retv = ob.svd             # <<<<<<<<<<<<<<
- *     return retv
- * 
- */
-  __pyx_t_2 = __pyx_v_ob->svd;
-  __pyx_v_retv = __pyx_t_2;
-
-  /* "SLEPc/CAPI.pyx":113
- *     cdef SVD ob = <SVD?> arg
- *     retv = ob.svd
- *     return retv             # <<<<<<<<<<<<<<
- * 
- * # -----------------------------------------------------------------------------
- */
-  __pyx_r = __pyx_v_retv;
-  goto __pyx_L0;
-
-  /* "SLEPc/CAPI.pyx":109
- *     return retv
- * 
- * cdef api SlepcSVD PySlepcSVD_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
- *     cdef SlepcSVD retv = NULL
- *     cdef SVD ob = <SVD?> arg
- */
+  __Pyx_RefNannySetupContext("view (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_viewer,0};
+    PyObject* values[1] = {0};
+    values[0] = (PyObject *)((struct PyPetscViewerObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_viewer);
+          if (value) { values[0] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(17, 38, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_viewer = ((struct PyPetscViewerObject *)values[0]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(17, 38, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) __PYX_ERR(17, 38, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_2view(((struct PySlepcMFNObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcSVD_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_ob);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/CAPI.pyx":119
- * # -- PEP --
- * 
- * cdef api object PySlepcPEP_New(SlepcPEP arg):             # <<<<<<<<<<<<<<
- *     cdef PEP retv = PEP()
- *     setref(&retv.pep, arg)
- */
-
-static PyObject *__pyx_f_8slepc4py_5SLEPc_PySlepcPEP_New(PEP __pyx_v_arg) {
-  struct PySlepcPEPObject *__pyx_v_retv = 0;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_2view(struct PySlepcMFNObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
+  PetscViewer __pyx_v_vwr;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PySlepcPEP_New", 0);
+  PetscViewer __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("view", 0);
 
-  /* "SLEPc/CAPI.pyx":120
- * 
- * cdef api object PySlepcPEP_New(SlepcPEP arg):
- *     cdef PEP retv = PEP()             # <<<<<<<<<<<<<<
- *     setref(&retv.pep, arg)
- *     return retv
+  /* "SLEPc/MFN.pyx":48
+ *             output is used.
+ *         """
+ *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( MFNView(self.mfn, vwr) )
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_PEP)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_retv = ((struct PySlepcPEPObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_vwr = NULL;
 
-  /* "SLEPc/CAPI.pyx":121
- * cdef api object PySlepcPEP_New(SlepcPEP arg):
- *     cdef PEP retv = PEP()
- *     setref(&retv.pep, arg)             # <<<<<<<<<<<<<<
- *     return retv
+  /* "SLEPc/MFN.pyx":49
+ *         """
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
+ *         CHKERR( MFNView(self.mfn, vwr) )
  * 
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_setref((&__pyx_v_retv->pep), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (((PyObject *)__pyx_v_viewer) != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_v_viewer->vwr;
+    __pyx_v_vwr = __pyx_t_3;
+  }
 
-  /* "SLEPc/CAPI.pyx":122
- *     cdef PEP retv = PEP()
- *     setref(&retv.pep, arg)
- *     return retv             # <<<<<<<<<<<<<<
+  /* "SLEPc/MFN.pyx":50
+ *         cdef PetscViewer vwr = NULL
+ *         if viewer is not None: vwr = viewer.vwr
+ *         CHKERR( MFNView(self.mfn, vwr) )             # <<<<<<<<<<<<<<
  * 
- * cdef api SlepcPEP PySlepcPEP_Get(object arg) except ? NULL:
+ *     def destroy(self):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_retv));
-  __pyx_r = ((PyObject *)__pyx_v_retv);
-  goto __pyx_L0;
+  __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNView(__pyx_v_self->mfn, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(17, 50, __pyx_L1_error)
 
-  /* "SLEPc/CAPI.pyx":119
- * # -- PEP --
+  /* "SLEPc/MFN.pyx":38
+ *         self.mfn = NULL
  * 
- * cdef api object PySlepcPEP_New(SlepcPEP arg):             # <<<<<<<<<<<<<<
- *     cdef PEP retv = PEP()
- *     setref(&retv.pep, arg)
+ *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Prints the MFN data structure.
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcPEP_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_retv);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/CAPI.pyx":124
- *     return retv
+/* "SLEPc/MFN.pyx":52
+ *         CHKERR( MFNView(self.mfn, vwr) )
  * 
- * cdef api SlepcPEP PySlepcPEP_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
- *     cdef SlepcPEP retv = NULL
- *     cdef PEP ob = <PEP?> arg
+ *     def destroy(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Destroys the MFN object.
  */
 
-static PEP __pyx_f_8slepc4py_5SLEPc_PySlepcPEP_Get(PyObject *__pyx_v_arg) {
-  PEP __pyx_v_retv;
-  struct PySlepcPEPObject *__pyx_v_ob = 0;
-  PEP __pyx_r;
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3MFN_4destroy[] = "MFN.destroy(self)\n\n        Destroys the MFN object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_5destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  PEP __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PySlepcPEP_Get", 0);
+  __Pyx_RefNannySetupContext("destroy (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("destroy", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "destroy", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_4destroy(((struct PySlepcMFNObject *)__pyx_v_self));
 
-  /* "SLEPc/CAPI.pyx":125
- * 
- * cdef api SlepcPEP PySlepcPEP_Get(object arg) except ? NULL:
- *     cdef SlepcPEP retv = NULL             # <<<<<<<<<<<<<<
- *     cdef PEP ob = <PEP?> arg
- *     retv = ob.pep
- */
-  __pyx_v_retv = NULL;
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-  /* "SLEPc/CAPI.pyx":126
- * cdef api SlepcPEP PySlepcPEP_Get(object arg) except ? NULL:
- *     cdef SlepcPEP retv = NULL
- *     cdef PEP ob = <PEP?> arg             # <<<<<<<<<<<<<<
- *     retv = ob.pep
- *     return retv
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_4destroy(struct PySlepcMFNObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("destroy", 0);
+
+  /* "SLEPc/MFN.pyx":56
+ *         Destroys the MFN object.
+ *         """
+ *         CHKERR( MFNDestroy(&self.mfn) )             # <<<<<<<<<<<<<<
+ *         self.mfn = NULL
+ *         return self
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8slepc4py_5SLEPc_PEP)))) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_1 = __pyx_v_arg;
-  __Pyx_INCREF(__pyx_t_1);
-  __pyx_v_ob = ((struct PySlepcPEPObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNDestroy((&__pyx_v_self->mfn))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(17, 56, __pyx_L1_error)
 
-  /* "SLEPc/CAPI.pyx":127
- *     cdef SlepcPEP retv = NULL
- *     cdef PEP ob = <PEP?> arg
- *     retv = ob.pep             # <<<<<<<<<<<<<<
- *     return retv
+  /* "SLEPc/MFN.pyx":57
+ *         """
+ *         CHKERR( MFNDestroy(&self.mfn) )
+ *         self.mfn = NULL             # <<<<<<<<<<<<<<
+ *         return self
  * 
  */
-  __pyx_t_2 = __pyx_v_ob->pep;
-  __pyx_v_retv = __pyx_t_2;
+  __pyx_v_self->mfn = NULL;
 
-  /* "SLEPc/CAPI.pyx":128
- *     cdef PEP ob = <PEP?> arg
- *     retv = ob.pep
- *     return retv             # <<<<<<<<<<<<<<
+  /* "SLEPc/MFN.pyx":58
+ *         CHKERR( MFNDestroy(&self.mfn) )
+ *         self.mfn = NULL
+ *         return self             # <<<<<<<<<<<<<<
  * 
- * # -----------------------------------------------------------------------------
+ *     def reset(self):
  */
-  __pyx_r = __pyx_v_retv;
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "SLEPc/CAPI.pyx":124
- *     return retv
+  /* "SLEPc/MFN.pyx":52
+ *         CHKERR( MFNView(self.mfn, vwr) )
  * 
- * cdef api SlepcPEP PySlepcPEP_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
- *     cdef SlepcPEP retv = NULL
- *     cdef PEP ob = <PEP?> arg
+ *     def destroy(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Destroys the MFN object.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcPEP_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.destroy", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_ob);
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/CAPI.pyx":134
- * # -- NEP --
+/* "SLEPc/MFN.pyx":60
+ *         return self
  * 
- * cdef api object PySlepcNEP_New(SlepcNEP arg):             # <<<<<<<<<<<<<<
- *     cdef NEP retv = NEP()
- *     setref(&retv.nep, arg)
+ *     def reset(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Resets the MFN object.
  */
 
-static PyObject *__pyx_f_8slepc4py_5SLEPc_PySlepcNEP_New(NEP __pyx_v_arg) {
-  struct PySlepcNEPObject *__pyx_v_retv = 0;
-  PyObject *__pyx_r = NULL;
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_7reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3MFN_6reset[] = "MFN.reset(self)\n\n        Resets the MFN object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_7reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PySlepcNEP_New", 0);
+  __Pyx_RefNannySetupContext("reset (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("reset", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "reset", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_6reset(((struct PySlepcMFNObject *)__pyx_v_self));
 
-  /* "SLEPc/CAPI.pyx":135
- * 
- * cdef api object PySlepcNEP_New(SlepcNEP arg):
- *     cdef NEP retv = NEP()             # <<<<<<<<<<<<<<
- *     setref(&retv.nep, arg)
- *     return retv
- */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_NEP)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_retv = ((struct PySlepcNEPObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-  /* "SLEPc/CAPI.pyx":136
- * cdef api object PySlepcNEP_New(SlepcNEP arg):
- *     cdef NEP retv = NEP()
- *     setref(&retv.nep, arg)             # <<<<<<<<<<<<<<
- *     return retv
- * 
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_setref((&__pyx_v_retv->nep), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_6reset(struct PySlepcMFNObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("reset", 0);
 
-  /* "SLEPc/CAPI.pyx":137
- *     cdef NEP retv = NEP()
- *     setref(&retv.nep, arg)
- *     return retv             # <<<<<<<<<<<<<<
+  /* "SLEPc/MFN.pyx":64
+ *         Resets the MFN object.
+ *         """
+ *         CHKERR( MFNReset(self.mfn) )             # <<<<<<<<<<<<<<
  * 
- * cdef api SlepcNEP PySlepcNEP_Get(object arg) except ? NULL:
+ *     def create(self, comm=None):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_retv));
-  __pyx_r = ((PyObject *)__pyx_v_retv);
-  goto __pyx_L0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNReset(__pyx_v_self->mfn)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(17, 64, __pyx_L1_error)
 
-  /* "SLEPc/CAPI.pyx":134
- * # -- NEP --
+  /* "SLEPc/MFN.pyx":60
+ *         return self
  * 
- * cdef api object PySlepcNEP_New(SlepcNEP arg):             # <<<<<<<<<<<<<<
- *     cdef NEP retv = NEP()
- *     setref(&retv.nep, arg)
+ *     def reset(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Resets the MFN object.
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcNEP_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.reset", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_retv);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/CAPI.pyx":139
- *     return retv
+/* "SLEPc/MFN.pyx":66
+ *         CHKERR( MFNReset(self.mfn) )
  * 
- * cdef api SlepcNEP PySlepcNEP_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
- *     cdef SlepcNEP retv = NULL
- *     cdef NEP ob = <NEP?> arg
+ *     def create(self, comm=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Creates the MFN object.
  */
 
-static NEP __pyx_f_8slepc4py_5SLEPc_PySlepcNEP_Get(PyObject *__pyx_v_arg) {
-  NEP __pyx_v_retv;
-  struct PySlepcNEPObject *__pyx_v_ob = 0;
-  NEP __pyx_r;
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3MFN_8create[] = "MFN.create(self, comm=None)\n\n        Creates the MFN object.\n\n        Parameters\n        ----------\n        comm: Comm, optional.\n            MPI communicator. If not provided, it defaults to all\n            processes.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_comm = 0;
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  NEP __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PySlepcNEP_Get", 0);
+  __Pyx_RefNannySetupContext("create (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,0};
+    PyObject* values[1] = {0};
+    values[0] = ((PyObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
+          if (value) { values[0] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(17, 66, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_comm = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(17, 66, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_8create(((struct PySlepcMFNObject *)__pyx_v_self), __pyx_v_comm);
 
-  /* "SLEPc/CAPI.pyx":140
- * 
- * cdef api SlepcNEP PySlepcNEP_Get(object arg) except ? NULL:
- *     cdef SlepcNEP retv = NULL             # <<<<<<<<<<<<<<
- *     cdef NEP ob = <NEP?> arg
- *     retv = ob.nep
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_8create(struct PySlepcMFNObject *__pyx_v_self, PyObject *__pyx_v_comm) {
+  MPI_Comm __pyx_v_ccomm;
+  MFN __pyx_v_newmfn;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  MPI_Comm __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("create", 0);
+
+  /* "SLEPc/MFN.pyx":76
+ *             processes.
+ *         """
+ *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())             # <<<<<<<<<<<<<<
+ *         cdef SlepcMFN newmfn = NULL
+ *         CHKERR( MFNCreate(ccomm, &newmfn) )
  */
-  __pyx_v_retv = NULL;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_def_Comm(__pyx_v_comm, __pyx_f_8slepc4py_5SLEPc_SLEPC_COMM_DEFAULT()); if (unlikely(PyErr_Occurred())) __PYX_ERR(17, 76, __pyx_L1_error)
+  __pyx_v_ccomm = __pyx_t_1;
 
-  /* "SLEPc/CAPI.pyx":141
- * cdef api SlepcNEP PySlepcNEP_Get(object arg) except ? NULL:
- *     cdef SlepcNEP retv = NULL
- *     cdef NEP ob = <NEP?> arg             # <<<<<<<<<<<<<<
- *     retv = ob.nep
- *     return retv
+  /* "SLEPc/MFN.pyx":77
+ *         """
+ *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
+ *         cdef SlepcMFN newmfn = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( MFNCreate(ccomm, &newmfn) )
+ *         SlepcCLEAR(self.obj); self.mfn = newmfn
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8slepc4py_5SLEPc_NEP)))) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_1 = __pyx_v_arg;
-  __Pyx_INCREF(__pyx_t_1);
-  __pyx_v_ob = ((struct PySlepcNEPObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_newmfn = NULL;
 
-  /* "SLEPc/CAPI.pyx":142
- *     cdef SlepcNEP retv = NULL
- *     cdef NEP ob = <NEP?> arg
- *     retv = ob.nep             # <<<<<<<<<<<<<<
- *     return retv
+  /* "SLEPc/MFN.pyx":78
+ *         cdef MPI_Comm ccomm = def_Comm(comm, SLEPC_COMM_DEFAULT())
+ *         cdef SlepcMFN newmfn = NULL
+ *         CHKERR( MFNCreate(ccomm, &newmfn) )             # <<<<<<<<<<<<<<
+ *         SlepcCLEAR(self.obj); self.mfn = newmfn
+ *         return self
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNCreate(__pyx_v_ccomm, (&__pyx_v_newmfn))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(17, 78, __pyx_L1_error)
+
+  /* "SLEPc/MFN.pyx":79
+ *         cdef SlepcMFN newmfn = NULL
+ *         CHKERR( MFNCreate(ccomm, &newmfn) )
+ *         SlepcCLEAR(self.obj); self.mfn = newmfn             # <<<<<<<<<<<<<<
+ *         return self
  * 
  */
-  __pyx_t_2 = __pyx_v_ob->nep;
-  __pyx_v_retv = __pyx_t_2;
+  __pyx_f_8slepc4py_5SLEPc_SlepcCLEAR(__pyx_v_self->__pyx_base.obj);
+  __pyx_v_self->mfn = __pyx_v_newmfn;
 
-  /* "SLEPc/CAPI.pyx":143
- *     cdef NEP ob = <NEP?> arg
- *     retv = ob.nep
- *     return retv             # <<<<<<<<<<<<<<
+  /* "SLEPc/MFN.pyx":80
+ *         CHKERR( MFNCreate(ccomm, &newmfn) )
+ *         SlepcCLEAR(self.obj); self.mfn = newmfn
+ *         return self             # <<<<<<<<<<<<<<
  * 
- * # -----------------------------------------------------------------------------
+ *     def setType(self, mfn_type):
  */
-  __pyx_r = __pyx_v_retv;
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_self));
+  __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "SLEPc/CAPI.pyx":139
- *     return retv
+  /* "SLEPc/MFN.pyx":66
+ *         CHKERR( MFNReset(self.mfn) )
  * 
- * cdef api SlepcNEP PySlepcNEP_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
- *     cdef SlepcNEP retv = NULL
- *     cdef NEP ob = <NEP?> arg
+ *     def create(self, comm=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Creates the MFN object.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcNEP_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_ob);
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/CAPI.pyx":149
- * # -- MFN --
+/* "SLEPc/MFN.pyx":82
+ *         return self
  * 
- * cdef api object PySlepcMFN_New(SlepcMFN arg):             # <<<<<<<<<<<<<<
- *     cdef MFN retv = MFN()
- *     setref(&retv.mfn, arg)
+ *     def setType(self, mfn_type):             # <<<<<<<<<<<<<<
+ *         """
+ *         Selects the particular solver to be used in the MFN object.
  */
 
-static PyObject *__pyx_f_8slepc4py_5SLEPc_PySlepcMFN_New(MFN __pyx_v_arg) {
-  struct PySlepcMFNObject *__pyx_v_retv = 0;
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3MFN_10setType[] = "MFN.setType(self, mfn_type)\n\n        Selects the particular solver to be used in the MFN object.\n\n        Parameters\n        ----------\n        mfn_type: `MFN.Type` enumerate\n            The solver to be used.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_11setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_mfn_type = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setType (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mfn_type,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mfn_type)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(17, 82, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_mfn_type = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(17, 82, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_10setType(((struct PySlepcMFNObject *)__pyx_v_self), __pyx_v_mfn_type);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_10setType(struct PySlepcMFNObject *__pyx_v_self, PyObject *__pyx_v_mfn_type) {
+  const char* __pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PySlepcMFN_New", 0);
+  __Pyx_RefNannySetupContext("setType", 0);
+  __Pyx_INCREF(__pyx_v_mfn_type);
 
-  /* "SLEPc/CAPI.pyx":150
- * 
- * cdef api object PySlepcMFN_New(SlepcMFN arg):
- *     cdef MFN retv = MFN()             # <<<<<<<<<<<<<<
- *     setref(&retv.mfn, arg)
- *     return retv
+  /* "SLEPc/MFN.pyx":91
+ *             The solver to be used.
+ *         """
+ *         cdef SlepcMFNType cval = NULL             # <<<<<<<<<<<<<<
+ *         mfn_type = str2bytes(mfn_type, &cval)
+ *         CHKERR( MFNSetType(self.mfn, cval) )
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_MFN)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_retv = ((struct PySlepcMFNObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_cval = NULL;
 
-  /* "SLEPc/CAPI.pyx":151
- * cdef api object PySlepcMFN_New(SlepcMFN arg):
- *     cdef MFN retv = MFN()
- *     setref(&retv.mfn, arg)             # <<<<<<<<<<<<<<
- *     return retv
+  /* "SLEPc/MFN.pyx":92
+ *         """
+ *         cdef SlepcMFNType cval = NULL
+ *         mfn_type = str2bytes(mfn_type, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( MFNSetType(self.mfn, cval) )
  * 
  */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_setref((&__pyx_v_retv->mfn), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_mfn_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(17, 92, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_mfn_type, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/CAPI.pyx":152
- *     cdef MFN retv = MFN()
- *     setref(&retv.mfn, arg)
- *     return retv             # <<<<<<<<<<<<<<
+  /* "SLEPc/MFN.pyx":93
+ *         cdef SlepcMFNType cval = NULL
+ *         mfn_type = str2bytes(mfn_type, &cval)
+ *         CHKERR( MFNSetType(self.mfn, cval) )             # <<<<<<<<<<<<<<
  * 
- * cdef api SlepcMFN PySlepcMFN_Get(object arg) except ? NULL:
+ *     def getType(self):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_retv));
-  __pyx_r = ((PyObject *)__pyx_v_retv);
-  goto __pyx_L0;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNSetType(__pyx_v_self->mfn, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(17, 93, __pyx_L1_error)
 
-  /* "SLEPc/CAPI.pyx":149
- * # -- MFN --
+  /* "SLEPc/MFN.pyx":82
+ *         return self
  * 
- * cdef api object PySlepcMFN_New(SlepcMFN arg):             # <<<<<<<<<<<<<<
- *     cdef MFN retv = MFN()
- *     setref(&retv.mfn, arg)
+ *     def setType(self, mfn_type):             # <<<<<<<<<<<<<<
+ *         """
+ *         Selects the particular solver to be used in the MFN object.
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcMFN_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_retv);
+  __Pyx_XDECREF(__pyx_v_mfn_type);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/CAPI.pyx":154
- *     return retv
+/* "SLEPc/MFN.pyx":95
+ *         CHKERR( MFNSetType(self.mfn, cval) )
  * 
- * cdef api SlepcMFN PySlepcMFN_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
- *     cdef SlepcMFN retv = NULL
- *     cdef MFN ob = <MFN?> arg
+ *     def getType(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the MFN type of this object.
  */
 
-static MFN __pyx_f_8slepc4py_5SLEPc_PySlepcMFN_Get(PyObject *__pyx_v_arg) {
-  MFN __pyx_v_retv;
-  struct PySlepcMFNObject *__pyx_v_ob = 0;
-  MFN __pyx_r;
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3MFN_12getType[] = "MFN.getType(self)\n\n        Gets the MFN type of this object.\n\n        Returns\n        -------\n        type: `MFN.Type` enumerate\n            The solver currently being used.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_13getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  MFN __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("PySlepcMFN_Get", 0);
+  __Pyx_RefNannySetupContext("getType (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getType", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_12getType(((struct PySlepcMFNObject *)__pyx_v_self));
 
-  /* "SLEPc/CAPI.pyx":155
- * 
- * cdef api SlepcMFN PySlepcMFN_Get(object arg) except ? NULL:
- *     cdef SlepcMFN retv = NULL             # <<<<<<<<<<<<<<
- *     cdef MFN ob = <MFN?> arg
- *     retv = ob.mfn
- */
-  __pyx_v_retv = NULL;
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-  /* "SLEPc/CAPI.pyx":156
- * cdef api SlepcMFN PySlepcMFN_Get(object arg) except ? NULL:
- *     cdef SlepcMFN retv = NULL
- *     cdef MFN ob = <MFN?> arg             # <<<<<<<<<<<<<<
- *     retv = ob.mfn
- *     return retv
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_12getType(struct PySlepcMFNObject *__pyx_v_self) {
+  const char* __pyx_v_mfn_type;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getType", 0);
+
+  /* "SLEPc/MFN.pyx":104
+ *             The solver currently being used.
+ *         """
+ *         cdef SlepcMFNType mfn_type = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( MFNGetType(self.mfn, &mfn_type) )
+ *         return bytes2str(mfn_type)
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8slepc4py_5SLEPc_MFN)))) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_1 = __pyx_v_arg;
-  __Pyx_INCREF(__pyx_t_1);
-  __pyx_v_ob = ((struct PySlepcMFNObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_mfn_type = NULL;
 
-  /* "SLEPc/CAPI.pyx":157
- *     cdef SlepcMFN retv = NULL
- *     cdef MFN ob = <MFN?> arg
- *     retv = ob.mfn             # <<<<<<<<<<<<<<
- *     return retv
+  /* "SLEPc/MFN.pyx":105
+ *         """
+ *         cdef SlepcMFNType mfn_type = NULL
+ *         CHKERR( MFNGetType(self.mfn, &mfn_type) )             # <<<<<<<<<<<<<<
+ *         return bytes2str(mfn_type)
  * 
  */
-  __pyx_t_2 = __pyx_v_ob->mfn;
-  __pyx_v_retv = __pyx_t_2;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNGetType(__pyx_v_self->mfn, (&__pyx_v_mfn_type))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(17, 105, __pyx_L1_error)
 
-  /* "SLEPc/CAPI.pyx":158
- *     cdef MFN ob = <MFN?> arg
- *     retv = ob.mfn
- *     return retv             # <<<<<<<<<<<<<<
+  /* "SLEPc/MFN.pyx":106
+ *         cdef SlepcMFNType mfn_type = NULL
+ *         CHKERR( MFNGetType(self.mfn, &mfn_type) )
+ *         return bytes2str(mfn_type)             # <<<<<<<<<<<<<<
  * 
- * # -----------------------------------------------------------------------------
+ *     def getOptionsPrefix(self):
  */
-  __pyx_r = __pyx_v_retv;
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_mfn_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(17, 106, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/CAPI.pyx":154
- *     return retv
+  /* "SLEPc/MFN.pyx":95
+ *         CHKERR( MFNSetType(self.mfn, cval) )
  * 
- * cdef api SlepcMFN PySlepcMFN_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
- *     cdef SlepcMFN retv = NULL
- *     cdef MFN ob = <MFN?> arg
+ *     def getType(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the MFN type of this object.
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcMFN_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.getType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_ob);
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SLEPc.pyx":169
- *     int fprintf(FILE *, char *, ...)
+/* "SLEPc/MFN.pyx":108
+ *         return bytes2str(mfn_type)
  * 
- * cdef int initialize(object args) except -1:             # <<<<<<<<<<<<<<
- *     if (<int>SlepcInitializeCalled): return 1
- *     # initialize SLEPC
+ *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the prefix used for searching for all MFN options in the
  */
 
-static int __pyx_f_8slepc4py_5SLEPc_initialize(CYTHON_UNUSED PyObject *__pyx_v_args) {
-  int __pyx_r;
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3MFN_14getOptionsPrefix[] = "MFN.getOptionsPrefix(self)\n\n        Gets the prefix used for searching for all MFN options in the\n        database.\n\n        Returns\n        -------\n        prefix: string\n            The prefix string set for this MFN object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_15getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("initialize", 0);
+  __Pyx_RefNannySetupContext("getOptionsPrefix (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getOptionsPrefix", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getOptionsPrefix", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_14getOptionsPrefix(((struct PySlepcMFNObject *)__pyx_v_self));
 
-  /* "SLEPc/SLEPc.pyx":170
- * 
- * cdef int initialize(object args) except -1:
- *     if (<int>SlepcInitializeCalled): return 1             # <<<<<<<<<<<<<<
- *     # initialize SLEPC
- *     CHKERR( SlepcInitialize(NULL, NULL, NULL, NULL) )
- */
-  __pyx_t_1 = (((int)SlepcInitializeCalled) != 0);
-  if (__pyx_t_1) {
-    __pyx_r = 1;
-    goto __pyx_L0;
-  }
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-  /* "SLEPc/SLEPc.pyx":172
- *     if (<int>SlepcInitializeCalled): return 1
- *     # initialize SLEPC
- *     CHKERR( SlepcInitialize(NULL, NULL, NULL, NULL) )             # <<<<<<<<<<<<<<
- *     # register finalization function
- *     if Py_AtExit(finalize) < 0:
- */
-  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SlepcInitialize(NULL, NULL, NULL, NULL)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_14getOptionsPrefix(struct PySlepcMFNObject *__pyx_v_self) {
+  const char *__pyx_v_prefix;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getOptionsPrefix", 0);
 
-  /* "SLEPc/SLEPc.pyx":174
- *     CHKERR( SlepcInitialize(NULL, NULL, NULL, NULL) )
- *     # register finalization function
- *     if Py_AtExit(finalize) < 0:             # <<<<<<<<<<<<<<
- *         PySys_WriteStderr("warning: could not register"
- *                           "SlepcFinalize() with Py_AtExit()", 0)
+  /* "SLEPc/MFN.pyx":118
+ *             The prefix string set for this MFN object.
+ *         """
+ *         cdef const_char *prefix = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( MFNGetOptionsPrefix(self.mfn, &prefix) )
+ *         return bytes2str(prefix)
  */
-  __pyx_t_1 = ((Py_AtExit(__pyx_f_8slepc4py_5SLEPc_finalize) < 0) != 0);
-  if (__pyx_t_1) {
+  __pyx_v_prefix = NULL;
 
-    /* "SLEPc/SLEPc.pyx":175
- *     # register finalization function
- *     if Py_AtExit(finalize) < 0:
- *         PySys_WriteStderr("warning: could not register"             # <<<<<<<<<<<<<<
- *                           "SlepcFinalize() with Py_AtExit()", 0)
- *     return 1 # and we are done, enjoy !!
+  /* "SLEPc/MFN.pyx":119
+ *         """
+ *         cdef const_char *prefix = NULL
+ *         CHKERR( MFNGetOptionsPrefix(self.mfn, &prefix) )             # <<<<<<<<<<<<<<
+ *         return bytes2str(prefix)
+ * 
  */
-    PySys_WriteStderr(__pyx_k_warning_could_not_registerSlepcF, 0);
-    goto __pyx_L4;
-  }
-  __pyx_L4:;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNGetOptionsPrefix(__pyx_v_self->mfn, (&__pyx_v_prefix))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(17, 119, __pyx_L1_error)
 
-  /* "SLEPc/SLEPc.pyx":177
- *         PySys_WriteStderr("warning: could not register"
- *                           "SlepcFinalize() with Py_AtExit()", 0)
- *     return 1 # and we are done, enjoy !!             # <<<<<<<<<<<<<<
+  /* "SLEPc/MFN.pyx":120
+ *         cdef const_char *prefix = NULL
+ *         CHKERR( MFNGetOptionsPrefix(self.mfn, &prefix) )
+ *         return bytes2str(prefix)             # <<<<<<<<<<<<<<
  * 
- * from petsc4py.PETSc cimport PyPetscType_Register
+ *     def setOptionsPrefix(self, prefix):
  */
-  __pyx_r = 1;
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_bytes2str(__pyx_v_prefix); if (unlikely(!__pyx_t_2)) __PYX_ERR(17, 120, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "SLEPc/SLEPc.pyx":169
- *     int fprintf(FILE *, char *, ...)
+  /* "SLEPc/MFN.pyx":108
+ *         return bytes2str(mfn_type)
  * 
- * cdef int initialize(object args) except -1:             # <<<<<<<<<<<<<<
- *     if (<int>SlepcInitializeCalled): return 1
- *     # initialize SLEPC
+ *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the prefix used for searching for all MFN options in the
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.initialize", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.getOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SLEPc.pyx":195
- *     PetscClassId SLEPC_MFN_CLASSID "MFN_CLASSID"
+/* "SLEPc/MFN.pyx":122
+ *         return bytes2str(prefix)
  * 
- * cdef int register(char path[]) except -1:             # <<<<<<<<<<<<<<
- *     # make sure all SLEPc packages are initialized
- *     CHKERR( SlepcInitializePackageAll() )
+ *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the prefix used for searching for all MFN options in the
  */
 
-static int __pyx_f_8slepc4py_5SLEPc_register(CYTHON_UNUSED char *__pyx_v_path) {
-  int __pyx_r;
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_17setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3MFN_16setOptionsPrefix[] = "MFN.setOptionsPrefix(self, prefix)\n\n        Sets the prefix used for searching for all MFN options in the\n        database.\n\n        Parameters\n        ----------\n        prefix: string\n            The prefix string to prepend to all MFN option requests.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_17setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_prefix = 0;
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("register", 0);
-
-  /* "SLEPc/SLEPc.pyx":197
- * cdef int register(char path[]) except -1:
- *     # make sure all SLEPc packages are initialized
- *     CHKERR( SlepcInitializePackageAll() )             # <<<<<<<<<<<<<<
- *     # register Python types
- *     PyPetscType_Register(SLEPC_ST_CLASSID,  ST)
- */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SlepcInitializePackageAll()); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/SLEPc.pyx":199
- *     CHKERR( SlepcInitializePackageAll() )
- *     # register Python types
- *     PyPetscType_Register(SLEPC_ST_CLASSID,  ST)             # <<<<<<<<<<<<<<
- *     PyPetscType_Register(SLEPC_BV_CLASSID,  BV)
- *     PyPetscType_Register(SLEPC_DS_CLASSID,  DS)
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(ST_CLASSID, ((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_ST)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/SLEPc.pyx":200
- *     # register Python types
- *     PyPetscType_Register(SLEPC_ST_CLASSID,  ST)
- *     PyPetscType_Register(SLEPC_BV_CLASSID,  BV)             # <<<<<<<<<<<<<<
- *     PyPetscType_Register(SLEPC_DS_CLASSID,  DS)
- *     PyPetscType_Register(SLEPC_FN_CLASSID,  FN)
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(BV_CLASSID, ((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_BV)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/SLEPc.pyx":201
- *     PyPetscType_Register(SLEPC_ST_CLASSID,  ST)
- *     PyPetscType_Register(SLEPC_BV_CLASSID,  BV)
- *     PyPetscType_Register(SLEPC_DS_CLASSID,  DS)             # <<<<<<<<<<<<<<
- *     PyPetscType_Register(SLEPC_FN_CLASSID,  FN)
- *     PyPetscType_Register(SLEPC_RG_CLASSID,  RG)
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(DS_CLASSID, ((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_DS)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/SLEPc.pyx":202
- *     PyPetscType_Register(SLEPC_BV_CLASSID,  BV)
- *     PyPetscType_Register(SLEPC_DS_CLASSID,  DS)
- *     PyPetscType_Register(SLEPC_FN_CLASSID,  FN)             # <<<<<<<<<<<<<<
- *     PyPetscType_Register(SLEPC_RG_CLASSID,  RG)
- *     PyPetscType_Register(SLEPC_EPS_CLASSID, EPS)
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(FN_CLASSID, ((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_FN)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/SLEPc.pyx":203
- *     PyPetscType_Register(SLEPC_DS_CLASSID,  DS)
- *     PyPetscType_Register(SLEPC_FN_CLASSID,  FN)
- *     PyPetscType_Register(SLEPC_RG_CLASSID,  RG)             # <<<<<<<<<<<<<<
- *     PyPetscType_Register(SLEPC_EPS_CLASSID, EPS)
- *     PyPetscType_Register(SLEPC_SVD_CLASSID, SVD)
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(RG_CLASSID, ((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_RG)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/SLEPc.pyx":204
- *     PyPetscType_Register(SLEPC_FN_CLASSID,  FN)
- *     PyPetscType_Register(SLEPC_RG_CLASSID,  RG)
- *     PyPetscType_Register(SLEPC_EPS_CLASSID, EPS)             # <<<<<<<<<<<<<<
- *     PyPetscType_Register(SLEPC_SVD_CLASSID, SVD)
- *     PyPetscType_Register(SLEPC_PEP_CLASSID, PEP)
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(EPS_CLASSID, ((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_EPS)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_RefNannySetupContext("setOptionsPrefix (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_prefix,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_prefix)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) __PYX_ERR(17, 122, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_prefix = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(17, 122, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_16setOptionsPrefix(((struct PySlepcMFNObject *)__pyx_v_self), __pyx_v_prefix);
 
-  /* "SLEPc/SLEPc.pyx":205
- *     PyPetscType_Register(SLEPC_RG_CLASSID,  RG)
- *     PyPetscType_Register(SLEPC_EPS_CLASSID, EPS)
- *     PyPetscType_Register(SLEPC_SVD_CLASSID, SVD)             # <<<<<<<<<<<<<<
- *     PyPetscType_Register(SLEPC_PEP_CLASSID, PEP)
- *     PyPetscType_Register(SLEPC_NEP_CLASSID, NEP)
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(SVD_CLASSID, ((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_SVD)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-  /* "SLEPc/SLEPc.pyx":206
- *     PyPetscType_Register(SLEPC_EPS_CLASSID, EPS)
- *     PyPetscType_Register(SLEPC_SVD_CLASSID, SVD)
- *     PyPetscType_Register(SLEPC_PEP_CLASSID, PEP)             # <<<<<<<<<<<<<<
- *     PyPetscType_Register(SLEPC_NEP_CLASSID, NEP)
- *     PyPetscType_Register(SLEPC_MFN_CLASSID, MFN)
- */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(PEP_CLASSID, ((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_PEP)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_16setOptionsPrefix(struct PySlepcMFNObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
+  const char *__pyx_v_cval;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setOptionsPrefix", 0);
+  __Pyx_INCREF(__pyx_v_prefix);
 
-  /* "SLEPc/SLEPc.pyx":207
- *     PyPetscType_Register(SLEPC_SVD_CLASSID, SVD)
- *     PyPetscType_Register(SLEPC_PEP_CLASSID, PEP)
- *     PyPetscType_Register(SLEPC_NEP_CLASSID, NEP)             # <<<<<<<<<<<<<<
- *     PyPetscType_Register(SLEPC_MFN_CLASSID, MFN)
- *     return 0
+  /* "SLEPc/MFN.pyx":132
+ *             The prefix string to prepend to all MFN option requests.
+ *         """
+ *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
+ *         prefix = str2bytes(prefix, &cval)
+ *         CHKERR( MFNSetOptionsPrefix(self.mfn, cval) )
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(NEP_CLASSID, ((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_NEP)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_cval = NULL;
 
-  /* "SLEPc/SLEPc.pyx":208
- *     PyPetscType_Register(SLEPC_PEP_CLASSID, PEP)
- *     PyPetscType_Register(SLEPC_NEP_CLASSID, NEP)
- *     PyPetscType_Register(SLEPC_MFN_CLASSID, MFN)             # <<<<<<<<<<<<<<
- *     return 0
+  /* "SLEPc/MFN.pyx":133
+ *         """
+ *         cdef const_char *cval = NULL
+ *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( MFNSetOptionsPrefix(self.mfn, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(MFN_CLASSID, ((PyObject*)__pyx_ptype_8slepc4py_5SLEPc_MFN)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(17, 133, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/SLEPc.pyx":209
- *     PyPetscType_Register(SLEPC_NEP_CLASSID, NEP)
- *     PyPetscType_Register(SLEPC_MFN_CLASSID, MFN)
- *     return 0             # <<<<<<<<<<<<<<
+  /* "SLEPc/MFN.pyx":134
+ *         cdef const_char *cval = NULL
+ *         prefix = str2bytes(prefix, &cval)
+ *         CHKERR( MFNSetOptionsPrefix(self.mfn, cval) )             # <<<<<<<<<<<<<<
  * 
- * cdef void finalize() nogil:
+ *     def appendOptionsPrefix(self, prefix):
  */
-  __pyx_r = 0;
-  goto __pyx_L0;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNSetOptionsPrefix(__pyx_v_self->mfn, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(17, 134, __pyx_L1_error)
 
-  /* "SLEPc/SLEPc.pyx":195
- *     PetscClassId SLEPC_MFN_CLASSID "MFN_CLASSID"
+  /* "SLEPc/MFN.pyx":122
+ *         return bytes2str(prefix)
  * 
- * cdef int register(char path[]) except -1:             # <<<<<<<<<<<<<<
- *     # make sure all SLEPc packages are initialized
- *     CHKERR( SlepcInitializePackageAll() )
+ *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the prefix used for searching for all MFN options in the
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc.register", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = -1;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_prefix);
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SLEPc.pyx":211
- *     return 0
- * 
- * cdef void finalize() nogil:             # <<<<<<<<<<<<<<
- *     # finalize SLEPc
- *     cdef int ierr = 0
- */
-
-static void __pyx_f_8slepc4py_5SLEPc_finalize(void) {
-  int __pyx_v_ierr;
-  int __pyx_t_1;
-
-  /* "SLEPc/SLEPc.pyx":213
- * cdef void finalize() nogil:
- *     # finalize SLEPc
- *     cdef int ierr = 0             # <<<<<<<<<<<<<<
- *     ierr = SlepcFinalize()
- *     if ierr != 0:
- */
-  __pyx_v_ierr = 0;
-
-  /* "SLEPc/SLEPc.pyx":214
- *     # finalize SLEPc
- *     cdef int ierr = 0
- *     ierr = SlepcFinalize()             # <<<<<<<<<<<<<<
- *     if ierr != 0:
- *         fprintf(stderr, "SlepcFinalize() failed "
- */
-  __pyx_v_ierr = SlepcFinalize();
-
-  /* "SLEPc/SLEPc.pyx":215
- *     cdef int ierr = 0
- *     ierr = SlepcFinalize()
- *     if ierr != 0:             # <<<<<<<<<<<<<<
- *         fprintf(stderr, "SlepcFinalize() failed "
- *                 "[error code: %d]\n", ierr)
- */
-  __pyx_t_1 = ((__pyx_v_ierr != 0) != 0);
-  if (__pyx_t_1) {
-
-    /* "SLEPc/SLEPc.pyx":216
- *     ierr = SlepcFinalize()
- *     if ierr != 0:
- *         fprintf(stderr, "SlepcFinalize() failed "             # <<<<<<<<<<<<<<
- *                 "[error code: %d]\n", ierr)
- *     # and we are done, see you later !!
- */
-    fprintf(stderr, __pyx_k_SlepcFinalize_failed_error_code, __pyx_v_ierr);
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
-
-  /* "SLEPc/SLEPc.pyx":211
- *     return 0
- * 
- * cdef void finalize() nogil:             # <<<<<<<<<<<<<<
- *     # finalize SLEPc
- *     cdef int ierr = 0
- */
-
-  /* function exit code */
-}
-
-/* "SLEPc/SLEPc.pyx":222
- * # -----------------------------------------------------------------------------
+/* "SLEPc/MFN.pyx":136
+ *         CHKERR( MFNSetOptionsPrefix(self.mfn, cval) )
  * 
- * def _initialize(args=None):             # <<<<<<<<<<<<<<
- *     cdef int ready = initialize(args)
- *     if ready: register(NULL)
+ *     def appendOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *         """
+ *         Appends to the prefix used for searching for all MFN options
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_1_initialize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc__initialize[] = "_initialize(args=None)";
-static PyMethodDef __pyx_mdef_8slepc4py_5SLEPc_1_initialize = {"_initialize", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_1_initialize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc__initialize};
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_1_initialize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_args = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_19appendOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3MFN_18appendOptionsPrefix[] = "MFN.appendOptionsPrefix(self, prefix)\n\n        Appends to the prefix used for searching for all MFN options\n        in the database.\n\n        Parameters\n        ----------\n        prefix: string\n            The prefix string to prepend to all MFN option requests.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_19appendOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_prefix = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("_initialize (wrapper)", 0);
+  __Pyx_RefNannySetupContext("appendOptionsPrefix (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_args,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_prefix,0};
     PyObject* values[1] = {0};
-    values[0] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
@@ -48730,7726 +49948,11685 @@ static PyObject *__pyx_pw_8slepc4py_5SLEPc_1_initialize(PyObject *__pyx_self, Py
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
-          if (value) { values[0] = value; kw_args--; }
-        }
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_prefix)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_initialize") < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "appendOptionsPrefix") < 0)) __PYX_ERR(17, 136, __pyx_L3_error)
       }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
     } else {
-      switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
     }
-    __pyx_v_args = values[0];
+    __pyx_v_prefix = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("_initialize", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[3]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("appendOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(17, 136, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc._initialize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.appendOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc__initialize(__pyx_self, __pyx_v_args);
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_18appendOptionsPrefix(((struct PySlepcMFNObject *)__pyx_v_self), __pyx_v_prefix);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc__initialize(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_args) {
-  int __pyx_v_ready;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_18appendOptionsPrefix(struct PySlepcMFNObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
+  const char *__pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("_initialize", 0);
+  __Pyx_RefNannySetupContext("appendOptionsPrefix", 0);
+  __Pyx_INCREF(__pyx_v_prefix);
 
-  /* "SLEPc/SLEPc.pyx":223
- * 
- * def _initialize(args=None):
- *     cdef int ready = initialize(args)             # <<<<<<<<<<<<<<
- *     if ready: register(NULL)
+  /* "SLEPc/MFN.pyx":146
+ *             The prefix string to prepend to all MFN option requests.
+ *         """
+ *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
+ *         prefix = str2bytes(prefix, &cval)
+ *         CHKERR( MFNAppendOptionsPrefix(self.mfn, cval) )
+ */
+  __pyx_v_cval = NULL;
+
+  /* "SLEPc/MFN.pyx":147
+ *         """
+ *         cdef const_char *cval = NULL
+ *         prefix = str2bytes(prefix, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( MFNAppendOptionsPrefix(self.mfn, cval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_initialize(__pyx_v_args); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ready = __pyx_t_1;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_str2bytes(__pyx_v_prefix, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(17, 147, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/SLEPc.pyx":224
- * def _initialize(args=None):
- *     cdef int ready = initialize(args)
- *     if ready: register(NULL)             # <<<<<<<<<<<<<<
+  /* "SLEPc/MFN.pyx":148
+ *         cdef const_char *cval = NULL
+ *         prefix = str2bytes(prefix, &cval)
+ *         CHKERR( MFNAppendOptionsPrefix(self.mfn, cval) )             # <<<<<<<<<<<<<<
  * 
- * def _finalize():
+ *     def setFromOptions(self):
  */
-  __pyx_t_2 = (__pyx_v_ready != 0);
-  if (__pyx_t_2) {
-    __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_register(NULL); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNAppendOptionsPrefix(__pyx_v_self->mfn, __pyx_v_cval)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(17, 148, __pyx_L1_error)
 
-  /* "SLEPc/SLEPc.pyx":222
- * # -----------------------------------------------------------------------------
+  /* "SLEPc/MFN.pyx":136
+ *         CHKERR( MFNSetOptionsPrefix(self.mfn, cval) )
  * 
- * def _initialize(args=None):             # <<<<<<<<<<<<<<
- *     cdef int ready = initialize(args)
- *     if ready: register(NULL)
+ *     def appendOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
+ *         """
+ *         Appends to the prefix used for searching for all MFN options
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("slepc4py.SLEPc._initialize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.appendOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_prefix);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "SLEPc/SLEPc.pyx":226
- *     if ready: register(NULL)
- * 
- * def _finalize():             # <<<<<<<<<<<<<<
- *     finalize()
+/* "SLEPc/MFN.pyx":150
+ *         CHKERR( MFNAppendOptionsPrefix(self.mfn, cval) )
  * 
+ *     def setFromOptions(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets MFN options from the options database. This routine must
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3_finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8slepc4py_5SLEPc_2_finalize[] = "_finalize()";
-static PyMethodDef __pyx_mdef_8slepc4py_5SLEPc_3_finalize = {"_finalize", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3_finalize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2_finalize};
-static PyObject *__pyx_pw_8slepc4py_5SLEPc_3_finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_21setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3MFN_20setFromOptions[] = "MFN.setFromOptions(self)\n\n        Sets MFN options from the options database. This routine must\n        be called before `setUp()` if the user is to be allowed to set\n        the solver type.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_21setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("_finalize (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setFromOptions (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("_finalize", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "_finalize", 0))) return NULL;
-  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2_finalize(__pyx_self);
+    __Pyx_RaiseArgtupleInvalid("setFromOptions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setFromOptions", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_20setFromOptions(((struct PySlepcMFNObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8slepc4py_5SLEPc_2_finalize(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_20setFromOptions(struct PySlepcMFNObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("_finalize", 0);
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setFromOptions", 0);
 
-  /* "SLEPc/SLEPc.pyx":227
- * 
- * def _finalize():
- *     finalize()             # <<<<<<<<<<<<<<
+  /* "SLEPc/MFN.pyx":156
+ *         the solver type.
+ *         """
+ *         CHKERR( MFNSetFromOptions(self.mfn) )             # <<<<<<<<<<<<<<
  * 
- * # -----------------------------------------------------------------------------
+ *     def getTolerances(self):
  */
-  __pyx_f_8slepc4py_5SLEPc_finalize();
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNSetFromOptions(__pyx_v_self->mfn)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(17, 156, __pyx_L1_error)
 
-  /* "SLEPc/SLEPc.pyx":226
- *     if ready: register(NULL)
- * 
- * def _finalize():             # <<<<<<<<<<<<<<
- *     finalize()
+  /* "SLEPc/MFN.pyx":150
+ *         CHKERR( MFNAppendOptionsPrefix(self.mfn, cval) )
  * 
+ *     def setFromOptions(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets MFN options from the options database. This routine must
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setFromOptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
-static struct __pyx_vtabstruct_8slepc4py_5SLEPc_ST __pyx_vtable_8slepc4py_5SLEPc_ST;
 
-static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_ST(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct PySlepcSTObject *p;
-  PyObject *o = __pyx_ptype_8petsc4py_5PETSc_Object->tp_new(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct PySlepcSTObject *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8slepc4py_5SLEPc_ST;
-  if (unlikely(__pyx_pw_8slepc4py_5SLEPc_2ST_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
-  return o;
-}
+/* "SLEPc/MFN.pyx":158
+ *         CHKERR( MFNSetFromOptions(self.mfn) )
+ * 
+ *     def getTolerances(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the tolerance and maximum iteration count used by the
+ */
 
-static void __pyx_tp_dealloc_8slepc4py_5SLEPc_ST(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
-  }
-  #endif
-  PyObject_GC_UnTrack(o);
-  PyObject_GC_Track(o);
-  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) __pyx_ptype_8petsc4py_5PETSc_Object->tp_dealloc(o); else __Pyx_call_next_tp_dealloc(o, __pyx_tp_dealloc_8slepc4py_5SLEPc_ST);
-}
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_23getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3MFN_22getTolerances[] = "MFN.getTolerances(self)\n\n        Gets the tolerance and maximum iteration count used by the\n        default MFN convergence tests.\n\n        Returns\n        -------\n        tol: float\n            The convergence tolerance.\n        max_it: int\n            The maximum number of iterations\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_23getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getTolerances (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getTolerances", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTolerances", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_22getTolerances(((struct PySlepcMFNObject *)__pyx_v_self));
 
-static int __pyx_tp_traverse_8slepc4py_5SLEPc_ST(PyObject *o, visitproc v, void *a) {
-  int e;
-  e = ((likely(__pyx_ptype_8petsc4py_5PETSc_Object)) ? ((__pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse) ? __pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_8slepc4py_5SLEPc_ST)); if (e) return e;
-  return 0;
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static int __pyx_tp_clear_8slepc4py_5SLEPc_ST(PyObject *o) {
-  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) { if (__pyx_ptype_8petsc4py_5PETSc_Object->tp_clear) __pyx_ptype_8petsc4py_5PETSc_Object->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_8slepc4py_5SLEPc_ST);
-  return 0;
-}
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_22getTolerances(struct PySlepcMFNObject *__pyx_v_self) {
+  PetscReal __pyx_v_rval;
+  PetscInt __pyx_v_ival;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("getTolerances", 0);
 
-static PyObject *__pyx_getprop_8slepc4py_5SLEPc_2ST_shift(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_8slepc4py_5SLEPc_2ST_5shift_1__get__(o);
-}
+  /* "SLEPc/MFN.pyx":170
+ *             The maximum number of iterations
+ *         """
+ *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt  ival = 0
+ *         CHKERR( MFNGetTolerances(self.mfn, &rval, &ival) )
+ */
+  __pyx_v_rval = 0.0;
 
-static int __pyx_setprop_8slepc4py_5SLEPc_2ST_shift(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_8slepc4py_5SLEPc_2ST_5shift_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
+  /* "SLEPc/MFN.pyx":171
+ *         """
+ *         cdef PetscReal rval = 0
+ *         cdef PetscInt  ival = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( MFNGetTolerances(self.mfn, &rval, &ival) )
+ *         return (toReal(rval), toInt(ival))
+ */
+  __pyx_v_ival = 0;
 
-static PyObject *__pyx_getprop_8slepc4py_5SLEPc_2ST_mat_mode(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_8slepc4py_5SLEPc_2ST_8mat_mode_1__get__(o);
-}
+  /* "SLEPc/MFN.pyx":172
+ *         cdef PetscReal rval = 0
+ *         cdef PetscInt  ival = 0
+ *         CHKERR( MFNGetTolerances(self.mfn, &rval, &ival) )             # <<<<<<<<<<<<<<
+ *         return (toReal(rval), toInt(ival))
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNGetTolerances(__pyx_v_self->mfn, (&__pyx_v_rval), (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(17, 172, __pyx_L1_error)
 
-static int __pyx_setprop_8slepc4py_5SLEPc_2ST_mat_mode(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_8slepc4py_5SLEPc_2ST_8mat_mode_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
+  /* "SLEPc/MFN.pyx":173
+ *         cdef PetscInt  ival = 0
+ *         CHKERR( MFNGetTolerances(self.mfn, &rval, &ival) )
+ *         return (toReal(rval), toInt(ival))             # <<<<<<<<<<<<<<
+ * 
+ *     def setTolerances(self, tol=None, max_it=None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(17, 173, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_3)) __PYX_ERR(17, 173, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(17, 173, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_GIVEREF(__pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
+  __pyx_t_2 = 0;
+  __pyx_t_3 = 0;
+  __pyx_r = __pyx_t_4;
+  __pyx_t_4 = 0;
+  goto __pyx_L0;
 
-static PyObject *__pyx_getprop_8slepc4py_5SLEPc_2ST_ksp(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_8slepc4py_5SLEPc_2ST_3ksp_1__get__(o);
-}
+  /* "SLEPc/MFN.pyx":158
+ *         CHKERR( MFNSetFromOptions(self.mfn) )
+ * 
+ *     def getTolerances(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the tolerance and maximum iteration count used by the
+ */
 
-static int __pyx_setprop_8slepc4py_5SLEPc_2ST_ksp(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_8slepc4py_5SLEPc_2ST_3ksp_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.getTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static PyMethodDef __pyx_methods_8slepc4py_5SLEPc_ST[] = {
-  {"view", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_3view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_2view},
-  {"destroy", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_5destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_4destroy},
-  {"reset", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_7reset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_6reset},
-  {"create", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_9create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_8create},
-  {"setType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_11setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_10setType},
-  {"getType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_13getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_12getType},
-  {"setOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_15setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_14setOptionsPrefix},
-  {"getOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_17getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_16getOptionsPrefix},
-  {"setFromOptions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_19setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_18setFromOptions},
-  {"setShift", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_21setShift, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_20setShift},
-  {"getShift", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_23getShift, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_22getShift},
-  {"setTransform", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_25setTransform, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_24setTransform},
-  {"getTransform", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_27getTransform, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_26getTransform},
-  {"setMatMode", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_29setMatMode, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_28setMatMode},
-  {"getMatMode", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_31getMatMode, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_30getMatMode},
-  {"setOperators", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_33setOperators, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_32setOperators},
-  {"getOperators", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_35getOperators, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_34getOperators},
-  {"setMatStructure", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_37setMatStructure, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_36setMatStructure},
-  {"setKSP", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_39setKSP, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_38setKSP},
-  {"getKSP", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_41getKSP, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_40getKSP},
-  {"setUp", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_43setUp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_42setUp},
-  {"apply", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_45apply, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_44apply},
-  {"applyTranspose", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_47applyTranspose, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_46applyTranspose},
-  {"setCayleyAntishift", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_49setCayleyAntishift, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_48setCayleyAntishift},
-  {0, 0, 0, 0}
-};
-
-static struct PyGetSetDef __pyx_getsets_8slepc4py_5SLEPc_ST[] = {
-  {(char *)"shift", __pyx_getprop_8slepc4py_5SLEPc_2ST_shift, __pyx_setprop_8slepc4py_5SLEPc_2ST_shift, 0, 0},
-  {(char *)"mat_mode", __pyx_getprop_8slepc4py_5SLEPc_2ST_mat_mode, __pyx_setprop_8slepc4py_5SLEPc_2ST_mat_mode, 0, 0},
-  {(char *)"ksp", __pyx_getprop_8slepc4py_5SLEPc_2ST_ksp, __pyx_setprop_8slepc4py_5SLEPc_2ST_ksp, 0, 0},
-  {0, 0, 0, 0, 0}
-};
-
-DL_EXPORT(PyTypeObject) PySlepcST_Type = {
-  PyVarObject_HEAD_INIT(0, 0)
-  "slepc4py.SLEPc.ST", /*tp_name*/
-  sizeof(struct PySlepcSTObject), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_8slepc4py_5SLEPc_ST, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
-  #else
-  0, /*reserved*/
-  #endif
-  0, /*tp_repr*/
-  0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
-  0, /*tp_hash*/
-  0, /*tp_call*/
-  0, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  "\n    ST\n    ", /*tp_doc*/
-  __pyx_tp_traverse_8slepc4py_5SLEPc_ST, /*tp_traverse*/
-  __pyx_tp_clear_8slepc4py_5SLEPc_ST, /*tp_clear*/
-  0, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_8slepc4py_5SLEPc_ST, /*tp_methods*/
-  0, /*tp_members*/
-  __pyx_getsets_8slepc4py_5SLEPc_ST, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  0, /*tp_init*/
-  0, /*tp_alloc*/
-  __pyx_tp_new_8slepc4py_5SLEPc_ST, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  0, /*tp_version_tag*/
-  #if PY_VERSION_HEX >= 0x030400a1
-  0, /*tp_finalize*/
-  #endif
-};
-static struct __pyx_vtabstruct_8slepc4py_5SLEPc_BV __pyx_vtable_8slepc4py_5SLEPc_BV;
-
-static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_BV(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct PySlepcBVObject *p;
-  PyObject *o = __pyx_ptype_8petsc4py_5PETSc_Object->tp_new(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct PySlepcBVObject *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8slepc4py_5SLEPc_BV;
-  if (unlikely(__pyx_pw_8slepc4py_5SLEPc_2BV_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
-  return o;
-}
+/* "SLEPc/MFN.pyx":175
+ *         return (toReal(rval), toInt(ival))
+ * 
+ *     def setTolerances(self, tol=None, max_it=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the tolerance and maximum iteration count used by the
+ */
 
-static void __pyx_tp_dealloc_8slepc4py_5SLEPc_BV(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_25setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3MFN_24setTolerances[] = "MFN.setTolerances(self, tol=None, max_it=None)\n\n        Sets the tolerance and maximum iteration count used by the\n        default MFN convergence tests.\n\n        Parameters\n        ----------\n        tol: float, optional\n            The convergence tolerance.\n        max_it: int, optional\n            The maximum number of iterations\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_25setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_tol = 0;
+  PyObject *__pyx_v_max_it = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setTolerances (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_tol,&__pyx_n_s_max_it,0};
+    PyObject* values[2] = {0,0};
+    values[0] = ((PyObject *)Py_None);
+    values[1] = ((PyObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_tol);
+          if (value) { values[0] = value; kw_args--; }
+        }
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_max_it);
+          if (value) { values[1] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTolerances") < 0)) __PYX_ERR(17, 175, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_tol = values[0];
+    __pyx_v_max_it = values[1];
   }
-  #endif
-  PyObject_GC_UnTrack(o);
-  PyObject_GC_Track(o);
-  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) __pyx_ptype_8petsc4py_5PETSc_Object->tp_dealloc(o); else __Pyx_call_next_tp_dealloc(o, __pyx_tp_dealloc_8slepc4py_5SLEPc_BV);
-}
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setTolerances", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(17, 175, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_24setTolerances(((struct PySlepcMFNObject *)__pyx_v_self), __pyx_v_tol, __pyx_v_max_it);
 
-static int __pyx_tp_traverse_8slepc4py_5SLEPc_BV(PyObject *o, visitproc v, void *a) {
-  int e;
-  e = ((likely(__pyx_ptype_8petsc4py_5PETSc_Object)) ? ((__pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse) ? __pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_8slepc4py_5SLEPc_BV)); if (e) return e;
-  return 0;
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static int __pyx_tp_clear_8slepc4py_5SLEPc_BV(PyObject *o) {
-  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) { if (__pyx_ptype_8petsc4py_5PETSc_Object->tp_clear) __pyx_ptype_8petsc4py_5PETSc_Object->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_8slepc4py_5SLEPc_BV);
-  return 0;
-}
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_24setTolerances(struct PySlepcMFNObject *__pyx_v_self, PyObject *__pyx_v_tol, PyObject *__pyx_v_max_it) {
+  PetscReal __pyx_v_rval;
+  PetscInt __pyx_v_ival;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PetscReal __pyx_t_3;
+  PetscInt __pyx_t_4;
+  int __pyx_t_5;
+  __Pyx_RefNannySetupContext("setTolerances", 0);
 
-static PyMethodDef __pyx_methods_8slepc4py_5SLEPc_BV[] = {
-  {"view", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_3view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_2view},
-  {"destroy", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_5destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_4destroy},
-  {"create", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_7create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_6create},
-  {"setType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_9setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_8setType},
-  {"getType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_11getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_10getType},
-  {"setOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_13setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_12setOptionsPrefix},
-  {"getOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_15getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_14getOptionsPrefix},
-  {"setFromOptions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_17setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_16setFromOptions},
-  {"getOrthogonalization", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_19getOrthogonalization, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_18getOrthogonalization},
-  {"setOrthogonalization", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_21setOrthogonalization, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_20setOrthogonalization},
-  {"getMatrix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_23getMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_22getMatrix},
-  {"setMatrix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_25setMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_24setMatrix},
-  {"applyMatrix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_27applyMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_26applyMatrix},
-  {"orthogonalizeVec", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_29orthogonalizeVec, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_28orthogonalizeVec},
-  {0, 0, 0, 0}
-};
+  /* "SLEPc/MFN.pyx":187
+ *             The maximum number of iterations
+ *         """
+ *         cdef PetscReal rval = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         cdef PetscInt  ival = PETSC_DEFAULT
+ *         if tol    is not None: rval = asReal(tol)
+ */
+  __pyx_v_rval = PETSC_DEFAULT;
 
-DL_EXPORT(PyTypeObject) PySlepcBV_Type = {
-  PyVarObject_HEAD_INIT(0, 0)
-  "slepc4py.SLEPc.BV", /*tp_name*/
-  sizeof(struct PySlepcBVObject), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_8slepc4py_5SLEPc_BV, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
-  #else
-  0, /*reserved*/
-  #endif
-  0, /*tp_repr*/
-  0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
-  0, /*tp_hash*/
-  0, /*tp_call*/
-  0, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  "\n    BV\n    ", /*tp_doc*/
-  __pyx_tp_traverse_8slepc4py_5SLEPc_BV, /*tp_traverse*/
-  __pyx_tp_clear_8slepc4py_5SLEPc_BV, /*tp_clear*/
-  0, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_8slepc4py_5SLEPc_BV, /*tp_methods*/
-  0, /*tp_members*/
-  0, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  0, /*tp_init*/
-  0, /*tp_alloc*/
-  __pyx_tp_new_8slepc4py_5SLEPc_BV, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  0, /*tp_version_tag*/
-  #if PY_VERSION_HEX >= 0x030400a1
-  0, /*tp_finalize*/
-  #endif
-};
-static struct __pyx_vtabstruct_8slepc4py_5SLEPc_DS __pyx_vtable_8slepc4py_5SLEPc_DS;
+  /* "SLEPc/MFN.pyx":188
+ *         """
+ *         cdef PetscReal rval = PETSC_DEFAULT
+ *         cdef PetscInt  ival = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         if tol    is not None: rval = asReal(tol)
+ *         if max_it is not None: ival = asInt(max_it)
+ */
+  __pyx_v_ival = PETSC_DEFAULT;
 
-static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_DS(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct PySlepcDSObject *p;
-  PyObject *o = __pyx_ptype_8petsc4py_5PETSc_Object->tp_new(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct PySlepcDSObject *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8slepc4py_5SLEPc_DS;
-  if (unlikely(__pyx_pw_8slepc4py_5SLEPc_2DS_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
+  /* "SLEPc/MFN.pyx":189
+ *         cdef PetscReal rval = PETSC_DEFAULT
+ *         cdef PetscInt  ival = PETSC_DEFAULT
+ *         if tol    is not None: rval = asReal(tol)             # <<<<<<<<<<<<<<
+ *         if max_it is not None: ival = asInt(max_it)
+ *         CHKERR( MFNSetTolerances(self.mfn, rval, ival) )
+ */
+  __pyx_t_1 = (__pyx_v_tol != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_f_8slepc4py_5SLEPc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_3 == -1.0 && PyErr_Occurred())) __PYX_ERR(17, 189, __pyx_L1_error)
+    __pyx_v_rval = __pyx_t_3;
   }
-  return o;
-}
 
-static void __pyx_tp_dealloc_8slepc4py_5SLEPc_DS(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  /* "SLEPc/MFN.pyx":190
+ *         cdef PetscInt  ival = PETSC_DEFAULT
+ *         if tol    is not None: rval = asReal(tol)
+ *         if max_it is not None: ival = asInt(max_it)             # <<<<<<<<<<<<<<
+ *         CHKERR( MFNSetTolerances(self.mfn, rval, ival) )
+ * 
+ */
+  __pyx_t_2 = (__pyx_v_max_it != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_4 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_max_it); if (unlikely(__pyx_t_4 == -1L && PyErr_Occurred())) __PYX_ERR(17, 190, __pyx_L1_error)
+    __pyx_v_ival = __pyx_t_4;
   }
-  #endif
-  PyObject_GC_UnTrack(o);
-  PyObject_GC_Track(o);
-  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) __pyx_ptype_8petsc4py_5PETSc_Object->tp_dealloc(o); else __Pyx_call_next_tp_dealloc(o, __pyx_tp_dealloc_8slepc4py_5SLEPc_DS);
-}
 
-static int __pyx_tp_traverse_8slepc4py_5SLEPc_DS(PyObject *o, visitproc v, void *a) {
-  int e;
-  e = ((likely(__pyx_ptype_8petsc4py_5PETSc_Object)) ? ((__pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse) ? __pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_8slepc4py_5SLEPc_DS)); if (e) return e;
-  return 0;
-}
+  /* "SLEPc/MFN.pyx":191
+ *         if tol    is not None: rval = asReal(tol)
+ *         if max_it is not None: ival = asInt(max_it)
+ *         CHKERR( MFNSetTolerances(self.mfn, rval, ival) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getDimensions(self):
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNSetTolerances(__pyx_v_self->mfn, __pyx_v_rval, __pyx_v_ival)); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(17, 191, __pyx_L1_error)
 
-static int __pyx_tp_clear_8slepc4py_5SLEPc_DS(PyObject *o) {
-  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) { if (__pyx_ptype_8petsc4py_5PETSc_Object->tp_clear) __pyx_ptype_8petsc4py_5PETSc_Object->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_8slepc4py_5SLEPc_DS);
-  return 0;
-}
+  /* "SLEPc/MFN.pyx":175
+ *         return (toReal(rval), toInt(ival))
+ * 
+ *     def setTolerances(self, tol=None, max_it=None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the tolerance and maximum iteration count used by the
+ */
 
-static PyMethodDef __pyx_methods_8slepc4py_5SLEPc_DS[] = {
-  {"view", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_3view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_2view},
-  {"destroy", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_5destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_4destroy},
-  {"reset", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_7reset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_6reset},
-  {"create", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_9create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_8create},
-  {"setType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_11setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_10setType},
-  {"getType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_13getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_12getType},
-  {"setOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_15setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_14setOptionsPrefix},
-  {"getOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_17getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_16getOptionsPrefix},
-  {"setFromOptions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_19setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_18setFromOptions},
-  {"allocate", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_21allocate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_20allocate},
-  {"getLeadingDimension", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_23getLeadingDimension, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_22getLeadingDimension},
-  {"setState", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_25setState, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_24setState},
-  {"getState", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_27getState, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_26getState},
-  {"setDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_29setDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_28setDimensions},
-  {"getDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_31getDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_30getDimensions},
-  {"setMethod", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_33setMethod, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_32setMethod},
-  {"getMethod", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_35getMethod, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_34getMethod},
-  {"setCompact", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_37setCompact, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_36setCompact},
-  {"getCompact", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_39getCompact, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_38getCompact},
-  {"setExtraRow", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_41setExtraRow, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_40setExtraRow},
-  {"getExtraRow", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_43getExtraRow, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_42getExtraRow},
-  {"setRefined", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_45setRefined, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_44setRefined},
-  {"getRefined", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_47getRefined, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_46getRefined},
-  {"truncate", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_49truncate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_48truncate},
-  {"updateExtraRow", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_51updateExtraRow, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_50updateExtraRow},
-  {0, 0, 0, 0}
-};
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-DL_EXPORT(PyTypeObject) PySlepcDS_Type = {
-  PyVarObject_HEAD_INIT(0, 0)
-  "slepc4py.SLEPc.DS", /*tp_name*/
-  sizeof(struct PySlepcDSObject), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_8slepc4py_5SLEPc_DS, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
-  #else
-  0, /*reserved*/
-  #endif
-  0, /*tp_repr*/
-  0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
-  0, /*tp_hash*/
-  0, /*tp_call*/
-  0, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  "\n    DS\n    ", /*tp_doc*/
-  __pyx_tp_traverse_8slepc4py_5SLEPc_DS, /*tp_traverse*/
-  __pyx_tp_clear_8slepc4py_5SLEPc_DS, /*tp_clear*/
-  0, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_8slepc4py_5SLEPc_DS, /*tp_methods*/
-  0, /*tp_members*/
-  0, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  0, /*tp_init*/
-  0, /*tp_alloc*/
-  __pyx_tp_new_8slepc4py_5SLEPc_DS, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  0, /*tp_version_tag*/
-  #if PY_VERSION_HEX >= 0x030400a1
-  0, /*tp_finalize*/
-  #endif
-};
-static struct __pyx_vtabstruct_8slepc4py_5SLEPc_FN __pyx_vtable_8slepc4py_5SLEPc_FN;
+/* "SLEPc/MFN.pyx":193
+ *         CHKERR( MFNSetTolerances(self.mfn, rval, ival) )
+ * 
+ *     def getDimensions(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the dimension of the subspace used by the solver.
+ */
 
-static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_FN(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct PySlepcFNObject *p;
-  PyObject *o = __pyx_ptype_8petsc4py_5PETSc_Object->tp_new(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct PySlepcFNObject *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8slepc4py_5SLEPc_FN;
-  if (unlikely(__pyx_pw_8slepc4py_5SLEPc_2FN_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
-  return o;
-}
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_27getDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3MFN_26getDimensions[] = "MFN.getDimensions(self)\n\n        Gets the dimension of the subspace used by the solver.\n\n        Returns\n        -------\n        ncv: int\n            Maximum dimension of the subspace to be used by the solver.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_27getDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getDimensions (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getDimensions", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDimensions", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_26getDimensions(((struct PySlepcMFNObject *)__pyx_v_self));
 
-static void __pyx_tp_dealloc_8slepc4py_5SLEPc_FN(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
-  }
-  #endif
-  PyObject_GC_UnTrack(o);
-  PyObject_GC_Track(o);
-  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) __pyx_ptype_8petsc4py_5PETSc_Object->tp_dealloc(o); else __Pyx_call_next_tp_dealloc(o, __pyx_tp_dealloc_8slepc4py_5SLEPc_FN);
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static int __pyx_tp_traverse_8slepc4py_5SLEPc_FN(PyObject *o, visitproc v, void *a) {
-  int e;
-  e = ((likely(__pyx_ptype_8petsc4py_5PETSc_Object)) ? ((__pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse) ? __pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_8slepc4py_5SLEPc_FN)); if (e) return e;
-  return 0;
-}
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_26getDimensions(struct PySlepcMFNObject *__pyx_v_self) {
+  PetscInt __pyx_v_ival;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getDimensions", 0);
 
-static int __pyx_tp_clear_8slepc4py_5SLEPc_FN(PyObject *o) {
-  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) { if (__pyx_ptype_8petsc4py_5PETSc_Object->tp_clear) __pyx_ptype_8petsc4py_5PETSc_Object->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_8slepc4py_5SLEPc_FN);
-  return 0;
-}
+  /* "SLEPc/MFN.pyx":202
+ *             Maximum dimension of the subspace to be used by the solver.
+ *         """
+ *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( MFNGetDimensions(self.mfn, &ival) )
+ *         return toInt(ival)
+ */
+  __pyx_v_ival = 0;
 
-static PyMethodDef __pyx_methods_8slepc4py_5SLEPc_FN[] = {
-  {"view", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_3view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_2view},
-  {"destroy", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_5destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_4destroy},
-  {"create", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_7create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_6create},
-  {"setType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_9setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_8setType},
-  {"getType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_11getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_10getType},
-  {"setOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_13setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_12setOptionsPrefix},
-  {"getOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_15getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_14getOptionsPrefix},
-  {"setFromOptions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_17setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_16setFromOptions},
-  {"evaluateFunction", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_19evaluateFunction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_18evaluateFunction},
-  {"evaluateDerivative", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_21evaluateDerivative, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_20evaluateDerivative},
-  {"setScale", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_23setScale, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_22setScale},
-  {"getScale", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_25getScale, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_24getScale},
-  {"setRationalNumerator", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_27setRationalNumerator, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_26setRationalNumerator},
-  {"setRationalDenominator", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_29setRationalDenominator, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_28setRationalDenominator},
-  {0, 0, 0, 0}
-};
+  /* "SLEPc/MFN.pyx":203
+ *         """
+ *         cdef PetscInt ival = 0
+ *         CHKERR( MFNGetDimensions(self.mfn, &ival) )             # <<<<<<<<<<<<<<
+ *         return toInt(ival)
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNGetDimensions(__pyx_v_self->mfn, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(17, 203, __pyx_L1_error)
 
-DL_EXPORT(PyTypeObject) PySlepcFN_Type = {
-  PyVarObject_HEAD_INIT(0, 0)
-  "slepc4py.SLEPc.FN", /*tp_name*/
-  sizeof(struct PySlepcFNObject), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_8slepc4py_5SLEPc_FN, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
-  #else
-  0, /*reserved*/
-  #endif
-  0, /*tp_repr*/
-  0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
-  0, /*tp_hash*/
-  0, /*tp_call*/
-  0, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  "\n    FN\n    ", /*tp_doc*/
-  __pyx_tp_traverse_8slepc4py_5SLEPc_FN, /*tp_traverse*/
-  __pyx_tp_clear_8slepc4py_5SLEPc_FN, /*tp_clear*/
-  0, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_8slepc4py_5SLEPc_FN, /*tp_methods*/
-  0, /*tp_members*/
-  0, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  0, /*tp_init*/
-  0, /*tp_alloc*/
-  __pyx_tp_new_8slepc4py_5SLEPc_FN, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  0, /*tp_version_tag*/
-  #if PY_VERSION_HEX >= 0x030400a1
-  0, /*tp_finalize*/
-  #endif
-};
-static struct __pyx_vtabstruct_8slepc4py_5SLEPc_RG __pyx_vtable_8slepc4py_5SLEPc_RG;
+  /* "SLEPc/MFN.pyx":204
+ *         cdef PetscInt ival = 0
+ *         CHKERR( MFNGetDimensions(self.mfn, &ival) )
+ *         return toInt(ival)             # <<<<<<<<<<<<<<
+ * 
+ *     def setDimensions(self, ncv):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(17, 204, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
 
-static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_RG(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct PySlepcRGObject *p;
-  PyObject *o = __pyx_ptype_8petsc4py_5PETSc_Object->tp_new(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct PySlepcRGObject *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8slepc4py_5SLEPc_RG;
-  if (unlikely(__pyx_pw_8slepc4py_5SLEPc_2RG_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
-  return o;
+  /* "SLEPc/MFN.pyx":193
+ *         CHKERR( MFNSetTolerances(self.mfn, rval, ival) )
+ * 
+ *     def getDimensions(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the dimension of the subspace used by the solver.
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.getDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static void __pyx_tp_dealloc_8slepc4py_5SLEPc_RG(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
+/* "SLEPc/MFN.pyx":206
+ *         return toInt(ival)
+ * 
+ *     def setDimensions(self, ncv):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the dimension of the subspace to be used by the solver.
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_29setDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3MFN_28setDimensions[] = "MFN.setDimensions(self, ncv)\n\n        Sets the dimension of the subspace to be used by the solver.\n\n        Parameters\n        ----------\n        ncv: int\n            Maximum dimension of the subspace to be used by the\n            solver.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_29setDimensions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_ncv = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setDimensions (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ncv,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ncv)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDimensions") < 0)) __PYX_ERR(17, 206, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_ncv = values[0];
   }
-  #endif
-  PyObject_GC_UnTrack(o);
-  PyObject_GC_Track(o);
-  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) __pyx_ptype_8petsc4py_5PETSc_Object->tp_dealloc(o); else __Pyx_call_next_tp_dealloc(o, __pyx_tp_dealloc_8slepc4py_5SLEPc_RG);
-}
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setDimensions", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(17, 206, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_28setDimensions(((struct PySlepcMFNObject *)__pyx_v_self), __pyx_v_ncv);
 
-static int __pyx_tp_traverse_8slepc4py_5SLEPc_RG(PyObject *o, visitproc v, void *a) {
-  int e;
-  e = ((likely(__pyx_ptype_8petsc4py_5PETSc_Object)) ? ((__pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse) ? __pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_8slepc4py_5SLEPc_RG)); if (e) return e;
-  return 0;
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static int __pyx_tp_clear_8slepc4py_5SLEPc_RG(PyObject *o) {
-  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) { if (__pyx_ptype_8petsc4py_5PETSc_Object->tp_clear) __pyx_ptype_8petsc4py_5PETSc_Object->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_8slepc4py_5SLEPc_RG);
-  return 0;
-}
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_28setDimensions(struct PySlepcMFNObject *__pyx_v_self, PyObject *__pyx_v_ncv) {
+  PetscInt __pyx_v_ival;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setDimensions", 0);
 
-static PyMethodDef __pyx_methods_8slepc4py_5SLEPc_RG[] = {
-  {"view", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_3view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_2view},
-  {"destroy", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_5destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_4destroy},
-  {"create", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_7create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_6create},
-  {"setType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_9setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_8setType},
-  {"getType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_11getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_10getType},
-  {"setOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_13setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_12setOptionsPrefix},
-  {"getOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_15getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_14getOptionsPrefix},
-  {"setFromOptions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_17setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_16setFromOptions},
-  {"isTrivial", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_19isTrivial, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_18isTrivial},
-  {"getComplement", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_21getComplement, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_20getComplement},
-  {"setComplement", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_23setComplement, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_22setComplement},
-  {"setEllipseParameters", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_25setEllipseParameters, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_24setEllipseParameters},
-  {"getEllipseParameters", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_27getEllipseParameters, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_26getEllipseParameters},
-  {"setIntervalEndpoints", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_29setIntervalEndpoints, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_28setIntervalEndpoints},
-  {"getIntervalEndpoints", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_31getIntervalEndpoints, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_30getIntervalEndpoints},
-  {0, 0, 0, 0}
-};
+  /* "SLEPc/MFN.pyx":216
+ *             solver.
+ *         """
+ *         cdef PetscInt ival = asInt(ncv)             # <<<<<<<<<<<<<<
+ *         CHKERR( MFNSetDimensions(self.mfn, ival) )
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_asInt(__pyx_v_ncv); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(17, 216, __pyx_L1_error)
+  __pyx_v_ival = __pyx_t_1;
 
-DL_EXPORT(PyTypeObject) PySlepcRG_Type = {
-  PyVarObject_HEAD_INIT(0, 0)
-  "slepc4py.SLEPc.RG", /*tp_name*/
-  sizeof(struct PySlepcRGObject), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_8slepc4py_5SLEPc_RG, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
-  #else
-  0, /*reserved*/
-  #endif
-  0, /*tp_repr*/
-  0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
-  0, /*tp_hash*/
-  0, /*tp_call*/
-  0, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  "\n    RG\n    ", /*tp_doc*/
-  __pyx_tp_traverse_8slepc4py_5SLEPc_RG, /*tp_traverse*/
-  __pyx_tp_clear_8slepc4py_5SLEPc_RG, /*tp_clear*/
-  0, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_8slepc4py_5SLEPc_RG, /*tp_methods*/
-  0, /*tp_members*/
-  0, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  0, /*tp_init*/
-  0, /*tp_alloc*/
-  __pyx_tp_new_8slepc4py_5SLEPc_RG, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  0, /*tp_version_tag*/
-  #if PY_VERSION_HEX >= 0x030400a1
-  0, /*tp_finalize*/
-  #endif
-};
-static struct __pyx_vtabstruct_8slepc4py_5SLEPc_EPS __pyx_vtable_8slepc4py_5SLEPc_EPS;
+  /* "SLEPc/MFN.pyx":217
+ *         """
+ *         cdef PetscInt ival = asInt(ncv)
+ *         CHKERR( MFNSetDimensions(self.mfn, ival) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getFN(self):
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNSetDimensions(__pyx_v_self->mfn, __pyx_v_ival)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(17, 217, __pyx_L1_error)
 
-static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_EPS(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct PySlepcEPSObject *p;
-  PyObject *o = __pyx_ptype_8petsc4py_5PETSc_Object->tp_new(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct PySlepcEPSObject *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8slepc4py_5SLEPc_EPS;
-  if (unlikely(__pyx_pw_8slepc4py_5SLEPc_3EPS_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
-  return o;
-}
+  /* "SLEPc/MFN.pyx":206
+ *         return toInt(ival)
+ * 
+ *     def setDimensions(self, ncv):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the dimension of the subspace to be used by the solver.
+ */
 
-static void __pyx_tp_dealloc_8slepc4py_5SLEPc_EPS(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
-  }
-  #endif
-  PyObject_GC_UnTrack(o);
-  PyObject_GC_Track(o);
-  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) __pyx_ptype_8petsc4py_5PETSc_Object->tp_dealloc(o); else __Pyx_call_next_tp_dealloc(o, __pyx_tp_dealloc_8slepc4py_5SLEPc_EPS);
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setDimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static int __pyx_tp_traverse_8slepc4py_5SLEPc_EPS(PyObject *o, visitproc v, void *a) {
-  int e;
-  e = ((likely(__pyx_ptype_8petsc4py_5PETSc_Object)) ? ((__pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse) ? __pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_8slepc4py_5SLEPc_EPS)); if (e) return e;
-  return 0;
-}
+/* "SLEPc/MFN.pyx":219
+ *         CHKERR( MFNSetDimensions(self.mfn, ival) )
+ * 
+ *     def getFN(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Obtain the math function object associated to the MFN object.
+ */
 
-static int __pyx_tp_clear_8slepc4py_5SLEPc_EPS(PyObject *o) {
-  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) { if (__pyx_ptype_8petsc4py_5PETSc_Object->tp_clear) __pyx_ptype_8petsc4py_5PETSc_Object->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_8slepc4py_5SLEPc_EPS);
-  return 0;
-}
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_31getFN(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3MFN_30getFN[] = "MFN.getFN(self)\n\n        Obtain the math function object associated to the MFN object.\n\n        Returns\n        -------\n        fn: FN\n            The math function context.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_31getFN(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getFN (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getFN", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getFN", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_30getFN(((struct PySlepcMFNObject *)__pyx_v_self));
 
-static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3EPS_problem_type(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_8slepc4py_5SLEPc_3EPS_12problem_type_1__get__(o);
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static int __pyx_setprop_8slepc4py_5SLEPc_3EPS_problem_type(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_8slepc4py_5SLEPc_3EPS_12problem_type_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_30getFN(struct PySlepcMFNObject *__pyx_v_self) {
+  struct PySlepcFNObject *__pyx_v_fn = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getFN", 0);
 
-static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3EPS_extraction(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_8slepc4py_5SLEPc_3EPS_10extraction_1__get__(o);
-}
+  /* "SLEPc/MFN.pyx":228
+ *             The math function context.
+ *         """
+ *         cdef FN fn = FN()             # <<<<<<<<<<<<<<
+ *         CHKERR( MFNGetFN(self.mfn, &fn.fn) )
+ *         PetscINCREF(fn.obj)
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_FN), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(17, 228, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_fn = ((struct PySlepcFNObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-static int __pyx_setprop_8slepc4py_5SLEPc_3EPS_extraction(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_8slepc4py_5SLEPc_3EPS_10extraction_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
+  /* "SLEPc/MFN.pyx":229
+ *         """
+ *         cdef FN fn = FN()
+ *         CHKERR( MFNGetFN(self.mfn, &fn.fn) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(fn.obj)
+ *         return fn
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNGetFN(__pyx_v_self->mfn, (&__pyx_v_fn->fn))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(17, 229, __pyx_L1_error)
 
-static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3EPS_which(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_8slepc4py_5SLEPc_3EPS_5which_1__get__(o);
-}
+  /* "SLEPc/MFN.pyx":230
+ *         cdef FN fn = FN()
+ *         CHKERR( MFNGetFN(self.mfn, &fn.fn) )
+ *         PetscINCREF(fn.obj)             # <<<<<<<<<<<<<<
+ *         return fn
+ * 
+ */
+  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_fn->__pyx_base.obj);
 
-static int __pyx_setprop_8slepc4py_5SLEPc_3EPS_which(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_8slepc4py_5SLEPc_3EPS_5which_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
+  /* "SLEPc/MFN.pyx":231
+ *         CHKERR( MFNGetFN(self.mfn, &fn.fn) )
+ *         PetscINCREF(fn.obj)
+ *         return fn             # <<<<<<<<<<<<<<
+ * 
+ *     def setFN(self, FN fn not None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_fn));
+  __pyx_r = ((PyObject *)__pyx_v_fn);
+  goto __pyx_L0;
 
-static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3EPS_target(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_8slepc4py_5SLEPc_3EPS_6target_1__get__(o);
-}
+  /* "SLEPc/MFN.pyx":219
+ *         CHKERR( MFNSetDimensions(self.mfn, ival) )
+ * 
+ *     def getFN(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Obtain the math function object associated to the MFN object.
+ */
 
-static int __pyx_setprop_8slepc4py_5SLEPc_3EPS_target(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_8slepc4py_5SLEPc_3EPS_6target_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.getFN", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_fn);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3EPS_tol(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_8slepc4py_5SLEPc_3EPS_3tol_1__get__(o);
-}
+/* "SLEPc/MFN.pyx":233
+ *         return fn
+ * 
+ *     def setFN(self, FN fn not None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Associates a math function object to the MFN object.
+ */
 
-static int __pyx_setprop_8slepc4py_5SLEPc_3EPS_tol(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_8slepc4py_5SLEPc_3EPS_3tol_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_33setFN(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3MFN_32setFN[] = "MFN.setFN(self, FN fn)\n\n        Associates a math function object to the MFN object.\n\n        Parameters\n        ----------\n        fn: FN\n            The math function context.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_33setFN(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PySlepcFNObject *__pyx_v_fn = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setFN (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fn,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fn)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFN") < 0)) __PYX_ERR(17, 233, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_fn = ((struct PySlepcFNObject *)values[0]);
   }
-}
-
-static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3EPS_max_it(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_8slepc4py_5SLEPc_3EPS_6max_it_1__get__(o);
-}
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setFN", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(17, 233, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setFN", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fn), __pyx_ptype_8slepc4py_5SLEPc_FN, 0, "fn", 0))) __PYX_ERR(17, 233, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_32setFN(((struct PySlepcMFNObject *)__pyx_v_self), __pyx_v_fn);
 
-static int __pyx_setprop_8slepc4py_5SLEPc_3EPS_max_it(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_8slepc4py_5SLEPc_3EPS_6max_it_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3EPS_st(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_8slepc4py_5SLEPc_3EPS_2st_1__get__(o);
-}
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_32setFN(struct PySlepcMFNObject *__pyx_v_self, struct PySlepcFNObject *__pyx_v_fn) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setFN", 0);
 
-static int __pyx_setprop_8slepc4py_5SLEPc_3EPS_st(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_8slepc4py_5SLEPc_3EPS_2st_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
+  /* "SLEPc/MFN.pyx":242
+ *             The math function context.
+ *         """
+ *         CHKERR( MFNSetFN(self.mfn, fn.fn) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getBV(self):
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNSetFN(__pyx_v_self->mfn, __pyx_v_fn->fn)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(17, 242, __pyx_L1_error)
 
-static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3EPS_bv(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_8slepc4py_5SLEPc_3EPS_2bv_1__get__(o);
+  /* "SLEPc/MFN.pyx":233
+ *         return fn
+ * 
+ *     def setFN(self, FN fn not None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Associates a math function object to the MFN object.
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setFN", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static int __pyx_setprop_8slepc4py_5SLEPc_3EPS_bv(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_8slepc4py_5SLEPc_3EPS_2bv_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
+/* "SLEPc/MFN.pyx":244
+ *         CHKERR( MFNSetFN(self.mfn, fn.fn) )
+ * 
+ *     def getBV(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Obtain the basis vector object associated to the MFN object.
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_35getBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3MFN_34getBV[] = "MFN.getBV(self)\n\n        Obtain the basis vector object associated to the MFN object.\n\n        Returns\n        -------\n        bv: BV\n            The basis vectors context.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_35getBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getBV (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getBV", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getBV", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_34getBV(((struct PySlepcMFNObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static PyMethodDef __pyx_methods_8slepc4py_5SLEPc_EPS[] = {
-  {"view", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_3view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_2view},
-  {"destroy", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_5destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_4destroy},
-  {"reset", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_7reset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_6reset},
-  {"create", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_9create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_8create},
-  {"setType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_11setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_10setType},
-  {"getType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_13getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_12getType},
-  {"getOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_15getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_14getOptionsPrefix},
-  {"setOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_17setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_16setOptionsPrefix},
-  {"appendOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_19appendOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_18appendOptionsPrefix},
-  {"setFromOptions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_21setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_20setFromOptions},
-  {"getProblemType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_23getProblemType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_22getProblemType},
-  {"setProblemType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_25setProblemType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_24setProblemType},
-  {"isGeneralized", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_27isGeneralized, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_26isGeneralized},
-  {"isHermitian", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_29isHermitian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_28isHermitian},
-  {"isPositive", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_31isPositive, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_30isPositive},
-  {"getBalance", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_33getBalance, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_32getBalance},
-  {"setBalance", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_35setBalance, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_34setBalance},
-  {"getExtraction", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_37getExtraction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_36getExtraction},
-  {"setExtraction", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_39setExtraction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_38setExtraction},
-  {"getWhichEigenpairs", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_41getWhichEigenpairs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_40getWhichEigenpairs},
-  {"setWhichEigenpairs", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_43setWhichEigenpairs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_42setWhichEigenpairs},
-  {"getTarget", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_45getTarget, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_44getTarget},
-  {"setTarget", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_47setTarget, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_46setTarget},
-  {"getInterval", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_49getInterval, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_48getInterval},
-  {"setInterval", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_51setInterval, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_50setInterval},
-  {"getTolerances", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_53getTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_52getTolerances},
-  {"setTolerances", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_55setTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_54setTolerances},
-  {"getConvergenceTest", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_57getConvergenceTest, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_56getConvergenceTest},
-  {"setConvergenceTest", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_59setConvergenceTest, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_58setConvergenceTest},
-  {"getTrueResidual", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_61getTrueResidual, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_60getTrueResidual},
-  {"setTrueResidual", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_63setTrueResidual, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_62setTrueResidual},
-  {"getTrackAll", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_65getTrackAll, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_64getTrackAll},
-  {"setTrackAll", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_67setTrackAll, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_66setTrackAll},
-  {"getDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_69getDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_68getDimensions},
-  {"setDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_71setDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_70setDimensions},
-  {"getST", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_73getST, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_72getST},
-  {"setST", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_75setST, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_74setST},
-  {"getBV", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_77getBV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_76getBV},
-  {"setBV", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_79setBV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_78setBV},
-  {"getDS", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_81getDS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_80getDS},
-  {"setDS", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_83setDS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_82setDS},
-  {"getOperators", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_85getOperators, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_84getOperators},
-  {"setOperators", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_87setOperators, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_86setOperators},
-  {"setDeflationSpace", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_89setDeflationSpace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_88setDeflationSpace},
-  {"setInitialSpace", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_91setInitialSpace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_90setInitialSpace},
-  {"cancelMonitor", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_93cancelMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_92cancelMonitor},
-  {"setUp", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_95setUp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_94setUp},
-  {"solve", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_97solve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_96solve},
-  {"getIterationNumber", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_99getIterationNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_98getIterationNumber},
-  {"getConvergedReason", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_101getConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_100getConvergedReason},
-  {"getConverged", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_103getConverged, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_102getConverged},
-  {"getEigenvalue", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_105getEigenvalue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_104getEigenvalue},
-  {"getEigenvector", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_107getEigenvector, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_106getEigenvector},
-  {"getEigenpair", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_109getEigenpair, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_108getEigenpair},
-  {"getInvariantSubspace", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_111getInvariantSubspace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_110getInvariantSubspace},
-  {"getErrorEstimate", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_113getErrorEstimate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_112getErrorEstimate},
-  {"computeError", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_115computeError, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_114computeError},
-  {"setPowerShiftType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_117setPowerShiftType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_116setPowerShiftType},
-  {"getPowerShiftType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_119getPowerShiftType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_118getPowerShiftType},
-  {"setArnoldiDelayed", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_121setArnoldiDelayed, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_120setArnoldiDelayed},
-  {"getArnoldiDelayed", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_123getArnoldiDelayed, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_122getArnoldiDelayed},
-  {"setLanczosReorthogType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_125setLanczosReorthogType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_124setLanczosReorthogType},
-  {"getLanczosReorthogType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_127getLanczosReorthogType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_126getLanczosReorthogType},
-  {"setKrylovSchurRestart", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_129setKrylovSchurRestart, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_128setKrylovSchurRestart},
-  {"getKrylovSchurRestart", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_131getKrylovSchurRestart, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_130getKrylovSchurRestart},
-  {"setKrylovSchurLocking", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_133setKrylovSchurLocking, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_132setKrylovSchurLocking},
-  {"getKrylovSchurLocking", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_135getKrylovSchurLocking, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_134getKrylovSchurLocking},
-  {"setKrylovSchurPartitions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_137setKrylovSchurPartitions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_136setKrylovSchurPartitions},
-  {"getKrylovSchurPartitions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_139getKrylovSchurPartitions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_138getKrylovSchurPartitions},
-  {"setKrylovSchurDetectZeros", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_141setKrylovSchurDetectZeros, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_140setKrylovSchurDetectZeros},
-  {"getKrylovSchurDetectZeros", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_143getKrylovSchurDetectZeros, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_142getKrylovSchurDetectZeros},
-  {"setKrylovSchurDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_145setKrylovSchurDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_144setKrylovSchurDimensions},
-  {"getKrylovSchurDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_147getKrylovSchurDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_146getKrylovSchurDimensions},
-  {"getKrylovSchurSubcommInfo", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_149getKrylovSchurSubcommInfo, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_148getKrylovSchurSubcommInfo},
-  {"getKrylovSchurSubcommPairs", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_151getKrylovSchurSubcommPairs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_150getKrylovSchurSubcommPairs},
-  {"setRQCGReset", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_153setRQCGReset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_152setRQCGReset},
-  {"getRQCGReset", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_155getRQCGReset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_154getRQCGReset},
-  {0, 0, 0, 0}
-};
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_34getBV(struct PySlepcMFNObject *__pyx_v_self) {
+  struct PySlepcBVObject *__pyx_v_bv = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getBV", 0);
 
-static struct PyGetSetDef __pyx_getsets_8slepc4py_5SLEPc_EPS[] = {
-  {(char *)"problem_type", __pyx_getprop_8slepc4py_5SLEPc_3EPS_problem_type, __pyx_setprop_8slepc4py_5SLEPc_3EPS_problem_type, 0, 0},
-  {(char *)"extraction", __pyx_getprop_8slepc4py_5SLEPc_3EPS_extraction, __pyx_setprop_8slepc4py_5SLEPc_3EPS_extraction, 0, 0},
-  {(char *)"which", __pyx_getprop_8slepc4py_5SLEPc_3EPS_which, __pyx_setprop_8slepc4py_5SLEPc_3EPS_which, 0, 0},
-  {(char *)"target", __pyx_getprop_8slepc4py_5SLEPc_3EPS_target, __pyx_setprop_8slepc4py_5SLEPc_3EPS_target, 0, 0},
-  {(char *)"tol", __pyx_getprop_8slepc4py_5SLEPc_3EPS_tol, __pyx_setprop_8slepc4py_5SLEPc_3EPS_tol, 0, 0},
-  {(char *)"max_it", __pyx_getprop_8slepc4py_5SLEPc_3EPS_max_it, __pyx_setprop_8slepc4py_5SLEPc_3EPS_max_it, 0, 0},
-  {(char *)"st", __pyx_getprop_8slepc4py_5SLEPc_3EPS_st, __pyx_setprop_8slepc4py_5SLEPc_3EPS_st, 0, 0},
-  {(char *)"bv", __pyx_getprop_8slepc4py_5SLEPc_3EPS_bv, __pyx_setprop_8slepc4py_5SLEPc_3EPS_bv, 0, 0},
-  {0, 0, 0, 0, 0}
-};
+  /* "SLEPc/MFN.pyx":253
+ *             The basis vectors context.
+ *         """
+ *         cdef BV bv = BV()             # <<<<<<<<<<<<<<
+ *         CHKERR( MFNGetBV(self.mfn, &bv.bv) )
+ *         PetscINCREF(bv.obj)
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_BV), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(17, 253, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_bv = ((struct PySlepcBVObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-DL_EXPORT(PyTypeObject) PySlepcEPS_Type = {
-  PyVarObject_HEAD_INIT(0, 0)
-  "slepc4py.SLEPc.EPS", /*tp_name*/
-  sizeof(struct PySlepcEPSObject), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_8slepc4py_5SLEPc_EPS, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
-  #else
-  0, /*reserved*/
-  #endif
-  0, /*tp_repr*/
-  0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
-  0, /*tp_hash*/
-  0, /*tp_call*/
-  0, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  "\n    EPS\n    ", /*tp_doc*/
-  __pyx_tp_traverse_8slepc4py_5SLEPc_EPS, /*tp_traverse*/
-  __pyx_tp_clear_8slepc4py_5SLEPc_EPS, /*tp_clear*/
-  0, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_8slepc4py_5SLEPc_EPS, /*tp_methods*/
-  0, /*tp_members*/
-  __pyx_getsets_8slepc4py_5SLEPc_EPS, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  0, /*tp_init*/
-  0, /*tp_alloc*/
-  __pyx_tp_new_8slepc4py_5SLEPc_EPS, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  0, /*tp_version_tag*/
-  #if PY_VERSION_HEX >= 0x030400a1
-  0, /*tp_finalize*/
-  #endif
-};
-static struct __pyx_vtabstruct_8slepc4py_5SLEPc_SVD __pyx_vtable_8slepc4py_5SLEPc_SVD;
+  /* "SLEPc/MFN.pyx":254
+ *         """
+ *         cdef BV bv = BV()
+ *         CHKERR( MFNGetBV(self.mfn, &bv.bv) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(bv.obj)
+ *         return bv
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNGetBV(__pyx_v_self->mfn, (&__pyx_v_bv->bv))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(17, 254, __pyx_L1_error)
 
-static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_SVD(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct PySlepcSVDObject *p;
-  PyObject *o = __pyx_ptype_8petsc4py_5PETSc_Object->tp_new(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct PySlepcSVDObject *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8slepc4py_5SLEPc_SVD;
-  if (unlikely(__pyx_pw_8slepc4py_5SLEPc_3SVD_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
-  return o;
-}
+  /* "SLEPc/MFN.pyx":255
+ *         cdef BV bv = BV()
+ *         CHKERR( MFNGetBV(self.mfn, &bv.bv) )
+ *         PetscINCREF(bv.obj)             # <<<<<<<<<<<<<<
+ *         return bv
+ * 
+ */
+  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_bv->__pyx_base.obj);
 
-static void __pyx_tp_dealloc_8slepc4py_5SLEPc_SVD(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
-  }
-  #endif
-  PyObject_GC_UnTrack(o);
-  PyObject_GC_Track(o);
-  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) __pyx_ptype_8petsc4py_5PETSc_Object->tp_dealloc(o); else __Pyx_call_next_tp_dealloc(o, __pyx_tp_dealloc_8slepc4py_5SLEPc_SVD);
-}
+  /* "SLEPc/MFN.pyx":256
+ *         CHKERR( MFNGetBV(self.mfn, &bv.bv) )
+ *         PetscINCREF(bv.obj)
+ *         return bv             # <<<<<<<<<<<<<<
+ * 
+ *     def setBV(self, BV bv not None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_bv));
+  __pyx_r = ((PyObject *)__pyx_v_bv);
+  goto __pyx_L0;
 
-static int __pyx_tp_traverse_8slepc4py_5SLEPc_SVD(PyObject *o, visitproc v, void *a) {
-  int e;
-  e = ((likely(__pyx_ptype_8petsc4py_5PETSc_Object)) ? ((__pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse) ? __pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_8slepc4py_5SLEPc_SVD)); if (e) return e;
-  return 0;
-}
+  /* "SLEPc/MFN.pyx":244
+ *         CHKERR( MFNSetFN(self.mfn, fn.fn) )
+ * 
+ *     def getBV(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Obtain the basis vector object associated to the MFN object.
+ */
 
-static int __pyx_tp_clear_8slepc4py_5SLEPc_SVD(PyObject *o) {
-  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) { if (__pyx_ptype_8petsc4py_5PETSc_Object->tp_clear) __pyx_ptype_8petsc4py_5PETSc_Object->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_8slepc4py_5SLEPc_SVD);
-  return 0;
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.getBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_bv);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3SVD_transpose_mode(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_8slepc4py_5SLEPc_3SVD_14transpose_mode_1__get__(o);
-}
+/* "SLEPc/MFN.pyx":258
+ *         return bv
+ * 
+ *     def setBV(self, BV bv not None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Associates a basis vector object to the MFN object.
+ */
 
-static int __pyx_setprop_8slepc4py_5SLEPc_3SVD_transpose_mode(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_8slepc4py_5SLEPc_3SVD_14transpose_mode_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_37setBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3MFN_36setBV[] = "MFN.setBV(self, BV bv)\n\n        Associates a basis vector object to the MFN object.\n\n        Parameters\n        ----------\n        bv: BV\n            The basis vectors context.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_37setBV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PySlepcBVObject *__pyx_v_bv = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setBV (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_bv,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_bv)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setBV") < 0)) __PYX_ERR(17, 258, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_bv = ((struct PySlepcBVObject *)values[0]);
   }
-}
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setBV", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(17, 258, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_bv), __pyx_ptype_8slepc4py_5SLEPc_BV, 0, "bv", 0))) __PYX_ERR(17, 258, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_36setBV(((struct PySlepcMFNObject *)__pyx_v_self), __pyx_v_bv);
 
-static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3SVD_which(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_8slepc4py_5SLEPc_3SVD_5which_1__get__(o);
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static int __pyx_setprop_8slepc4py_5SLEPc_3SVD_which(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_8slepc4py_5SLEPc_3SVD_5which_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_36setBV(struct PySlepcMFNObject *__pyx_v_self, struct PySlepcBVObject *__pyx_v_bv) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setBV", 0);
 
-static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3SVD_tol(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_8slepc4py_5SLEPc_3SVD_3tol_1__get__(o);
-}
+  /* "SLEPc/MFN.pyx":267
+ *             The basis vectors context.
+ *         """
+ *         CHKERR( MFNSetBV(self.mfn, bv.bv) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getOperator(self):
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNSetBV(__pyx_v_self->mfn, __pyx_v_bv->bv)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(17, 267, __pyx_L1_error)
 
-static int __pyx_setprop_8slepc4py_5SLEPc_3SVD_tol(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_8slepc4py_5SLEPc_3SVD_3tol_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
+  /* "SLEPc/MFN.pyx":258
+ *         return bv
+ * 
+ *     def setBV(self, BV bv not None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Associates a basis vector object to the MFN object.
+ */
 
-static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3SVD_max_it(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_8slepc4py_5SLEPc_3SVD_6max_it_1__get__(o);
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setBV", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static int __pyx_setprop_8slepc4py_5SLEPc_3SVD_max_it(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_8slepc4py_5SLEPc_3SVD_6max_it_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
-}
+/* "SLEPc/MFN.pyx":269
+ *         CHKERR( MFNSetBV(self.mfn, bv.bv) )
+ * 
+ *     def getOperator(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the matrix associated with the MFN object.
+ */
 
-static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3SVD_bv(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_8slepc4py_5SLEPc_3SVD_2bv_1__get__(o);
-}
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_39getOperator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3MFN_38getOperator[] = "MFN.getOperator(self)\n\n        Gets the matrix associated with the MFN object.\n\n        Returns\n        -------\n        A: Mat\n            The matrix for which the matrix function is to be computed.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_39getOperator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getOperator (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getOperator", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getOperator", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_38getOperator(((struct PySlepcMFNObject *)__pyx_v_self));
 
-static int __pyx_setprop_8slepc4py_5SLEPc_3SVD_bv(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_8slepc4py_5SLEPc_3SVD_2bv_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static PyMethodDef __pyx_methods_8slepc4py_5SLEPc_SVD[] = {
-  {"view", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_3view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_2view},
-  {"destroy", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_5destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_4destroy},
-  {"reset", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_7reset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_6reset},
-  {"create", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_9create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_8create},
-  {"setType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_11setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_10setType},
-  {"getType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_13getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_12getType},
-  {"getOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_15getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_14getOptionsPrefix},
-  {"setOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_17setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_16setOptionsPrefix},
-  {"appendOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_19appendOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_18appendOptionsPrefix},
-  {"setFromOptions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_21setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_20setFromOptions},
-  {"getImplicitTranspose", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_23getImplicitTranspose, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_22getImplicitTranspose},
-  {"setImplicitTranspose", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_25setImplicitTranspose, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_24setImplicitTranspose},
-  {"getWhichSingularTriplets", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_27getWhichSingularTriplets, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_26getWhichSingularTriplets},
-  {"setWhichSingularTriplets", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_29setWhichSingularTriplets, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_28setWhichSingularTriplets},
-  {"getTolerances", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_31getTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_30getTolerances},
-  {"setTolerances", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_33setTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_32setTolerances},
-  {"getDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_35getDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_34getDimensions},
-  {"setDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_37setDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_36setDimensions},
-  {"getBV", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_39getBV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_38getBV},
-  {"setBV", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_41setBV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_40setBV},
-  {"getOperator", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_43getOperator, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_42getOperator},
-  {"setOperator", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_45setOperator, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_44setOperator},
-  {"setInitialSpace", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_47setInitialSpace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_46setInitialSpace},
-  {"cancelMonitor", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_49cancelMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_48cancelMonitor},
-  {"setUp", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_51setUp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_50setUp},
-  {"solve", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_53solve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_52solve},
-  {"getIterationNumber", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_55getIterationNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_54getIterationNumber},
-  {"getConvergedReason", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_57getConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_56getConvergedReason},
-  {"getConverged", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_59getConverged, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_58getConverged},
-  {"getValue", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_61getValue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_60getValue},
-  {"getVectors", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_63getVectors, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_62getVectors},
-  {"getSingularTriplet", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_65getSingularTriplet, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_64getSingularTriplet},
-  {"computeError", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_67computeError, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_66computeError},
-  {"setCrossEPS", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_69setCrossEPS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_68setCrossEPS},
-  {"getCrossEPS", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_71getCrossEPS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_70getCrossEPS},
-  {"setCyclicEPS", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_73setCyclicEPS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_72setCyclicEPS},
-  {"getCyclicEPS", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_75getCyclicEPS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_74getCyclicEPS},
-  {"setCyclicExplicitMatrix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_77setCyclicExplicitMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_76setCyclicExplicitMatrix},
-  {"getCyclicExplicitMatrix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_79getCyclicExplicitMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_78getCyclicExplicitMatrix},
-  {"setLanczosOneSide", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_81setLanczosOneSide, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_80setLanczosOneSide},
-  {"setTRLanczosOneSide", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_83setTRLanczosOneSide, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_82setTRLanczosOneSide},
-  {0, 0, 0, 0}
-};
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_38getOperator(struct PySlepcMFNObject *__pyx_v_self) {
+  struct PyPetscMatObject *__pyx_v_A = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getOperator", 0);
 
-static struct PyGetSetDef __pyx_getsets_8slepc4py_5SLEPc_SVD[] = {
-  {(char *)"transpose_mode", __pyx_getprop_8slepc4py_5SLEPc_3SVD_transpose_mode, __pyx_setprop_8slepc4py_5SLEPc_3SVD_transpose_mode, 0, 0},
-  {(char *)"which", __pyx_getprop_8slepc4py_5SLEPc_3SVD_which, __pyx_setprop_8slepc4py_5SLEPc_3SVD_which, 0, 0},
-  {(char *)"tol", __pyx_getprop_8slepc4py_5SLEPc_3SVD_tol, __pyx_setprop_8slepc4py_5SLEPc_3SVD_tol, 0, 0},
-  {(char *)"max_it", __pyx_getprop_8slepc4py_5SLEPc_3SVD_max_it, __pyx_setprop_8slepc4py_5SLEPc_3SVD_max_it, 0, 0},
-  {(char *)"bv", __pyx_getprop_8slepc4py_5SLEPc_3SVD_bv, __pyx_setprop_8slepc4py_5SLEPc_3SVD_bv, 0, 0},
-  {0, 0, 0, 0, 0}
-};
+  /* "SLEPc/MFN.pyx":278
+ *             The matrix for which the matrix function is to be computed.
+ *         """
+ *         cdef Mat A = Mat()             # <<<<<<<<<<<<<<
+ *         CHKERR( MFNGetOperator(self.mfn, &A.mat) )
+ *         PetscINCREF(A.obj)
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(17, 278, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_A = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-DL_EXPORT(PyTypeObject) PySlepcSVD_Type = {
-  PyVarObject_HEAD_INIT(0, 0)
-  "slepc4py.SLEPc.SVD", /*tp_name*/
-  sizeof(struct PySlepcSVDObject), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_8slepc4py_5SLEPc_SVD, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
-  #else
-  0, /*reserved*/
-  #endif
-  0, /*tp_repr*/
-  0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
-  0, /*tp_hash*/
-  0, /*tp_call*/
-  0, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  "\n    SVD\n    ", /*tp_doc*/
-  __pyx_tp_traverse_8slepc4py_5SLEPc_SVD, /*tp_traverse*/
-  __pyx_tp_clear_8slepc4py_5SLEPc_SVD, /*tp_clear*/
-  0, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_8slepc4py_5SLEPc_SVD, /*tp_methods*/
-  0, /*tp_members*/
-  __pyx_getsets_8slepc4py_5SLEPc_SVD, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  0, /*tp_init*/
-  0, /*tp_alloc*/
-  __pyx_tp_new_8slepc4py_5SLEPc_SVD, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  0, /*tp_version_tag*/
-  #if PY_VERSION_HEX >= 0x030400a1
-  0, /*tp_finalize*/
-  #endif
-};
-static struct __pyx_vtabstruct_8slepc4py_5SLEPc_PEP __pyx_vtable_8slepc4py_5SLEPc_PEP;
+  /* "SLEPc/MFN.pyx":279
+ *         """
+ *         cdef Mat A = Mat()
+ *         CHKERR( MFNGetOperator(self.mfn, &A.mat) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(A.obj)
+ *         return A
+ */
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNGetOperator(__pyx_v_self->mfn, (&__pyx_v_A->mat))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(17, 279, __pyx_L1_error)
 
-static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_PEP(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct PySlepcPEPObject *p;
-  PyObject *o = __pyx_ptype_8petsc4py_5PETSc_Object->tp_new(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct PySlepcPEPObject *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8slepc4py_5SLEPc_PEP;
-  if (unlikely(__pyx_pw_8slepc4py_5SLEPc_3PEP_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
-  return o;
+  /* "SLEPc/MFN.pyx":280
+ *         cdef Mat A = Mat()
+ *         CHKERR( MFNGetOperator(self.mfn, &A.mat) )
+ *         PetscINCREF(A.obj)             # <<<<<<<<<<<<<<
+ *         return A
+ * 
+ */
+  __pyx_f_8slepc4py_5SLEPc_PetscINCREF(__pyx_v_A->__pyx_base.obj);
+
+  /* "SLEPc/MFN.pyx":281
+ *         CHKERR( MFNGetOperator(self.mfn, &A.mat) )
+ *         PetscINCREF(A.obj)
+ *         return A             # <<<<<<<<<<<<<<
+ * 
+ *     def setOperator(self, Mat A not None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_A));
+  __pyx_r = ((PyObject *)__pyx_v_A);
+  goto __pyx_L0;
+
+  /* "SLEPc/MFN.pyx":269
+ *         CHKERR( MFNSetBV(self.mfn, bv.bv) )
+ * 
+ *     def getOperator(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the matrix associated with the MFN object.
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.getOperator", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_A);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static void __pyx_tp_dealloc_8slepc4py_5SLEPc_PEP(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
+/* "SLEPc/MFN.pyx":283
+ *         return A
+ * 
+ *     def setOperator(self, Mat A not None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the matrix associated with the MFN object.
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_41setOperator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3MFN_40setOperator[] = "MFN.setOperator(self, Mat A)\n\n        Sets the matrix associated with the MFN object.\n\n        Parameters\n        ----------\n        A: Mat\n            The problem matrix.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_41setOperator(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscMatObject *__pyx_v_A = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setOperator (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_A,0};
+    PyObject* values[1] = {0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOperator") < 0)) __PYX_ERR(17, 283, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_A = ((struct PyPetscMatObject *)values[0]);
   }
-  #endif
-  PyObject_GC_UnTrack(o);
-  PyObject_GC_Track(o);
-  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) __pyx_ptype_8petsc4py_5PETSc_Object->tp_dealloc(o); else __Pyx_call_next_tp_dealloc(o, __pyx_tp_dealloc_8slepc4py_5SLEPc_PEP);
-}
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setOperator", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(17, 283, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setOperator", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_A), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "A", 0))) __PYX_ERR(17, 283, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_40setOperator(((struct PySlepcMFNObject *)__pyx_v_self), __pyx_v_A);
 
-static int __pyx_tp_traverse_8slepc4py_5SLEPc_PEP(PyObject *o, visitproc v, void *a) {
-  int e;
-  e = ((likely(__pyx_ptype_8petsc4py_5PETSc_Object)) ? ((__pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse) ? __pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_8slepc4py_5SLEPc_PEP)); if (e) return e;
-  return 0;
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static int __pyx_tp_clear_8slepc4py_5SLEPc_PEP(PyObject *o) {
-  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) { if (__pyx_ptype_8petsc4py_5PETSc_Object->tp_clear) __pyx_ptype_8petsc4py_5PETSc_Object->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_8slepc4py_5SLEPc_PEP);
-  return 0;
-}
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_40setOperator(struct PySlepcMFNObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setOperator", 0);
 
-static PyMethodDef __pyx_methods_8slepc4py_5SLEPc_PEP[] = {
-  {"view", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_3view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_2view},
-  {"destroy", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_5destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_4destroy},
-  {"reset", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_7reset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_6reset},
-  {"create", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_9create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_8create},
-  {"setType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_11setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_10setType},
-  {"getType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_13getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_12getType},
-  {"getOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_15getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_14getOptionsPrefix},
-  {"setOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_17setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_16setOptionsPrefix},
-  {"appendOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_19appendOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_18appendOptionsPrefix},
-  {"setFromOptions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_21setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_20setFromOptions},
-  {"getBasis", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_23getBasis, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_22getBasis},
-  {"setBasis", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_25setBasis, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_24setBasis},
-  {"getProblemType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_27getProblemType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_26getProblemType},
-  {"setProblemType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_29setProblemType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_28setProblemType},
-  {"getWhichEigenpairs", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_31getWhichEigenpairs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_30getWhichEigenpairs},
-  {"setWhichEigenpairs", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_33setWhichEigenpairs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_32setWhichEigenpairs},
-  {"getTolerances", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_35getTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_34getTolerances},
-  {"setTolerances", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_37setTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_36setTolerances},
-  {"getConvergenceTest", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_39getConvergenceTest, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_38getConvergenceTest},
-  {"setConvergenceTest", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_41setConvergenceTest, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_40setConvergenceTest},
-  {"getRefine", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_43getRefine, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_42getRefine},
-  {"setRefine", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_45setRefine, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_44setRefine},
-  {"getTrackAll", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_47getTrackAll, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_46getTrackAll},
-  {"setTrackAll", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_49setTrackAll, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_48setTrackAll},
-  {"getDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_51getDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_50getDimensions},
-  {"setDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_53setDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_52setDimensions},
-  {"getST", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_55getST, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_54getST},
-  {"setST", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_57setST, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_56setST},
-  {"getScale", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_59getScale, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_58getScale},
-  {"setScale", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_61setScale, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_60setScale},
-  {"getBV", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_63getBV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_62getBV},
-  {"setBV", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_65setBV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_64setBV},
-  {"getOperators", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_67getOperators, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_66getOperators},
-  {"setOperators", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_69setOperators, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_68setOperators},
-  {"setInitialSpace", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_71setInitialSpace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_70setInitialSpace},
-  {"cancelMonitor", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_73cancelMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_72cancelMonitor},
-  {"setUp", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_75setUp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_74setUp},
-  {"solve", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_77solve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_76solve},
-  {"getIterationNumber", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_79getIterationNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_78getIterationNumber},
-  {"getConvergedReason", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_81getConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_80getConvergedReason},
-  {"getConverged", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_83getConverged, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_82getConverged},
-  {"getEigenpair", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_85getEigenpair, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_84getEigenpair},
-  {"getErrorEstimate", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_87getErrorEstimate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_86getErrorEstimate},
-  {"computeError", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_89computeError, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_88computeError},
-  {"setLinearEPS", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_91setLinearEPS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_90setLinearEPS},
-  {"getLinearEPS", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_93getLinearEPS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_92getLinearEPS},
-  {"setLinearCompanionForm", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_95setLinearCompanionForm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_94setLinearCompanionForm},
-  {"getLinearCompanionForm", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_97getLinearCompanionForm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_96getLinearCompanionForm},
-  {"setLinearExplicitMatrix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_99setLinearExplicitMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_98setLinearExplicitMatrix},
-  {"getLinearExplicitMatrix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_101getLinearExplicitMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_100getLinearExplicitMatrix},
-  {0, 0, 0, 0}
-};
+  /* "SLEPc/MFN.pyx":292
+ *             The problem matrix.
+ *         """
+ *         CHKERR( MFNSetOperator(self.mfn, A.mat) )             # <<<<<<<<<<<<<<
+ * 
+ *     #
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNSetOperator(__pyx_v_self->mfn, __pyx_v_A->mat)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(17, 292, __pyx_L1_error)
 
-DL_EXPORT(PyTypeObject) PySlepcPEP_Type = {
-  PyVarObject_HEAD_INIT(0, 0)
-  "slepc4py.SLEPc.PEP", /*tp_name*/
-  sizeof(struct PySlepcPEPObject), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_8slepc4py_5SLEPc_PEP, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
-  #else
-  0, /*reserved*/
-  #endif
-  0, /*tp_repr*/
-  0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
-  0, /*tp_hash*/
-  0, /*tp_call*/
-  0, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  "\n    PEP\n    ", /*tp_doc*/
-  __pyx_tp_traverse_8slepc4py_5SLEPc_PEP, /*tp_traverse*/
-  __pyx_tp_clear_8slepc4py_5SLEPc_PEP, /*tp_clear*/
-  0, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_8slepc4py_5SLEPc_PEP, /*tp_methods*/
-  0, /*tp_members*/
-  0, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  0, /*tp_init*/
-  0, /*tp_alloc*/
-  __pyx_tp_new_8slepc4py_5SLEPc_PEP, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  0, /*tp_version_tag*/
-  #if PY_VERSION_HEX >= 0x030400a1
-  0, /*tp_finalize*/
-  #endif
-};
-static struct __pyx_vtabstruct_8slepc4py_5SLEPc_NEP __pyx_vtable_8slepc4py_5SLEPc_NEP;
+  /* "SLEPc/MFN.pyx":283
+ *         return A
+ * 
+ *     def setOperator(self, Mat A not None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets the matrix associated with the MFN object.
+ */
 
-static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_NEP(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct PySlepcNEPObject *p;
-  PyObject *o = __pyx_ptype_8petsc4py_5PETSc_Object->tp_new(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct PySlepcNEPObject *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8slepc4py_5SLEPc_NEP;
-  if (unlikely(__pyx_pw_8slepc4py_5SLEPc_3NEP_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
-  return o;
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setOperator", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static void __pyx_tp_dealloc_8slepc4py_5SLEPc_NEP(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
-  }
-  #endif
-  PyObject_GC_UnTrack(o);
-  PyObject_GC_Track(o);
-  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) __pyx_ptype_8petsc4py_5PETSc_Object->tp_dealloc(o); else __Pyx_call_next_tp_dealloc(o, __pyx_tp_dealloc_8slepc4py_5SLEPc_NEP);
-}
+/* "SLEPc/MFN.pyx":296
+ *     #
+ * 
+ *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Clears all monitors for a MFN object.
+ */
 
-static int __pyx_tp_traverse_8slepc4py_5SLEPc_NEP(PyObject *o, visitproc v, void *a) {
-  int e;
-  e = ((likely(__pyx_ptype_8petsc4py_5PETSc_Object)) ? ((__pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse) ? __pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_8slepc4py_5SLEPc_NEP)); if (e) return e;
-  return 0;
-}
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_43cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3MFN_42cancelMonitor[] = "MFN.cancelMonitor(self)\n\n        Clears all monitors for a MFN object.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_43cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("cancelMonitor (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("cancelMonitor", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "cancelMonitor", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_42cancelMonitor(((struct PySlepcMFNObject *)__pyx_v_self));
 
-static int __pyx_tp_clear_8slepc4py_5SLEPc_NEP(PyObject *o) {
-  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) { if (__pyx_ptype_8petsc4py_5PETSc_Object->tp_clear) __pyx_ptype_8petsc4py_5PETSc_Object->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_8slepc4py_5SLEPc_NEP);
-  return 0;
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static PyMethodDef __pyx_methods_8slepc4py_5SLEPc_NEP[] = {
-  {"view", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_3view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_2view},
-  {"destroy", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_5destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_4destroy},
-  {"reset", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_7reset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_6reset},
-  {"create", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_9create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_8create},
-  {"setType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_11setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_10setType},
-  {"getType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_13getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_12getType},
-  {"getOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_15getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_14getOptionsPrefix},
-  {"setOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_17setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_16setOptionsPrefix},
-  {"appendOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_19appendOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_18appendOptionsPrefix},
-  {"setFromOptions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_21setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_20setFromOptions},
-  {"getWhichEigenpairs", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_23getWhichEigenpairs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_22getWhichEigenpairs},
-  {"setWhichEigenpairs", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_25setWhichEigenpairs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_24setWhichEigenpairs},
-  {"getTolerances", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_27getTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_26getTolerances},
-  {"setTolerances", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_29setTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_28setTolerances},
-  {"getLagPreconditioner", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_31getLagPreconditioner, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_30getLagPreconditioner},
-  {"setLagPreconditioner", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_33setLagPreconditioner, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_32setLagPreconditioner},
-  {"getTrackAll", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_35getTrackAll, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_34getTrackAll},
-  {"setTrackAll", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_37setTrackAll, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_36setTrackAll},
-  {"getDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_39getDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_38getDimensions},
-  {"setDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_41setDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_40setDimensions},
-  {"getBV", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_43getBV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_42getBV},
-  {"setBV", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_45setBV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_44setBV},
-  {"setInitialSpace", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_47setInitialSpace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_46setInitialSpace},
-  {"cancelMonitor", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_49cancelMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_48cancelMonitor},
-  {"setUp", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_51setUp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_50setUp},
-  {"solve", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_53solve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_52solve},
-  {"getIterationNumber", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_55getIterationNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_54getIterationNumber},
-  {"getConvergedReason", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_57getConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_56getConvergedReason},
-  {"getConverged", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_59getConverged, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_58getConverged},
-  {"getEigenpair", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_61getEigenpair, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_60getEigenpair},
-  {"getErrorEstimate", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_63getErrorEstimate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_62getErrorEstimate},
-  {"computeError", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_65computeError, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_64computeError},
-  {"setFunction", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_67setFunction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_66setFunction},
-  {"setJacobian", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_69setJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_68setJacobian},
-  {"setSplitOperator", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_71setSplitOperator, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_70setSplitOperator},
-  {0, 0, 0, 0}
-};
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_42cancelMonitor(struct PySlepcMFNObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("cancelMonitor", 0);
 
-DL_EXPORT(PyTypeObject) PySlepcNEP_Type = {
-  PyVarObject_HEAD_INIT(0, 0)
-  "slepc4py.SLEPc.NEP", /*tp_name*/
-  sizeof(struct PySlepcNEPObject), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_8slepc4py_5SLEPc_NEP, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
-  #else
-  0, /*reserved*/
-  #endif
-  0, /*tp_repr*/
-  0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
-  0, /*tp_hash*/
-  0, /*tp_call*/
-  0, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  "\n    NEP\n    ", /*tp_doc*/
-  __pyx_tp_traverse_8slepc4py_5SLEPc_NEP, /*tp_traverse*/
-  __pyx_tp_clear_8slepc4py_5SLEPc_NEP, /*tp_clear*/
-  0, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_8slepc4py_5SLEPc_NEP, /*tp_methods*/
-  0, /*tp_members*/
-  0, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  0, /*tp_init*/
-  0, /*tp_alloc*/
-  __pyx_tp_new_8slepc4py_5SLEPc_NEP, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  0, /*tp_version_tag*/
-  #if PY_VERSION_HEX >= 0x030400a1
-  0, /*tp_finalize*/
-  #endif
-};
-static struct __pyx_vtabstruct_8slepc4py_5SLEPc_MFN __pyx_vtable_8slepc4py_5SLEPc_MFN;
+  /* "SLEPc/MFN.pyx":300
+ *         Clears all monitors for a MFN object.
+ *         """
+ *         CHKERR( MFNMonitorCancel(self.mfn) )             # <<<<<<<<<<<<<<
+ * 
+ *     #
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNMonitorCancel(__pyx_v_self->mfn)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(17, 300, __pyx_L1_error)
 
-static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_MFN(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct PySlepcMFNObject *p;
-  PyObject *o = __pyx_ptype_8petsc4py_5PETSc_Object->tp_new(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct PySlepcMFNObject *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8slepc4py_5SLEPc_MFN;
-  if (unlikely(__pyx_pw_8slepc4py_5SLEPc_3MFN_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
-  return o;
-}
+  /* "SLEPc/MFN.pyx":296
+ *     #
+ * 
+ *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Clears all monitors for a MFN object.
+ */
 
-static void __pyx_tp_dealloc_8slepc4py_5SLEPc_MFN(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
-  }
-  #endif
-  PyObject_GC_UnTrack(o);
-  PyObject_GC_Track(o);
-  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) __pyx_ptype_8petsc4py_5PETSc_Object->tp_dealloc(o); else __Pyx_call_next_tp_dealloc(o, __pyx_tp_dealloc_8slepc4py_5SLEPc_MFN);
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.cancelMonitor", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static int __pyx_tp_traverse_8slepc4py_5SLEPc_MFN(PyObject *o, visitproc v, void *a) {
-  int e;
-  e = ((likely(__pyx_ptype_8petsc4py_5PETSc_Object)) ? ((__pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse) ? __pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_8slepc4py_5SLEPc_MFN)); if (e) return e;
-  return 0;
-}
+/* "SLEPc/MFN.pyx":304
+ *     #
+ * 
+ *     def setUp(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets up all the internal data structures necessary for the
+ */
 
-static int __pyx_tp_clear_8slepc4py_5SLEPc_MFN(PyObject *o) {
-  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) { if (__pyx_ptype_8petsc4py_5PETSc_Object->tp_clear) __pyx_ptype_8petsc4py_5PETSc_Object->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_8slepc4py_5SLEPc_MFN);
-  return 0;
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_45setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3MFN_44setUp[] = "MFN.setUp(self)\n\n        Sets up all the internal data structures necessary for the\n        execution of the eigensolver.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_45setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setUp (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("setUp", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setUp", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_44setUp(((struct PySlepcMFNObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static PyMethodDef __pyx_methods_8slepc4py_5SLEPc_MFN[] = {
-  {"view", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_3view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_2view},
-  {"destroy", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_5destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_4destroy},
-  {"reset", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_7reset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_6reset},
-  {"create", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_9create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_8create},
-  {"setType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_11setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_10setType},
-  {"getType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_13getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_12getType},
-  {"getOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_15getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_14getOptionsPrefix},
-  {"setOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_17setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_16setOptionsPrefix},
-  {"appendOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_19appendOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_18appendOptionsPrefix},
-  {"setFromOptions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_21setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_20setFromOptions},
-  {"getTolerances", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_23getTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_22getTolerances},
-  {"setTolerances", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_25setTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_24setTolerances},
-  {"getDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_27getDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_26getDimensions},
-  {"setDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_29setDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_28setDimensions},
-  {"getFN", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_31getFN, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_30getFN},
-  {"setFN", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_33setFN, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_32setFN},
-  {"getBV", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_35getBV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_34getBV},
-  {"setBV", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_37setBV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_36setBV},
-  {"getOperator", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_39getOperator, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_38getOperator},
-  {"setOperator", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_41setOperator, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_40setOperator},
-  {"cancelMonitor", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_43cancelMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_42cancelMonitor},
-  {"setUp", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_45setUp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_44setUp},
-  {"solve", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_47solve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_46solve},
-  {"getIterationNumber", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_49getIterationNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_48getIterationNumber},
-  {"getConvergedReason", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_51getConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_50getConvergedReason},
-  {0, 0, 0, 0}
-};
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_44setUp(struct PySlepcMFNObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setUp", 0);
 
-DL_EXPORT(PyTypeObject) PySlepcMFN_Type = {
-  PyVarObject_HEAD_INIT(0, 0)
-  "slepc4py.SLEPc.MFN", /*tp_name*/
-  sizeof(struct PySlepcMFNObject), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_8slepc4py_5SLEPc_MFN, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
-  #else
-  0, /*reserved*/
-  #endif
-  0, /*tp_repr*/
-  0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
-  0, /*tp_hash*/
-  0, /*tp_call*/
-  0, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  "\n    MFN\n    ", /*tp_doc*/
-  __pyx_tp_traverse_8slepc4py_5SLEPc_MFN, /*tp_traverse*/
-  __pyx_tp_clear_8slepc4py_5SLEPc_MFN, /*tp_clear*/
-  0, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_8slepc4py_5SLEPc_MFN, /*tp_methods*/
-  0, /*tp_members*/
-  0, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  0, /*tp_init*/
-  0, /*tp_alloc*/
-  __pyx_tp_new_8slepc4py_5SLEPc_MFN, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  0, /*tp_version_tag*/
-  #if PY_VERSION_HEX >= 0x030400a1
-  0, /*tp_finalize*/
-  #endif
-};
+  /* "SLEPc/MFN.pyx":309
+ *         execution of the eigensolver.
+ *         """
+ *         CHKERR( MFNSetUp(self.mfn) )             # <<<<<<<<<<<<<<
+ * 
+ *     def solve(self, Vec b not None, Vec x not None):
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNSetUp(__pyx_v_self->mfn)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(17, 309, __pyx_L1_error)
 
-static PyObject *__pyx_tp_new_8slepc4py_5SLEPc__p_mem(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  PyObject *o;
-  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-    o = (*t->tp_alloc)(t, 0);
-  } else {
-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
-  }
-  if (unlikely(!o)) return 0;
-  if (unlikely(__pyx_pw_8slepc4py_5SLEPc_6_p_mem_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
-  return o;
+  /* "SLEPc/MFN.pyx":304
+ *     #
+ * 
+ *     def setUp(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Sets up all the internal data structures necessary for the
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.setUp", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static void __pyx_tp_dealloc_8slepc4py_5SLEPc__p_mem(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
-  }
-  #endif
+/* "SLEPc/MFN.pyx":311
+ *         CHKERR( MFNSetUp(self.mfn) )
+ * 
+ *     def solve(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Solves the matrix function problem. Given a vector b, the
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_47solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3MFN_46solve[] = "MFN.solve(self, Vec b, Vec x)\n\n        Solves the matrix function problem. Given a vector b, the\n        vector x = f(alpha*A)*b is returned.\n\n        Parameters\n        ----------\n        b: Vec\n            The right hand side vector.\n        x: Vec\n            The solution.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_47solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscVecObject *__pyx_v_b = 0;
+  struct PyPetscVecObject *__pyx_v_x = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("solve (wrapper)", 0);
   {
-    PyObject *etype, *eval, *etb;
-    PyErr_Fetch(&etype, &eval, &etb);
-    ++Py_REFCNT(o);
-    __pyx_pw_8slepc4py_5SLEPc_6_p_mem_3__dealloc__(o);
-    --Py_REFCNT(o);
-    PyErr_Restore(etype, eval, etb);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_b,&__pyx_n_s_x,0};
+    PyObject* values[2] = {0,0};
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_b)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("solve", 1, 2, 2, 1); __PYX_ERR(17, 311, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solve") < 0)) __PYX_ERR(17, 311, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+    }
+    __pyx_v_b = ((struct PyPetscVecObject *)values[0]);
+    __pyx_v_x = ((struct PyPetscVecObject *)values[1]);
   }
-  (*Py_TYPE(o)->tp_free)(o);
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("solve", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(17, 311, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.solve", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "b", 0))) __PYX_ERR(17, 311, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(17, 311, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_46solve(((struct PySlepcMFNObject *)__pyx_v_self), __pyx_v_b, __pyx_v_x);
+
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static PyMethodDef __pyx_methods_8slepc4py_5SLEPc__p_mem[] = {
-  {0, 0, 0, 0}
-};
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_46solve(struct PySlepcMFNObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("solve", 0);
 
-static PyTypeObject __pyx_type_8slepc4py_5SLEPc__p_mem = {
-  PyVarObject_HEAD_INIT(0, 0)
-  "slepc4py.SLEPc._p_mem", /*tp_name*/
-  sizeof(struct __pyx_obj_8slepc4py_5SLEPc__p_mem), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_8slepc4py_5SLEPc__p_mem, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
-  #else
-  0, /*reserved*/
-  #endif
-  0, /*tp_repr*/
-  0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
-  0, /*tp_hash*/
-  0, /*tp_call*/
-  0, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
-  0, /*tp_doc*/
-  0, /*tp_traverse*/
-  0, /*tp_clear*/
-  0, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_8slepc4py_5SLEPc__p_mem, /*tp_methods*/
-  0, /*tp_members*/
-  0, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  0, /*tp_init*/
-  0, /*tp_alloc*/
-  __pyx_tp_new_8slepc4py_5SLEPc__p_mem, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  0, /*tp_version_tag*/
-  #if PY_VERSION_HEX >= 0x030400a1
-  0, /*tp_finalize*/
-  #endif
-};
+  /* "SLEPc/MFN.pyx":323
+ *             The solution.
+ *         """
+ *         CHKERR( MFNSolve(self.mfn, b.vec, x.vec) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getIterationNumber(self):
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNSolve(__pyx_v_self->mfn, __pyx_v_b->vec, __pyx_v_x->vec)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(17, 323, __pyx_L1_error)
 
-static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_Sys(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  PyObject *o;
-  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-    o = (*t->tp_alloc)(t, 0);
-  } else {
-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
-  }
-  if (unlikely(!o)) return 0;
-  return o;
+  /* "SLEPc/MFN.pyx":311
+ *         CHKERR( MFNSetUp(self.mfn) )
+ * 
+ *     def solve(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
+ *         """
+ *         Solves the matrix function problem. Given a vector b, the
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.solve", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static void __pyx_tp_dealloc_8slepc4py_5SLEPc_Sys(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
-  }
-  #endif
-  (*Py_TYPE(o)->tp_free)(o);
+/* "SLEPc/MFN.pyx":325
+ *         CHKERR( MFNSolve(self.mfn, b.vec, x.vec) )
+ * 
+ *     def getIterationNumber(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the current iteration number. If the call to `solve()` is
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_49getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3MFN_48getIterationNumber[] = "MFN.getIterationNumber(self)\n\n        Gets the current iteration number. If the call to `solve()` is\n        complete, then it returns the number of iterations carried out\n        by the solution method.\n\n        Returns\n        -------\n        its: int\n             Iteration number.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_49getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getIterationNumber (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getIterationNumber", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getIterationNumber", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_48getIterationNumber(((struct PySlepcMFNObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static PyMethodDef __pyx_methods_8slepc4py_5SLEPc_Sys[] = {
-  {"getVersion", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3Sys_1getVersion, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3Sys_getVersion},
-  {"getVersionInfo", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3Sys_3getVersionInfo, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3Sys_2getVersionInfo},
-  {0, 0, 0, 0}
-};
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_48getIterationNumber(struct PySlepcMFNObject *__pyx_v_self) {
+  PetscInt __pyx_v_ival;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getIterationNumber", 0);
 
-static PyTypeObject __pyx_type_8slepc4py_5SLEPc_Sys = {
-  PyVarObject_HEAD_INIT(0, 0)
-  "slepc4py.SLEPc.Sys", /*tp_name*/
-  sizeof(struct __pyx_obj_8slepc4py_5SLEPc_Sys), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_8slepc4py_5SLEPc_Sys, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
-  #else
-  0, /*reserved*/
-  #endif
-  0, /*tp_repr*/
-  0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
-  0, /*tp_hash*/
-  0, /*tp_call*/
-  0, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
-  0, /*tp_doc*/
-  0, /*tp_traverse*/
-  0, /*tp_clear*/
-  0, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_8slepc4py_5SLEPc_Sys, /*tp_methods*/
-  0, /*tp_members*/
-  0, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  0, /*tp_init*/
-  0, /*tp_alloc*/
-  __pyx_tp_new_8slepc4py_5SLEPc_Sys, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  0, /*tp_version_tag*/
-  #if PY_VERSION_HEX >= 0x030400a1
-  0, /*tp_finalize*/
-  #endif
-};
+  /* "SLEPc/MFN.pyx":336
+ *              Iteration number.
+ *         """
+ *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( MFNGetIterationNumber(self.mfn, &ival) )
+ *         return toInt(ival)
+ */
+  __pyx_v_ival = 0;
 
-static PyMethodDef __pyx_methods[] = {
-  {0, 0, 0, 0}
-};
+  /* "SLEPc/MFN.pyx":337
+ *         """
+ *         cdef PetscInt ival = 0
+ *         CHKERR( MFNGetIterationNumber(self.mfn, &ival) )             # <<<<<<<<<<<<<<
+ *         return toInt(ival)
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNGetIterationNumber(__pyx_v_self->mfn, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(17, 337, __pyx_L1_error)
 
-#if PY_MAJOR_VERSION >= 3
-static struct PyModuleDef __pyx_moduledef = {
-  #if PY_VERSION_HEX < 0x03020000
-    { PyObject_HEAD_INIT(NULL) NULL, 0, NULL },
-  #else
-    PyModuleDef_HEAD_INIT,
-  #endif
-    "SLEPc",
-    0, /* m_doc */
-    -1, /* m_size */
-    __pyx_methods /* m_methods */,
-    NULL, /* m_reload */
-    NULL, /* m_traverse */
-    NULL, /* m_clear */
-    (freefunc)__pyx_module_cleanup /* m_free */
-};
-#endif
+  /* "SLEPc/MFN.pyx":338
+ *         cdef PetscInt ival = 0
+ *         CHKERR( MFNGetIterationNumber(self.mfn, &ival) )
+ *         return toInt(ival)             # <<<<<<<<<<<<<<
+ * 
+ *     def getConvergedReason(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(17, 338, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
 
-static __Pyx_StringTabEntry __pyx_string_tab[] = {
-  {&__pyx_kp_s_, __pyx_k_, sizeof(__pyx_k_), 0, 0, 1, 0},
-  {&__pyx_n_s_A, __pyx_k_A, sizeof(__pyx_k_A), 0, 0, 1, 1},
-  {&__pyx_n_s_ABS, __pyx_k_ABS, sizeof(__pyx_k_ABS), 0, 0, 1, 1},
-  {&__pyx_n_s_ABSOLUTE, __pyx_k_ABSOLUTE, sizeof(__pyx_k_ABSOLUTE), 0, 0, 1, 1},
-  {&__pyx_n_s_ADD, __pyx_k_ADD, sizeof(__pyx_k_ADD), 0, 0, 1, 1},
-  {&__pyx_n_s_ALL, __pyx_k_ALL, sizeof(__pyx_k_ALL), 0, 0, 1, 1},
-  {&__pyx_n_s_ALWAYS, __pyx_k_ALWAYS, sizeof(__pyx_k_ALWAYS), 0, 0, 1, 1},
-  {&__pyx_n_s_ARNOLDI, __pyx_k_ARNOLDI, sizeof(__pyx_k_ARNOLDI), 0, 0, 1, 1},
-  {&__pyx_n_s_ARPACK, __pyx_k_ARPACK, sizeof(__pyx_k_ARPACK), 0, 0, 1, 1},
-  {&__pyx_n_s_B, __pyx_k_B, sizeof(__pyx_k_B), 0, 0, 1, 1},
-  {&__pyx_n_s_BACKWARD, __pyx_k_BACKWARD, sizeof(__pyx_k_BACKWARD), 0, 0, 1, 1},
-  {&__pyx_n_s_BLOPEX, __pyx_k_BLOPEX, sizeof(__pyx_k_BLOPEX), 0, 0, 1, 1},
-  {&__pyx_n_s_BLZPACK, __pyx_k_BLZPACK, sizeof(__pyx_k_BLZPACK), 0, 0, 1, 1},
-  {&__pyx_n_s_BOTH, __pyx_k_BOTH, sizeof(__pyx_k_BOTH), 0, 0, 1, 1},
-  {&__pyx_n_s_BVOrthogBlockType, __pyx_k_BVOrthogBlockType, sizeof(__pyx_k_BVOrthogBlockType), 0, 0, 1, 1},
-  {&__pyx_n_s_BVOrthogRefineType, __pyx_k_BVOrthogRefineType, sizeof(__pyx_k_BVOrthogRefineType), 0, 0, 1, 1},
-  {&__pyx_n_s_BVOrthogType, __pyx_k_BVOrthogType, sizeof(__pyx_k_BVOrthogType), 0, 0, 1, 1},
-  {&__pyx_n_s_BVType, __pyx_k_BVType, sizeof(__pyx_k_BVType), 0, 0, 1, 1},
-  {&__pyx_kp_s_BV_block_orthogonalization_type, __pyx_k_BV_block_orthogonalization_type, sizeof(__pyx_k_BV_block_orthogonalization_type), 0, 0, 1, 0},
-  {&__pyx_kp_s_BV_orthogonalization_refinement, __pyx_k_BV_orthogonalization_refinement, sizeof(__pyx_k_BV_orthogonalization_refinement), 0, 0, 1, 0},
-  {&__pyx_kp_s_BV_orthogonalization_types_CGS, __pyx_k_BV_orthogonalization_types_CGS, sizeof(__pyx_k_BV_orthogonalization_types_CGS), 0, 0, 1, 0},
-  {&__pyx_kp_s_BV_type, __pyx_k_BV_type, sizeof(__pyx_k_BV_type), 0, 0, 1, 0},
-  {&__pyx_n_s_Balance, __pyx_k_Balance, sizeof(__pyx_k_Balance), 0, 0, 1, 1},
-  {&__pyx_n_s_Basis, __pyx_k_Basis, sizeof(__pyx_k_Basis), 0, 0, 1, 1},
-  {&__pyx_n_s_BlockType, __pyx_k_BlockType, sizeof(__pyx_k_BlockType), 0, 0, 1, 1},
-  {&__pyx_n_s_C, __pyx_k_C, sizeof(__pyx_k_C), 0, 0, 1, 1},
-  {&__pyx_n_s_CAYLEY, __pyx_k_CAYLEY, sizeof(__pyx_k_CAYLEY), 0, 0, 1, 1},
-  {&__pyx_n_s_CGS, __pyx_k_CGS, sizeof(__pyx_k_CGS), 0, 0, 1, 1},
-  {&__pyx_n_s_CHEBYSHEV1, __pyx_k_CHEBYSHEV1, sizeof(__pyx_k_CHEBYSHEV1), 0, 0, 1, 1},
-  {&__pyx_n_s_CHEBYSHEV2, __pyx_k_CHEBYSHEV2, sizeof(__pyx_k_CHEBYSHEV2), 0, 0, 1, 1},
-  {&__pyx_n_s_CHOL, __pyx_k_CHOL, sizeof(__pyx_k_CHOL), 0, 0, 1, 1},
-  {&__pyx_n_s_CISS, __pyx_k_CISS, sizeof(__pyx_k_CISS), 0, 0, 1, 1},
-  {&__pyx_n_s_COMBINE, __pyx_k_COMBINE, sizeof(__pyx_k_COMBINE), 0, 0, 1, 1},
-  {&__pyx_n_s_COMM_NULL, __pyx_k_COMM_NULL, sizeof(__pyx_k_COMM_NULL), 0, 0, 1, 1},
-  {&__pyx_n_s_COMM_SELF, __pyx_k_COMM_SELF, sizeof(__pyx_k_COMM_SELF), 0, 0, 1, 1},
-  {&__pyx_n_s_COMM_WORLD, __pyx_k_COMM_WORLD, sizeof(__pyx_k_COMM_WORLD), 0, 0, 1, 1},
-  {&__pyx_n_s_COMPOSE, __pyx_k_COMPOSE, sizeof(__pyx_k_COMPOSE), 0, 0, 1, 1},
-  {&__pyx_n_s_CONDENSED, __pyx_k_CONDENSED, sizeof(__pyx_k_CONDENSED), 0, 0, 1, 1},
-  {&__pyx_n_s_CONSTANT, __pyx_k_CONSTANT, sizeof(__pyx_k_CONSTANT), 0, 0, 1, 1},
-  {&__pyx_n_s_CONTIGUOUS, __pyx_k_CONTIGUOUS, sizeof(__pyx_k_CONTIGUOUS), 0, 0, 1, 1},
-  {&__pyx_n_s_CONVERGED_FNORM_ABS, __pyx_k_CONVERGED_FNORM_ABS, sizeof(__pyx_k_CONVERGED_FNORM_ABS), 0, 0, 1, 1},
-  {&__pyx_n_s_CONVERGED_FNORM_RELATIVE, __pyx_k_CONVERGED_FNORM_RELATIVE, sizeof(__pyx_k_CONVERGED_FNORM_RELATIVE), 0, 0, 1, 1},
-  {&__pyx_n_s_CONVERGED_ITERATING, __pyx_k_CONVERGED_ITERATING, sizeof(__pyx_k_CONVERGED_ITERATING), 0, 0, 1, 1},
-  {&__pyx_n_s_CONVERGED_SNORM_RELATIVE, __pyx_k_CONVERGED_SNORM_RELATIVE, sizeof(__pyx_k_CONVERGED_SNORM_RELATIVE), 0, 0, 1, 1},
-  {&__pyx_n_s_CONVERGED_TOL, __pyx_k_CONVERGED_TOL, sizeof(__pyx_k_CONVERGED_TOL), 0, 0, 1, 1},
-  {&__pyx_n_s_COPY, __pyx_k_COPY, sizeof(__pyx_k_COPY), 0, 0, 1, 1},
-  {&__pyx_n_s_CROSS, __pyx_k_CROSS, sizeof(__pyx_k_CROSS), 0, 0, 1, 1},
-  {&__pyx_n_s_CYCLIC, __pyx_k_CYCLIC, sizeof(__pyx_k_CYCLIC), 0, 0, 1, 1},
-  {&__pyx_n_s_Conv, __pyx_k_Conv, sizeof(__pyx_k_Conv), 0, 0, 1, 1},
-  {&__pyx_n_s_ConvergedReason, __pyx_k_ConvergedReason, sizeof(__pyx_k_ConvergedReason), 0, 0, 1, 1},
-  {&__pyx_n_s_D, __pyx_k_D, sizeof(__pyx_k_D), 0, 0, 1, 1},
-  {&__pyx_n_s_DECIDE, __pyx_k_DECIDE, sizeof(__pyx_k_DECIDE), 0, 0, 1, 1},
-  {&__pyx_n_s_DEFAULT, __pyx_k_DEFAULT, sizeof(__pyx_k_DEFAULT), 0, 0, 1, 1},
-  {&__pyx_n_s_DELAYED, __pyx_k_DELAYED, sizeof(__pyx_k_DELAYED), 0, 0, 1, 1},
-  {&__pyx_n_s_DETERMINE, __pyx_k_DETERMINE, sizeof(__pyx_k_DETERMINE), 0, 0, 1, 1},
-  {&__pyx_n_s_DIAGONAL, __pyx_k_DIAGONAL, sizeof(__pyx_k_DIAGONAL), 0, 0, 1, 1},
-  {&__pyx_n_s_DIFFERENT, __pyx_k_DIFFERENT, sizeof(__pyx_k_DIFFERENT), 0, 0, 1, 1},
-  {&__pyx_n_s_DIFFERENT_NONZERO_PATTERN, __pyx_k_DIFFERENT_NONZERO_PATTERN, sizeof(__pyx_k_DIFFERENT_NONZERO_PATTERN), 0, 0, 1, 1},
-  {&__pyx_n_s_DIFFERENT_NZ, __pyx_k_DIFFERENT_NZ, sizeof(__pyx_k_DIFFERENT_NZ), 0, 0, 1, 1},
-  {&__pyx_n_s_DIVERGED_BREAKDOWN, __pyx_k_DIVERGED_BREAKDOWN, sizeof(__pyx_k_DIVERGED_BREAKDOWN), 0, 0, 1, 1},
-  {&__pyx_n_s_DIVERGED_FNORM_NAN, __pyx_k_DIVERGED_FNORM_NAN, sizeof(__pyx_k_DIVERGED_FNORM_NAN), 0, 0, 1, 1},
-  {&__pyx_n_s_DIVERGED_FUNCTION_COUNT, __pyx_k_DIVERGED_FUNCTION_COUNT, sizeof(__pyx_k_DIVERGED_FUNCTION_COUNT), 0, 0, 1, 1},
-  {&__pyx_n_s_DIVERGED_ITS, __pyx_k_DIVERGED_ITS, sizeof(__pyx_k_DIVERGED_ITS), 0, 0, 1, 1},
-  {&__pyx_n_s_DIVERGED_LINEAR_SOLVE, __pyx_k_DIVERGED_LINEAR_SOLVE, sizeof(__pyx_k_DIVERGED_LINEAR_SOLVE), 0, 0, 1, 1},
-  {&__pyx_n_s_DIVERGED_MAX_IT, __pyx_k_DIVERGED_MAX_IT, sizeof(__pyx_k_DIVERGED_MAX_IT), 0, 0, 1, 1},
-  {&__pyx_n_s_DIVIDE, __pyx_k_DIVIDE, sizeof(__pyx_k_DIVIDE), 0, 0, 1, 1},
-  {&__pyx_n_s_DSMatType, __pyx_k_DSMatType, sizeof(__pyx_k_DSMatType), 0, 0, 1, 1},
-  {&__pyx_n_s_DSStateType, __pyx_k_DSStateType, sizeof(__pyx_k_DSStateType), 0, 0, 1, 1},
-  {&__pyx_n_s_DSType, __pyx_k_DSType, sizeof(__pyx_k_DSType), 0, 0, 1, 1},
-  {&__pyx_kp_s_DS_state_types_RAW_Not_processe, __pyx_k_DS_state_types_RAW_Not_processe, sizeof(__pyx_k_DS_state_types_RAW_Not_processe), 0, 0, 1, 0},
-  {&__pyx_kp_s_DS_type, __pyx_k_DS_type, sizeof(__pyx_k_DS_type), 0, 0, 1, 0},
-  {&__pyx_n_s_Dl, __pyx_k_Dl, sizeof(__pyx_k_Dl), 0, 0, 1, 1},
-  {&__pyx_n_s_Dr, __pyx_k_Dr, sizeof(__pyx_k_Dr), 0, 0, 1, 1},
-  {&__pyx_n_s_EIG, __pyx_k_EIG, sizeof(__pyx_k_EIG), 0, 0, 1, 1},
-  {&__pyx_n_s_ELLIPSE, __pyx_k_ELLIPSE, sizeof(__pyx_k_ELLIPSE), 0, 0, 1, 1},
-  {&__pyx_n_s_EPSBalance, __pyx_k_EPSBalance, sizeof(__pyx_k_EPSBalance), 0, 0, 1, 1},
-  {&__pyx_n_s_EPSConv, __pyx_k_EPSConv, sizeof(__pyx_k_EPSConv), 0, 0, 1, 1},
-  {&__pyx_n_s_EPSConvergedReason, __pyx_k_EPSConvergedReason, sizeof(__pyx_k_EPSConvergedReason), 0, 0, 1, 1},
-  {&__pyx_n_s_EPSErrorType, __pyx_k_EPSErrorType, sizeof(__pyx_k_EPSErrorType), 0, 0, 1, 1},
-  {&__pyx_n_s_EPSExtraction, __pyx_k_EPSExtraction, sizeof(__pyx_k_EPSExtraction), 0, 0, 1, 1},
-  {&__pyx_n_s_EPSLanczosReorthogType, __pyx_k_EPSLanczosReorthogType, sizeof(__pyx_k_EPSLanczosReorthogType), 0, 0, 1, 1},
-  {&__pyx_n_s_EPSPowerShiftType, __pyx_k_EPSPowerShiftType, sizeof(__pyx_k_EPSPowerShiftType), 0, 0, 1, 1},
-  {&__pyx_n_s_EPSProblemType, __pyx_k_EPSProblemType, sizeof(__pyx_k_EPSProblemType), 0, 0, 1, 1},
-  {&__pyx_n_s_EPSType, __pyx_k_EPSType, sizeof(__pyx_k_EPSType), 0, 0, 1, 1},
-  {&__pyx_n_s_EPSWhich, __pyx_k_EPSWhich, sizeof(__pyx_k_EPSWhich), 0, 0, 1, 1},
-  {&__pyx_kp_s_EPS_Lanczos_reorthogonalization, __pyx_k_EPS_Lanczos_reorthogonalization, sizeof(__pyx_k_EPS_Lanczos_reorthogonalization), 0, 0, 1, 0},
-  {&__pyx_kp_s_EPS_Power_shift_type_CONSTANT_R, __pyx_k_EPS_Power_shift_type_CONSTANT_R, sizeof(__pyx_k_EPS_Power_shift_type_CONSTANT_R), 0, 0, 1, 0},
-  {&__pyx_kp_s_EPS_convergence_reasons_CONVERG, __pyx_k_EPS_convergence_reasons_CONVERG, sizeof(__pyx_k_EPS_convergence_reasons_CONVERG), 0, 0, 1, 0},
-  {&__pyx_kp_s_EPS_convergence_test_ABS_EIG_NO, __pyx_k_EPS_convergence_test_ABS_EIG_NO, sizeof(__pyx_k_EPS_convergence_test_ABS_EIG_NO), 0, 0, 1, 0},
-  {&__pyx_kp_s_EPS_desired_piece_of_spectrum_L, __pyx_k_EPS_desired_piece_of_spectrum_L, sizeof(__pyx_k_EPS_desired_piece_of_spectrum_L), 0, 0, 1, 0},
-  {&__pyx_kp_s_EPS_error_type_to_assess_accura, __pyx_k_EPS_error_type_to_assess_accura, sizeof(__pyx_k_EPS_error_type_to_assess_accura), 0, 0, 1, 0},
-  {&__pyx_kp_s_EPS_extraction_technique_RITZ_S, __pyx_k_EPS_extraction_technique_RITZ_S, sizeof(__pyx_k_EPS_extraction_technique_RITZ_S), 0, 0, 1, 0},
-  {&__pyx_kp_s_EPS_problem_type_HEP_Hermitian, __pyx_k_EPS_problem_type_HEP_Hermitian, sizeof(__pyx_k_EPS_problem_type_HEP_Hermitian), 0, 0, 1, 0},
-  {&__pyx_kp_s_EPS_type_Native_sparse_eigensol, __pyx_k_EPS_type_Native_sparse_eigensol, sizeof(__pyx_k_EPS_type_Native_sparse_eigensol), 0, 0, 1, 0},
-  {&__pyx_kp_s_EPS_type_of_balancing_used_for, __pyx_k_EPS_type_of_balancing_used_for, sizeof(__pyx_k_EPS_type_of_balancing_used_for), 0, 0, 1, 0},
-  {&__pyx_n_s_EXP, __pyx_k_EXP, sizeof(__pyx_k_EXP), 0, 0, 1, 1},
-  {&__pyx_n_s_Error, __pyx_k_Error, sizeof(__pyx_k_Error), 0, 0, 1, 1},
-  {&__pyx_n_s_ErrorType, __pyx_k_ErrorType, sizeof(__pyx_k_ErrorType), 0, 0, 1, 1},
-  {&__pyx_n_s_Extraction, __pyx_k_Extraction, sizeof(__pyx_k_Extraction), 0, 0, 1, 1},
-  {&__pyx_n_s_F, __pyx_k_F, sizeof(__pyx_k_F), 0, 0, 1, 1},
-  {&__pyx_n_s_FEAST, __pyx_k_FEAST, sizeof(__pyx_k_FEAST), 0, 0, 1, 1},
-  {&__pyx_n_s_FNCombineType, __pyx_k_FNCombineType, sizeof(__pyx_k_FNCombineType), 0, 0, 1, 1},
-  {&__pyx_n_s_FNType, __pyx_k_FNType, sizeof(__pyx_k_FNType), 0, 0, 1, 1},
-  {&__pyx_kp_s_FN_type, __pyx_k_FN_type, sizeof(__pyx_k_FN_type), 0, 0, 1, 0},
-  {&__pyx_kp_s_FN_type_of_combination_of_child, __pyx_k_FN_type_of_combination_of_child, sizeof(__pyx_k_FN_type_of_combination_of_child), 0, 0, 1, 0},
-  {&__pyx_n_s_FULL, __pyx_k_FULL, sizeof(__pyx_k_FULL), 0, 0, 1, 1},
-  {&__pyx_n_s_GD, __pyx_k_GD, sizeof(__pyx_k_GD), 0, 0, 1, 1},
-  {&__pyx_n_s_GENERAL, __pyx_k_GENERAL, sizeof(__pyx_k_GENERAL), 0, 0, 1, 1},
-  {&__pyx_n_s_GHEP, __pyx_k_GHEP, sizeof(__pyx_k_GHEP), 0, 0, 1, 1},
-  {&__pyx_n_s_GHIEP, __pyx_k_GHIEP, sizeof(__pyx_k_GHIEP), 0, 0, 1, 1},
-  {&__pyx_n_s_GNHEP, __pyx_k_GNHEP, sizeof(__pyx_k_GNHEP), 0, 0, 1, 1},
-  {&__pyx_n_s_GS, __pyx_k_GS, sizeof(__pyx_k_GS), 0, 0, 1, 1},
-  {&__pyx_n_s_GYROSCOPIC, __pyx_k_GYROSCOPIC, sizeof(__pyx_k_GYROSCOPIC), 0, 0, 1, 1},
-  {&__pyx_n_s_HARMONIC, __pyx_k_HARMONIC, sizeof(__pyx_k_HARMONIC), 0, 0, 1, 1},
-  {&__pyx_n_s_HARMONIC_LARGEST, __pyx_k_HARMONIC_LARGEST, sizeof(__pyx_k_HARMONIC_LARGEST), 0, 0, 1, 1},
-  {&__pyx_n_s_HARMONIC_RELATIVE, __pyx_k_HARMONIC_RELATIVE, sizeof(__pyx_k_HARMONIC_RELATIVE), 0, 0, 1, 1},
-  {&__pyx_n_s_HARMONIC_RIGHT, __pyx_k_HARMONIC_RIGHT, sizeof(__pyx_k_HARMONIC_RIGHT), 0, 0, 1, 1},
-  {&__pyx_n_s_HEP, __pyx_k_HEP, sizeof(__pyx_k_HEP), 0, 0, 1, 1},
-  {&__pyx_n_s_HERMITE, __pyx_k_HERMITE, sizeof(__pyx_k_HERMITE), 0, 0, 1, 1},
-  {&__pyx_n_s_HERMITIAN, __pyx_k_HERMITIAN, sizeof(__pyx_k_HERMITIAN), 0, 0, 1, 1},
-  {&__pyx_n_s_IFNEEDED, __pyx_k_IFNEEDED, sizeof(__pyx_k_IFNEEDED), 0, 0, 1, 1},
-  {&__pyx_n_s_INPLACE, __pyx_k_INPLACE, sizeof(__pyx_k_INPLACE), 0, 0, 1, 1},
-  {&__pyx_n_s_INTERMEDIATE, __pyx_k_INTERMEDIATE, sizeof(__pyx_k_INTERMEDIATE), 0, 0, 1, 1},
-  {&__pyx_n_s_INTERPOL, __pyx_k_INTERPOL, sizeof(__pyx_k_INTERPOL), 0, 0, 1, 1},
-  {&__pyx_n_s_INTERVAL, __pyx_k_INTERVAL, sizeof(__pyx_k_INTERVAL), 0, 0, 1, 1},
-  {&__pyx_n_s_ITERATING, __pyx_k_ITERATING, sizeof(__pyx_k_ITERATING), 0, 0, 1, 1},
-  {&__pyx_n_s_J, __pyx_k_J, sizeof(__pyx_k_J), 0, 0, 1, 1},
-  {&__pyx_n_s_JD, __pyx_k_JD, sizeof(__pyx_k_JD), 0, 0, 1, 1},
-  {&__pyx_n_s_KRYLOV, __pyx_k_KRYLOV, sizeof(__pyx_k_KRYLOV), 0, 0, 1, 1},
-  {&__pyx_n_s_KRYLOVSCHUR, __pyx_k_KRYLOVSCHUR, sizeof(__pyx_k_KRYLOVSCHUR), 0, 0, 1, 1},
-  {&__pyx_n_s_LAGUERRE, __pyx_k_LAGUERRE, sizeof(__pyx_k_LAGUERRE), 0, 0, 1, 1},
-  {&__pyx_n_s_LANCZOS, __pyx_k_LANCZOS, sizeof(__pyx_k_LANCZOS), 0, 0, 1, 1},
-  {&__pyx_n_s_LAPACK, __pyx_k_LAPACK, sizeof(__pyx_k_LAPACK), 0, 0, 1, 1},
-  {&__pyx_n_s_LARGEST, __pyx_k_LARGEST, sizeof(__pyx_k_LARGEST), 0, 0, 1, 1},
-  {&__pyx_n_s_LARGEST_IMAGINARY, __pyx_k_LARGEST_IMAGINARY, sizeof(__pyx_k_LARGEST_IMAGINARY), 0, 0, 1, 1},
-  {&__pyx_n_s_LARGEST_MAGNITUDE, __pyx_k_LARGEST_MAGNITUDE, sizeof(__pyx_k_LARGEST_MAGNITUDE), 0, 0, 1, 1},
-  {&__pyx_n_s_LARGEST_REAL, __pyx_k_LARGEST_REAL, sizeof(__pyx_k_LARGEST_REAL), 0, 0, 1, 1},
-  {&__pyx_n_s_LEGENDRE, __pyx_k_LEGENDRE, sizeof(__pyx_k_LEGENDRE), 0, 0, 1, 1},
-  {&__pyx_n_s_LINEAR, __pyx_k_LINEAR, sizeof(__pyx_k_LINEAR), 0, 0, 1, 1},
-  {&__pyx_n_s_LOBPCG, __pyx_k_LOBPCG, sizeof(__pyx_k_LOBPCG), 0, 0, 1, 1},
-  {&__pyx_n_s_LOCAL, __pyx_k_LOCAL, sizeof(__pyx_k_LOCAL), 0, 0, 1, 1},
-  {&__pyx_n_s_LOG, __pyx_k_LOG, sizeof(__pyx_k_LOG), 0, 0, 1, 1},
-  {&__pyx_n_s_LanczosReorthogType, __pyx_k_LanczosReorthogType, sizeof(__pyx_k_LanczosReorthogType), 0, 0, 1, 1},
-  {&__pyx_n_s_MAT, __pyx_k_MAT, sizeof(__pyx_k_MAT), 0, 0, 1, 1},
-  {&__pyx_n_s_MFNConvergedReason, __pyx_k_MFNConvergedReason, sizeof(__pyx_k_MFNConvergedReason), 0, 0, 1, 1},
-  {&__pyx_n_s_MFNType, __pyx_k_MFNType, sizeof(__pyx_k_MFNType), 0, 0, 1, 1},
-  {&__pyx_n_s_MGS, __pyx_k_MGS, sizeof(__pyx_k_MGS), 0, 0, 1, 1},
-  {&__pyx_n_s_MONOMIAL, __pyx_k_MONOMIAL, sizeof(__pyx_k_MONOMIAL), 0, 0, 1, 1},
-  {&__pyx_n_s_MULTIPLE, __pyx_k_MULTIPLE, sizeof(__pyx_k_MULTIPLE), 0, 0, 1, 1},
-  {&__pyx_n_s_MULTIPLY, __pyx_k_MULTIPLY, sizeof(__pyx_k_MULTIPLY), 0, 0, 1, 1},
-  {&__pyx_n_s_MatMode, __pyx_k_MatMode, sizeof(__pyx_k_MatMode), 0, 0, 1, 1},
-  {&__pyx_n_s_MatStructure, __pyx_k_MatStructure, sizeof(__pyx_k_MatStructure), 0, 0, 1, 1},
-  {&__pyx_n_s_MatType, __pyx_k_MatType, sizeof(__pyx_k_MatType), 0, 0, 1, 1},
-  {&__pyx_n_s_MemoryError, __pyx_k_MemoryError, sizeof(__pyx_k_MemoryError), 0, 0, 1, 1},
-  {&__pyx_n_s_NARNOLDI, __pyx_k_NARNOLDI, sizeof(__pyx_k_NARNOLDI), 0, 0, 1, 1},
-  {&__pyx_n_s_NEP, __pyx_k_NEP, sizeof(__pyx_k_NEP), 0, 0, 1, 1},
-  {&__pyx_n_s_NEPConvergedReason, __pyx_k_NEPConvergedReason, sizeof(__pyx_k_NEPConvergedReason), 0, 0, 1, 1},
-  {&__pyx_n_s_NEPErrorType, __pyx_k_NEPErrorType, sizeof(__pyx_k_NEPErrorType), 0, 0, 1, 1},
-  {&__pyx_n_s_NEPType, __pyx_k_NEPType, sizeof(__pyx_k_NEPType), 0, 0, 1, 1},
-  {&__pyx_n_s_NEPWhich, __pyx_k_NEPWhich, sizeof(__pyx_k_NEPWhich), 0, 0, 1, 1},
-  {&__pyx_kp_s_NEP_error_type_to_assess_accura, __pyx_k_NEP_error_type_to_assess_accura, sizeof(__pyx_k_NEP_error_type_to_assess_accura), 0, 0, 1, 0},
-  {&__pyx_kp_s_NEP_type_Nonlinear_eigensolvers, __pyx_k_NEP_type_Nonlinear_eigensolvers, sizeof(__pyx_k_NEP_type_Nonlinear_eigensolvers), 0, 0, 1, 0},
-  {&__pyx_n_s_NEVER, __pyx_k_NEVER, sizeof(__pyx_k_NEVER), 0, 0, 1, 1},
-  {&__pyx_n_s_NHEP, __pyx_k_NHEP, sizeof(__pyx_k_NHEP), 0, 0, 1, 1},
-  {&__pyx_n_s_NONE, __pyx_k_NONE, sizeof(__pyx_k_NONE), 0, 0, 1, 1},
-  {&__pyx_n_s_NORM, __pyx_k_NORM, sizeof(__pyx_k_NORM), 0, 0, 1, 1},
-  {&__pyx_n_s_ONESIDE, __pyx_k_ONESIDE, sizeof(__pyx_k_ONESIDE), 0, 0, 1, 1},
-  {&__pyx_n_s_OrthogBlockType, __pyx_k_OrthogBlockType, sizeof(__pyx_k_OrthogBlockType), 0, 0, 1, 1},
-  {&__pyx_n_s_OrthogRefineType, __pyx_k_OrthogRefineType, sizeof(__pyx_k_OrthogRefineType), 0, 0, 1, 1},
-  {&__pyx_n_s_OrthogType, __pyx_k_OrthogType, sizeof(__pyx_k_OrthogType), 0, 0, 1, 1},
-  {&__pyx_n_s_P, __pyx_k_P, sizeof(__pyx_k_P), 0, 0, 1, 1},
-  {&__pyx_n_s_PARTIAL, __pyx_k_PARTIAL, sizeof(__pyx_k_PARTIAL), 0, 0, 1, 1},
-  {&__pyx_n_s_PEP, __pyx_k_PEP, sizeof(__pyx_k_PEP), 0, 0, 1, 1},
-  {&__pyx_n_s_PEPBasis, __pyx_k_PEPBasis, sizeof(__pyx_k_PEPBasis), 0, 0, 1, 1},
-  {&__pyx_n_s_PEPConv, __pyx_k_PEPConv, sizeof(__pyx_k_PEPConv), 0, 0, 1, 1},
-  {&__pyx_n_s_PEPConvergedReason, __pyx_k_PEPConvergedReason, sizeof(__pyx_k_PEPConvergedReason), 0, 0, 1, 1},
-  {&__pyx_n_s_PEPErrorType, __pyx_k_PEPErrorType, sizeof(__pyx_k_PEPErrorType), 0, 0, 1, 1},
-  {&__pyx_n_s_PEPProblemType, __pyx_k_PEPProblemType, sizeof(__pyx_k_PEPProblemType), 0, 0, 1, 1},
-  {&__pyx_n_s_PEPRefine, __pyx_k_PEPRefine, sizeof(__pyx_k_PEPRefine), 0, 0, 1, 1},
-  {&__pyx_n_s_PEPScale, __pyx_k_PEPScale, sizeof(__pyx_k_PEPScale), 0, 0, 1, 1},
-  {&__pyx_n_s_PEPType, __pyx_k_PEPType, sizeof(__pyx_k_PEPType), 0, 0, 1, 1},
-  {&__pyx_n_s_PEPWhich, __pyx_k_PEPWhich, sizeof(__pyx_k_PEPWhich), 0, 0, 1, 1},
-  {&__pyx_kp_s_PEP_convergence_reasons_CONVERG, __pyx_k_PEP_convergence_reasons_CONVERG, sizeof(__pyx_k_PEP_convergence_reasons_CONVERG), 0, 0, 1, 0},
-  {&__pyx_kp_s_PEP_convergence_test_ABS_EIG_NO, __pyx_k_PEP_convergence_test_ABS_EIG_NO, sizeof(__pyx_k_PEP_convergence_test_ABS_EIG_NO), 0, 0, 1, 0},
-  {&__pyx_kp_s_PEP_desired_part_of_spectrum_LA, __pyx_k_PEP_desired_part_of_spectrum_LA, sizeof(__pyx_k_PEP_desired_part_of_spectrum_LA), 0, 0, 1, 0},
-  {&__pyx_kp_s_PEP_error_type_to_assess_accura, __pyx_k_PEP_error_type_to_assess_accura, sizeof(__pyx_k_PEP_error_type_to_assess_accura), 0, 0, 1, 0},
-  {&__pyx_kp_s_PEP_problem_type_GENERAL_No_str, __pyx_k_PEP_problem_type_GENERAL_No_str, sizeof(__pyx_k_PEP_problem_type_GENERAL_No_str), 0, 0, 1, 0},
-  {&__pyx_kp_s_PEP_refinement_strategy_NONE_SI, __pyx_k_PEP_refinement_strategy_NONE_SI, sizeof(__pyx_k_PEP_refinement_strategy_NONE_SI), 0, 0, 1, 0},
-  {&__pyx_kp_s_PEP_type_Polynomial_eigensolver, __pyx_k_PEP_type_Polynomial_eigensolver, sizeof(__pyx_k_PEP_type_Polynomial_eigensolver), 0, 0, 1, 0},
-  {&__pyx_n_s_PERIODIC, __pyx_k_PERIODIC, sizeof(__pyx_k_PERIODIC), 0, 0, 1, 1},
-  {&__pyx_n_s_PGNHEP, __pyx_k_PGNHEP, sizeof(__pyx_k_PGNHEP), 0, 0, 1, 1},
-  {&__pyx_n_s_PHI, __pyx_k_PHI, sizeof(__pyx_k_PHI), 0, 0, 1, 1},
-  {&__pyx_n_s_POLYGON, __pyx_k_POLYGON, sizeof(__pyx_k_POLYGON), 0, 0, 1, 1},
-  {&__pyx_n_s_POWER, __pyx_k_POWER, sizeof(__pyx_k_POWER), 0, 0, 1, 1},
-  {&__pyx_n_s_PRECOND, __pyx_k_PRECOND, sizeof(__pyx_k_PRECOND), 0, 0, 1, 1},
-  {&__pyx_n_s_PRIMME, __pyx_k_PRIMME, sizeof(__pyx_k_PRIMME), 0, 0, 1, 1},
-  {&__pyx_n_s_PowerShiftType, __pyx_k_PowerShiftType, sizeof(__pyx_k_PowerShiftType), 0, 0, 1, 1},
-  {&__pyx_n_s_ProblemType, __pyx_k_ProblemType, sizeof(__pyx_k_ProblemType), 0, 0, 1, 1},
-  {&__pyx_n_s_Q, __pyx_k_Q, sizeof(__pyx_k_Q), 0, 0, 1, 1},
-  {&__pyx_n_s_QARNOLDI, __pyx_k_QARNOLDI, sizeof(__pyx_k_QARNOLDI), 0, 0, 1, 1},
-  {&__pyx_n_s_RATIONAL, __pyx_k_RATIONAL, sizeof(__pyx_k_RATIONAL), 0, 0, 1, 1},
-  {&__pyx_n_s_RAW, __pyx_k_RAW, sizeof(__pyx_k_RAW), 0, 0, 1, 1},
-  {&__pyx_n_s_RAYLEIGH, __pyx_k_RAYLEIGH, sizeof(__pyx_k_RAYLEIGH), 0, 0, 1, 1},
-  {&__pyx_n_s_REFINED, __pyx_k_REFINED, sizeof(__pyx_k_REFINED), 0, 0, 1, 1},
-  {&__pyx_n_s_REFINED_HARMONIC, __pyx_k_REFINED_HARMONIC, sizeof(__pyx_k_REFINED_HARMONIC), 0, 0, 1, 1},
-  {&__pyx_n_s_RELATIVE, __pyx_k_RELATIVE, sizeof(__pyx_k_RELATIVE), 0, 0, 1, 1},
-  {&__pyx_n_s_RGType, __pyx_k_RGType, sizeof(__pyx_k_RGType), 0, 0, 1, 1},
-  {&__pyx_kp_s_RG_type, __pyx_k_RG_type, sizeof(__pyx_k_RG_type), 0, 0, 1, 0},
-  {&__pyx_n_s_RII, __pyx_k_RII, sizeof(__pyx_k_RII), 0, 0, 1, 1},
-  {&__pyx_n_s_RING, __pyx_k_RING, sizeof(__pyx_k_RING), 0, 0, 1, 1},
-  {&__pyx_n_s_RITZ, __pyx_k_RITZ, sizeof(__pyx_k_RITZ), 0, 0, 1, 1},
-  {&__pyx_n_s_RQCG, __pyx_k_RQCG, sizeof(__pyx_k_RQCG), 0, 0, 1, 1},
-  {&__pyx_n_s_Refine, __pyx_k_Refine, sizeof(__pyx_k_Refine), 0, 0, 1, 1},
-  {&__pyx_n_s_RefineType, __pyx_k_RefineType, sizeof(__pyx_k_RefineType), 0, 0, 1, 1},
-  {&__pyx_n_s_SAME, __pyx_k_SAME, sizeof(__pyx_k_SAME), 0, 0, 1, 1},
-  {&__pyx_n_s_SAME_NONZERO_PATTERN, __pyx_k_SAME_NONZERO_PATTERN, sizeof(__pyx_k_SAME_NONZERO_PATTERN), 0, 0, 1, 1},
-  {&__pyx_n_s_SAME_NZ, __pyx_k_SAME_NZ, sizeof(__pyx_k_SAME_NZ), 0, 0, 1, 1},
-  {&__pyx_kp_s_SAME_Same_non_zero_pattern_SUBS, __pyx_k_SAME_Same_non_zero_pattern_SUBS, sizeof(__pyx_k_SAME_Same_non_zero_pattern_SUBS), 0, 0, 1, 0},
-  {&__pyx_n_s_SCALAR, __pyx_k_SCALAR, sizeof(__pyx_k_SCALAR), 0, 0, 1, 1},
-  {&__pyx_n_s_SELECTIVE, __pyx_k_SELECTIVE, sizeof(__pyx_k_SELECTIVE), 0, 0, 1, 1},
-  {&__pyx_n_s_SHELL, __pyx_k_SHELL, sizeof(__pyx_k_SHELL), 0, 0, 1, 1},
-  {&__pyx_n_s_SHIFT, __pyx_k_SHIFT, sizeof(__pyx_k_SHIFT), 0, 0, 1, 1},
-  {&__pyx_n_s_SIMPLE, __pyx_k_SIMPLE, sizeof(__pyx_k_SIMPLE), 0, 0, 1, 1},
-  {&__pyx_n_s_SINVERT, __pyx_k_SINVERT, sizeof(__pyx_k_SINVERT), 0, 0, 1, 1},
-  {&__pyx_n_s_SLP, __pyx_k_SLP, sizeof(__pyx_k_SLP), 0, 0, 1, 1},
-  {&__pyx_n_s_SMALLEST, __pyx_k_SMALLEST, sizeof(__pyx_k_SMALLEST), 0, 0, 1, 1},
-  {&__pyx_n_s_SMALLEST_IMAGINARY, __pyx_k_SMALLEST_IMAGINARY, sizeof(__pyx_k_SMALLEST_IMAGINARY), 0, 0, 1, 1},
-  {&__pyx_n_s_SMALLEST_MAGNITUDE, __pyx_k_SMALLEST_MAGNITUDE, sizeof(__pyx_k_SMALLEST_MAGNITUDE), 0, 0, 1, 1},
-  {&__pyx_n_s_SMALLEST_REAL, __pyx_k_SMALLEST_REAL, sizeof(__pyx_k_SMALLEST_REAL), 0, 0, 1, 1},
-  {&__pyx_n_s_SQRT, __pyx_k_SQRT, sizeof(__pyx_k_SQRT), 0, 0, 1, 1},
-  {&__pyx_n_s_STMatMode, __pyx_k_STMatMode, sizeof(__pyx_k_STMatMode), 0, 0, 1, 1},
-  {&__pyx_n_s_STMatStructure, __pyx_k_STMatStructure, sizeof(__pyx_k_STMatStructure), 0, 0, 1, 1},
-  {&__pyx_n_s_STOAR, __pyx_k_STOAR, sizeof(__pyx_k_STOAR), 0, 0, 1, 1},
-  {&__pyx_n_s_STType, __pyx_k_STType, sizeof(__pyx_k_STType), 0, 0, 1, 1},
-  {&__pyx_kp_s_ST_matrix_mode_COPY_A_working_c, __pyx_k_ST_matrix_mode_COPY_A_working_c, sizeof(__pyx_k_ST_matrix_mode_COPY_A_working_c), 0, 0, 1, 0},
-  {&__pyx_kp_s_ST_types_SHELL_User_defined_SHI, __pyx_k_ST_types_SHELL_User_defined_SHI, sizeof(__pyx_k_ST_types_SHELL_User_defined_SHI), 0, 0, 1, 0},
-  {&__pyx_n_s_SUBSET, __pyx_k_SUBSET, sizeof(__pyx_k_SUBSET), 0, 0, 1, 1},
-  {&__pyx_n_s_SUBSET_NONZERO_PATTERN, __pyx_k_SUBSET_NONZERO_PATTERN, sizeof(__pyx_k_SUBSET_NONZERO_PATTERN), 0, 0, 1, 1},
-  {&__pyx_n_s_SUBSET_NZ, __pyx_k_SUBSET_NZ, sizeof(__pyx_k_SUBSET_NZ), 0, 0, 1, 1},
-  {&__pyx_n_s_SUBSPACE, __pyx_k_SUBSPACE, sizeof(__pyx_k_SUBSPACE), 0, 0, 1, 1},
-  {&__pyx_n_s_SVD, __pyx_k_SVD, sizeof(__pyx_k_SVD), 0, 0, 1, 1},
-  {&__pyx_n_s_SVDConvergedReason, __pyx_k_SVDConvergedReason, sizeof(__pyx_k_SVDConvergedReason), 0, 0, 1, 1},
-  {&__pyx_n_s_SVDErrorType, __pyx_k_SVDErrorType, sizeof(__pyx_k_SVDErrorType), 0, 0, 1, 1},
-  {&__pyx_n_s_SVDType, __pyx_k_SVDType, sizeof(__pyx_k_SVDType), 0, 0, 1, 1},
-  {&__pyx_n_s_SVDWhich, __pyx_k_SVDWhich, sizeof(__pyx_k_SVDWhich), 0, 0, 1, 1},
-  {&__pyx_kp_s_SVD_convergence_reasons_CONVERG, __pyx_k_SVD_convergence_reasons_CONVERG, sizeof(__pyx_k_SVD_convergence_reasons_CONVERG), 0, 0, 1, 0},
-  {&__pyx_kp_s_SVD_desired_piece_of_spectrum_L, __pyx_k_SVD_desired_piece_of_spectrum_L, sizeof(__pyx_k_SVD_desired_piece_of_spectrum_L), 0, 0, 1, 0},
-  {&__pyx_kp_s_SVD_error_type_to_assess_accura, __pyx_k_SVD_error_type_to_assess_accura, sizeof(__pyx_k_SVD_error_type_to_assess_accura), 0, 0, 1, 0},
-  {&__pyx_kp_s_SVD_types_CROSS_Eigenproblem_wi, __pyx_k_SVD_types_CROSS_Eigenproblem_wi, sizeof(__pyx_k_SVD_types_CROSS_Eigenproblem_wi), 0, 0, 1, 0},
-  {&__pyx_n_s_SVEC, __pyx_k_SVEC, sizeof(__pyx_k_SVEC), 0, 0, 1, 1},
-  {&__pyx_kp_s_Scalable_Library_for_Eigenvalue, __pyx_k_Scalable_Library_for_Eigenvalue, sizeof(__pyx_k_Scalable_Library_for_Eigenvalue), 0, 0, 1, 0},
-  {&__pyx_n_s_Scale, __pyx_k_Scale, sizeof(__pyx_k_Scale), 0, 0, 1, 1},
-  {&__pyx_n_s_StateType, __pyx_k_StateType, sizeof(__pyx_k_StateType), 0, 0, 1, 1},
-  {&__pyx_n_s_T, __pyx_k_T, sizeof(__pyx_k_T), 0, 0, 1, 1},
-  {&__pyx_n_s_TARGET_IMAGINARY, __pyx_k_TARGET_IMAGINARY, sizeof(__pyx_k_TARGET_IMAGINARY), 0, 0, 1, 1},
-  {&__pyx_n_s_TARGET_MAGNITUDE, __pyx_k_TARGET_MAGNITUDE, sizeof(__pyx_k_TARGET_MAGNITUDE), 0, 0, 1, 1},
-  {&__pyx_n_s_TARGET_REAL, __pyx_k_TARGET_REAL, sizeof(__pyx_k_TARGET_REAL), 0, 0, 1, 1},
-  {&__pyx_n_s_TOAR, __pyx_k_TOAR, sizeof(__pyx_k_TOAR), 0, 0, 1, 1},
-  {&__pyx_n_s_TRLAN, __pyx_k_TRLAN, sizeof(__pyx_k_TRLAN), 0, 0, 1, 1},
-  {&__pyx_n_s_TRLANCZOS, __pyx_k_TRLANCZOS, sizeof(__pyx_k_TRLANCZOS), 0, 0, 1, 1},
-  {&__pyx_n_s_TRUNCATED, __pyx_k_TRUNCATED, sizeof(__pyx_k_TRUNCATED), 0, 0, 1, 1},
-  {&__pyx_n_s_TWOSIDE, __pyx_k_TWOSIDE, sizeof(__pyx_k_TWOSIDE), 0, 0, 1, 1},
-  {&__pyx_kp_s_To_refer_to_one_of_the_matrices, __pyx_k_To_refer_to_one_of_the_matrices, sizeof(__pyx_k_To_refer_to_one_of_the_matrices), 0, 0, 1, 0},
-  {&__pyx_n_s_Type, __pyx_k_Type, sizeof(__pyx_k_Type), 0, 0, 1, 1},
-  {&__pyx_n_s_U, __pyx_k_U, sizeof(__pyx_k_U), 0, 0, 1, 1},
-  {&__pyx_n_s_USER, __pyx_k_USER, sizeof(__pyx_k_USER), 0, 0, 1, 1},
-  {&__pyx_n_s_V, __pyx_k_V, sizeof(__pyx_k_V), 0, 0, 1, 1},
-  {&__pyx_n_s_VECS, __pyx_k_VECS, sizeof(__pyx_k_VECS), 0, 0, 1, 1},
-  {&__pyx_n_s_VT, __pyx_k_VT, sizeof(__pyx_k_VT), 0, 0, 1, 1},
-  {&__pyx_n_s_Vi, __pyx_k_Vi, sizeof(__pyx_k_Vi), 0, 0, 1, 1},
-  {&__pyx_n_s_Vr, __pyx_k_Vr, sizeof(__pyx_k_Vr), 0, 0, 1, 1},
-  {&__pyx_n_s_W, __pyx_k_W, sizeof(__pyx_k_W), 0, 0, 1, 1},
-  {&__pyx_n_s_WILKINSON, __pyx_k_WILKINSON, sizeof(__pyx_k_WILKINSON), 0, 0, 1, 1},
-  {&__pyx_n_s_Which, __pyx_k_Which, sizeof(__pyx_k_Which), 0, 0, 1, 1},
-  {&__pyx_n_s_X, __pyx_k_X, sizeof(__pyx_k_X), 0, 0, 1, 1},
-  {&__pyx_n_s_Y, __pyx_k_Y, sizeof(__pyx_k_Y), 0, 0, 1, 1},
-  {&__pyx_n_s_Z, __pyx_k_Z, sizeof(__pyx_k_Z), 0, 0, 1, 1},
-  {&__pyx_n_s_a, __pyx_k_a, sizeof(__pyx_k_a), 0, 0, 1, 1},
-  {&__pyx_n_s_abstol, __pyx_k_abstol, sizeof(__pyx_k_abstol), 0, 0, 1, 1},
-  {&__pyx_n_s_alpha, __pyx_k_alpha, sizeof(__pyx_k_alpha), 0, 0, 1, 1},
-  {&__pyx_n_s_append, __pyx_k_append, sizeof(__pyx_k_append), 0, 0, 1, 1},
-  {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1},
-  {&__pyx_n_s_author, __pyx_k_author, sizeof(__pyx_k_author), 0, 0, 1, 1},
-  {&__pyx_n_s_authorinfo, __pyx_k_authorinfo, sizeof(__pyx_k_authorinfo), 0, 0, 1, 1},
-  {&__pyx_n_s_b, __pyx_k_b, sizeof(__pyx_k_b), 0, 0, 1, 1},
-  {&__pyx_n_s_balance, __pyx_k_balance, sizeof(__pyx_k_balance), 0, 0, 1, 1},
-  {&__pyx_n_s_basis, __pyx_k_basis, sizeof(__pyx_k_basis), 0, 0, 1, 1},
-  {&__pyx_n_s_beta, __pyx_k_beta, sizeof(__pyx_k_beta), 0, 0, 1, 1},
-  {&__pyx_n_s_block, __pyx_k_block, sizeof(__pyx_k_block), 0, 0, 1, 1},
-  {&__pyx_n_s_bv, __pyx_k_bv, sizeof(__pyx_k_bv), 0, 0, 1, 1},
-  {&__pyx_n_s_bv_type, __pyx_k_bv_type, sizeof(__pyx_k_bv_type), 0, 0, 1, 1},
-  {&__pyx_n_s_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 0, 1, 1},
-  {&__pyx_n_s_center, __pyx_k_center, sizeof(__pyx_k_center), 0, 0, 1, 1},
-  {&__pyx_n_s_cform, __pyx_k_cform, sizeof(__pyx_k_cform), 0, 0, 1, 1},
-  {&__pyx_n_s_comm, __pyx_k_comm, sizeof(__pyx_k_comm), 0, 0, 1, 1},
-  {&__pyx_n_s_comp, __pyx_k_comp, sizeof(__pyx_k_comp), 0, 0, 1, 1},
-  {&__pyx_n_s_conv, __pyx_k_conv, sizeof(__pyx_k_conv), 0, 0, 1, 1},
-  {&__pyx_n_s_cutoff, __pyx_k_cutoff, sizeof(__pyx_k_cutoff), 0, 0, 1, 1},
-  {&__pyx_n_s_d, __pyx_k_d, sizeof(__pyx_k_d), 0, 0, 1, 1},
-  {&__pyx_n_s_date, __pyx_k_date, sizeof(__pyx_k_date), 0, 0, 1, 1},
-  {&__pyx_n_s_decode, __pyx_k_decode, sizeof(__pyx_k_decode), 0, 0, 1, 1},
-  {&__pyx_n_s_delayed, __pyx_k_delayed, sizeof(__pyx_k_delayed), 0, 0, 1, 1},
-  {&__pyx_n_s_detect, __pyx_k_detect, sizeof(__pyx_k_detect), 0, 0, 1, 1},
-  {&__pyx_n_s_devel, __pyx_k_devel, sizeof(__pyx_k_devel), 0, 0, 1, 1},
-  {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1},
-  {&__pyx_n_s_ds, __pyx_k_ds, sizeof(__pyx_k_ds), 0, 0, 1, 1},
-  {&__pyx_n_s_ds_type, __pyx_k_ds_type, sizeof(__pyx_k_ds_type), 0, 0, 1, 1},
-  {&__pyx_n_s_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 0, 0, 1, 1},
-  {&__pyx_n_s_eps, __pyx_k_eps, sizeof(__pyx_k_eps), 0, 0, 1, 1},
-  {&__pyx_n_s_eps_type, __pyx_k_eps_type, sizeof(__pyx_k_eps_type), 0, 0, 1, 1},
-  {&__pyx_n_s_eta, __pyx_k_eta, sizeof(__pyx_k_eta), 0, 0, 1, 1},
-  {&__pyx_n_s_etype, __pyx_k_etype, sizeof(__pyx_k_etype), 0, 0, 1, 1},
-  {&__pyx_n_s_ext, __pyx_k_ext, sizeof(__pyx_k_ext), 0, 0, 1, 1},
-  {&__pyx_n_s_extraction, __pyx_k_extraction, sizeof(__pyx_k_extraction), 0, 0, 1, 1},
-  {&__pyx_n_s_f, __pyx_k_f, sizeof(__pyx_k_f), 0, 0, 1, 1},
-  {&__pyx_n_s_finalize, __pyx_k_finalize, sizeof(__pyx_k_finalize), 0, 0, 1, 1},
-  {&__pyx_n_s_flag, __pyx_k_flag, sizeof(__pyx_k_flag), 0, 0, 1, 1},
-  {&__pyx_n_s_fn, __pyx_k_fn, sizeof(__pyx_k_fn), 0, 0, 1, 1},
-  {&__pyx_n_s_fn_type, __pyx_k_fn_type, sizeof(__pyx_k_fn_type), 0, 0, 1, 1},
-  {&__pyx_n_s_function_2, __pyx_k_function_2, sizeof(__pyx_k_function_2), 0, 0, 1, 1},
-  {&__pyx_n_s_getBV, __pyx_k_getBV, sizeof(__pyx_k_getBV), 0, 0, 1, 1},
-  {&__pyx_n_s_getExtraction, __pyx_k_getExtraction, sizeof(__pyx_k_getExtraction), 0, 0, 1, 1},
-  {&__pyx_n_s_getKSP, __pyx_k_getKSP, sizeof(__pyx_k_getKSP), 0, 0, 1, 1},
-  {&__pyx_n_s_getMatMode, __pyx_k_getMatMode, sizeof(__pyx_k_getMatMode), 0, 0, 1, 1},
-  {&__pyx_n_s_getProblemType, __pyx_k_getProblemType, sizeof(__pyx_k_getProblemType), 0, 0, 1, 1},
-  {&__pyx_n_s_getST, __pyx_k_getST, sizeof(__pyx_k_getST), 0, 0, 1, 1},
-  {&__pyx_n_s_getShift, __pyx_k_getShift, sizeof(__pyx_k_getShift), 0, 0, 1, 1},
-  {&__pyx_n_s_getTarget, __pyx_k_getTarget, sizeof(__pyx_k_getTarget), 0, 0, 1, 1},
-  {&__pyx_n_s_getTolerances, __pyx_k_getTolerances, sizeof(__pyx_k_getTolerances), 0, 0, 1, 1},
-  {&__pyx_n_s_getTransposeMode, __pyx_k_getTransposeMode, sizeof(__pyx_k_getTransposeMode), 0, 0, 1, 1},
-  {&__pyx_n_s_getVersion, __pyx_k_getVersion, sizeof(__pyx_k_getVersion), 0, 0, 1, 1},
-  {&__pyx_n_s_getVersionInfo, __pyx_k_getVersionInfo, sizeof(__pyx_k_getVersionInfo), 0, 0, 1, 1},
-  {&__pyx_n_s_getWhichEigenpairs, __pyx_k_getWhichEigenpairs, sizeof(__pyx_k_getWhichEigenpairs), 0, 0, 1, 1},
-  {&__pyx_n_s_getWhichSingularTriplets, __pyx_k_getWhichSingularTriplets, sizeof(__pyx_k_getWhichSingularTriplets), 0, 0, 1, 1},
-  {&__pyx_kp_s_home_devel_slepc4py_3_6_0_src_S, __pyx_k_home_devel_slepc4py_3_6_0_src_S, sizeof(__pyx_k_home_devel_slepc4py_3_6_0_src_S), 0, 0, 1, 0},
-  {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1},
-  {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1},
-  {&__pyx_n_s_indef, __pyx_k_indef, sizeof(__pyx_k_indef), 0, 0, 1, 1},
-  {&__pyx_n_s_initialize, __pyx_k_initialize, sizeof(__pyx_k_initialize), 0, 0, 1, 1},
-  {&__pyx_n_s_inta, __pyx_k_inta, sizeof(__pyx_k_inta), 0, 0, 1, 1},
-  {&__pyx_n_s_intb, __pyx_k_intb, sizeof(__pyx_k_intb), 0, 0, 1, 1},
-  {&__pyx_n_s_iterations, __pyx_k_iterations, sizeof(__pyx_k_iterations), 0, 0, 1, 1},
-  {&__pyx_n_s_its, __pyx_k_its, sizeof(__pyx_k_its), 0, 0, 1, 1},
-  {&__pyx_n_s_jacobian_2, __pyx_k_jacobian_2, sizeof(__pyx_k_jacobian_2), 0, 0, 1, 1},
-  {&__pyx_n_s_k, __pyx_k_k, sizeof(__pyx_k_k), 0, 0, 1, 1},
-  {&__pyx_n_s_kargs, __pyx_k_kargs, sizeof(__pyx_k_kargs), 0, 0, 1, 1},
-  {&__pyx_n_s_keep, __pyx_k_keep, sizeof(__pyx_k_keep), 0, 0, 1, 1},
-  {&__pyx_n_s_ksp, __pyx_k_ksp, sizeof(__pyx_k_ksp), 0, 0, 1, 1},
-  {&__pyx_n_s_l, __pyx_k_l, sizeof(__pyx_k_l), 0, 0, 1, 1},
-  {&__pyx_n_s_lag, __pyx_k_lag, sizeof(__pyx_k_lag), 0, 0, 1, 1},
-  {&__pyx_n_s_lbda, __pyx_k_lbda, sizeof(__pyx_k_lbda), 0, 0, 1, 1},
-  {&__pyx_n_s_ld, __pyx_k_ld, sizeof(__pyx_k_ld), 0, 0, 1, 1},
-  {&__pyx_n_s_lock, __pyx_k_lock, sizeof(__pyx_k_lock), 0, 0, 1, 1},
-  {&__pyx_n_s_m, __pyx_k_m, sizeof(__pyx_k_m), 0, 0, 1, 1},
-  {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1},
-  {&__pyx_n_s_major, __pyx_k_major, sizeof(__pyx_k_major), 0, 0, 1, 1},
-  {&__pyx_n_s_mat, __pyx_k_mat, sizeof(__pyx_k_mat), 0, 0, 1, 1},
-  {&__pyx_n_s_max_it, __pyx_k_max_it, sizeof(__pyx_k_max_it), 0, 0, 1, 1},
-  {&__pyx_n_s_maxf, __pyx_k_maxf, sizeof(__pyx_k_maxf), 0, 0, 1, 1},
-  {&__pyx_n_s_maxit, __pyx_k_maxit, sizeof(__pyx_k_maxit), 0, 0, 1, 1},
-  {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1},
-  {&__pyx_n_s_meth, __pyx_k_meth, sizeof(__pyx_k_meth), 0, 0, 1, 1},
-  {&__pyx_n_s_mfn_type, __pyx_k_mfn_type, sizeof(__pyx_k_mfn_type), 0, 0, 1, 1},
-  {&__pyx_n_s_minor, __pyx_k_minor, sizeof(__pyx_k_minor), 0, 0, 1, 1},
-  {&__pyx_n_s_mode, __pyx_k_mode, sizeof(__pyx_k_mode), 0, 0, 1, 1},
-  {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1},
-  {&__pyx_n_s_mpd, __pyx_k_mpd, sizeof(__pyx_k_mpd), 0, 0, 1, 1},
-  {&__pyx_n_s_n, __pyx_k_n, sizeof(__pyx_k_n), 0, 0, 1, 1},
-  {&__pyx_n_s_ncv, __pyx_k_ncv, sizeof(__pyx_k_ncv), 0, 0, 1, 1},
-  {&__pyx_n_s_nep_type, __pyx_k_nep_type, sizeof(__pyx_k_nep_type), 0, 0, 1, 1},
-  {&__pyx_n_s_nev, __pyx_k_nev, sizeof(__pyx_k_nev), 0, 0, 1, 1},
-  {&__pyx_n_s_npart, __pyx_k_npart, sizeof(__pyx_k_npart), 0, 0, 1, 1},
-  {&__pyx_n_s_nrest, __pyx_k_nrest, sizeof(__pyx_k_nrest), 0, 0, 1, 1},
-  {&__pyx_n_s_nsv, __pyx_k_nsv, sizeof(__pyx_k_nsv), 0, 0, 1, 1},
-  {&__pyx_n_s_object, __pyx_k_object, sizeof(__pyx_k_object), 0, 0, 1, 1},
-  {&__pyx_n_s_operators, __pyx_k_operators, sizeof(__pyx_k_operators), 0, 0, 1, 1},
-  {&__pyx_n_s_patch, __pyx_k_patch, sizeof(__pyx_k_patch), 0, 0, 1, 1},
-  {&__pyx_n_s_pep_type, __pyx_k_pep_type, sizeof(__pyx_k_pep_type), 0, 0, 1, 1},
-  {&__pyx_n_s_petsc4py_PETSc, __pyx_k_petsc4py_PETSc, sizeof(__pyx_k_petsc4py_PETSc), 0, 0, 1, 1},
-  {&__pyx_n_s_prefix, __pyx_k_prefix, sizeof(__pyx_k_prefix), 0, 0, 1, 1},
-  {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1},
-  {&__pyx_n_s_problem_type, __pyx_k_problem_type, sizeof(__pyx_k_problem_type), 0, 0, 1, 1},
-  {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1},
-  {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1},
-  {&__pyx_n_s_radius, __pyx_k_radius, sizeof(__pyx_k_radius), 0, 0, 1, 1},
-  {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1},
-  {&__pyx_n_s_ready, __pyx_k_ready, sizeof(__pyx_k_ready), 0, 0, 1, 1},
-  {&__pyx_n_s_ref, __pyx_k_ref, sizeof(__pyx_k_ref), 0, 0, 1, 1},
-  {&__pyx_n_s_refine, __pyx_k_refine, sizeof(__pyx_k_refine), 0, 0, 1, 1},
-  {&__pyx_n_s_release, __pyx_k_release, sizeof(__pyx_k_release), 0, 0, 1, 1},
-  {&__pyx_n_s_reorthog, __pyx_k_reorthog, sizeof(__pyx_k_reorthog), 0, 0, 1, 1},
-  {&__pyx_n_s_rg_type, __pyx_k_rg_type, sizeof(__pyx_k_rg_type), 0, 0, 1, 1},
-  {&__pyx_n_s_rtol, __pyx_k_rtol, sizeof(__pyx_k_rtol), 0, 0, 1, 1},
-  {&__pyx_n_s_scale, __pyx_k_scale, sizeof(__pyx_k_scale), 0, 0, 1, 1},
-  {&__pyx_n_s_schur, __pyx_k_schur, sizeof(__pyx_k_schur), 0, 0, 1, 1},
-  {&__pyx_n_s_setBV, __pyx_k_setBV, sizeof(__pyx_k_setBV), 0, 0, 1, 1},
-  {&__pyx_n_s_setExtraction, __pyx_k_setExtraction, sizeof(__pyx_k_setExtraction), 0, 0, 1, 1},
-  {&__pyx_n_s_setKSP, __pyx_k_setKSP, sizeof(__pyx_k_setKSP), 0, 0, 1, 1},
-  {&__pyx_n_s_setMatMode, __pyx_k_setMatMode, sizeof(__pyx_k_setMatMode), 0, 0, 1, 1},
-  {&__pyx_n_s_setProblemType, __pyx_k_setProblemType, sizeof(__pyx_k_setProblemType), 0, 0, 1, 1},
-  {&__pyx_n_s_setST, __pyx_k_setST, sizeof(__pyx_k_setST), 0, 0, 1, 1},
-  {&__pyx_n_s_setShift, __pyx_k_setShift, sizeof(__pyx_k_setShift), 0, 0, 1, 1},
-  {&__pyx_n_s_setTarget, __pyx_k_setTarget, sizeof(__pyx_k_setTarget), 0, 0, 1, 1},
-  {&__pyx_n_s_setTolerances, __pyx_k_setTolerances, sizeof(__pyx_k_setTolerances), 0, 0, 1, 1},
-  {&__pyx_n_s_setTransposeMode, __pyx_k_setTransposeMode, sizeof(__pyx_k_setTransposeMode), 0, 0, 1, 1},
-  {&__pyx_n_s_setWhichEigenpairs, __pyx_k_setWhichEigenpairs, sizeof(__pyx_k_setWhichEigenpairs), 0, 0, 1, 1},
-  {&__pyx_n_s_setWhichSingularTriplets, __pyx_k_setWhichSingularTriplets, sizeof(__pyx_k_setWhichSingularTriplets), 0, 0, 1, 1},
-  {&__pyx_n_s_shift, __pyx_k_shift, sizeof(__pyx_k_shift), 0, 0, 1, 1},
-  {&__pyx_n_s_slepc4py_SLEPc, __pyx_k_slepc4py_SLEPc, sizeof(__pyx_k_slepc4py_SLEPc), 0, 0, 1, 1},
-  {&__pyx_n_s_space, __pyx_k_space, sizeof(__pyx_k_space), 0, 0, 1, 1},
-  {&__pyx_n_s_split, __pyx_k_split, sizeof(__pyx_k_split), 0, 0, 1, 1},
-  {&__pyx_n_s_st, __pyx_k_st, sizeof(__pyx_k_st), 0, 0, 1, 1},
-  {&__pyx_n_s_st_type, __pyx_k_st_type, sizeof(__pyx_k_st_type), 0, 0, 1, 1},
-  {&__pyx_n_s_state, __pyx_k_state, sizeof(__pyx_k_state), 0, 0, 1, 1},
-  {&__pyx_n_s_stol, __pyx_k_stol, sizeof(__pyx_k_stol), 0, 0, 1, 1},
-  {&__pyx_n_s_strip, __pyx_k_strip, sizeof(__pyx_k_strip), 0, 0, 1, 1},
-  {&__pyx_n_s_structure, __pyx_k_structure, sizeof(__pyx_k_structure), 0, 0, 1, 1},
-  {&__pyx_n_s_subminor, __pyx_k_subminor, sizeof(__pyx_k_subminor), 0, 0, 1, 1},
-  {&__pyx_n_s_svd_type, __pyx_k_svd_type, sizeof(__pyx_k_svd_type), 0, 0, 1, 1},
-  {&__pyx_n_s_target, __pyx_k_target, sizeof(__pyx_k_target), 0, 0, 1, 1},
-  {&__pyx_n_s_tau, __pyx_k_tau, sizeof(__pyx_k_tau), 0, 0, 1, 1},
-  {&__pyx_n_s_tol, __pyx_k_tol, sizeof(__pyx_k_tol), 0, 0, 1, 1},
-  {&__pyx_n_s_trackall, __pyx_k_trackall, sizeof(__pyx_k_trackall), 0, 0, 1, 1},
-  {&__pyx_n_s_trueres, __pyx_k_trueres, sizeof(__pyx_k_trueres), 0, 0, 1, 1},
-  {&__pyx_n_s_type, __pyx_k_type, sizeof(__pyx_k_type), 0, 0, 1, 1},
-  {&__pyx_n_s_v, __pyx_k_v, sizeof(__pyx_k_v), 0, 0, 1, 1},
-  {&__pyx_n_s_viewer, __pyx_k_viewer, sizeof(__pyx_k_viewer), 0, 0, 1, 1},
-  {&__pyx_n_s_vscale, __pyx_k_vscale, sizeof(__pyx_k_vscale), 0, 0, 1, 1},
-  {&__pyx_n_s_which, __pyx_k_which, sizeof(__pyx_k_which), 0, 0, 1, 1},
-  {&__pyx_n_s_x, __pyx_k_x, sizeof(__pyx_k_x), 0, 0, 1, 1},
-  {&__pyx_n_s_y, __pyx_k_y, sizeof(__pyx_k_y), 0, 0, 1, 1},
-  {0, 0, 0, 0, 0, 0, 0}
-};
-static int __Pyx_InitCachedBuiltins(void) {
-  __pyx_builtin_object = __Pyx_GetBuiltinName(__pyx_n_s_object); if (!__pyx_builtin_object) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 978; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  return 0;
+  /* "SLEPc/MFN.pyx":325
+ *         CHKERR( MFNSolve(self.mfn, b.vec, x.vec) )
+ * 
+ *     def getIterationNumber(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the current iteration number. If the call to `solve()` is
+ */
+
+  /* function exit code */
   __pyx_L1_error:;
-  return -1;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.getIterationNumber", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-static int __Pyx_InitCachedConstants(void) {
+/* "SLEPc/MFN.pyx":340
+ *         return toInt(ival)
+ * 
+ *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the reason why the `solve()` iteration was stopped.
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_51getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_3MFN_50getConvergedReason[] = "MFN.getConvergedReason(self)\n\n        Gets the reason why the `solve()` iteration was stopped.\n\n        Returns\n        -------\n        reason: `MFN.ConvergedReason` enumerate\n            Negative value indicates diverged, positive value\n            converged.\n        ";
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3MFN_51getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
+  __Pyx_RefNannySetupContext("getConvergedReason (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getConvergedReason", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getConvergedReason", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_3MFN_50getConvergedReason(((struct PySlepcMFNObject *)__pyx_v_self));
 
-  /* "SLEPc/Sys.pyx":26
- *                 out.append(bytes2str(cdate))
- *             if author:
- *                 author = bytes2str(cauthorinfo).split('\n')             # <<<<<<<<<<<<<<
- *                 author = [s.strip() for s in author if s]
- *                 out.append(author)
- */
-  __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__2);
-  __Pyx_GIVEREF(__pyx_tuple__2);
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-  /* "SLEPc/Sys.pyx":40
- *         cdef const_char *cdate       = SLEPC_VERSION_DATE
- *         cdef const_char *cauthorinfo = SLEPC_AUTHOR_INFO
- *         author = bytes2str(cauthorinfo).split('\n')             # <<<<<<<<<<<<<<
- *         author = [s.strip() for s in author if s]
- *         return dict(major      = cmajor,
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_3MFN_50getConvergedReason(struct PySlepcMFNObject *__pyx_v_self) {
+  MFNConvergedReason __pyx_v_val;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getConvergedReason", 0);
+
+  /* "SLEPc/MFN.pyx":350
+ *             converged.
+ *         """
+ *         cdef SlepcMFNConvergedReason val = MFN_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
+ *         CHKERR( MFNGetConvergedReason(self.mfn, &val) )
+ *         return val
  */
-  __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__3);
-  __Pyx_GIVEREF(__pyx_tuple__3);
+  __pyx_v_val = MFN_CONVERGED_ITERATING;
 
-  /* "SLEPc/SLEPc.pyx":222
- * # -----------------------------------------------------------------------------
+  /* "SLEPc/MFN.pyx":351
+ *         """
+ *         cdef SlepcMFNConvergedReason val = MFN_CONVERGED_ITERATING
+ *         CHKERR( MFNGetConvergedReason(self.mfn, &val) )             # <<<<<<<<<<<<<<
+ *         return val
  * 
- * def _initialize(args=None):             # <<<<<<<<<<<<<<
- *     cdef int ready = initialize(args)
- *     if ready: register(NULL)
  */
-  __pyx_tuple__4 = PyTuple_Pack(2, __pyx_n_s_args, __pyx_n_s_ready); if (unlikely(!__pyx_tuple__4)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__4);
-  __Pyx_GIVEREF(__pyx_tuple__4);
-  __pyx_codeobj__5 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__4, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_devel_slepc4py_3_6_0_src_S, __pyx_n_s_initialize, 222, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__5)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(MFNGetConvergedReason(__pyx_v_self->mfn, (&__pyx_v_val))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(17, 351, __pyx_L1_error)
 
-  /* "SLEPc/SLEPc.pyx":226
- *     if ready: register(NULL)
+  /* "SLEPc/MFN.pyx":352
+ *         cdef SlepcMFNConvergedReason val = MFN_CONVERGED_ITERATING
+ *         CHKERR( MFNGetConvergedReason(self.mfn, &val) )
+ *         return val             # <<<<<<<<<<<<<<
  * 
- * def _finalize():             # <<<<<<<<<<<<<<
- *     finalize()
  * 
  */
-  __pyx_codeobj__6 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_devel_slepc4py_3_6_0_src_S, __pyx_n_s_finalize, 226, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__6)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_RefNannyFinishContext();
-  return 0;
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyInt_From_MFNConvergedReason(__pyx_v_val); if (unlikely(!__pyx_t_2)) __PYX_ERR(17, 352, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "SLEPc/MFN.pyx":340
+ *         return toInt(ival)
+ * 
+ *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Gets the reason why the `solve()` iteration was stopped.
+ */
+
+  /* function exit code */
   __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("slepc4py.SLEPc.MFN.getConvergedReason", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
-  return -1;
+  return __pyx_r;
 }
 
-static int __Pyx_InitGlobals(void) {
-  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  return 0;
+/* "SLEPc/CAPI.pyx":3
+ * # -----------------------------------------------------------------------------
+ * 
+ * cdef inline int setref(void *d, void *s) except -1:             # <<<<<<<<<<<<<<
+ *     cdef PetscObject *dest  = <PetscObject*> d
+ *     cdef PetscObject source = <PetscObject>  s
+ */
+
+static CYTHON_INLINE int __pyx_f_8slepc4py_5SLEPc_setref(void *__pyx_v_d, void *__pyx_v_s) {
+  PetscObject *__pyx_v_dest;
+  PetscObject __pyx_v_source;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setref", 0);
+
+  /* "SLEPc/CAPI.pyx":4
+ * 
+ * cdef inline int setref(void *d, void *s) except -1:
+ *     cdef PetscObject *dest  = <PetscObject*> d             # <<<<<<<<<<<<<<
+ *     cdef PetscObject source = <PetscObject>  s
+ *     CHKERR( PetscINCREF(&source) )
+ */
+  __pyx_v_dest = ((PetscObject *)__pyx_v_d);
+
+  /* "SLEPc/CAPI.pyx":5
+ * cdef inline int setref(void *d, void *s) except -1:
+ *     cdef PetscObject *dest  = <PetscObject*> d
+ *     cdef PetscObject source = <PetscObject>  s             # <<<<<<<<<<<<<<
+ *     CHKERR( PetscINCREF(&source) )
+ *     dest[0] = source
+ */
+  __pyx_v_source = ((PetscObject)__pyx_v_s);
+
+  /* "SLEPc/CAPI.pyx":6
+ *     cdef PetscObject *dest  = <PetscObject*> d
+ *     cdef PetscObject source = <PetscObject>  s
+ *     CHKERR( PetscINCREF(&source) )             # <<<<<<<<<<<<<<
+ *     dest[0] = source
+ *     return 0
+ */
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(__pyx_f_8slepc4py_5SLEPc_PetscINCREF((&__pyx_v_source))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(18, 6, __pyx_L1_error)
+
+  /* "SLEPc/CAPI.pyx":7
+ *     cdef PetscObject source = <PetscObject>  s
+ *     CHKERR( PetscINCREF(&source) )
+ *     dest[0] = source             # <<<<<<<<<<<<<<
+ *     return 0
+ * 
+ */
+  (__pyx_v_dest[0]) = __pyx_v_source;
+
+  /* "SLEPc/CAPI.pyx":8
+ *     CHKERR( PetscINCREF(&source) )
+ *     dest[0] = source
+ *     return 0             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
+ */
+  __pyx_r = 0;
+  goto __pyx_L0;
+
+  /* "SLEPc/CAPI.pyx":3
+ * # -----------------------------------------------------------------------------
+ * 
+ * cdef inline int setref(void *d, void *s) except -1:             # <<<<<<<<<<<<<<
+ *     cdef PetscObject *dest  = <PetscObject*> d
+ *     cdef PetscObject source = <PetscObject>  s
+ */
+
+  /* function exit code */
   __pyx_L1_error:;
-  return -1;
+  __Pyx_AddTraceback("slepc4py.SLEPc.setref", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
 }
 
-#if PY_MAJOR_VERSION < 3
-PyMODINIT_FUNC initSLEPc(void); /*proto*/
-PyMODINIT_FUNC initSLEPc(void)
-#else
-PyMODINIT_FUNC PyInit_SLEPc(void); /*proto*/
-PyMODINIT_FUNC PyInit_SLEPc(void)
-#endif
-{
-  PyObject *__pyx_t_1 = NULL;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  PyObject *__pyx_t_5 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+/* "SLEPc/CAPI.pyx":14
+ * # -- ST --
+ * 
+ * cdef api object PySlepcST_New(SlepcST arg):             # <<<<<<<<<<<<<<
+ *     cdef ST retv = ST()
+ *     setref(&retv.st, arg)
+ */
+
+static PyObject *__pyx_f_8slepc4py_5SLEPc_PySlepcST_New(ST __pyx_v_arg) {
+  struct PySlepcSTObject *__pyx_v_retv = 0;
+  PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  #if CYTHON_REFNANNY
-  __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
-  if (!__Pyx_RefNanny) {
-      PyErr_Clear();
-      __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
-      if (!__Pyx_RefNanny)
-          Py_FatalError("failed to import 'refnanny' module");
-  }
-  #endif
-  __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_SLEPc(void)", 0);
-  if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #ifdef __Pyx_CyFunction_USED
-  if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #endif
-  #ifdef __Pyx_FusedFunction_USED
-  if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #endif
-  #ifdef __Pyx_Generator_USED
-  if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #endif
-  /*--- Library function declarations ---*/
-  /*--- Threads initialization code ---*/
-  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
-  #ifdef WITH_THREAD /* Python build with threading support? */
-  PyEval_InitThreads();
-  #endif
-  #endif
-  /*--- Module creation code ---*/
-  #if PY_MAJOR_VERSION < 3
-  __pyx_m = Py_InitModule4("SLEPc", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
-  #else
-  __pyx_m = PyModule_Create(&__pyx_moduledef);
-  #endif
-  if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_d);
-  __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #if CYTHON_COMPILING_IN_PYPY
-  Py_INCREF(__pyx_b);
-  #endif
-  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  /*--- Initialize various global constants etc. ---*/
-  if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
-  if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #endif
-  if (__pyx_module_is_main_slepc4py__SLEPc) {
-    if (PyObject_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  }
-  #if PY_MAJOR_VERSION >= 3
-  {
-    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    if (!PyDict_GetItemString(modules, "slepc4py.SLEPc")) {
-      if (unlikely(PyDict_SetItemString(modules, "slepc4py.SLEPc", __pyx_m) < 0)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    }
-  }
-  #endif
-  /*--- Builtin init code ---*/
-  if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  /*--- Constants init code ---*/
-  if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  /*--- Global init code ---*/
-  __pyx_v_8slepc4py_5SLEPc_PetscError = Py_None; Py_INCREF(Py_None);
-  /*--- Variable export code ---*/
-  /*--- Function export code ---*/
-  if (__Pyx_ExportFunction("PySlepcST_New", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcST_New, "PyObject *(ST)") < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PySlepcST_Get", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcST_Get, "ST (PyObject *)") < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PySlepcBV_New", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcBV_New, "PyObject *(BV)") < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PySlepcBV_Get", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcBV_Get, "BV (PyObject *)") < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PySlepcDS_New", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcDS_New, "PyObject *(DS)") < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PySlepcDS_Get", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcDS_Get, "DS (PyObject *)") < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PySlepcFN_New", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcFN_New, "PyObject *(FN)") < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PySlepcFN_Get", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcFN_Get, "FN (PyObject *)") < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PySlepcRG_New", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcRG_New, "PyObject *(RG)") < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PySlepcRG_Get", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcRG_Get, "RG (PyObject *)") < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PySlepcEPS_New", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcEPS_New, "PyObject *(EPS)") < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PySlepcEPS_Get", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcEPS_Get, "EPS (PyObject *)") < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PySlepcSVD_New", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcSVD_New, "PyObject *(SVD)") < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PySlepcSVD_Get", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcSVD_Get, "SVD (PyObject *)") < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PySlepcPEP_New", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcPEP_New, "PyObject *(PEP)") < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PySlepcPEP_Get", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcPEP_Get, "PEP (PyObject *)") < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PySlepcNEP_New", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcNEP_New, "PyObject *(NEP)") < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PySlepcNEP_Get", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcNEP_Get, "NEP (PyObject *)") < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PySlepcMFN_New", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcMFN_New, "PyObject *(MFN)") < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("PySlepcMFN_Get", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcMFN_Get, "MFN (PyObject *)") < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  /*--- Type init code ---*/
-  __pyx_ptype_8petsc4py_5PETSc_Object = __Pyx_ImportType("petsc4py.PETSc", "Object", sizeof(struct PyPetscObjectObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_Object)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_vtabptr_8petsc4py_5PETSc_Object = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_Object->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_Object)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_vtabptr_8slepc4py_5SLEPc_ST = &__pyx_vtable_8slepc4py_5SLEPc_ST;
-  __pyx_vtable_8slepc4py_5SLEPc_ST.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
-  PySlepcST_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PySlepcST_Type) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PySlepcST_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PySlepcST_Type.tp_dict, __pyx_vtabptr_8slepc4py_5SLEPc_ST) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "ST", (PyObject *)&PySlepcST_Type) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PySlepcST_Type.tp_weaklistoffset == 0) PySlepcST_Type.tp_weaklistoffset = offsetof(struct PySlepcSTObject, __pyx_base.__weakref__);
-  __pyx_ptype_8slepc4py_5SLEPc_ST = &PySlepcST_Type;
-  __pyx_vtabptr_8slepc4py_5SLEPc_BV = &__pyx_vtable_8slepc4py_5SLEPc_BV;
-  __pyx_vtable_8slepc4py_5SLEPc_BV.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
-  PySlepcBV_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PySlepcBV_Type) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PySlepcBV_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PySlepcBV_Type.tp_dict, __pyx_vtabptr_8slepc4py_5SLEPc_BV) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "BV", (PyObject *)&PySlepcBV_Type) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PySlepcBV_Type.tp_weaklistoffset == 0) PySlepcBV_Type.tp_weaklistoffset = offsetof(struct PySlepcBVObject, __pyx_base.__weakref__);
-  __pyx_ptype_8slepc4py_5SLEPc_BV = &PySlepcBV_Type;
-  __pyx_vtabptr_8slepc4py_5SLEPc_DS = &__pyx_vtable_8slepc4py_5SLEPc_DS;
-  __pyx_vtable_8slepc4py_5SLEPc_DS.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
-  PySlepcDS_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PySlepcDS_Type) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PySlepcDS_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PySlepcDS_Type.tp_dict, __pyx_vtabptr_8slepc4py_5SLEPc_DS) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "DS", (PyObject *)&PySlepcDS_Type) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PySlepcDS_Type.tp_weaklistoffset == 0) PySlepcDS_Type.tp_weaklistoffset = offsetof(struct PySlepcDSObject, __pyx_base.__weakref__);
-  __pyx_ptype_8slepc4py_5SLEPc_DS = &PySlepcDS_Type;
-  __pyx_vtabptr_8slepc4py_5SLEPc_FN = &__pyx_vtable_8slepc4py_5SLEPc_FN;
-  __pyx_vtable_8slepc4py_5SLEPc_FN.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
-  PySlepcFN_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PySlepcFN_Type) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PySlepcFN_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PySlepcFN_Type.tp_dict, __pyx_vtabptr_8slepc4py_5SLEPc_FN) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "FN", (PyObject *)&PySlepcFN_Type) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PySlepcFN_Type.tp_weaklistoffset == 0) PySlepcFN_Type.tp_weaklistoffset = offsetof(struct PySlepcFNObject, __pyx_base.__weakref__);
-  __pyx_ptype_8slepc4py_5SLEPc_FN = &PySlepcFN_Type;
-  __pyx_vtabptr_8slepc4py_5SLEPc_RG = &__pyx_vtable_8slepc4py_5SLEPc_RG;
-  __pyx_vtable_8slepc4py_5SLEPc_RG.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
-  PySlepcRG_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PySlepcRG_Type) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PySlepcRG_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PySlepcRG_Type.tp_dict, __pyx_vtabptr_8slepc4py_5SLEPc_RG) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "RG", (PyObject *)&PySlepcRG_Type) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PySlepcRG_Type.tp_weaklistoffset == 0) PySlepcRG_Type.tp_weaklistoffset = offsetof(struct PySlepcRGObject, __pyx_base.__weakref__);
-  __pyx_ptype_8slepc4py_5SLEPc_RG = &PySlepcRG_Type;
-  __pyx_vtabptr_8slepc4py_5SLEPc_EPS = &__pyx_vtable_8slepc4py_5SLEPc_EPS;
-  __pyx_vtable_8slepc4py_5SLEPc_EPS.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
-  PySlepcEPS_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PySlepcEPS_Type) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PySlepcEPS_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PySlepcEPS_Type.tp_dict, __pyx_vtabptr_8slepc4py_5SLEPc_EPS) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "EPS", (PyObject *)&PySlepcEPS_Type) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PySlepcEPS_Type.tp_weaklistoffset == 0) PySlepcEPS_Type.tp_weaklistoffset = offsetof(struct PySlepcEPSObject, __pyx_base.__weakref__);
-  __pyx_ptype_8slepc4py_5SLEPc_EPS = &PySlepcEPS_Type;
-  __pyx_vtabptr_8slepc4py_5SLEPc_SVD = &__pyx_vtable_8slepc4py_5SLEPc_SVD;
-  __pyx_vtable_8slepc4py_5SLEPc_SVD.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
-  PySlepcSVD_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PySlepcSVD_Type) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PySlepcSVD_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PySlepcSVD_Type.tp_dict, __pyx_vtabptr_8slepc4py_5SLEPc_SVD) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "SVD", (PyObject *)&PySlepcSVD_Type) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PySlepcSVD_Type.tp_weaklistoffset == 0) PySlepcSVD_Type.tp_weaklistoffset = offsetof(struct PySlepcSVDObject, __pyx_base.__weakref__);
-  __pyx_ptype_8slepc4py_5SLEPc_SVD = &PySlepcSVD_Type;
-  __pyx_vtabptr_8slepc4py_5SLEPc_PEP = &__pyx_vtable_8slepc4py_5SLEPc_PEP;
-  __pyx_vtable_8slepc4py_5SLEPc_PEP.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
-  PySlepcPEP_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PySlepcPEP_Type) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PySlepcPEP_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PySlepcPEP_Type.tp_dict, __pyx_vtabptr_8slepc4py_5SLEPc_PEP) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "PEP", (PyObject *)&PySlepcPEP_Type) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PySlepcPEP_Type.tp_weaklistoffset == 0) PySlepcPEP_Type.tp_weaklistoffset = offsetof(struct PySlepcPEPObject, __pyx_base.__weakref__);
-  __pyx_ptype_8slepc4py_5SLEPc_PEP = &PySlepcPEP_Type;
-  __pyx_vtabptr_8slepc4py_5SLEPc_NEP = &__pyx_vtable_8slepc4py_5SLEPc_NEP;
-  __pyx_vtable_8slepc4py_5SLEPc_NEP.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
-  PySlepcNEP_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PySlepcNEP_Type) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PySlepcNEP_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PySlepcNEP_Type.tp_dict, __pyx_vtabptr_8slepc4py_5SLEPc_NEP) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "NEP", (PyObject *)&PySlepcNEP_Type) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PySlepcNEP_Type.tp_weaklistoffset == 0) PySlepcNEP_Type.tp_weaklistoffset = offsetof(struct PySlepcNEPObject, __pyx_base.__weakref__);
-  __pyx_ptype_8slepc4py_5SLEPc_NEP = &PySlepcNEP_Type;
-  __pyx_vtabptr_8slepc4py_5SLEPc_MFN = &__pyx_vtable_8slepc4py_5SLEPc_MFN;
-  __pyx_vtable_8slepc4py_5SLEPc_MFN.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
-  PySlepcMFN_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
-  if (PyType_Ready(&PySlepcMFN_Type) < 0) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PySlepcMFN_Type.tp_print = 0;
-  if (__Pyx_SetVtable(PySlepcMFN_Type.tp_dict, __pyx_vtabptr_8slepc4py_5SLEPc_MFN) < 0) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetAttrString(__pyx_m, "MFN", (PyObject *)&PySlepcMFN_Type) < 0) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PySlepcMFN_Type.tp_weaklistoffset == 0) PySlepcMFN_Type.tp_weaklistoffset = offsetof(struct PySlepcMFNObject, __pyx_base.__weakref__);
-  __pyx_ptype_8slepc4py_5SLEPc_MFN = &PySlepcMFN_Type;
-  if (PyType_Ready(&__pyx_type_8slepc4py_5SLEPc__p_mem) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_8slepc4py_5SLEPc__p_mem.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "_p_mem", (PyObject *)&__pyx_type_8slepc4py_5SLEPc__p_mem) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_8slepc4py_5SLEPc__p_mem = &__pyx_type_8slepc4py_5SLEPc__p_mem;
-  if (PyType_Ready(&__pyx_type_8slepc4py_5SLEPc_Sys) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_8slepc4py_5SLEPc_Sys.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "Sys", (PyObject *)&__pyx_type_8slepc4py_5SLEPc_Sys) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_8slepc4py_5SLEPc_Sys = &__pyx_type_8slepc4py_5SLEPc_Sys;
-  /*--- Type import code ---*/
-  __pyx_ptype_8petsc4py_5PETSc_Comm = __Pyx_ImportType("petsc4py.PETSc", "Comm", sizeof(struct PyPetscCommObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_Comm)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_8petsc4py_5PETSc_Viewer = __Pyx_ImportType("petsc4py.PETSc", "Viewer", sizeof(struct PyPetscViewerObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_Viewer)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_vtabptr_8petsc4py_5PETSc_Viewer = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Viewer*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_Viewer->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_Viewer)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_8petsc4py_5PETSc_Random = __Pyx_ImportType("petsc4py.PETSc", "Random", sizeof(struct PyPetscRandomObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_Random)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_vtabptr_8petsc4py_5PETSc_Random = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Random*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_Random->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_Random)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_8petsc4py_5PETSc_IS = __Pyx_ImportType("petsc4py.PETSc", "IS", sizeof(struct PyPetscISObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_IS)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_vtabptr_8petsc4py_5PETSc_IS = (struct __pyx_vtabstruct_8petsc4py_5PETSc_IS*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_IS->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_IS)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_8petsc4py_5PETSc_LGMap = __Pyx_ImportType("petsc4py.PETSc", "LGMap", sizeof(struct PyPetscLGMapObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_LGMap)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_vtabptr_8petsc4py_5PETSc_LGMap = (struct __pyx_vtabstruct_8petsc4py_5PETSc_LGMap*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_LGMap->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_LGMap)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_8petsc4py_5PETSc_SF = __Pyx_ImportType("petsc4py.PETSc", "SF", sizeof(struct PyPetscSFObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_SF)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_vtabptr_8petsc4py_5PETSc_SF = (struct __pyx_vtabstruct_8petsc4py_5PETSc_SF*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_SF->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_SF)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_8petsc4py_5PETSc_Vec = __Pyx_ImportType("petsc4py.PETSc", "Vec", sizeof(struct PyPetscVecObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_Vec)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_vtabptr_8petsc4py_5PETSc_Vec = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Vec*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_Vec->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_Vec)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_8petsc4py_5PETSc_Scatter = __Pyx_ImportType("petsc4py.PETSc", "Scatter", sizeof(struct PyPetscScatterObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_Scatter)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_vtabptr_8petsc4py_5PETSc_Scatter = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Scatter*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_Scatter->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_Scatter)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_8petsc4py_5PETSc_Section = __Pyx_ImportType("petsc4py.PETSc", "Section", sizeof(struct PyPetscSectionObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_Section)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_vtabptr_8petsc4py_5PETSc_Section = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Section*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_Section->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_Section)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_8petsc4py_5PETSc_Mat = __Pyx_ImportType("petsc4py.PETSc", "Mat", sizeof(struct PyPetscMatObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_Mat)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_vtabptr_8petsc4py_5PETSc_Mat = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Mat*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_Mat)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_8petsc4py_5PETSc_NullSpace = __Pyx_ImportType("petsc4py.PETSc", "NullSpace", sizeof(struct PyPetscNullSpaceObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_NullSpace)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_vtabptr_8petsc4py_5PETSc_NullSpace = (struct __pyx_vtabstruct_8petsc4py_5PETSc_NullSpace*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_NullSpace->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_NullSpace)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_8petsc4py_5PETSc_PC = __Pyx_ImportType("petsc4py.PETSc", "PC", sizeof(struct PyPetscPCObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_PC)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_vtabptr_8petsc4py_5PETSc_PC = (struct __pyx_vtabstruct_8petsc4py_5PETSc_PC*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_PC)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_8petsc4py_5PETSc_KSP = __Pyx_ImportType("petsc4py.PETSc", "KSP", sizeof(struct PyPetscKSPObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_KSP)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_vtabptr_8petsc4py_5PETSc_KSP = (struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_KSP->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_KSP)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_8petsc4py_5PETSc_SNES = __Pyx_ImportType("petsc4py.PETSc", "SNES", sizeof(struct PyPetscSNESObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_SNES)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_vtabptr_8petsc4py_5PETSc_SNES = (struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_SNES)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_8petsc4py_5PETSc_TS = __Pyx_ImportType("petsc4py.PETSc", "TS", sizeof(struct PyPetscTSObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_TS)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_vtabptr_8petsc4py_5PETSc_TS = (struct __pyx_vtabstruct_8petsc4py_5PETSc_TS*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_TS->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_TS)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_8petsc4py_5PETSc_TAO = __Pyx_ImportType("petsc4py.PETSc", "TAO", sizeof(struct PyPetscTAOObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_TAO)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_vtabptr_8petsc4py_5PETSc_TAO = (struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_TAO->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_TAO)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_8petsc4py_5PETSc_AO = __Pyx_ImportType("petsc4py.PETSc", "AO", sizeof(struct PyPetscAOObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_AO)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_vtabptr_8petsc4py_5PETSc_AO = (struct __pyx_vtabstruct_8petsc4py_5PETSc_AO*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_AO->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_AO)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_8petsc4py_5PETSc_DM = __Pyx_ImportType("petsc4py.PETSc", "DM", sizeof(struct PyPetscDMObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_DM)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_vtabptr_8petsc4py_5PETSc_DM = (struct __pyx_vtabstruct_8petsc4py_5PETSc_DM*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_DM->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_DM)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_8petsc4py_5PETSc_Partitioner = __Pyx_ImportType("petsc4py.PETSc", "Partitioner", sizeof(struct PyPetscPartitionerObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_Partitioner)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_vtabptr_8petsc4py_5PETSc_Partitioner = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Partitioner*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_Partitioner->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_Partitioner)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  /*--- Variable import code ---*/
-  /*--- Function import code ---*/
-  __pyx_t_1 = __Pyx_ImportModule("petsc4py.PETSc"); if (!__pyx_t_1) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ImportFunction(__pyx_t_1, "GetComm", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_GetComm, "MPI_Comm (PyObject *, MPI_Comm)") < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ImportFunction(__pyx_t_1, "GetCommDefault", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_GetCommDefault, "MPI_Comm (void)") < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ImportFunction(__pyx_t_1, "PyPetscType_Register", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscType_Register, "int (int, PyObject *)") < 0) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  /*--- Execution code ---*/
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("PySlepcST_New", 0);
 
-  /* "SLEPc/SLEPc.pyx":3
- * # -----------------------------------------------------------------------------
+  /* "SLEPc/CAPI.pyx":15
  * 
- * from petsc4py.PETSc import COMM_NULL             # <<<<<<<<<<<<<<
- * from petsc4py.PETSc import COMM_SELF
- * from petsc4py.PETSc import COMM_WORLD
+ * cdef api object PySlepcST_New(SlepcST arg):
+ *     cdef ST retv = ST()             # <<<<<<<<<<<<<<
+ *     setref(&retv.st, arg)
+ *     return retv
  */
-  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_n_s_COMM_NULL);
-  __Pyx_GIVEREF(__pyx_n_s_COMM_NULL);
-  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_COMM_NULL);
-  __pyx_t_3 = __Pyx_Import(__pyx_n_s_petsc4py_PETSc, __pyx_t_2, -1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_COMM_NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMM_NULL, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_ST), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_retv = ((struct PySlepcSTObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/SLEPc.pyx":4
- * 
- * from petsc4py.PETSc import COMM_NULL
- * from petsc4py.PETSc import COMM_SELF             # <<<<<<<<<<<<<<
- * from petsc4py.PETSc import COMM_WORLD
+  /* "SLEPc/CAPI.pyx":16
+ * cdef api object PySlepcST_New(SlepcST arg):
+ *     cdef ST retv = ST()
+ *     setref(&retv.st, arg)             # <<<<<<<<<<<<<<
+ *     return retv
  * 
  */
-  __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_INCREF(__pyx_n_s_COMM_SELF);
-  __Pyx_GIVEREF(__pyx_n_s_COMM_SELF);
-  PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_COMM_SELF);
-  __pyx_t_2 = __Pyx_Import(__pyx_n_s_petsc4py_PETSc, __pyx_t_3, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_COMM_SELF); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMM_SELF, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_setref((&__pyx_v_retv->st), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(18, 16, __pyx_L1_error)
 
-  /* "SLEPc/SLEPc.pyx":5
- * from petsc4py.PETSc import COMM_NULL
- * from petsc4py.PETSc import COMM_SELF
- * from petsc4py.PETSc import COMM_WORLD             # <<<<<<<<<<<<<<
+  /* "SLEPc/CAPI.pyx":17
+ *     cdef ST retv = ST()
+ *     setref(&retv.st, arg)
+ *     return retv             # <<<<<<<<<<<<<<
  * 
- * # -----------------------------------------------------------------------------
+ * cdef api SlepcST PySlepcST_Get(object arg) except ? NULL:
  */
-  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_n_s_COMM_WORLD);
-  __Pyx_GIVEREF(__pyx_n_s_COMM_WORLD);
-  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_COMM_WORLD);
-  __pyx_t_3 = __Pyx_Import(__pyx_n_s_petsc4py_PETSc, __pyx_t_2, -1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMM_WORLD, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_retv));
+  __pyx_r = ((PyObject *)__pyx_v_retv);
+  goto __pyx_L0;
 
-  /* "SLEPc/SLEPc.pyx":60
- *     void *PyExc_RuntimeError
- * 
- * cdef object PetscError = <object>PyExc_RuntimeError             # <<<<<<<<<<<<<<
- * from petsc4py.PETSc import Error as PetscError
+  /* "SLEPc/CAPI.pyx":14
+ * # -- ST --
  * 
+ * cdef api object PySlepcST_New(SlepcST arg):             # <<<<<<<<<<<<<<
+ *     cdef ST retv = ST()
+ *     setref(&retv.st, arg)
  */
-  __pyx_t_3 = ((PyObject *)PyExc_RuntimeError);
-  __Pyx_INCREF(__pyx_t_3);
-  __Pyx_XGOTREF(__pyx_v_8slepc4py_5SLEPc_PetscError);
-  __Pyx_DECREF_SET(__pyx_v_8slepc4py_5SLEPc_PetscError, __pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_3);
-  __pyx_t_3 = 0;
 
-  /* "SLEPc/SLEPc.pyx":61
- * 
- * cdef object PetscError = <object>PyExc_RuntimeError
- * from petsc4py.PETSc import Error as PetscError             # <<<<<<<<<<<<<<
- * 
- * cdef inline int SETERR(int ierr) with gil:
- */
-  __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_INCREF(__pyx_n_s_Error);
-  __Pyx_GIVEREF(__pyx_n_s_Error);
-  PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_Error);
-  __pyx_t_2 = __Pyx_Import(__pyx_n_s_petsc4py_PETSc, __pyx_t_3, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_INCREF(__pyx_t_3);
-  __Pyx_XGOTREF(__pyx_v_8slepc4py_5SLEPc_PetscError);
-  __Pyx_DECREF_SET(__pyx_v_8slepc4py_5SLEPc_PetscError, __pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcST_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_retv);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-  /* "SLEPc/SLEPc.pyx":134
+/* "SLEPc/CAPI.pyx":19
+ *     return retv
  * 
- * __doc__ = \
- * """             # <<<<<<<<<<<<<<
- * Scalable Library for Eigenvalue Problem Computations.
- * """
+ * cdef api SlepcST PySlepcST_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
+ *     cdef SlepcST retv = NULL
+ *     cdef ST ob = <ST?> arg
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_doc, __pyx_kp_s_Scalable_Library_for_Eigenvalue) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "SLEPc/SLEPc.pyx":138
- * """
- * 
- * DECIDE    = PETSC_DECIDE             # <<<<<<<<<<<<<<
- * DEFAULT   = PETSC_DEFAULT
- * DETERMINE = PETSC_DETERMINE
- */
-  __pyx_t_2 = __Pyx_PyInt_From_int(PETSC_DECIDE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DECIDE, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+static ST __pyx_f_8slepc4py_5SLEPc_PySlepcST_Get(PyObject *__pyx_v_arg) {
+  ST __pyx_v_retv;
+  struct PySlepcSTObject *__pyx_v_ob = 0;
+  ST __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  ST __pyx_t_2;
+  __Pyx_RefNannySetupContext("PySlepcST_Get", 0);
 
-  /* "SLEPc/SLEPc.pyx":139
- * 
- * DECIDE    = PETSC_DECIDE
- * DEFAULT   = PETSC_DEFAULT             # <<<<<<<<<<<<<<
- * DETERMINE = PETSC_DETERMINE
+  /* "SLEPc/CAPI.pyx":20
  * 
+ * cdef api SlepcST PySlepcST_Get(object arg) except ? NULL:
+ *     cdef SlepcST retv = NULL             # <<<<<<<<<<<<<<
+ *     cdef ST ob = <ST?> arg
+ *     retv = ob.st
  */
-  __pyx_t_2 = __Pyx_PyInt_From_int(PETSC_DEFAULT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEFAULT, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_v_retv = NULL;
 
-  /* "SLEPc/SLEPc.pyx":140
- * DECIDE    = PETSC_DECIDE
- * DEFAULT   = PETSC_DEFAULT
- * DETERMINE = PETSC_DETERMINE             # <<<<<<<<<<<<<<
- * 
- * include "Sys.pyx"
+  /* "SLEPc/CAPI.pyx":21
+ * cdef api SlepcST PySlepcST_Get(object arg) except ? NULL:
+ *     cdef SlepcST retv = NULL
+ *     cdef ST ob = <ST?> arg             # <<<<<<<<<<<<<<
+ *     retv = ob.st
+ *     return retv
  */
-  __pyx_t_2 = __Pyx_PyInt_From_int(PETSC_DETERMINE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DETERMINE, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8slepc4py_5SLEPc_ST)))) __PYX_ERR(18, 21, __pyx_L1_error)
+  __pyx_t_1 = __pyx_v_arg;
+  __Pyx_INCREF(__pyx_t_1);
+  __pyx_v_ob = ((struct PySlepcSTObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/Sys.pyx":6
+  /* "SLEPc/CAPI.pyx":22
+ *     cdef SlepcST retv = NULL
+ *     cdef ST ob = <ST?> arg
+ *     retv = ob.st             # <<<<<<<<<<<<<<
+ *     return retv
  * 
- *     @classmethod
- *     def getVersion(cls, patch=False, devel=False,             # <<<<<<<<<<<<<<
- *                    date=False, author=False):
- *         cdef int cmajor = SLEPC_VERSION_MAJOR
  */
-  __pyx_t_2 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_Sys, __pyx_n_s_getVersion); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_2 = __pyx_v_ob->st;
+  __pyx_v_retv = __pyx_t_2;
 
-  /* "SLEPc/Sys.pyx":5
- * cdef class Sys:
+  /* "SLEPc/CAPI.pyx":23
+ *     cdef ST ob = <ST?> arg
+ *     retv = ob.st
+ *     return retv             # <<<<<<<<<<<<<<
  * 
- *     @classmethod             # <<<<<<<<<<<<<<
- *     def getVersion(cls, patch=False, devel=False,
- *                    date=False, author=False):
+ * # -----------------------------------------------------------------------------
  */
-  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_Sys->tp_dict, __pyx_n_s_getVersion, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_Sys);
+  __pyx_r = __pyx_v_retv;
+  goto __pyx_L0;
 
-  /* "SLEPc/Sys.pyx":32
+  /* "SLEPc/CAPI.pyx":19
+ *     return retv
  * 
- *     @classmethod
- *     def getVersionInfo(cls):             # <<<<<<<<<<<<<<
- *         cdef int cmajor = SLEPC_VERSION_MAJOR
- *         cdef int cminor = SLEPC_VERSION_MINOR
+ * cdef api SlepcST PySlepcST_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
+ *     cdef SlepcST retv = NULL
+ *     cdef ST ob = <ST?> arg
  */
-  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_Sys, __pyx_n_s_getVersionInfo); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
 
-  /* "SLEPc/Sys.pyx":31
- *         return tuple(out)
- * 
- *     @classmethod             # <<<<<<<<<<<<<<
- *     def getVersionInfo(cls):
- *         cdef int cmajor = SLEPC_VERSION_MAJOR
- */
-  __pyx_t_2 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_Sys->tp_dict, __pyx_n_s_getVersionInfo, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_Sys);
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcST_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_ob);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-  /* "SLEPc/ST.pyx":3
- * # -----------------------------------------------------------------------------
+/* "SLEPc/CAPI.pyx":29
+ * # -- BV --
  * 
- * class STType(object):             # <<<<<<<<<<<<<<
- *     """
- *     ST types
+ * cdef api object PySlepcBV_New(SlepcBV arg):             # <<<<<<<<<<<<<<
+ *     cdef BV retv = BV()
+ *     setref(&retv.bv, arg)
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_STType, __pyx_n_s_STType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_ST_types_SHELL_User_defined_SHI); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "SLEPc/ST.pyx":13
- *     - `PRECOND`: Preconditioner.
- *     """
- *     SHELL   = S_(STSHELL)             # <<<<<<<<<<<<<<
- *     SHIFT   = S_(STSHIFT)
- *     SINVERT = S_(STSINVERT)
- */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(STSHELL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SHELL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyObject *__pyx_f_8slepc4py_5SLEPc_PySlepcBV_New(BV __pyx_v_arg) {
+  struct PySlepcBVObject *__pyx_v_retv = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("PySlepcBV_New", 0);
 
-  /* "SLEPc/ST.pyx":14
- *     """
- *     SHELL   = S_(STSHELL)
- *     SHIFT   = S_(STSHIFT)             # <<<<<<<<<<<<<<
- *     SINVERT = S_(STSINVERT)
- *     CAYLEY  = S_(STCAYLEY)
+  /* "SLEPc/CAPI.pyx":30
+ * 
+ * cdef api object PySlepcBV_New(SlepcBV arg):
+ *     cdef BV retv = BV()             # <<<<<<<<<<<<<<
+ *     setref(&retv.bv, arg)
+ *     return retv
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(STSHIFT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SHIFT, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_BV), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 30, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_retv = ((struct PySlepcBVObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/ST.pyx":15
- *     SHELL   = S_(STSHELL)
- *     SHIFT   = S_(STSHIFT)
- *     SINVERT = S_(STSINVERT)             # <<<<<<<<<<<<<<
- *     CAYLEY  = S_(STCAYLEY)
- *     PRECOND = S_(STPRECOND)
+  /* "SLEPc/CAPI.pyx":31
+ * cdef api object PySlepcBV_New(SlepcBV arg):
+ *     cdef BV retv = BV()
+ *     setref(&retv.bv, arg)             # <<<<<<<<<<<<<<
+ *     return retv
+ * 
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(STSINVERT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SINVERT, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_setref((&__pyx_v_retv->bv), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(18, 31, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":16
- *     SHIFT   = S_(STSHIFT)
- *     SINVERT = S_(STSINVERT)
- *     CAYLEY  = S_(STCAYLEY)             # <<<<<<<<<<<<<<
- *     PRECOND = S_(STPRECOND)
+  /* "SLEPc/CAPI.pyx":32
+ *     cdef BV retv = BV()
+ *     setref(&retv.bv, arg)
+ *     return retv             # <<<<<<<<<<<<<<
  * 
+ * cdef api SlepcBV PySlepcBV_Get(object arg) except ? NULL:
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(STCAYLEY); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CAYLEY, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_retv));
+  __pyx_r = ((PyObject *)__pyx_v_retv);
+  goto __pyx_L0;
 
-  /* "SLEPc/ST.pyx":17
- *     SINVERT = S_(STSINVERT)
- *     CAYLEY  = S_(STCAYLEY)
- *     PRECOND = S_(STPRECOND)             # <<<<<<<<<<<<<<
+  /* "SLEPc/CAPI.pyx":29
+ * # -- BV --
  * 
- * class STMatMode(object):
+ * cdef api object PySlepcBV_New(SlepcBV arg):             # <<<<<<<<<<<<<<
+ *     cdef BV retv = BV()
+ *     setref(&retv.bv, arg)
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(STPRECOND); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PRECOND, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/ST.pyx":3
- * # -----------------------------------------------------------------------------
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcBV_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_retv);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/CAPI.pyx":34
+ *     return retv
  * 
- * class STType(object):             # <<<<<<<<<<<<<<
- *     """
- *     ST types
+ * cdef api SlepcBV PySlepcBV_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
+ *     cdef SlepcBV retv = NULL
+ *     cdef BV ob = <BV?> arg
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_STType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_STType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "SLEPc/ST.pyx":19
- *     PRECOND = S_(STPRECOND)
+static BV __pyx_f_8slepc4py_5SLEPc_PySlepcBV_Get(PyObject *__pyx_v_arg) {
+  BV __pyx_v_retv;
+  struct PySlepcBVObject *__pyx_v_ob = 0;
+  BV __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  BV __pyx_t_2;
+  __Pyx_RefNannySetupContext("PySlepcBV_Get", 0);
+
+  /* "SLEPc/CAPI.pyx":35
  * 
- * class STMatMode(object):             # <<<<<<<<<<<<<<
- *     """
- *     ST matrix mode
+ * cdef api SlepcBV PySlepcBV_Get(object arg) except ? NULL:
+ *     cdef SlepcBV retv = NULL             # <<<<<<<<<<<<<<
+ *     cdef BV ob = <BV?> arg
+ *     retv = ob.bv
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_STMatMode, __pyx_n_s_STMatMode, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_ST_matrix_mode_COPY_A_working_c); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_v_retv = NULL;
 
-  /* "SLEPc/ST.pyx":28
- *       implicit matrix.
- *     """
- *     COPY    = ST_MATMODE_COPY             # <<<<<<<<<<<<<<
- *     INPLACE = ST_MATMODE_INPLACE
- *     SHELL   = ST_MATMODE_SHELL
+  /* "SLEPc/CAPI.pyx":36
+ * cdef api SlepcBV PySlepcBV_Get(object arg) except ? NULL:
+ *     cdef SlepcBV retv = NULL
+ *     cdef BV ob = <BV?> arg             # <<<<<<<<<<<<<<
+ *     retv = ob.bv
+ *     return retv
  */
-  __pyx_t_5 = PyInt_FromLong(ST_MATMODE_COPY); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_COPY, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8slepc4py_5SLEPc_BV)))) __PYX_ERR(18, 36, __pyx_L1_error)
+  __pyx_t_1 = __pyx_v_arg;
+  __Pyx_INCREF(__pyx_t_1);
+  __pyx_v_ob = ((struct PySlepcBVObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/ST.pyx":29
- *     """
- *     COPY    = ST_MATMODE_COPY
- *     INPLACE = ST_MATMODE_INPLACE             # <<<<<<<<<<<<<<
- *     SHELL   = ST_MATMODE_SHELL
+  /* "SLEPc/CAPI.pyx":37
+ *     cdef SlepcBV retv = NULL
+ *     cdef BV ob = <BV?> arg
+ *     retv = ob.bv             # <<<<<<<<<<<<<<
+ *     return retv
  * 
  */
-  __pyx_t_5 = PyInt_FromLong(ST_MATMODE_INPLACE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INPLACE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_2 = __pyx_v_ob->bv;
+  __pyx_v_retv = __pyx_t_2;
 
-  /* "SLEPc/ST.pyx":30
- *     COPY    = ST_MATMODE_COPY
- *     INPLACE = ST_MATMODE_INPLACE
- *     SHELL   = ST_MATMODE_SHELL             # <<<<<<<<<<<<<<
+  /* "SLEPc/CAPI.pyx":38
+ *     cdef BV ob = <BV?> arg
+ *     retv = ob.bv
+ *     return retv             # <<<<<<<<<<<<<<
  * 
- * class STMatStructure(object):
+ * # -----------------------------------------------------------------------------
  */
-  __pyx_t_5 = PyInt_FromLong(ST_MATMODE_SHELL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SHELL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_r = __pyx_v_retv;
+  goto __pyx_L0;
 
-  /* "SLEPc/ST.pyx":19
- *     PRECOND = S_(STPRECOND)
- * 
- * class STMatMode(object):             # <<<<<<<<<<<<<<
- *     """
- *     ST matrix mode
- */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_STMatMode, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_STMatMode, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-
-  /* "SLEPc/ST.pyx":32
- *     SHELL   = ST_MATMODE_SHELL
+  /* "SLEPc/CAPI.pyx":34
+ *     return retv
  * 
- * class STMatStructure(object):             # <<<<<<<<<<<<<<
- *     """
- *     - `SAME`: Same non-zero pattern.
- */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_STMatStructure, __pyx_n_s_STMatStructure, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_SAME_Same_non_zero_pattern_SUBS); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-
-  /* "SLEPc/ST.pyx":39
- *     """
- *     # native
- *     SAME_NONZERO_PATTERN      = MAT_SAME_NONZERO_PATTERN             # <<<<<<<<<<<<<<
- *     DIFFERENT_NONZERO_PATTERN = MAT_DIFFERENT_NONZERO_PATTERN
- *     SUBSET_NONZERO_PATTERN    = MAT_SUBSET_NONZERO_PATTERN
+ * cdef api SlepcBV PySlepcBV_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
+ *     cdef SlepcBV retv = NULL
+ *     cdef BV ob = <BV?> arg
  */
-  __pyx_t_5 = PyInt_FromLong(SAME_NONZERO_PATTERN); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SAME_NONZERO_PATTERN, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/ST.pyx":40
- *     # native
- *     SAME_NONZERO_PATTERN      = MAT_SAME_NONZERO_PATTERN
- *     DIFFERENT_NONZERO_PATTERN = MAT_DIFFERENT_NONZERO_PATTERN             # <<<<<<<<<<<<<<
- *     SUBSET_NONZERO_PATTERN    = MAT_SUBSET_NONZERO_PATTERN
- *     # aliases
- */
-  __pyx_t_5 = PyInt_FromLong(DIFFERENT_NONZERO_PATTERN); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIFFERENT_NONZERO_PATTERN, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcBV_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_ob);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-  /* "SLEPc/ST.pyx":41
- *     SAME_NONZERO_PATTERN      = MAT_SAME_NONZERO_PATTERN
- *     DIFFERENT_NONZERO_PATTERN = MAT_DIFFERENT_NONZERO_PATTERN
- *     SUBSET_NONZERO_PATTERN    = MAT_SUBSET_NONZERO_PATTERN             # <<<<<<<<<<<<<<
- *     # aliases
- *     SAME      = SAME_NZ      = SAME_NONZERO_PATTERN
+/* "SLEPc/CAPI.pyx":44
+ * # -- DS --
+ * 
+ * cdef api object PySlepcDS_New(SlepcDS arg):             # <<<<<<<<<<<<<<
+ *     cdef DS retv = DS()
+ *     setref(&retv.ds, arg)
  */
-  __pyx_t_5 = PyInt_FromLong(SUBSET_NONZERO_PATTERN); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SUBSET_NONZERO_PATTERN, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/ST.pyx":43
- *     SUBSET_NONZERO_PATTERN    = MAT_SUBSET_NONZERO_PATTERN
- *     # aliases
- *     SAME      = SAME_NZ      = SAME_NONZERO_PATTERN             # <<<<<<<<<<<<<<
- *     SUBSET    = SUBSET_NZ    = SUBSET_NONZERO_PATTERN
- *     DIFFERENT = DIFFERENT_NZ = DIFFERENT_NONZERO_PATTERN
- */
-  __pyx_t_5 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_SAME_NONZERO_PATTERN);
-  if (unlikely(!__pyx_t_5)) {
-    PyErr_Clear();
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_SAME_NONZERO_PATTERN);
-  }
-  if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SAME, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SAME_NZ, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyObject *__pyx_f_8slepc4py_5SLEPc_PySlepcDS_New(DS __pyx_v_arg) {
+  struct PySlepcDSObject *__pyx_v_retv = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("PySlepcDS_New", 0);
 
-  /* "SLEPc/ST.pyx":44
- *     # aliases
- *     SAME      = SAME_NZ      = SAME_NONZERO_PATTERN
- *     SUBSET    = SUBSET_NZ    = SUBSET_NONZERO_PATTERN             # <<<<<<<<<<<<<<
- *     DIFFERENT = DIFFERENT_NZ = DIFFERENT_NONZERO_PATTERN
+  /* "SLEPc/CAPI.pyx":45
  * 
+ * cdef api object PySlepcDS_New(SlepcDS arg):
+ *     cdef DS retv = DS()             # <<<<<<<<<<<<<<
+ *     setref(&retv.ds, arg)
+ *     return retv
  */
-  __pyx_t_5 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_SUBSET_NONZERO_PATTERN);
-  if (unlikely(!__pyx_t_5)) {
-    PyErr_Clear();
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_SUBSET_NONZERO_PATTERN);
-  }
-  if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SUBSET, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SUBSET_NZ, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_DS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 45, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_retv = ((struct PySlepcDSObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/ST.pyx":45
- *     SAME      = SAME_NZ      = SAME_NONZERO_PATTERN
- *     SUBSET    = SUBSET_NZ    = SUBSET_NONZERO_PATTERN
- *     DIFFERENT = DIFFERENT_NZ = DIFFERENT_NONZERO_PATTERN             # <<<<<<<<<<<<<<
+  /* "SLEPc/CAPI.pyx":46
+ * cdef api object PySlepcDS_New(SlepcDS arg):
+ *     cdef DS retv = DS()
+ *     setref(&retv.ds, arg)             # <<<<<<<<<<<<<<
+ *     return retv
  * 
- * # -----------------------------------------------------------------------------
  */
-  __pyx_t_5 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_DIFFERENT_NONZERO_PATTERN);
-  if (unlikely(!__pyx_t_5)) {
-    PyErr_Clear();
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_DIFFERENT_NONZERO_PATTERN);
-  }
-  if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIFFERENT, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIFFERENT_NZ, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_setref((&__pyx_v_retv->ds), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(18, 46, __pyx_L1_error)
 
-  /* "SLEPc/ST.pyx":32
- *     SHELL   = ST_MATMODE_SHELL
+  /* "SLEPc/CAPI.pyx":47
+ *     cdef DS retv = DS()
+ *     setref(&retv.ds, arg)
+ *     return retv             # <<<<<<<<<<<<<<
  * 
- * class STMatStructure(object):             # <<<<<<<<<<<<<<
- *     """
- *     - `SAME`: Same non-zero pattern.
+ * cdef api SlepcDS PySlepcDS_Get(object arg) except ? NULL:
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_STMatStructure, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_STMatStructure, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_retv));
+  __pyx_r = ((PyObject *)__pyx_v_retv);
+  goto __pyx_L0;
 
-  /* "SLEPc/ST.pyx":55
- *     """
+  /* "SLEPc/CAPI.pyx":44
+ * # -- DS --
  * 
- *     Type         = STType             # <<<<<<<<<<<<<<
- *     MatMode      = STMatMode
- *     MatStructure = STMatStructure
+ * cdef api object PySlepcDS_New(SlepcDS arg):             # <<<<<<<<<<<<<<
+ *     cdef DS retv = DS()
+ *     setref(&retv.ds, arg)
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_STType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_ST->tp_dict, __pyx_n_s_Type, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_ST);
 
-  /* "SLEPc/ST.pyx":56
- * 
- *     Type         = STType
- *     MatMode      = STMatMode             # <<<<<<<<<<<<<<
- *     MatStructure = STMatStructure
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcDS_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_retv);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/CAPI.pyx":49
+ *     return retv
  * 
+ * cdef api SlepcDS PySlepcDS_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
+ *     cdef SlepcDS retv = NULL
+ *     cdef DS ob = <DS?> arg
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_STMatMode); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_ST->tp_dict, __pyx_n_s_MatMode, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_ST);
 
-  /* "SLEPc/ST.pyx":57
- *     Type         = STType
- *     MatMode      = STMatMode
- *     MatStructure = STMatStructure             # <<<<<<<<<<<<<<
+static DS __pyx_f_8slepc4py_5SLEPc_PySlepcDS_Get(PyObject *__pyx_v_arg) {
+  DS __pyx_v_retv;
+  struct PySlepcDSObject *__pyx_v_ob = 0;
+  DS __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  DS __pyx_t_2;
+  __Pyx_RefNannySetupContext("PySlepcDS_Get", 0);
+
+  /* "SLEPc/CAPI.pyx":50
  * 
- *     def __cinit__(self):
+ * cdef api SlepcDS PySlepcDS_Get(object arg) except ? NULL:
+ *     cdef SlepcDS retv = NULL             # <<<<<<<<<<<<<<
+ *     cdef DS ob = <DS?> arg
+ *     retv = ob.ds
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_STMatStructure); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_ST->tp_dict, __pyx_n_s_MatStructure, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_ST);
+  __pyx_v_retv = NULL;
 
-  /* "SLEPc/ST.pyx":485
- * # -----------------------------------------------------------------------------
- * 
- * del STType             # <<<<<<<<<<<<<<
- * del STMatMode
- * del STMatStructure
+  /* "SLEPc/CAPI.pyx":51
+ * cdef api SlepcDS PySlepcDS_Get(object arg) except ? NULL:
+ *     cdef SlepcDS retv = NULL
+ *     cdef DS ob = <DS?> arg             # <<<<<<<<<<<<<<
+ *     retv = ob.ds
+ *     return retv
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_STType) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8slepc4py_5SLEPc_DS)))) __PYX_ERR(18, 51, __pyx_L1_error)
+  __pyx_t_1 = __pyx_v_arg;
+  __Pyx_INCREF(__pyx_t_1);
+  __pyx_v_ob = ((struct PySlepcDSObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/ST.pyx":486
- * 
- * del STType
- * del STMatMode             # <<<<<<<<<<<<<<
- * del STMatStructure
+  /* "SLEPc/CAPI.pyx":52
+ *     cdef SlepcDS retv = NULL
+ *     cdef DS ob = <DS?> arg
+ *     retv = ob.ds             # <<<<<<<<<<<<<<
+ *     return retv
  * 
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_STMatMode) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_v_ob->ds;
+  __pyx_v_retv = __pyx_t_2;
 
-  /* "SLEPc/ST.pyx":487
- * del STType
- * del STMatMode
- * del STMatStructure             # <<<<<<<<<<<<<<
+  /* "SLEPc/CAPI.pyx":53
+ *     cdef DS ob = <DS?> arg
+ *     retv = ob.ds
+ *     return retv             # <<<<<<<<<<<<<<
  * 
  * # -----------------------------------------------------------------------------
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_STMatStructure) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_v_retv;
+  goto __pyx_L0;
 
-  /* "SLEPc/BV.pyx":3
- * # -----------------------------------------------------------------------------
+  /* "SLEPc/CAPI.pyx":49
+ *     return retv
  * 
- * class BVType(object):             # <<<<<<<<<<<<<<
- *     """
- *     BV type
- */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_BVType, __pyx_n_s_BVType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_BV_type); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-
-  /* "SLEPc/BV.pyx":7
- *     BV type
- *     """
- *     MAT        = S_(BVMAT)             # <<<<<<<<<<<<<<
- *     SVEC       = S_(BVSVEC)
- *     VECS       = S_(BVVECS)
+ * cdef api SlepcDS PySlepcDS_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
+ *     cdef SlepcDS retv = NULL
+ *     cdef DS ob = <DS?> arg
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(BVMAT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MAT, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/BV.pyx":8
- *     """
- *     MAT        = S_(BVMAT)
- *     SVEC       = S_(BVSVEC)             # <<<<<<<<<<<<<<
- *     VECS       = S_(BVVECS)
- *     CONTIGUOUS = S_(BVCONTIGUOUS)
- */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(BVSVEC); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SVEC, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcDS_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_ob);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-  /* "SLEPc/BV.pyx":9
- *     MAT        = S_(BVMAT)
- *     SVEC       = S_(BVSVEC)
- *     VECS       = S_(BVVECS)             # <<<<<<<<<<<<<<
- *     CONTIGUOUS = S_(BVCONTIGUOUS)
+/* "SLEPc/CAPI.pyx":59
+ * # -- FN --
  * 
+ * cdef api object PySlepcFN_New(SlepcFN arg):             # <<<<<<<<<<<<<<
+ *     cdef FN retv = FN()
+ *     setref(&retv.fn, arg)
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(BVVECS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_VECS, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/BV.pyx":10
- *     SVEC       = S_(BVSVEC)
- *     VECS       = S_(BVVECS)
- *     CONTIGUOUS = S_(BVCONTIGUOUS)             # <<<<<<<<<<<<<<
- * 
- * class BVOrthogType(object):
- */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(BVCONTIGUOUS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONTIGUOUS, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyObject *__pyx_f_8slepc4py_5SLEPc_PySlepcFN_New(FN __pyx_v_arg) {
+  struct PySlepcFNObject *__pyx_v_retv = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("PySlepcFN_New", 0);
 
-  /* "SLEPc/BV.pyx":3
- * # -----------------------------------------------------------------------------
+  /* "SLEPc/CAPI.pyx":60
  * 
- * class BVType(object):             # <<<<<<<<<<<<<<
- *     """
- *     BV type
+ * cdef api object PySlepcFN_New(SlepcFN arg):
+ *     cdef FN retv = FN()             # <<<<<<<<<<<<<<
+ *     setref(&retv.fn, arg)
+ *     return retv
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_BVType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BVType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_FN), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 60, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_retv = ((struct PySlepcFNObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/BV.pyx":12
- *     CONTIGUOUS = S_(BVCONTIGUOUS)
+  /* "SLEPc/CAPI.pyx":61
+ * cdef api object PySlepcFN_New(SlepcFN arg):
+ *     cdef FN retv = FN()
+ *     setref(&retv.fn, arg)             # <<<<<<<<<<<<<<
+ *     return retv
  * 
- * class BVOrthogType(object):             # <<<<<<<<<<<<<<
- *     """
- *     BV orthogonalization types
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_BVOrthogType, __pyx_n_s_BVOrthogType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_BV_orthogonalization_types_CGS); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_setref((&__pyx_v_retv->fn), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(18, 61, __pyx_L1_error)
 
-  /* "SLEPc/BV.pyx":19
- *     - `MGS`: Modified Gram-Schmidt.
- *     """
- *     CGS = BV_ORTHOG_CGS             # <<<<<<<<<<<<<<
- *     MGS = BV_ORTHOG_MGS
+  /* "SLEPc/CAPI.pyx":62
+ *     cdef FN retv = FN()
+ *     setref(&retv.fn, arg)
+ *     return retv             # <<<<<<<<<<<<<<
  * 
+ * cdef api SlepcFN PySlepcFN_Get(object arg) except ? NULL:
  */
-  __pyx_t_5 = PyInt_FromLong(BV_ORTHOG_CGS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CGS, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_retv));
+  __pyx_r = ((PyObject *)__pyx_v_retv);
+  goto __pyx_L0;
 
-  /* "SLEPc/BV.pyx":20
- *     """
- *     CGS = BV_ORTHOG_CGS
- *     MGS = BV_ORTHOG_MGS             # <<<<<<<<<<<<<<
+  /* "SLEPc/CAPI.pyx":59
+ * # -- FN --
  * 
- * class BVOrthogRefineType(object):
+ * cdef api object PySlepcFN_New(SlepcFN arg):             # <<<<<<<<<<<<<<
+ *     cdef FN retv = FN()
+ *     setref(&retv.fn, arg)
  */
-  __pyx_t_5 = PyInt_FromLong(BV_ORTHOG_MGS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MGS, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/BV.pyx":12
- *     CONTIGUOUS = S_(BVCONTIGUOUS)
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcFN_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_retv);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/CAPI.pyx":64
+ *     return retv
  * 
- * class BVOrthogType(object):             # <<<<<<<<<<<<<<
- *     """
- *     BV orthogonalization types
+ * cdef api SlepcFN PySlepcFN_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
+ *     cdef SlepcFN retv = NULL
+ *     cdef FN ob = <FN?> arg
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_BVOrthogType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BVOrthogType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "SLEPc/BV.pyx":22
- *     MGS = BV_ORTHOG_MGS
+static FN __pyx_f_8slepc4py_5SLEPc_PySlepcFN_Get(PyObject *__pyx_v_arg) {
+  FN __pyx_v_retv;
+  struct PySlepcFNObject *__pyx_v_ob = 0;
+  FN __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  FN __pyx_t_2;
+  __Pyx_RefNannySetupContext("PySlepcFN_Get", 0);
+
+  /* "SLEPc/CAPI.pyx":65
  * 
- * class BVOrthogRefineType(object):             # <<<<<<<<<<<<<<
- *     """
- *     BV orthogonalization refinement types
+ * cdef api SlepcFN PySlepcFN_Get(object arg) except ? NULL:
+ *     cdef SlepcFN retv = NULL             # <<<<<<<<<<<<<<
+ *     cdef FN ob = <FN?> arg
+ *     retv = ob.fn
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_BVOrthogRefineType, __pyx_n_s_BVOrthogRefineType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_BV_orthogonalization_refinement); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_v_retv = NULL;
 
-  /* "SLEPc/BV.pyx":30
- *     - `ALWAYS`:   Always reorthogonalize.
- *     """
- *     IFNEEDED = BV_ORTHOG_REFINE_IFNEEDED             # <<<<<<<<<<<<<<
- *     NEVER    = BV_ORTHOG_REFINE_NEVER
- *     ALWAYS   = BV_ORTHOG_REFINE_ALWAYS
+  /* "SLEPc/CAPI.pyx":66
+ * cdef api SlepcFN PySlepcFN_Get(object arg) except ? NULL:
+ *     cdef SlepcFN retv = NULL
+ *     cdef FN ob = <FN?> arg             # <<<<<<<<<<<<<<
+ *     retv = ob.fn
+ *     return retv
  */
-  __pyx_t_5 = PyInt_FromLong(BV_ORTHOG_REFINE_IFNEEDED); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_IFNEEDED, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8slepc4py_5SLEPc_FN)))) __PYX_ERR(18, 66, __pyx_L1_error)
+  __pyx_t_1 = __pyx_v_arg;
+  __Pyx_INCREF(__pyx_t_1);
+  __pyx_v_ob = ((struct PySlepcFNObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/BV.pyx":31
- *     """
- *     IFNEEDED = BV_ORTHOG_REFINE_IFNEEDED
- *     NEVER    = BV_ORTHOG_REFINE_NEVER             # <<<<<<<<<<<<<<
- *     ALWAYS   = BV_ORTHOG_REFINE_ALWAYS
+  /* "SLEPc/CAPI.pyx":67
+ *     cdef SlepcFN retv = NULL
+ *     cdef FN ob = <FN?> arg
+ *     retv = ob.fn             # <<<<<<<<<<<<<<
+ *     return retv
  * 
  */
-  __pyx_t_5 = PyInt_FromLong(BV_ORTHOG_REFINE_NEVER); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NEVER, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_2 = __pyx_v_ob->fn;
+  __pyx_v_retv = __pyx_t_2;
 
-  /* "SLEPc/BV.pyx":32
- *     IFNEEDED = BV_ORTHOG_REFINE_IFNEEDED
- *     NEVER    = BV_ORTHOG_REFINE_NEVER
- *     ALWAYS   = BV_ORTHOG_REFINE_ALWAYS             # <<<<<<<<<<<<<<
+  /* "SLEPc/CAPI.pyx":68
+ *     cdef FN ob = <FN?> arg
+ *     retv = ob.fn
+ *     return retv             # <<<<<<<<<<<<<<
  * 
- * class BVOrthogBlockType(object):
+ * # -----------------------------------------------------------------------------
  */
-  __pyx_t_5 = PyInt_FromLong(BV_ORTHOG_REFINE_ALWAYS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ALWAYS, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_r = __pyx_v_retv;
+  goto __pyx_L0;
 
-  /* "SLEPc/BV.pyx":22
- *     MGS = BV_ORTHOG_MGS
+  /* "SLEPc/CAPI.pyx":64
+ *     return retv
  * 
- * class BVOrthogRefineType(object):             # <<<<<<<<<<<<<<
- *     """
- *     BV orthogonalization refinement types
+ * cdef api SlepcFN PySlepcFN_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
+ *     cdef SlepcFN retv = NULL
+ *     cdef FN ob = <FN?> arg
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_BVOrthogRefineType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BVOrthogRefineType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "SLEPc/BV.pyx":34
- *     ALWAYS   = BV_ORTHOG_REFINE_ALWAYS
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcFN_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_ob);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/CAPI.pyx":74
+ * # -- RG --
  * 
- * class BVOrthogBlockType(object):             # <<<<<<<<<<<<<<
- *     """
- *     BV block-orthogonalization types
+ * cdef api object PySlepcRG_New(SlepcRG arg):             # <<<<<<<<<<<<<<
+ *     cdef RG retv = RG()
+ *     setref(&retv.rg, arg)
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_BVOrthogBlockType, __pyx_n_s_BVOrthogBlockType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_BV_block_orthogonalization_type); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "SLEPc/BV.pyx":41
- *     - `CHOL`: Cholesky.
- *     """
- *     GS   = BV_ORTHOG_BLOCK_GS             # <<<<<<<<<<<<<<
- *     CHOL = BV_ORTHOG_BLOCK_CHOL
+static PyObject *__pyx_f_8slepc4py_5SLEPc_PySlepcRG_New(RG __pyx_v_arg) {
+  struct PySlepcRGObject *__pyx_v_retv = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("PySlepcRG_New", 0);
+
+  /* "SLEPc/CAPI.pyx":75
  * 
+ * cdef api object PySlepcRG_New(SlepcRG arg):
+ *     cdef RG retv = RG()             # <<<<<<<<<<<<<<
+ *     setref(&retv.rg, arg)
+ *     return retv
  */
-  __pyx_t_5 = PyInt_FromLong(BV_ORTHOG_BLOCK_GS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GS, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_RG), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 75, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_retv = ((struct PySlepcRGObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/BV.pyx":42
- *     """
- *     GS   = BV_ORTHOG_BLOCK_GS
- *     CHOL = BV_ORTHOG_BLOCK_CHOL             # <<<<<<<<<<<<<<
+  /* "SLEPc/CAPI.pyx":76
+ * cdef api object PySlepcRG_New(SlepcRG arg):
+ *     cdef RG retv = RG()
+ *     setref(&retv.rg, arg)             # <<<<<<<<<<<<<<
+ *     return retv
  * 
- * # -----------------------------------------------------------------------------
  */
-  __pyx_t_5 = PyInt_FromLong(BV_ORTHOG_BLOCK_CHOL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CHOL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_setref((&__pyx_v_retv->rg), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(18, 76, __pyx_L1_error)
 
-  /* "SLEPc/BV.pyx":34
- *     ALWAYS   = BV_ORTHOG_REFINE_ALWAYS
+  /* "SLEPc/CAPI.pyx":77
+ *     cdef RG retv = RG()
+ *     setref(&retv.rg, arg)
+ *     return retv             # <<<<<<<<<<<<<<
  * 
- * class BVOrthogBlockType(object):             # <<<<<<<<<<<<<<
- *     """
- *     BV block-orthogonalization types
+ * cdef api SlepcRG PySlepcRG_Get(object arg) except ? NULL:
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_BVOrthogBlockType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BVOrthogBlockType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_retv));
+  __pyx_r = ((PyObject *)__pyx_v_retv);
+  goto __pyx_L0;
 
-  /* "SLEPc/BV.pyx":52
- *     """
+  /* "SLEPc/CAPI.pyx":74
+ * # -- RG --
  * 
- *     Type             = BVType             # <<<<<<<<<<<<<<
- *     OrthogType       = BVOrthogType
- *     OrthogRefineType = BVOrthogRefineType
+ * cdef api object PySlepcRG_New(SlepcRG arg):             # <<<<<<<<<<<<<<
+ *     cdef RG retv = RG()
+ *     setref(&retv.rg, arg)
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_BVType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_BV->tp_dict, __pyx_n_s_Type, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_BV);
 
-  /* "SLEPc/BV.pyx":53
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcRG_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_retv);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/CAPI.pyx":79
+ *     return retv
  * 
- *     Type             = BVType
- *     OrthogType       = BVOrthogType             # <<<<<<<<<<<<<<
- *     OrthogRefineType = BVOrthogRefineType
- *     RefineType       = BVOrthogRefineType
+ * cdef api SlepcRG PySlepcRG_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
+ *     cdef SlepcRG retv = NULL
+ *     cdef RG ob = <RG?> arg
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_BVOrthogType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_BV->tp_dict, __pyx_n_s_OrthogType, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_BV);
 
-  /* "SLEPc/BV.pyx":54
- *     Type             = BVType
- *     OrthogType       = BVOrthogType
- *     OrthogRefineType = BVOrthogRefineType             # <<<<<<<<<<<<<<
- *     RefineType       = BVOrthogRefineType
- *     OrthogBlockType  = BVOrthogBlockType
+static RG __pyx_f_8slepc4py_5SLEPc_PySlepcRG_Get(PyObject *__pyx_v_arg) {
+  RG __pyx_v_retv;
+  struct PySlepcRGObject *__pyx_v_ob = 0;
+  RG __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  RG __pyx_t_2;
+  __Pyx_RefNannySetupContext("PySlepcRG_Get", 0);
+
+  /* "SLEPc/CAPI.pyx":80
+ * 
+ * cdef api SlepcRG PySlepcRG_Get(object arg) except ? NULL:
+ *     cdef SlepcRG retv = NULL             # <<<<<<<<<<<<<<
+ *     cdef RG ob = <RG?> arg
+ *     retv = ob.rg
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_BVOrthogRefineType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_BV->tp_dict, __pyx_n_s_OrthogRefineType, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_BV);
+  __pyx_v_retv = NULL;
 
-  /* "SLEPc/BV.pyx":55
- *     OrthogType       = BVOrthogType
- *     OrthogRefineType = BVOrthogRefineType
- *     RefineType       = BVOrthogRefineType             # <<<<<<<<<<<<<<
- *     OrthogBlockType  = BVOrthogBlockType
- *     BlockType        = BVOrthogBlockType
+  /* "SLEPc/CAPI.pyx":81
+ * cdef api SlepcRG PySlepcRG_Get(object arg) except ? NULL:
+ *     cdef SlepcRG retv = NULL
+ *     cdef RG ob = <RG?> arg             # <<<<<<<<<<<<<<
+ *     retv = ob.rg
+ *     return retv
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_BVOrthogRefineType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_BV->tp_dict, __pyx_n_s_RefineType, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_BV);
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8slepc4py_5SLEPc_RG)))) __PYX_ERR(18, 81, __pyx_L1_error)
+  __pyx_t_1 = __pyx_v_arg;
+  __Pyx_INCREF(__pyx_t_1);
+  __pyx_v_ob = ((struct PySlepcRGObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/BV.pyx":56
- *     OrthogRefineType = BVOrthogRefineType
- *     RefineType       = BVOrthogRefineType
- *     OrthogBlockType  = BVOrthogBlockType             # <<<<<<<<<<<<<<
- *     BlockType        = BVOrthogBlockType
+  /* "SLEPc/CAPI.pyx":82
+ *     cdef SlepcRG retv = NULL
+ *     cdef RG ob = <RG?> arg
+ *     retv = ob.rg             # <<<<<<<<<<<<<<
+ *     return retv
  * 
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_BVOrthogBlockType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_BV->tp_dict, __pyx_n_s_OrthogBlockType, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_BV);
+  __pyx_t_2 = __pyx_v_ob->rg;
+  __pyx_v_retv = __pyx_t_2;
 
-  /* "SLEPc/BV.pyx":57
- *     RefineType       = BVOrthogRefineType
- *     OrthogBlockType  = BVOrthogBlockType
- *     BlockType        = BVOrthogBlockType             # <<<<<<<<<<<<<<
+  /* "SLEPc/CAPI.pyx":83
+ *     cdef RG ob = <RG?> arg
+ *     retv = ob.rg
+ *     return retv             # <<<<<<<<<<<<<<
  * 
- *     def __cinit__(self):
+ * # -----------------------------------------------------------------------------
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_BVOrthogBlockType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_BV->tp_dict, __pyx_n_s_BlockType, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_BV);
+  __pyx_r = __pyx_v_retv;
+  goto __pyx_L0;
 
-  /* "SLEPc/BV.pyx":324
- * # -----------------------------------------------------------------------------
+  /* "SLEPc/CAPI.pyx":79
+ *     return retv
  * 
- * del BVType             # <<<<<<<<<<<<<<
- * del BVOrthogType
- * del BVOrthogRefineType
+ * cdef api SlepcRG PySlepcRG_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
+ *     cdef SlepcRG retv = NULL
+ *     cdef RG ob = <RG?> arg
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_BVType) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "SLEPc/BV.pyx":325
- * 
- * del BVType
- * del BVOrthogType             # <<<<<<<<<<<<<<
- * del BVOrthogRefineType
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcRG_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_ob);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/CAPI.pyx":89
+ * # -- EPS --
  * 
+ * cdef api object PySlepcEPS_New(SlepcEPS arg):             # <<<<<<<<<<<<<<
+ *     cdef EPS retv = EPS()
+ *     setref(&retv.eps, arg)
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_BVOrthogType) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "SLEPc/BV.pyx":326
- * del BVType
- * del BVOrthogType
- * del BVOrthogRefineType             # <<<<<<<<<<<<<<
+static PyObject *__pyx_f_8slepc4py_5SLEPc_PySlepcEPS_New(EPS __pyx_v_arg) {
+  struct PySlepcEPSObject *__pyx_v_retv = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("PySlepcEPS_New", 0);
+
+  /* "SLEPc/CAPI.pyx":90
  * 
- * # -----------------------------------------------------------------------------
+ * cdef api object PySlepcEPS_New(SlepcEPS arg):
+ *     cdef EPS retv = EPS()             # <<<<<<<<<<<<<<
+ *     setref(&retv.eps, arg)
+ *     return retv
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_BVOrthogRefineType) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_EPS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 90, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_retv = ((struct PySlepcEPSObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/DS.pyx":3
- * # -----------------------------------------------------------------------------
+  /* "SLEPc/CAPI.pyx":91
+ * cdef api object PySlepcEPS_New(SlepcEPS arg):
+ *     cdef EPS retv = EPS()
+ *     setref(&retv.eps, arg)             # <<<<<<<<<<<<<<
+ *     return retv
  * 
- * class DSType(object):             # <<<<<<<<<<<<<<
- *     """
- *     DS type
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_DSType, __pyx_n_s_DSType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_DS_type); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_setref((&__pyx_v_retv->eps), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(18, 91, __pyx_L1_error)
 
-  /* "SLEPc/DS.pyx":7
- *     DS type
- *     """
- *     HEP     = S_(DSHEP)             # <<<<<<<<<<<<<<
- *     NHEP    = S_(DSNHEP)
- *     GHEP    = S_(DSGHEP)
+  /* "SLEPc/CAPI.pyx":92
+ *     cdef EPS retv = EPS()
+ *     setref(&retv.eps, arg)
+ *     return retv             # <<<<<<<<<<<<<<
+ * 
+ * cdef api SlepcEPS PySlepcEPS_Get(object arg) except ? NULL:
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(DSHEP); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HEP, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_retv));
+  __pyx_r = ((PyObject *)__pyx_v_retv);
+  goto __pyx_L0;
 
-  /* "SLEPc/DS.pyx":8
- *     """
- *     HEP     = S_(DSHEP)
- *     NHEP    = S_(DSNHEP)             # <<<<<<<<<<<<<<
- *     GHEP    = S_(DSGHEP)
- *     GHIEP   = S_(DSGHIEP)
+  /* "SLEPc/CAPI.pyx":89
+ * # -- EPS --
+ * 
+ * cdef api object PySlepcEPS_New(SlepcEPS arg):             # <<<<<<<<<<<<<<
+ *     cdef EPS retv = EPS()
+ *     setref(&retv.eps, arg)
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(DSNHEP); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NHEP, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/DS.pyx":9
- *     HEP     = S_(DSHEP)
- *     NHEP    = S_(DSNHEP)
- *     GHEP    = S_(DSGHEP)             # <<<<<<<<<<<<<<
- *     GHIEP   = S_(DSGHIEP)
- *     GNHEP   = S_(DSGNHEP)
- */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(DSGHEP); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GHEP, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcEPS_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_retv);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-  /* "SLEPc/DS.pyx":10
- *     NHEP    = S_(DSNHEP)
- *     GHEP    = S_(DSGHEP)
- *     GHIEP   = S_(DSGHIEP)             # <<<<<<<<<<<<<<
- *     GNHEP   = S_(DSGNHEP)
- *     SVD     = S_(DSSVD)
+/* "SLEPc/CAPI.pyx":94
+ *     return retv
+ * 
+ * cdef api SlepcEPS PySlepcEPS_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
+ *     cdef SlepcEPS retv = NULL
+ *     cdef EPS ob = <EPS?> arg
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(DSGHIEP); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GHIEP, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/DS.pyx":11
- *     GHEP    = S_(DSGHEP)
- *     GHIEP   = S_(DSGHIEP)
- *     GNHEP   = S_(DSGNHEP)             # <<<<<<<<<<<<<<
- *     SVD     = S_(DSSVD)
- *     PEP     = S_(DSPEP)
+static EPS __pyx_f_8slepc4py_5SLEPc_PySlepcEPS_Get(PyObject *__pyx_v_arg) {
+  EPS __pyx_v_retv;
+  struct PySlepcEPSObject *__pyx_v_ob = 0;
+  EPS __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  EPS __pyx_t_2;
+  __Pyx_RefNannySetupContext("PySlepcEPS_Get", 0);
+
+  /* "SLEPc/CAPI.pyx":95
+ * 
+ * cdef api SlepcEPS PySlepcEPS_Get(object arg) except ? NULL:
+ *     cdef SlepcEPS retv = NULL             # <<<<<<<<<<<<<<
+ *     cdef EPS ob = <EPS?> arg
+ *     retv = ob.eps
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(DSGNHEP); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GNHEP, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_v_retv = NULL;
 
-  /* "SLEPc/DS.pyx":12
- *     GHIEP   = S_(DSGHIEP)
- *     GNHEP   = S_(DSGNHEP)
- *     SVD     = S_(DSSVD)             # <<<<<<<<<<<<<<
- *     PEP     = S_(DSPEP)
- *     NEP     = S_(DSNEP)
+  /* "SLEPc/CAPI.pyx":96
+ * cdef api SlepcEPS PySlepcEPS_Get(object arg) except ? NULL:
+ *     cdef SlepcEPS retv = NULL
+ *     cdef EPS ob = <EPS?> arg             # <<<<<<<<<<<<<<
+ *     retv = ob.eps
+ *     return retv
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(DSSVD); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SVD, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8slepc4py_5SLEPc_EPS)))) __PYX_ERR(18, 96, __pyx_L1_error)
+  __pyx_t_1 = __pyx_v_arg;
+  __Pyx_INCREF(__pyx_t_1);
+  __pyx_v_ob = ((struct PySlepcEPSObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/DS.pyx":13
- *     GNHEP   = S_(DSGNHEP)
- *     SVD     = S_(DSSVD)
- *     PEP     = S_(DSPEP)             # <<<<<<<<<<<<<<
- *     NEP     = S_(DSNEP)
+  /* "SLEPc/CAPI.pyx":97
+ *     cdef SlepcEPS retv = NULL
+ *     cdef EPS ob = <EPS?> arg
+ *     retv = ob.eps             # <<<<<<<<<<<<<<
+ *     return retv
  * 
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(DSPEP); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PEP, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_2 = __pyx_v_ob->eps;
+  __pyx_v_retv = __pyx_t_2;
 
-  /* "SLEPc/DS.pyx":14
- *     SVD     = S_(DSSVD)
- *     PEP     = S_(DSPEP)
- *     NEP     = S_(DSNEP)             # <<<<<<<<<<<<<<
+  /* "SLEPc/CAPI.pyx":98
+ *     cdef EPS ob = <EPS?> arg
+ *     retv = ob.eps
+ *     return retv             # <<<<<<<<<<<<<<
  * 
- * class DSStateType(object):
+ * # -----------------------------------------------------------------------------
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(DSNEP); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NEP, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_r = __pyx_v_retv;
+  goto __pyx_L0;
 
-  /* "SLEPc/DS.pyx":3
- * # -----------------------------------------------------------------------------
+  /* "SLEPc/CAPI.pyx":94
+ *     return retv
  * 
- * class DSType(object):             # <<<<<<<<<<<<<<
- *     """
- *     DS type
+ * cdef api SlepcEPS PySlepcEPS_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
+ *     cdef SlepcEPS retv = NULL
+ *     cdef EPS ob = <EPS?> arg
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_DSType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DSType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "SLEPc/DS.pyx":16
- *     NEP     = S_(DSNEP)
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcEPS_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_ob);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/CAPI.pyx":104
+ * # -- SVD --
  * 
- * class DSStateType(object):             # <<<<<<<<<<<<<<
- *     """
- *     DS state types
+ * cdef api object PySlepcSVD_New(SlepcSVD arg):             # <<<<<<<<<<<<<<
+ *     cdef SVD retv = SVD()
+ *     setref(&retv.svd, arg)
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_DSStateType, __pyx_n_s_DSStateType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_DS_state_types_RAW_Not_processe); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "SLEPc/DS.pyx":25
- *     - `TRUNCATED`: Condensed form truncated to a smaller size.
- *     """
- *     RAW          = DS_STATE_RAW             # <<<<<<<<<<<<<<
- *     INTERMEDIATE = DS_STATE_INTERMEDIATE
- *     CONDENSED    = DS_STATE_CONDENSED
- */
-  __pyx_t_5 = PyInt_FromLong(DS_STATE_RAW); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RAW, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyObject *__pyx_f_8slepc4py_5SLEPc_PySlepcSVD_New(SVD __pyx_v_arg) {
+  struct PySlepcSVDObject *__pyx_v_retv = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("PySlepcSVD_New", 0);
 
-  /* "SLEPc/DS.pyx":26
- *     """
- *     RAW          = DS_STATE_RAW
- *     INTERMEDIATE = DS_STATE_INTERMEDIATE             # <<<<<<<<<<<<<<
- *     CONDENSED    = DS_STATE_CONDENSED
- *     TRUNCATED    = DS_STATE_TRUNCATED
+  /* "SLEPc/CAPI.pyx":105
+ * 
+ * cdef api object PySlepcSVD_New(SlepcSVD arg):
+ *     cdef SVD retv = SVD()             # <<<<<<<<<<<<<<
+ *     setref(&retv.svd, arg)
+ *     return retv
  */
-  __pyx_t_5 = PyInt_FromLong(DS_STATE_INTERMEDIATE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INTERMEDIATE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_SVD), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 105, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_retv = ((struct PySlepcSVDObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/DS.pyx":27
- *     RAW          = DS_STATE_RAW
- *     INTERMEDIATE = DS_STATE_INTERMEDIATE
- *     CONDENSED    = DS_STATE_CONDENSED             # <<<<<<<<<<<<<<
- *     TRUNCATED    = DS_STATE_TRUNCATED
+  /* "SLEPc/CAPI.pyx":106
+ * cdef api object PySlepcSVD_New(SlepcSVD arg):
+ *     cdef SVD retv = SVD()
+ *     setref(&retv.svd, arg)             # <<<<<<<<<<<<<<
+ *     return retv
  * 
  */
-  __pyx_t_5 = PyInt_FromLong(DS_STATE_CONDENSED); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONDENSED, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_setref((&__pyx_v_retv->svd), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(18, 106, __pyx_L1_error)
 
-  /* "SLEPc/DS.pyx":28
- *     INTERMEDIATE = DS_STATE_INTERMEDIATE
- *     CONDENSED    = DS_STATE_CONDENSED
- *     TRUNCATED    = DS_STATE_TRUNCATED             # <<<<<<<<<<<<<<
+  /* "SLEPc/CAPI.pyx":107
+ *     cdef SVD retv = SVD()
+ *     setref(&retv.svd, arg)
+ *     return retv             # <<<<<<<<<<<<<<
  * 
- * class DSMatType(object):
+ * cdef api SlepcSVD PySlepcSVD_Get(object arg) except ? NULL:
  */
-  __pyx_t_5 = PyInt_FromLong(DS_STATE_TRUNCATED); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TRUNCATED, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_retv));
+  __pyx_r = ((PyObject *)__pyx_v_retv);
+  goto __pyx_L0;
 
-  /* "SLEPc/DS.pyx":16
- *     NEP     = S_(DSNEP)
+  /* "SLEPc/CAPI.pyx":104
+ * # -- SVD --
  * 
- * class DSStateType(object):             # <<<<<<<<<<<<<<
- *     """
- *     DS state types
+ * cdef api object PySlepcSVD_New(SlepcSVD arg):             # <<<<<<<<<<<<<<
+ *     cdef SVD retv = SVD()
+ *     setref(&retv.svd, arg)
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_DSStateType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DSStateType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "SLEPc/DS.pyx":30
- *     TRUNCATED    = DS_STATE_TRUNCATED
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcSVD_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_retv);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/CAPI.pyx":109
+ *     return retv
  * 
- * class DSMatType(object):             # <<<<<<<<<<<<<<
- *     """
- *     To refer to one of the matrices stored internally in DS
+ * cdef api SlepcSVD PySlepcSVD_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
+ *     cdef SlepcSVD retv = NULL
+ *     cdef SVD ob = <SVD?> arg
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_DSMatType, __pyx_n_s_DSMatType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_To_refer_to_one_of_the_matrices); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "SLEPc/DS.pyx":47
- *     - `W`:  workspace matrix.
- *     """
- *     A  = DS_MAT_A             # <<<<<<<<<<<<<<
- *     B  = DS_MAT_B
- *     C  = DS_MAT_C
- */
-  __pyx_t_5 = PyInt_FromLong(DS_MAT_A); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_A, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static SVD __pyx_f_8slepc4py_5SLEPc_PySlepcSVD_Get(PyObject *__pyx_v_arg) {
+  SVD __pyx_v_retv;
+  struct PySlepcSVDObject *__pyx_v_ob = 0;
+  SVD __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  SVD __pyx_t_2;
+  __Pyx_RefNannySetupContext("PySlepcSVD_Get", 0);
 
-  /* "SLEPc/DS.pyx":48
- *     """
- *     A  = DS_MAT_A
- *     B  = DS_MAT_B             # <<<<<<<<<<<<<<
- *     C  = DS_MAT_C
- *     T  = DS_MAT_T
+  /* "SLEPc/CAPI.pyx":110
+ * 
+ * cdef api SlepcSVD PySlepcSVD_Get(object arg) except ? NULL:
+ *     cdef SlepcSVD retv = NULL             # <<<<<<<<<<<<<<
+ *     cdef SVD ob = <SVD?> arg
+ *     retv = ob.svd
  */
-  __pyx_t_5 = PyInt_FromLong(DS_MAT_B); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_B, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_v_retv = NULL;
 
-  /* "SLEPc/DS.pyx":49
- *     A  = DS_MAT_A
- *     B  = DS_MAT_B
- *     C  = DS_MAT_C             # <<<<<<<<<<<<<<
- *     T  = DS_MAT_T
- *     D  = DS_MAT_D
+  /* "SLEPc/CAPI.pyx":111
+ * cdef api SlepcSVD PySlepcSVD_Get(object arg) except ? NULL:
+ *     cdef SlepcSVD retv = NULL
+ *     cdef SVD ob = <SVD?> arg             # <<<<<<<<<<<<<<
+ *     retv = ob.svd
+ *     return retv
  */
-  __pyx_t_5 = PyInt_FromLong(DS_MAT_C); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_C, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-
-  /* "SLEPc/DS.pyx":50
- *     B  = DS_MAT_B
- *     C  = DS_MAT_C
- *     T  = DS_MAT_T             # <<<<<<<<<<<<<<
- *     D  = DS_MAT_D
- *     Q  = DS_MAT_Q
- */
-  __pyx_t_5 = PyInt_FromLong(DS_MAT_T); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_T, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8slepc4py_5SLEPc_SVD)))) __PYX_ERR(18, 111, __pyx_L1_error)
+  __pyx_t_1 = __pyx_v_arg;
+  __Pyx_INCREF(__pyx_t_1);
+  __pyx_v_ob = ((struct PySlepcSVDObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/DS.pyx":51
- *     C  = DS_MAT_C
- *     T  = DS_MAT_T
- *     D  = DS_MAT_D             # <<<<<<<<<<<<<<
- *     Q  = DS_MAT_Q
- *     Z  = DS_MAT_Z
+  /* "SLEPc/CAPI.pyx":112
+ *     cdef SlepcSVD retv = NULL
+ *     cdef SVD ob = <SVD?> arg
+ *     retv = ob.svd             # <<<<<<<<<<<<<<
+ *     return retv
+ * 
  */
-  __pyx_t_5 = PyInt_FromLong(DS_MAT_D); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_D, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_2 = __pyx_v_ob->svd;
+  __pyx_v_retv = __pyx_t_2;
 
-  /* "SLEPc/DS.pyx":52
- *     T  = DS_MAT_T
- *     D  = DS_MAT_D
- *     Q  = DS_MAT_Q             # <<<<<<<<<<<<<<
- *     Z  = DS_MAT_Z
- *     X  = DS_MAT_X
+  /* "SLEPc/CAPI.pyx":113
+ *     cdef SVD ob = <SVD?> arg
+ *     retv = ob.svd
+ *     return retv             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
  */
-  __pyx_t_5 = PyInt_FromLong(DS_MAT_Q); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_Q, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_r = __pyx_v_retv;
+  goto __pyx_L0;
 
-  /* "SLEPc/DS.pyx":53
- *     D  = DS_MAT_D
- *     Q  = DS_MAT_Q
- *     Z  = DS_MAT_Z             # <<<<<<<<<<<<<<
- *     X  = DS_MAT_X
- *     Y  = DS_MAT_Y
+  /* "SLEPc/CAPI.pyx":109
+ *     return retv
+ * 
+ * cdef api SlepcSVD PySlepcSVD_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
+ *     cdef SlepcSVD retv = NULL
+ *     cdef SVD ob = <SVD?> arg
  */
-  __pyx_t_5 = PyInt_FromLong(DS_MAT_Z); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_Z, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/DS.pyx":54
- *     Q  = DS_MAT_Q
- *     Z  = DS_MAT_Z
- *     X  = DS_MAT_X             # <<<<<<<<<<<<<<
- *     Y  = DS_MAT_Y
- *     U  = DS_MAT_U
- */
-  __pyx_t_5 = PyInt_FromLong(DS_MAT_X); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_X, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcSVD_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_ob);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-  /* "SLEPc/DS.pyx":55
- *     Z  = DS_MAT_Z
- *     X  = DS_MAT_X
- *     Y  = DS_MAT_Y             # <<<<<<<<<<<<<<
- *     U  = DS_MAT_U
- *     VT = DS_MAT_VT
+/* "SLEPc/CAPI.pyx":119
+ * # -- PEP --
+ * 
+ * cdef api object PySlepcPEP_New(SlepcPEP arg):             # <<<<<<<<<<<<<<
+ *     cdef PEP retv = PEP()
+ *     setref(&retv.pep, arg)
  */
-  __pyx_t_5 = PyInt_FromLong(DS_MAT_Y); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_Y, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/DS.pyx":56
- *     X  = DS_MAT_X
- *     Y  = DS_MAT_Y
- *     U  = DS_MAT_U             # <<<<<<<<<<<<<<
- *     VT = DS_MAT_VT
- *     W  = DS_MAT_W
- */
-  __pyx_t_5 = PyInt_FromLong(DS_MAT_U); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_U, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyObject *__pyx_f_8slepc4py_5SLEPc_PySlepcPEP_New(PEP __pyx_v_arg) {
+  struct PySlepcPEPObject *__pyx_v_retv = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("PySlepcPEP_New", 0);
 
-  /* "SLEPc/DS.pyx":57
- *     Y  = DS_MAT_Y
- *     U  = DS_MAT_U
- *     VT = DS_MAT_VT             # <<<<<<<<<<<<<<
- *     W  = DS_MAT_W
+  /* "SLEPc/CAPI.pyx":120
  * 
+ * cdef api object PySlepcPEP_New(SlepcPEP arg):
+ *     cdef PEP retv = PEP()             # <<<<<<<<<<<<<<
+ *     setref(&retv.pep, arg)
+ *     return retv
  */
-  __pyx_t_5 = PyInt_FromLong(DS_MAT_VT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_VT, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_PEP), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 120, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_retv = ((struct PySlepcPEPObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/DS.pyx":58
- *     U  = DS_MAT_U
- *     VT = DS_MAT_VT
- *     W  = DS_MAT_W             # <<<<<<<<<<<<<<
+  /* "SLEPc/CAPI.pyx":121
+ * cdef api object PySlepcPEP_New(SlepcPEP arg):
+ *     cdef PEP retv = PEP()
+ *     setref(&retv.pep, arg)             # <<<<<<<<<<<<<<
+ *     return retv
  * 
- * # -----------------------------------------------------------------------------
  */
-  __pyx_t_5 = PyInt_FromLong(DS_MAT_W); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_W, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_setref((&__pyx_v_retv->pep), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(18, 121, __pyx_L1_error)
 
-  /* "SLEPc/DS.pyx":30
- *     TRUNCATED    = DS_STATE_TRUNCATED
+  /* "SLEPc/CAPI.pyx":122
+ *     cdef PEP retv = PEP()
+ *     setref(&retv.pep, arg)
+ *     return retv             # <<<<<<<<<<<<<<
  * 
- * class DSMatType(object):             # <<<<<<<<<<<<<<
- *     """
- *     To refer to one of the matrices stored internally in DS
+ * cdef api SlepcPEP PySlepcPEP_Get(object arg) except ? NULL:
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_DSMatType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DSMatType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_retv));
+  __pyx_r = ((PyObject *)__pyx_v_retv);
+  goto __pyx_L0;
 
-  /* "SLEPc/DS.pyx":68
- *     """
+  /* "SLEPc/CAPI.pyx":119
+ * # -- PEP --
  * 
- *     Type      = DSType             # <<<<<<<<<<<<<<
- *     StateType = DSStateType
- *     MatType   = DSMatType
+ * cdef api object PySlepcPEP_New(SlepcPEP arg):             # <<<<<<<<<<<<<<
+ *     cdef PEP retv = PEP()
+ *     setref(&retv.pep, arg)
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DSType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_DS->tp_dict, __pyx_n_s_Type, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_DS);
 
-  /* "SLEPc/DS.pyx":69
- * 
- *     Type      = DSType
- *     StateType = DSStateType             # <<<<<<<<<<<<<<
- *     MatType   = DSMatType
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcPEP_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_retv);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/CAPI.pyx":124
+ *     return retv
  * 
+ * cdef api SlepcPEP PySlepcPEP_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
+ *     cdef SlepcPEP retv = NULL
+ *     cdef PEP ob = <PEP?> arg
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DSStateType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_DS->tp_dict, __pyx_n_s_StateType, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_DS);
 
-  /* "SLEPc/DS.pyx":70
- *     Type      = DSType
- *     StateType = DSStateType
- *     MatType   = DSMatType             # <<<<<<<<<<<<<<
+static PEP __pyx_f_8slepc4py_5SLEPc_PySlepcPEP_Get(PyObject *__pyx_v_arg) {
+  PEP __pyx_v_retv;
+  struct PySlepcPEPObject *__pyx_v_ob = 0;
+  PEP __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PEP __pyx_t_2;
+  __Pyx_RefNannySetupContext("PySlepcPEP_Get", 0);
+
+  /* "SLEPc/CAPI.pyx":125
  * 
- *     def __cinit__(self):
+ * cdef api SlepcPEP PySlepcPEP_Get(object arg) except ? NULL:
+ *     cdef SlepcPEP retv = NULL             # <<<<<<<<<<<<<<
+ *     cdef PEP ob = <PEP?> arg
+ *     retv = ob.pep
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DSMatType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_DS->tp_dict, __pyx_n_s_MatType, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_DS);
+  __pyx_v_retv = NULL;
 
-  /* "SLEPc/DS.pyx":468
- * # -----------------------------------------------------------------------------
- * 
- * del DSType             # <<<<<<<<<<<<<<
- * del DSStateType
- * del DSMatType
+  /* "SLEPc/CAPI.pyx":126
+ * cdef api SlepcPEP PySlepcPEP_Get(object arg) except ? NULL:
+ *     cdef SlepcPEP retv = NULL
+ *     cdef PEP ob = <PEP?> arg             # <<<<<<<<<<<<<<
+ *     retv = ob.pep
+ *     return retv
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_DSType) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8slepc4py_5SLEPc_PEP)))) __PYX_ERR(18, 126, __pyx_L1_error)
+  __pyx_t_1 = __pyx_v_arg;
+  __Pyx_INCREF(__pyx_t_1);
+  __pyx_v_ob = ((struct PySlepcPEPObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/DS.pyx":469
- * 
- * del DSType
- * del DSStateType             # <<<<<<<<<<<<<<
- * del DSMatType
+  /* "SLEPc/CAPI.pyx":127
+ *     cdef SlepcPEP retv = NULL
+ *     cdef PEP ob = <PEP?> arg
+ *     retv = ob.pep             # <<<<<<<<<<<<<<
+ *     return retv
  * 
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_DSStateType) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_v_ob->pep;
+  __pyx_v_retv = __pyx_t_2;
 
-  /* "SLEPc/DS.pyx":470
- * del DSType
- * del DSStateType
- * del DSMatType             # <<<<<<<<<<<<<<
+  /* "SLEPc/CAPI.pyx":128
+ *     cdef PEP ob = <PEP?> arg
+ *     retv = ob.pep
+ *     return retv             # <<<<<<<<<<<<<<
  * 
  * # -----------------------------------------------------------------------------
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_DSMatType) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_v_retv;
+  goto __pyx_L0;
 
-  /* "SLEPc/FN.pyx":3
- * # -----------------------------------------------------------------------------
+  /* "SLEPc/CAPI.pyx":124
+ *     return retv
  * 
- * class FNType(object):             # <<<<<<<<<<<<<<
- *     """
- *     FN type
- */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_FNType, __pyx_n_s_FNType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_FN_type); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-
-  /* "SLEPc/FN.pyx":7
- *     FN type
- *     """
- *     COMBINE  = S_(FNCOMBINE)             # <<<<<<<<<<<<<<
- *     RATIONAL = S_(FNRATIONAL)
- *     EXP      = S_(FNEXP)
+ * cdef api SlepcPEP PySlepcPEP_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
+ *     cdef SlepcPEP retv = NULL
+ *     cdef PEP ob = <PEP?> arg
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(FNCOMBINE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_COMBINE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/FN.pyx":8
- *     """
- *     COMBINE  = S_(FNCOMBINE)
- *     RATIONAL = S_(FNRATIONAL)             # <<<<<<<<<<<<<<
- *     EXP      = S_(FNEXP)
- *     LOG      = S_(FNLOG)
- */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(FNRATIONAL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RATIONAL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcPEP_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_ob);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-  /* "SLEPc/FN.pyx":9
- *     COMBINE  = S_(FNCOMBINE)
- *     RATIONAL = S_(FNRATIONAL)
- *     EXP      = S_(FNEXP)             # <<<<<<<<<<<<<<
- *     LOG      = S_(FNLOG)
- *     PHI      = S_(FNPHI)
+/* "SLEPc/CAPI.pyx":134
+ * # -- NEP --
+ * 
+ * cdef api object PySlepcNEP_New(SlepcNEP arg):             # <<<<<<<<<<<<<<
+ *     cdef NEP retv = NEP()
+ *     setref(&retv.nep, arg)
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(FNEXP); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_EXP, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/FN.pyx":10
- *     RATIONAL = S_(FNRATIONAL)
- *     EXP      = S_(FNEXP)
- *     LOG      = S_(FNLOG)             # <<<<<<<<<<<<<<
- *     PHI      = S_(FNPHI)
- *     SQRT     = S_(FNSQRT)
- */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(FNLOG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LOG, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyObject *__pyx_f_8slepc4py_5SLEPc_PySlepcNEP_New(NEP __pyx_v_arg) {
+  struct PySlepcNEPObject *__pyx_v_retv = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("PySlepcNEP_New", 0);
 
-  /* "SLEPc/FN.pyx":11
- *     EXP      = S_(FNEXP)
- *     LOG      = S_(FNLOG)
- *     PHI      = S_(FNPHI)             # <<<<<<<<<<<<<<
- *     SQRT     = S_(FNSQRT)
+  /* "SLEPc/CAPI.pyx":135
  * 
+ * cdef api object PySlepcNEP_New(SlepcNEP arg):
+ *     cdef NEP retv = NEP()             # <<<<<<<<<<<<<<
+ *     setref(&retv.nep, arg)
+ *     return retv
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(FNPHI); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PHI, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_NEP), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 135, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_retv = ((struct PySlepcNEPObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/FN.pyx":12
- *     LOG      = S_(FNLOG)
- *     PHI      = S_(FNPHI)
- *     SQRT     = S_(FNSQRT)             # <<<<<<<<<<<<<<
+  /* "SLEPc/CAPI.pyx":136
+ * cdef api object PySlepcNEP_New(SlepcNEP arg):
+ *     cdef NEP retv = NEP()
+ *     setref(&retv.nep, arg)             # <<<<<<<<<<<<<<
+ *     return retv
  * 
- * class FNCombineType(object):
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(FNSQRT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SQRT, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_setref((&__pyx_v_retv->nep), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(18, 136, __pyx_L1_error)
 
-  /* "SLEPc/FN.pyx":3
- * # -----------------------------------------------------------------------------
+  /* "SLEPc/CAPI.pyx":137
+ *     cdef NEP retv = NEP()
+ *     setref(&retv.nep, arg)
+ *     return retv             # <<<<<<<<<<<<<<
  * 
- * class FNType(object):             # <<<<<<<<<<<<<<
- *     """
- *     FN type
+ * cdef api SlepcNEP PySlepcNEP_Get(object arg) except ? NULL:
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_FNType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_FNType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_retv));
+  __pyx_r = ((PyObject *)__pyx_v_retv);
+  goto __pyx_L0;
 
-  /* "SLEPc/FN.pyx":14
- *     SQRT     = S_(FNSQRT)
+  /* "SLEPc/CAPI.pyx":134
+ * # -- NEP --
  * 
- * class FNCombineType(object):             # <<<<<<<<<<<<<<
- *     """
- *     FN type of combination of child functions
- */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_FNCombineType, __pyx_n_s_FNCombineType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_FN_type_of_combination_of_child); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-
-  /* "SLEPc/FN.pyx":23
- *     - `COMPOSE`:   Composition      f(x) = f2(f1(x))
- *     """
- *     ADD      = FN_COMBINE_ADD             # <<<<<<<<<<<<<<
- *     MULTIPLY = FN_COMBINE_MULTIPLY
- *     DIVIDE   = FN_COMBINE_DIVIDE
+ * cdef api object PySlepcNEP_New(SlepcNEP arg):             # <<<<<<<<<<<<<<
+ *     cdef NEP retv = NEP()
+ *     setref(&retv.nep, arg)
  */
-  __pyx_t_5 = PyInt_FromLong(FN_COMBINE_ADD); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ADD, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/FN.pyx":24
- *     """
- *     ADD      = FN_COMBINE_ADD
- *     MULTIPLY = FN_COMBINE_MULTIPLY             # <<<<<<<<<<<<<<
- *     DIVIDE   = FN_COMBINE_DIVIDE
- *     COMPOSE  = FN_COMBINE_COMPOSE
- */
-  __pyx_t_5 = PyInt_FromLong(FN_COMBINE_MULTIPLY); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MULTIPLY, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcNEP_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_retv);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-  /* "SLEPc/FN.pyx":25
- *     ADD      = FN_COMBINE_ADD
- *     MULTIPLY = FN_COMBINE_MULTIPLY
- *     DIVIDE   = FN_COMBINE_DIVIDE             # <<<<<<<<<<<<<<
- *     COMPOSE  = FN_COMBINE_COMPOSE
+/* "SLEPc/CAPI.pyx":139
+ *     return retv
  * 
+ * cdef api SlepcNEP PySlepcNEP_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
+ *     cdef SlepcNEP retv = NULL
+ *     cdef NEP ob = <NEP?> arg
  */
-  __pyx_t_5 = PyInt_FromLong(FN_COMBINE_DIVIDE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVIDE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/FN.pyx":26
- *     MULTIPLY = FN_COMBINE_MULTIPLY
- *     DIVIDE   = FN_COMBINE_DIVIDE
- *     COMPOSE  = FN_COMBINE_COMPOSE             # <<<<<<<<<<<<<<
- * 
- * # -----------------------------------------------------------------------------
- */
-  __pyx_t_5 = PyInt_FromLong(FN_COMBINE_COMPOSE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_COMPOSE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static NEP __pyx_f_8slepc4py_5SLEPc_PySlepcNEP_Get(PyObject *__pyx_v_arg) {
+  NEP __pyx_v_retv;
+  struct PySlepcNEPObject *__pyx_v_ob = 0;
+  NEP __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  NEP __pyx_t_2;
+  __Pyx_RefNannySetupContext("PySlepcNEP_Get", 0);
 
-  /* "SLEPc/FN.pyx":14
- *     SQRT     = S_(FNSQRT)
+  /* "SLEPc/CAPI.pyx":140
  * 
- * class FNCombineType(object):             # <<<<<<<<<<<<<<
- *     """
- *     FN type of combination of child functions
+ * cdef api SlepcNEP PySlepcNEP_Get(object arg) except ? NULL:
+ *     cdef SlepcNEP retv = NULL             # <<<<<<<<<<<<<<
+ *     cdef NEP ob = <NEP?> arg
+ *     retv = ob.nep
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_FNCombineType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_FNCombineType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_v_retv = NULL;
 
-  /* "SLEPc/FN.pyx":36
- *     """
- * 
- *     Type = FNType             # <<<<<<<<<<<<<<
- * 
- *     def __cinit__(self):
+  /* "SLEPc/CAPI.pyx":141
+ * cdef api SlepcNEP PySlepcNEP_Get(object arg) except ? NULL:
+ *     cdef SlepcNEP retv = NULL
+ *     cdef NEP ob = <NEP?> arg             # <<<<<<<<<<<<<<
+ *     retv = ob.nep
+ *     return retv
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_FNType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_FN->tp_dict, __pyx_n_s_Type, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_FN);
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8slepc4py_5SLEPc_NEP)))) __PYX_ERR(18, 141, __pyx_L1_error)
+  __pyx_t_1 = __pyx_v_arg;
+  __Pyx_INCREF(__pyx_t_1);
+  __pyx_v_ob = ((struct PySlepcNEPObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/FN.pyx":254
- * # -----------------------------------------------------------------------------
- * 
- * del FNType             # <<<<<<<<<<<<<<
- * del FNCombineType
+  /* "SLEPc/CAPI.pyx":142
+ *     cdef SlepcNEP retv = NULL
+ *     cdef NEP ob = <NEP?> arg
+ *     retv = ob.nep             # <<<<<<<<<<<<<<
+ *     return retv
  * 
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_FNType) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_v_ob->nep;
+  __pyx_v_retv = __pyx_t_2;
 
-  /* "SLEPc/FN.pyx":255
- * 
- * del FNType
- * del FNCombineType             # <<<<<<<<<<<<<<
+  /* "SLEPc/CAPI.pyx":143
+ *     cdef NEP ob = <NEP?> arg
+ *     retv = ob.nep
+ *     return retv             # <<<<<<<<<<<<<<
  * 
  * # -----------------------------------------------------------------------------
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_FNCombineType) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_v_retv;
+  goto __pyx_L0;
 
-  /* "SLEPc/RG.pyx":3
- * # -----------------------------------------------------------------------------
+  /* "SLEPc/CAPI.pyx":139
+ *     return retv
  * 
- * class RGType(object):             # <<<<<<<<<<<<<<
- *     """
- *     RG type
+ * cdef api SlepcNEP PySlepcNEP_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
+ *     cdef SlepcNEP retv = NULL
+ *     cdef NEP ob = <NEP?> arg
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_RGType, __pyx_n_s_RGType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_RG_type); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-
-  /* "SLEPc/RG.pyx":7
- *     RG type
- *     """
- *     INTERVAL   = S_(RGINTERVAL)             # <<<<<<<<<<<<<<
- *     POLYGON    = S_(RGPOLYGON)
- *     ELLIPSE    = S_(RGELLIPSE)
- */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(RGINTERVAL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INTERVAL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/RG.pyx":8
- *     """
- *     INTERVAL   = S_(RGINTERVAL)
- *     POLYGON    = S_(RGPOLYGON)             # <<<<<<<<<<<<<<
- *     ELLIPSE    = S_(RGELLIPSE)
- *     RING       = S_(RGRING)
- */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(RGPOLYGON); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_POLYGON, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcNEP_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_ob);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-  /* "SLEPc/RG.pyx":9
- *     INTERVAL   = S_(RGINTERVAL)
- *     POLYGON    = S_(RGPOLYGON)
- *     ELLIPSE    = S_(RGELLIPSE)             # <<<<<<<<<<<<<<
- *     RING       = S_(RGRING)
+/* "SLEPc/CAPI.pyx":149
+ * # -- MFN --
  * 
+ * cdef api object PySlepcMFN_New(SlepcMFN arg):             # <<<<<<<<<<<<<<
+ *     cdef MFN retv = MFN()
+ *     setref(&retv.mfn, arg)
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(RGELLIPSE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ELLIPSE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/RG.pyx":10
- *     POLYGON    = S_(RGPOLYGON)
- *     ELLIPSE    = S_(RGELLIPSE)
- *     RING       = S_(RGRING)             # <<<<<<<<<<<<<<
- * 
- * # -----------------------------------------------------------------------------
- */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(RGRING); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RING, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyObject *__pyx_f_8slepc4py_5SLEPc_PySlepcMFN_New(MFN __pyx_v_arg) {
+  struct PySlepcMFNObject *__pyx_v_retv = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("PySlepcMFN_New", 0);
 
-  /* "SLEPc/RG.pyx":3
- * # -----------------------------------------------------------------------------
+  /* "SLEPc/CAPI.pyx":150
  * 
- * class RGType(object):             # <<<<<<<<<<<<<<
- *     """
- *     RG type
+ * cdef api object PySlepcMFN_New(SlepcMFN arg):
+ *     cdef MFN retv = MFN()             # <<<<<<<<<<<<<<
+ *     setref(&retv.mfn, arg)
+ *     return retv
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_RGType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_RGType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_MFN), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 150, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_retv = ((struct PySlepcMFNObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/RG.pyx":20
- *     """
- * 
- *     Type             = RGType             # <<<<<<<<<<<<<<
+  /* "SLEPc/CAPI.pyx":151
+ * cdef api object PySlepcMFN_New(SlepcMFN arg):
+ *     cdef MFN retv = MFN()
+ *     setref(&retv.mfn, arg)             # <<<<<<<<<<<<<<
+ *     return retv
  * 
- *     def __cinit__(self):
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_RGType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_RG->tp_dict, __pyx_n_s_Type, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_RG);
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_setref((&__pyx_v_retv->mfn), __pyx_v_arg); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(18, 151, __pyx_L1_error)
 
-  /* "SLEPc/RG.pyx":263
- * # -----------------------------------------------------------------------------
- * 
- * del RGType             # <<<<<<<<<<<<<<
+  /* "SLEPc/CAPI.pyx":152
+ *     cdef MFN retv = MFN()
+ *     setref(&retv.mfn, arg)
+ *     return retv             # <<<<<<<<<<<<<<
  * 
- * # -----------------------------------------------------------------------------
+ * cdef api SlepcMFN PySlepcMFN_Get(object arg) except ? NULL:
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_RGType) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_retv));
+  __pyx_r = ((PyObject *)__pyx_v_retv);
+  goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":3
- * # -----------------------------------------------------------------------------
+  /* "SLEPc/CAPI.pyx":149
+ * # -- MFN --
  * 
- * class EPSType(object):             # <<<<<<<<<<<<<<
- *     """
- *     EPS type
+ * cdef api object PySlepcMFN_New(SlepcMFN arg):             # <<<<<<<<<<<<<<
+ *     cdef MFN retv = MFN()
+ *     setref(&retv.mfn, arg)
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_EPSType, __pyx_n_s_EPSType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_EPS_type_Native_sparse_eigensol); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "SLEPc/EPS.pyx":32
- *     """
- *     # provided implementations
- *     POWER        = S_(EPSPOWER)             # <<<<<<<<<<<<<<
- *     SUBSPACE     = S_(EPSSUBSPACE)
- *     ARNOLDI      = S_(EPSARNOLDI)
- */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSPOWER); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_POWER, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcMFN_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_retv);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-  /* "SLEPc/EPS.pyx":33
- *     # provided implementations
- *     POWER        = S_(EPSPOWER)
- *     SUBSPACE     = S_(EPSSUBSPACE)             # <<<<<<<<<<<<<<
- *     ARNOLDI      = S_(EPSARNOLDI)
- *     LANCZOS      = S_(EPSLANCZOS)
+/* "SLEPc/CAPI.pyx":154
+ *     return retv
+ * 
+ * cdef api SlepcMFN PySlepcMFN_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
+ *     cdef SlepcMFN retv = NULL
+ *     cdef MFN ob = <MFN?> arg
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSSUBSPACE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SUBSPACE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/EPS.pyx":34
- *     POWER        = S_(EPSPOWER)
- *     SUBSPACE     = S_(EPSSUBSPACE)
- *     ARNOLDI      = S_(EPSARNOLDI)             # <<<<<<<<<<<<<<
- *     LANCZOS      = S_(EPSLANCZOS)
- *     KRYLOVSCHUR  = S_(EPSKRYLOVSCHUR)
- */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSARNOLDI); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ARNOLDI, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static MFN __pyx_f_8slepc4py_5SLEPc_PySlepcMFN_Get(PyObject *__pyx_v_arg) {
+  MFN __pyx_v_retv;
+  struct PySlepcMFNObject *__pyx_v_ob = 0;
+  MFN __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  MFN __pyx_t_2;
+  __Pyx_RefNannySetupContext("PySlepcMFN_Get", 0);
 
-  /* "SLEPc/EPS.pyx":35
- *     SUBSPACE     = S_(EPSSUBSPACE)
- *     ARNOLDI      = S_(EPSARNOLDI)
- *     LANCZOS      = S_(EPSLANCZOS)             # <<<<<<<<<<<<<<
- *     KRYLOVSCHUR  = S_(EPSKRYLOVSCHUR)
- *     GD           = S_(EPSGD)
+  /* "SLEPc/CAPI.pyx":155
+ * 
+ * cdef api SlepcMFN PySlepcMFN_Get(object arg) except ? NULL:
+ *     cdef SlepcMFN retv = NULL             # <<<<<<<<<<<<<<
+ *     cdef MFN ob = <MFN?> arg
+ *     retv = ob.mfn
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSLANCZOS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LANCZOS, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_v_retv = NULL;
 
-  /* "SLEPc/EPS.pyx":36
- *     ARNOLDI      = S_(EPSARNOLDI)
- *     LANCZOS      = S_(EPSLANCZOS)
- *     KRYLOVSCHUR  = S_(EPSKRYLOVSCHUR)             # <<<<<<<<<<<<<<
- *     GD           = S_(EPSGD)
- *     JD           = S_(EPSJD)
+  /* "SLEPc/CAPI.pyx":156
+ * cdef api SlepcMFN PySlepcMFN_Get(object arg) except ? NULL:
+ *     cdef SlepcMFN retv = NULL
+ *     cdef MFN ob = <MFN?> arg             # <<<<<<<<<<<<<<
+ *     retv = ob.mfn
+ *     return retv
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSKRYLOVSCHUR); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_KRYLOVSCHUR, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_8slepc4py_5SLEPc_MFN)))) __PYX_ERR(18, 156, __pyx_L1_error)
+  __pyx_t_1 = __pyx_v_arg;
+  __Pyx_INCREF(__pyx_t_1);
+  __pyx_v_ob = ((struct PySlepcMFNObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "SLEPc/EPS.pyx":37
- *     LANCZOS      = S_(EPSLANCZOS)
- *     KRYLOVSCHUR  = S_(EPSKRYLOVSCHUR)
- *     GD           = S_(EPSGD)             # <<<<<<<<<<<<<<
- *     JD           = S_(EPSJD)
- *     RQCG         = S_(EPSRQCG)
+  /* "SLEPc/CAPI.pyx":157
+ *     cdef SlepcMFN retv = NULL
+ *     cdef MFN ob = <MFN?> arg
+ *     retv = ob.mfn             # <<<<<<<<<<<<<<
+ *     return retv
+ * 
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSGD); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GD, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_2 = __pyx_v_ob->mfn;
+  __pyx_v_retv = __pyx_t_2;
 
-  /* "SLEPc/EPS.pyx":38
- *     KRYLOVSCHUR  = S_(EPSKRYLOVSCHUR)
- *     GD           = S_(EPSGD)
- *     JD           = S_(EPSJD)             # <<<<<<<<<<<<<<
- *     RQCG         = S_(EPSRQCG)
- *     LOBPCG       = S_(EPSLOBPCG)
+  /* "SLEPc/CAPI.pyx":158
+ *     cdef MFN ob = <MFN?> arg
+ *     retv = ob.mfn
+ *     return retv             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSJD); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_JD, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_r = __pyx_v_retv;
+  goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":39
- *     GD           = S_(EPSGD)
- *     JD           = S_(EPSJD)
- *     RQCG         = S_(EPSRQCG)             # <<<<<<<<<<<<<<
- *     LOBPCG       = S_(EPSLOBPCG)
- *     CISS         = S_(EPSCISS)
+  /* "SLEPc/CAPI.pyx":154
+ *     return retv
+ * 
+ * cdef api SlepcMFN PySlepcMFN_Get(object arg) except ? NULL:             # <<<<<<<<<<<<<<
+ *     cdef SlepcMFN retv = NULL
+ *     cdef MFN ob = <MFN?> arg
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSRQCG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RQCG, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/EPS.pyx":40
- *     JD           = S_(EPSJD)
- *     RQCG         = S_(EPSRQCG)
- *     LOBPCG       = S_(EPSLOBPCG)             # <<<<<<<<<<<<<<
- *     CISS         = S_(EPSCISS)
- *     LAPACK       = S_(EPSLAPACK)
- */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSLOBPCG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LOBPCG, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("slepc4py.SLEPc.PySlepcMFN_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_ob);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-  /* "SLEPc/EPS.pyx":41
- *     RQCG         = S_(EPSRQCG)
- *     LOBPCG       = S_(EPSLOBPCG)
- *     CISS         = S_(EPSCISS)             # <<<<<<<<<<<<<<
- *     LAPACK       = S_(EPSLAPACK)
- *     # with external libraries
+/* "SLEPc/SLEPc.pyx":171
+ *     int fprintf(FILE *, char *, ...)
+ * 
+ * cdef int initialize(object args) except -1:             # <<<<<<<<<<<<<<
+ *     if (<int>SlepcInitializeCalled): return 1
+ *     # initialize SLEPC
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSCISS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CISS, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/EPS.pyx":42
- *     LOBPCG       = S_(EPSLOBPCG)
- *     CISS         = S_(EPSCISS)
- *     LAPACK       = S_(EPSLAPACK)             # <<<<<<<<<<<<<<
- *     # with external libraries
- *     ARPACK       = S_(EPSARPACK)
- */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSLAPACK); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LAPACK, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static int __pyx_f_8slepc4py_5SLEPc_initialize(CYTHON_UNUSED PyObject *__pyx_v_args) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("initialize", 0);
 
-  /* "SLEPc/EPS.pyx":44
- *     LAPACK       = S_(EPSLAPACK)
- *     # with external libraries
- *     ARPACK       = S_(EPSARPACK)             # <<<<<<<<<<<<<<
- *     BLZPACK      = S_(EPSBLZPACK)
- *     TRLAN        = S_(EPSTRLAN)
+  /* "SLEPc/SLEPc.pyx":172
+ * 
+ * cdef int initialize(object args) except -1:
+ *     if (<int>SlepcInitializeCalled): return 1             # <<<<<<<<<<<<<<
+ *     # initialize SLEPC
+ *     CHKERR( SlepcInitialize(NULL, NULL, NULL, NULL) )
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSARPACK); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ARPACK, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_1 = (((int)SlepcInitializeCalled) != 0);
+  if (__pyx_t_1) {
+    __pyx_r = 1;
+    goto __pyx_L0;
+  }
 
-  /* "SLEPc/EPS.pyx":45
- *     # with external libraries
- *     ARPACK       = S_(EPSARPACK)
- *     BLZPACK      = S_(EPSBLZPACK)             # <<<<<<<<<<<<<<
- *     TRLAN        = S_(EPSTRLAN)
- *     BLOPEX       = S_(EPSBLOPEX)
+  /* "SLEPc/SLEPc.pyx":174
+ *     if (<int>SlepcInitializeCalled): return 1
+ *     # initialize SLEPC
+ *     CHKERR( SlepcInitialize(NULL, NULL, NULL, NULL) )             # <<<<<<<<<<<<<<
+ *     # register finalization function
+ *     if Py_AtExit(finalize) < 0:
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSBLZPACK); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BLZPACK, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_2 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SlepcInitialize(NULL, NULL, NULL, NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(4, 174, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":46
- *     ARPACK       = S_(EPSARPACK)
- *     BLZPACK      = S_(EPSBLZPACK)
- *     TRLAN        = S_(EPSTRLAN)             # <<<<<<<<<<<<<<
- *     BLOPEX       = S_(EPSBLOPEX)
- *     PRIMME       = S_(EPSPRIMME)
+  /* "SLEPc/SLEPc.pyx":176
+ *     CHKERR( SlepcInitialize(NULL, NULL, NULL, NULL) )
+ *     # register finalization function
+ *     if Py_AtExit(finalize) < 0:             # <<<<<<<<<<<<<<
+ *         PySys_WriteStderr(b"warning: could not register %s with Py_AtExit()",
+ *                           b"SlepcFinalize()")
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSTRLAN); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TRLAN, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_1 = ((Py_AtExit(__pyx_f_8slepc4py_5SLEPc_finalize) < 0) != 0);
+  if (__pyx_t_1) {
 
-  /* "SLEPc/EPS.pyx":47
- *     BLZPACK      = S_(EPSBLZPACK)
- *     TRLAN        = S_(EPSTRLAN)
- *     BLOPEX       = S_(EPSBLOPEX)             # <<<<<<<<<<<<<<
- *     PRIMME       = S_(EPSPRIMME)
- *     FEAST        = S_(EPSFEAST)
+    /* "SLEPc/SLEPc.pyx":177
+ *     # register finalization function
+ *     if Py_AtExit(finalize) < 0:
+ *         PySys_WriteStderr(b"warning: could not register %s with Py_AtExit()",             # <<<<<<<<<<<<<<
+ *                           b"SlepcFinalize()")
+ *     return 1 # and we are done, enjoy !!
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSBLOPEX); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BLOPEX, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    PySys_WriteStderr(((char *)"warning: could not register %s with Py_AtExit()"), ((char *)"SlepcFinalize()"));
 
-  /* "SLEPc/EPS.pyx":48
- *     TRLAN        = S_(EPSTRLAN)
- *     BLOPEX       = S_(EPSBLOPEX)
- *     PRIMME       = S_(EPSPRIMME)             # <<<<<<<<<<<<<<
- *     FEAST        = S_(EPSFEAST)
- * 
+    /* "SLEPc/SLEPc.pyx":176
+ *     CHKERR( SlepcInitialize(NULL, NULL, NULL, NULL) )
+ *     # register finalization function
+ *     if Py_AtExit(finalize) < 0:             # <<<<<<<<<<<<<<
+ *         PySys_WriteStderr(b"warning: could not register %s with Py_AtExit()",
+ *                           b"SlepcFinalize()")
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSPRIMME); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PRIMME, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  }
 
-  /* "SLEPc/EPS.pyx":49
- *     BLOPEX       = S_(EPSBLOPEX)
- *     PRIMME       = S_(EPSPRIMME)
- *     FEAST        = S_(EPSFEAST)             # <<<<<<<<<<<<<<
+  /* "SLEPc/SLEPc.pyx":179
+ *         PySys_WriteStderr(b"warning: could not register %s with Py_AtExit()",
+ *                           b"SlepcFinalize()")
+ *     return 1 # and we are done, enjoy !!             # <<<<<<<<<<<<<<
  * 
- * class EPSProblemType(object):
+ * from petsc4py.PETSc cimport PyPetscType_Register
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSFEAST); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FEAST, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_r = 1;
+  goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":3
- * # -----------------------------------------------------------------------------
+  /* "SLEPc/SLEPc.pyx":171
+ *     int fprintf(FILE *, char *, ...)
  * 
- * class EPSType(object):             # <<<<<<<<<<<<<<
- *     """
- *     EPS type
+ * cdef int initialize(object args) except -1:             # <<<<<<<<<<<<<<
+ *     if (<int>SlepcInitializeCalled): return 1
+ *     # initialize SLEPC
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_EPSType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_EPSType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "SLEPc/EPS.pyx":51
- *     FEAST        = S_(EPSFEAST)
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.initialize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/SLEPc.pyx":197
+ *     PetscClassId SLEPC_MFN_CLASSID "MFN_CLASSID"
  * 
- * class EPSProblemType(object):             # <<<<<<<<<<<<<<
- *     """
- *     EPS problem type
+ * cdef int register(char path[]) except -1:             # <<<<<<<<<<<<<<
+ *     # make sure all SLEPc packages are initialized
+ *     CHKERR( SlepcInitializePackageAll() )
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_EPSProblemType, __pyx_n_s_EPSProblemType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_EPS_problem_type_HEP_Hermitian); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "SLEPc/EPS.pyx":63
- *     - `GHIEP`:  Generalized Hermitian-indefinite eigenproblem.
- *     """
- *     HEP    = EPS_HEP             # <<<<<<<<<<<<<<
- *     NHEP   = EPS_NHEP
- *     GHEP   = EPS_GHEP
+static int __pyx_f_8slepc4py_5SLEPc_register(CYTHON_UNUSED char *__pyx_v_path) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("register", 0);
+
+  /* "SLEPc/SLEPc.pyx":199
+ * cdef int register(char path[]) except -1:
+ *     # make sure all SLEPc packages are initialized
+ *     CHKERR( SlepcInitializePackageAll() )             # <<<<<<<<<<<<<<
+ *     # register Python types
+ *     PyPetscType_Register(SLEPC_ST_CLASSID,  ST)
  */
-  __pyx_t_5 = PyInt_FromLong(EPS_HEP); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HEP, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_CHKERR(SlepcInitializePackageAll()); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(4, 199, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":64
- *     """
- *     HEP    = EPS_HEP
- *     NHEP   = EPS_NHEP             # <<<<<<<<<<<<<<
- *     GHEP   = EPS_GHEP
- *     GNHEP  = EPS_GNHEP
+  /* "SLEPc/SLEPc.pyx":201
+ *     CHKERR( SlepcInitializePackageAll() )
+ *     # register Python types
+ *     PyPetscType_Register(SLEPC_ST_CLASSID,  ST)             # <<<<<<<<<<<<<<
+ *     PyPetscType_Register(SLEPC_BV_CLASSID,  BV)
+ *     PyPetscType_Register(SLEPC_DS_CLASSID,  DS)
  */
-  __pyx_t_5 = PyInt_FromLong(EPS_NHEP); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NHEP, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(ST_CLASSID, __pyx_ptype_8slepc4py_5SLEPc_ST); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(4, 201, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":65
- *     HEP    = EPS_HEP
- *     NHEP   = EPS_NHEP
- *     GHEP   = EPS_GHEP             # <<<<<<<<<<<<<<
- *     GNHEP  = EPS_GNHEP
- *     PGNHEP = EPS_PGNHEP
+  /* "SLEPc/SLEPc.pyx":202
+ *     # register Python types
+ *     PyPetscType_Register(SLEPC_ST_CLASSID,  ST)
+ *     PyPetscType_Register(SLEPC_BV_CLASSID,  BV)             # <<<<<<<<<<<<<<
+ *     PyPetscType_Register(SLEPC_DS_CLASSID,  DS)
+ *     PyPetscType_Register(SLEPC_FN_CLASSID,  FN)
  */
-  __pyx_t_5 = PyInt_FromLong(EPS_GHEP); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GHEP, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(BV_CLASSID, __pyx_ptype_8slepc4py_5SLEPc_BV); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(4, 202, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":66
- *     NHEP   = EPS_NHEP
- *     GHEP   = EPS_GHEP
- *     GNHEP  = EPS_GNHEP             # <<<<<<<<<<<<<<
- *     PGNHEP = EPS_PGNHEP
- *     GHIEP  = EPS_GHIEP
+  /* "SLEPc/SLEPc.pyx":203
+ *     PyPetscType_Register(SLEPC_ST_CLASSID,  ST)
+ *     PyPetscType_Register(SLEPC_BV_CLASSID,  BV)
+ *     PyPetscType_Register(SLEPC_DS_CLASSID,  DS)             # <<<<<<<<<<<<<<
+ *     PyPetscType_Register(SLEPC_FN_CLASSID,  FN)
+ *     PyPetscType_Register(SLEPC_RG_CLASSID,  RG)
  */
-  __pyx_t_5 = PyInt_FromLong(EPS_GNHEP); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GNHEP, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(DS_CLASSID, __pyx_ptype_8slepc4py_5SLEPc_DS); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(4, 203, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":67
- *     GHEP   = EPS_GHEP
- *     GNHEP  = EPS_GNHEP
- *     PGNHEP = EPS_PGNHEP             # <<<<<<<<<<<<<<
- *     GHIEP  = EPS_GHIEP
- * 
+  /* "SLEPc/SLEPc.pyx":204
+ *     PyPetscType_Register(SLEPC_BV_CLASSID,  BV)
+ *     PyPetscType_Register(SLEPC_DS_CLASSID,  DS)
+ *     PyPetscType_Register(SLEPC_FN_CLASSID,  FN)             # <<<<<<<<<<<<<<
+ *     PyPetscType_Register(SLEPC_RG_CLASSID,  RG)
+ *     PyPetscType_Register(SLEPC_EPS_CLASSID, EPS)
  */
-  __pyx_t_5 = PyInt_FromLong(EPS_PGNHEP); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PGNHEP, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(FN_CLASSID, __pyx_ptype_8slepc4py_5SLEPc_FN); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(4, 204, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":68
- *     GNHEP  = EPS_GNHEP
- *     PGNHEP = EPS_PGNHEP
- *     GHIEP  = EPS_GHIEP             # <<<<<<<<<<<<<<
- * 
- * class EPSExtraction(object):
+  /* "SLEPc/SLEPc.pyx":205
+ *     PyPetscType_Register(SLEPC_DS_CLASSID,  DS)
+ *     PyPetscType_Register(SLEPC_FN_CLASSID,  FN)
+ *     PyPetscType_Register(SLEPC_RG_CLASSID,  RG)             # <<<<<<<<<<<<<<
+ *     PyPetscType_Register(SLEPC_EPS_CLASSID, EPS)
+ *     PyPetscType_Register(SLEPC_SVD_CLASSID, SVD)
  */
-  __pyx_t_5 = PyInt_FromLong(EPS_GHIEP); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GHIEP, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(RG_CLASSID, __pyx_ptype_8slepc4py_5SLEPc_RG); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(4, 205, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":51
- *     FEAST        = S_(EPSFEAST)
- * 
- * class EPSProblemType(object):             # <<<<<<<<<<<<<<
- *     """
- *     EPS problem type
- */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_EPSProblemType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_EPSProblemType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-
-  /* "SLEPc/EPS.pyx":70
- *     GHIEP  = EPS_GHIEP
- * 
- * class EPSExtraction(object):             # <<<<<<<<<<<<<<
- *     """
- *     EPS extraction technique
- */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_EPSExtraction, __pyx_n_s_EPSExtraction, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_EPS_extraction_technique_RITZ_S); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-
-  /* "SLEPc/EPS.pyx":82
- *     - `REFINED_HARMONIC`:  Refined harmonic extraction.
- *     """
- *     RITZ              = EPS_RITZ             # <<<<<<<<<<<<<<
- *     HARMONIC          = EPS_HARMONIC
- *     HARMONIC_RELATIVE = EPS_HARMONIC_RELATIVE
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_RITZ); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RITZ, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-
-  /* "SLEPc/EPS.pyx":83
- *     """
- *     RITZ              = EPS_RITZ
- *     HARMONIC          = EPS_HARMONIC             # <<<<<<<<<<<<<<
- *     HARMONIC_RELATIVE = EPS_HARMONIC_RELATIVE
- *     HARMONIC_RIGHT    = EPS_HARMONIC_RIGHT
+  /* "SLEPc/SLEPc.pyx":206
+ *     PyPetscType_Register(SLEPC_FN_CLASSID,  FN)
+ *     PyPetscType_Register(SLEPC_RG_CLASSID,  RG)
+ *     PyPetscType_Register(SLEPC_EPS_CLASSID, EPS)             # <<<<<<<<<<<<<<
+ *     PyPetscType_Register(SLEPC_SVD_CLASSID, SVD)
+ *     PyPetscType_Register(SLEPC_PEP_CLASSID, PEP)
  */
-  __pyx_t_5 = PyInt_FromLong(EPS_HARMONIC); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HARMONIC, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(EPS_CLASSID, __pyx_ptype_8slepc4py_5SLEPc_EPS); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(4, 206, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":84
- *     RITZ              = EPS_RITZ
- *     HARMONIC          = EPS_HARMONIC
- *     HARMONIC_RELATIVE = EPS_HARMONIC_RELATIVE             # <<<<<<<<<<<<<<
- *     HARMONIC_RIGHT    = EPS_HARMONIC_RIGHT
- *     HARMONIC_LARGEST  = EPS_HARMONIC_LARGEST
+  /* "SLEPc/SLEPc.pyx":207
+ *     PyPetscType_Register(SLEPC_RG_CLASSID,  RG)
+ *     PyPetscType_Register(SLEPC_EPS_CLASSID, EPS)
+ *     PyPetscType_Register(SLEPC_SVD_CLASSID, SVD)             # <<<<<<<<<<<<<<
+ *     PyPetscType_Register(SLEPC_PEP_CLASSID, PEP)
+ *     PyPetscType_Register(SLEPC_NEP_CLASSID, NEP)
  */
-  __pyx_t_5 = PyInt_FromLong(EPS_HARMONIC_RELATIVE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HARMONIC_RELATIVE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(SVD_CLASSID, __pyx_ptype_8slepc4py_5SLEPc_SVD); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(4, 207, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":85
- *     HARMONIC          = EPS_HARMONIC
- *     HARMONIC_RELATIVE = EPS_HARMONIC_RELATIVE
- *     HARMONIC_RIGHT    = EPS_HARMONIC_RIGHT             # <<<<<<<<<<<<<<
- *     HARMONIC_LARGEST  = EPS_HARMONIC_LARGEST
- *     REFINED           = EPS_REFINED
+  /* "SLEPc/SLEPc.pyx":208
+ *     PyPetscType_Register(SLEPC_EPS_CLASSID, EPS)
+ *     PyPetscType_Register(SLEPC_SVD_CLASSID, SVD)
+ *     PyPetscType_Register(SLEPC_PEP_CLASSID, PEP)             # <<<<<<<<<<<<<<
+ *     PyPetscType_Register(SLEPC_NEP_CLASSID, NEP)
+ *     PyPetscType_Register(SLEPC_MFN_CLASSID, MFN)
  */
-  __pyx_t_5 = PyInt_FromLong(EPS_HARMONIC_RIGHT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HARMONIC_RIGHT, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(PEP_CLASSID, __pyx_ptype_8slepc4py_5SLEPc_PEP); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(4, 208, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":86
- *     HARMONIC_RELATIVE = EPS_HARMONIC_RELATIVE
- *     HARMONIC_RIGHT    = EPS_HARMONIC_RIGHT
- *     HARMONIC_LARGEST  = EPS_HARMONIC_LARGEST             # <<<<<<<<<<<<<<
- *     REFINED           = EPS_REFINED
- *     REFINED_HARMONIC  = EPS_REFINED_HARMONIC
+  /* "SLEPc/SLEPc.pyx":209
+ *     PyPetscType_Register(SLEPC_SVD_CLASSID, SVD)
+ *     PyPetscType_Register(SLEPC_PEP_CLASSID, PEP)
+ *     PyPetscType_Register(SLEPC_NEP_CLASSID, NEP)             # <<<<<<<<<<<<<<
+ *     PyPetscType_Register(SLEPC_MFN_CLASSID, MFN)
+ *     return 0
  */
-  __pyx_t_5 = PyInt_FromLong(EPS_HARMONIC_LARGEST); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HARMONIC_LARGEST, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(NEP_CLASSID, __pyx_ptype_8slepc4py_5SLEPc_NEP); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(4, 209, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":87
- *     HARMONIC_RIGHT    = EPS_HARMONIC_RIGHT
- *     HARMONIC_LARGEST  = EPS_HARMONIC_LARGEST
- *     REFINED           = EPS_REFINED             # <<<<<<<<<<<<<<
- *     REFINED_HARMONIC  = EPS_REFINED_HARMONIC
+  /* "SLEPc/SLEPc.pyx":210
+ *     PyPetscType_Register(SLEPC_PEP_CLASSID, PEP)
+ *     PyPetscType_Register(SLEPC_NEP_CLASSID, NEP)
+ *     PyPetscType_Register(SLEPC_MFN_CLASSID, MFN)             # <<<<<<<<<<<<<<
+ *     return 0
  * 
  */
-  __pyx_t_5 = PyInt_FromLong(EPS_REFINED); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_REFINED, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(MFN_CLASSID, __pyx_ptype_8slepc4py_5SLEPc_MFN); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(4, 210, __pyx_L1_error)
 
-  /* "SLEPc/EPS.pyx":88
- *     HARMONIC_LARGEST  = EPS_HARMONIC_LARGEST
- *     REFINED           = EPS_REFINED
- *     REFINED_HARMONIC  = EPS_REFINED_HARMONIC             # <<<<<<<<<<<<<<
+  /* "SLEPc/SLEPc.pyx":211
+ *     PyPetscType_Register(SLEPC_NEP_CLASSID, NEP)
+ *     PyPetscType_Register(SLEPC_MFN_CLASSID, MFN)
+ *     return 0             # <<<<<<<<<<<<<<
  * 
- * class EPSBalance(object):
+ * cdef void finalize() nogil:
  */
-  __pyx_t_5 = PyInt_FromLong(EPS_REFINED_HARMONIC); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_REFINED_HARMONIC, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_r = 0;
+  goto __pyx_L0;
 
-  /* "SLEPc/EPS.pyx":70
- *     GHIEP  = EPS_GHIEP
+  /* "SLEPc/SLEPc.pyx":197
+ *     PetscClassId SLEPC_MFN_CLASSID "MFN_CLASSID"
  * 
- * class EPSExtraction(object):             # <<<<<<<<<<<<<<
- *     """
- *     EPS extraction technique
+ * cdef int register(char path[]) except -1:             # <<<<<<<<<<<<<<
+ *     # make sure all SLEPc packages are initialized
+ *     CHKERR( SlepcInitializePackageAll() )
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_EPSExtraction, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_EPSExtraction, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "SLEPc/EPS.pyx":90
- *     REFINED_HARMONIC  = EPS_REFINED_HARMONIC
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc.register", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "SLEPc/SLEPc.pyx":213
+ *     return 0
  * 
- * class EPSBalance(object):             # <<<<<<<<<<<<<<
- *     """
- *     EPS type of balancing used for non-Hermitian problems
+ * cdef void finalize() nogil:             # <<<<<<<<<<<<<<
+ *     # finalize SLEPc
+ *     cdef int ierr = 0
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_EPSBalance, __pyx_n_s_EPSBalance, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_EPS_type_of_balancing_used_for); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "SLEPc/EPS.pyx":99
- *     - `USER`:     User-defined.
- *     """
- *     NONE    = EPS_BALANCE_NONE             # <<<<<<<<<<<<<<
- *     ONESIDE = EPS_BALANCE_ONESIDE
- *     TWOSIDE = EPS_BALANCE_TWOSIDE
+static void __pyx_f_8slepc4py_5SLEPc_finalize(void) {
+  int __pyx_v_ierr;
+  int __pyx_t_1;
+
+  /* "SLEPc/SLEPc.pyx":215
+ * cdef void finalize() nogil:
+ *     # finalize SLEPc
+ *     cdef int ierr = 0             # <<<<<<<<<<<<<<
+ *     ierr = SlepcFinalize()
+ *     if ierr != 0:
  */
-  __pyx_t_5 = PyInt_FromLong(EPS_BALANCE_NONE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_v_ierr = 0;
 
-  /* "SLEPc/EPS.pyx":100
- *     """
- *     NONE    = EPS_BALANCE_NONE
- *     ONESIDE = EPS_BALANCE_ONESIDE             # <<<<<<<<<<<<<<
- *     TWOSIDE = EPS_BALANCE_TWOSIDE
- *     USER    = EPS_BALANCE_USER
+  /* "SLEPc/SLEPc.pyx":216
+ *     # finalize SLEPc
+ *     cdef int ierr = 0
+ *     ierr = SlepcFinalize()             # <<<<<<<<<<<<<<
+ *     if ierr != 0:
+ *         fprintf(stderr, "SlepcFinalize() failed "
  */
-  __pyx_t_5 = PyInt_FromLong(EPS_BALANCE_ONESIDE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ONESIDE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_v_ierr = SlepcFinalize();
 
-  /* "SLEPc/EPS.pyx":101
- *     NONE    = EPS_BALANCE_NONE
- *     ONESIDE = EPS_BALANCE_ONESIDE
- *     TWOSIDE = EPS_BALANCE_TWOSIDE             # <<<<<<<<<<<<<<
- *     USER    = EPS_BALANCE_USER
- * 
+  /* "SLEPc/SLEPc.pyx":217
+ *     cdef int ierr = 0
+ *     ierr = SlepcFinalize()
+ *     if ierr != 0:             # <<<<<<<<<<<<<<
+ *         fprintf(stderr, "SlepcFinalize() failed "
+ *                 "[error code: %d]\n", ierr)
  */
-  __pyx_t_5 = PyInt_FromLong(EPS_BALANCE_TWOSIDE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TWOSIDE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_1 = ((__pyx_v_ierr != 0) != 0);
+  if (__pyx_t_1) {
 
-  /* "SLEPc/EPS.pyx":102
- *     ONESIDE = EPS_BALANCE_ONESIDE
- *     TWOSIDE = EPS_BALANCE_TWOSIDE
- *     USER    = EPS_BALANCE_USER             # <<<<<<<<<<<<<<
- * 
- * class EPSErrorType(object):
+    /* "SLEPc/SLEPc.pyx":218
+ *     ierr = SlepcFinalize()
+ *     if ierr != 0:
+ *         fprintf(stderr, "SlepcFinalize() failed "             # <<<<<<<<<<<<<<
+ *                 "[error code: %d]\n", ierr)
+ *     # and we are done, see you later !!
  */
-  __pyx_t_5 = PyInt_FromLong(EPS_BALANCE_USER); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_USER, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    fprintf(stderr, ((char *)"SlepcFinalize() failed [error code: %d]\n"), __pyx_v_ierr);
 
-  /* "SLEPc/EPS.pyx":90
- *     REFINED_HARMONIC  = EPS_REFINED_HARMONIC
- * 
- * class EPSBalance(object):             # <<<<<<<<<<<<<<
- *     """
- *     EPS type of balancing used for non-Hermitian problems
+    /* "SLEPc/SLEPc.pyx":217
+ *     cdef int ierr = 0
+ *     ierr = SlepcFinalize()
+ *     if ierr != 0:             # <<<<<<<<<<<<<<
+ *         fprintf(stderr, "SlepcFinalize() failed "
+ *                 "[error code: %d]\n", ierr)
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_EPSBalance, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_EPSBalance, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  }
 
-  /* "SLEPc/EPS.pyx":104
- *     USER    = EPS_BALANCE_USER
+  /* "SLEPc/SLEPc.pyx":213
+ *     return 0
  * 
- * class EPSErrorType(object):             # <<<<<<<<<<<<<<
- *     """
- *     EPS error type to assess accuracy of computed solutions
+ * cdef void finalize() nogil:             # <<<<<<<<<<<<<<
+ *     # finalize SLEPc
+ *     cdef int ierr = 0
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_EPSErrorType, __pyx_n_s_EPSErrorType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_EPS_error_type_to_assess_accura); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "SLEPc/EPS.pyx":112
- *     - `BACKWARD`:  Backward error.
- *     """
- *     ABSOLUTE = EPS_ERROR_ABSOLUTE             # <<<<<<<<<<<<<<
- *     RELATIVE = EPS_ERROR_RELATIVE
- *     BACKWARD = EPS_ERROR_BACKWARD
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_ERROR_ABSOLUTE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ABSOLUTE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  /* function exit code */
+}
 
-  /* "SLEPc/EPS.pyx":113
- *     """
- *     ABSOLUTE = EPS_ERROR_ABSOLUTE
- *     RELATIVE = EPS_ERROR_RELATIVE             # <<<<<<<<<<<<<<
- *     BACKWARD = EPS_ERROR_BACKWARD
+/* "SLEPc/SLEPc.pyx":224
+ * # -----------------------------------------------------------------------------
  * 
+ * def _initialize(args=None):             # <<<<<<<<<<<<<<
+ *     cdef int ready = initialize(args)
+ *     if ready: register(NULL)
  */
-  __pyx_t_5 = PyInt_FromLong(EPS_ERROR_RELATIVE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RELATIVE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/EPS.pyx":114
- *     ABSOLUTE = EPS_ERROR_ABSOLUTE
- *     RELATIVE = EPS_ERROR_RELATIVE
- *     BACKWARD = EPS_ERROR_BACKWARD             # <<<<<<<<<<<<<<
- * 
- * class EPSWhich(object):
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_ERROR_BACKWARD); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BACKWARD, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_1_initialize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc__initialize[] = "_initialize(args=None)";
+static PyMethodDef __pyx_mdef_8slepc4py_5SLEPc_1_initialize = {"_initialize", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_1_initialize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc__initialize};
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_1_initialize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_args = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("_initialize (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_args,0};
+    PyObject* values[1] = {0};
+    values[0] = ((PyObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
+          if (value) { values[0] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_initialize") < 0)) __PYX_ERR(4, 224, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_args = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("_initialize", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(4, 224, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc._initialize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc__initialize(__pyx_self, __pyx_v_args);
 
-  /* "SLEPc/EPS.pyx":104
- *     USER    = EPS_BALANCE_USER
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8slepc4py_5SLEPc__initialize(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_args) {
+  int __pyx_v_ready;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("_initialize", 0);
+
+  /* "SLEPc/SLEPc.pyx":225
+ * 
+ * def _initialize(args=None):
+ *     cdef int ready = initialize(args)             # <<<<<<<<<<<<<<
+ *     if ready: register(NULL)
  * 
- * class EPSErrorType(object):             # <<<<<<<<<<<<<<
- *     """
- *     EPS error type to assess accuracy of computed solutions
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_EPSErrorType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_EPSErrorType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_initialize(__pyx_v_args); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(4, 225, __pyx_L1_error)
+  __pyx_v_ready = __pyx_t_1;
 
-  /* "SLEPc/EPS.pyx":116
- *     BACKWARD = EPS_ERROR_BACKWARD
+  /* "SLEPc/SLEPc.pyx":226
+ * def _initialize(args=None):
+ *     cdef int ready = initialize(args)
+ *     if ready: register(NULL)             # <<<<<<<<<<<<<<
  * 
- * class EPSWhich(object):             # <<<<<<<<<<<<<<
- *     """
- *     EPS desired piece of spectrum
+ * def _finalize():
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_EPSWhich, __pyx_n_s_EPSWhich, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_EPS_desired_piece_of_spectrum_L); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_2 = (__pyx_v_ready != 0);
+  if (__pyx_t_2) {
+    __pyx_t_1 = __pyx_f_8slepc4py_5SLEPc_register(NULL); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(4, 226, __pyx_L1_error)
+  }
 
-  /* "SLEPc/EPS.pyx":132
- *     - `USER`:               User defined ordering.
- *     """
- *     LARGEST_MAGNITUDE  = EPS_LARGEST_MAGNITUDE             # <<<<<<<<<<<<<<
- *     LARGEST_REAL       = EPS_LARGEST_REAL
- *     LARGEST_IMAGINARY  = EPS_LARGEST_IMAGINARY
+  /* "SLEPc/SLEPc.pyx":224
+ * # -----------------------------------------------------------------------------
+ * 
+ * def _initialize(args=None):             # <<<<<<<<<<<<<<
+ *     cdef int ready = initialize(args)
+ *     if ready: register(NULL)
  */
-  __pyx_t_5 = PyInt_FromLong(EPS_LARGEST_MAGNITUDE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LARGEST_MAGNITUDE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/EPS.pyx":133
- *     """
- *     LARGEST_MAGNITUDE  = EPS_LARGEST_MAGNITUDE
- *     LARGEST_REAL       = EPS_LARGEST_REAL             # <<<<<<<<<<<<<<
- *     LARGEST_IMAGINARY  = EPS_LARGEST_IMAGINARY
- *     SMALLEST_MAGNITUDE = EPS_SMALLEST_MAGNITUDE
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_LARGEST_REAL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LARGEST_REAL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("slepc4py.SLEPc._initialize", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-  /* "SLEPc/EPS.pyx":134
- *     LARGEST_MAGNITUDE  = EPS_LARGEST_MAGNITUDE
- *     LARGEST_REAL       = EPS_LARGEST_REAL
- *     LARGEST_IMAGINARY  = EPS_LARGEST_IMAGINARY             # <<<<<<<<<<<<<<
- *     SMALLEST_MAGNITUDE = EPS_SMALLEST_MAGNITUDE
- *     SMALLEST_REAL      = EPS_SMALLEST_REAL
+/* "SLEPc/SLEPc.pyx":228
+ *     if ready: register(NULL)
+ * 
+ * def _finalize():             # <<<<<<<<<<<<<<
+ *     finalize()
+ * 
  */
-  __pyx_t_5 = PyInt_FromLong(EPS_LARGEST_IMAGINARY); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LARGEST_IMAGINARY, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/EPS.pyx":135
- *     LARGEST_REAL       = EPS_LARGEST_REAL
- *     LARGEST_IMAGINARY  = EPS_LARGEST_IMAGINARY
- *     SMALLEST_MAGNITUDE = EPS_SMALLEST_MAGNITUDE             # <<<<<<<<<<<<<<
- *     SMALLEST_REAL      = EPS_SMALLEST_REAL
- *     SMALLEST_IMAGINARY = EPS_SMALLEST_IMAGINARY
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_SMALLEST_MAGNITUDE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SMALLEST_MAGNITUDE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+/* Python wrapper */
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3_finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8slepc4py_5SLEPc_2_finalize[] = "_finalize()";
+static PyMethodDef __pyx_mdef_8slepc4py_5SLEPc_3_finalize = {"_finalize", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3_finalize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2_finalize};
+static PyObject *__pyx_pw_8slepc4py_5SLEPc_3_finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("_finalize (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("_finalize", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "_finalize", 0))) return NULL;
+  __pyx_r = __pyx_pf_8slepc4py_5SLEPc_2_finalize(__pyx_self);
 
-  /* "SLEPc/EPS.pyx":136
- *     LARGEST_IMAGINARY  = EPS_LARGEST_IMAGINARY
- *     SMALLEST_MAGNITUDE = EPS_SMALLEST_MAGNITUDE
- *     SMALLEST_REAL      = EPS_SMALLEST_REAL             # <<<<<<<<<<<<<<
- *     SMALLEST_IMAGINARY = EPS_SMALLEST_IMAGINARY
- *     TARGET_MAGNITUDE   = EPS_TARGET_MAGNITUDE
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_SMALLEST_REAL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SMALLEST_REAL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-  /* "SLEPc/EPS.pyx":137
- *     SMALLEST_MAGNITUDE = EPS_SMALLEST_MAGNITUDE
- *     SMALLEST_REAL      = EPS_SMALLEST_REAL
- *     SMALLEST_IMAGINARY = EPS_SMALLEST_IMAGINARY             # <<<<<<<<<<<<<<
- *     TARGET_MAGNITUDE   = EPS_TARGET_MAGNITUDE
- *     TARGET_REAL        = EPS_TARGET_REAL
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_SMALLEST_IMAGINARY); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SMALLEST_IMAGINARY, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyObject *__pyx_pf_8slepc4py_5SLEPc_2_finalize(CYTHON_UNUSED PyObject *__pyx_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("_finalize", 0);
 
-  /* "SLEPc/EPS.pyx":138
- *     SMALLEST_REAL      = EPS_SMALLEST_REAL
- *     SMALLEST_IMAGINARY = EPS_SMALLEST_IMAGINARY
- *     TARGET_MAGNITUDE   = EPS_TARGET_MAGNITUDE             # <<<<<<<<<<<<<<
- *     TARGET_REAL        = EPS_TARGET_REAL
- *     TARGET_IMAGINARY   = EPS_TARGET_IMAGINARY
+  /* "SLEPc/SLEPc.pyx":229
+ * 
+ * def _finalize():
+ *     finalize()             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
  */
-  __pyx_t_5 = PyInt_FromLong(EPS_TARGET_MAGNITUDE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TARGET_MAGNITUDE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_f_8slepc4py_5SLEPc_finalize();
 
-  /* "SLEPc/EPS.pyx":139
- *     SMALLEST_IMAGINARY = EPS_SMALLEST_IMAGINARY
- *     TARGET_MAGNITUDE   = EPS_TARGET_MAGNITUDE
- *     TARGET_REAL        = EPS_TARGET_REAL             # <<<<<<<<<<<<<<
- *     TARGET_IMAGINARY   = EPS_TARGET_IMAGINARY
- *     ALL                = EPS_ALL
+  /* "SLEPc/SLEPc.pyx":228
+ *     if ready: register(NULL)
+ * 
+ * def _finalize():             # <<<<<<<<<<<<<<
+ *     finalize()
+ * 
  */
-  __pyx_t_5 = PyInt_FromLong(EPS_TARGET_REAL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TARGET_REAL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/EPS.pyx":140
- *     TARGET_MAGNITUDE   = EPS_TARGET_MAGNITUDE
- *     TARGET_REAL        = EPS_TARGET_REAL
- *     TARGET_IMAGINARY   = EPS_TARGET_IMAGINARY             # <<<<<<<<<<<<<<
- *     ALL                = EPS_ALL
- *     USER               = EPS_WHICH_USER
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_TARGET_IMAGINARY); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TARGET_IMAGINARY, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+static struct __pyx_vtabstruct_8slepc4py_5SLEPc_ST __pyx_vtable_8slepc4py_5SLEPc_ST;
 
-  /* "SLEPc/EPS.pyx":141
- *     TARGET_REAL        = EPS_TARGET_REAL
- *     TARGET_IMAGINARY   = EPS_TARGET_IMAGINARY
- *     ALL                = EPS_ALL             # <<<<<<<<<<<<<<
- *     USER               = EPS_WHICH_USER
- * 
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_ALL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ALL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-
-  /* "SLEPc/EPS.pyx":142
- *     TARGET_IMAGINARY   = EPS_TARGET_IMAGINARY
- *     ALL                = EPS_ALL
- *     USER               = EPS_WHICH_USER             # <<<<<<<<<<<<<<
- * 
- * class EPSConv(object):
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_WHICH_USER); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_USER, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-
-  /* "SLEPc/EPS.pyx":116
- *     BACKWARD = EPS_ERROR_BACKWARD
- * 
- * class EPSWhich(object):             # <<<<<<<<<<<<<<
- *     """
- *     EPS desired piece of spectrum
- */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_EPSWhich, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_EPSWhich, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-
-  /* "SLEPc/EPS.pyx":144
- *     USER               = EPS_WHICH_USER
- * 
- * class EPSConv(object):             # <<<<<<<<<<<<<<
- *     """
- *     EPS convergence test
- */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_EPSConv, __pyx_n_s_EPSConv, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_EPS_convergence_test_ABS_EIG_NO); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_ST(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct PySlepcSTObject *p;
+  PyObject *o = __pyx_ptype_8petsc4py_5PETSc_Object->tp_new(t, a, k);
+  if (unlikely(!o)) return 0;
+  p = ((struct PySlepcSTObject *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8slepc4py_5SLEPc_ST;
+  if (unlikely(__pyx_pw_8slepc4py_5SLEPc_2ST_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
+  return o;
+}
 
-  /* "SLEPc/EPS.pyx":153
- *     - `USER`:
- *     """
- *     ABS  = EPS_CONV_ABS             # <<<<<<<<<<<<<<
- *     EIG  = EPS_CONV_EIG
- *     NORM = EPS_CONV_NORM
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_CONV_ABS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ABS, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static void __pyx_tp_dealloc_8slepc4py_5SLEPc_ST(PyObject *o) {
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  PyObject_GC_Track(o);
+  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) __pyx_ptype_8petsc4py_5PETSc_Object->tp_dealloc(o); else __Pyx_call_next_tp_dealloc(o, __pyx_tp_dealloc_8slepc4py_5SLEPc_ST);
+}
 
-  /* "SLEPc/EPS.pyx":154
- *     """
- *     ABS  = EPS_CONV_ABS
- *     EIG  = EPS_CONV_EIG             # <<<<<<<<<<<<<<
- *     NORM = EPS_CONV_NORM
- *     USER = EPS_CONV_USER
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_CONV_EIG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_EIG, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static int __pyx_tp_traverse_8slepc4py_5SLEPc_ST(PyObject *o, visitproc v, void *a) {
+  int e;
+  e = ((likely(__pyx_ptype_8petsc4py_5PETSc_Object)) ? ((__pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse) ? __pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_8slepc4py_5SLEPc_ST)); if (e) return e;
+  return 0;
+}
 
-  /* "SLEPc/EPS.pyx":155
- *     ABS  = EPS_CONV_ABS
- *     EIG  = EPS_CONV_EIG
- *     NORM = EPS_CONV_NORM             # <<<<<<<<<<<<<<
- *     USER = EPS_CONV_USER
- * 
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_CONV_NORM); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static int __pyx_tp_clear_8slepc4py_5SLEPc_ST(PyObject *o) {
+  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) { if (__pyx_ptype_8petsc4py_5PETSc_Object->tp_clear) __pyx_ptype_8petsc4py_5PETSc_Object->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_8slepc4py_5SLEPc_ST);
+  return 0;
+}
 
-  /* "SLEPc/EPS.pyx":156
- *     EIG  = EPS_CONV_EIG
- *     NORM = EPS_CONV_NORM
- *     USER = EPS_CONV_USER             # <<<<<<<<<<<<<<
- * 
- * class EPSConvergedReason(object):
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_CONV_USER); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_USER, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyObject *__pyx_getprop_8slepc4py_5SLEPc_2ST_shift(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_8slepc4py_5SLEPc_2ST_5shift_1__get__(o);
+}
 
-  /* "SLEPc/EPS.pyx":144
- *     USER               = EPS_WHICH_USER
- * 
- * class EPSConv(object):             # <<<<<<<<<<<<<<
- *     """
- *     EPS convergence test
- */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_EPSConv, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_EPSConv, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+static int __pyx_setprop_8slepc4py_5SLEPc_2ST_shift(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_8slepc4py_5SLEPc_2ST_5shift_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-  /* "SLEPc/EPS.pyx":158
- *     USER = EPS_CONV_USER
- * 
- * class EPSConvergedReason(object):             # <<<<<<<<<<<<<<
- *     """
- *     EPS convergence reasons
- */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_EPSConvergedReason, __pyx_n_s_EPSConvergedReason, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_EPS_convergence_reasons_CONVERG); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+static PyObject *__pyx_getprop_8slepc4py_5SLEPc_2ST_mat_mode(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_8slepc4py_5SLEPc_2ST_8mat_mode_1__get__(o);
+}
 
-  /* "SLEPc/EPS.pyx":167
- *     - `CONVERGED_ITERATING`:
- *     """
- *     CONVERGED_TOL         = EPS_CONVERGED_TOL             # <<<<<<<<<<<<<<
- *     DIVERGED_ITS          = EPS_DIVERGED_ITS
- *     DIVERGED_BREAKDOWN    = EPS_DIVERGED_BREAKDOWN
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_CONVERGED_TOL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_TOL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static int __pyx_setprop_8slepc4py_5SLEPc_2ST_mat_mode(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_8slepc4py_5SLEPc_2ST_8mat_mode_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-  /* "SLEPc/EPS.pyx":168
- *     """
- *     CONVERGED_TOL         = EPS_CONVERGED_TOL
- *     DIVERGED_ITS          = EPS_DIVERGED_ITS             # <<<<<<<<<<<<<<
- *     DIVERGED_BREAKDOWN    = EPS_DIVERGED_BREAKDOWN
- *     CONVERGED_ITERATING   = EPS_CONVERGED_ITERATING
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_DIVERGED_ITS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_ITS, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyObject *__pyx_getprop_8slepc4py_5SLEPc_2ST_ksp(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_8slepc4py_5SLEPc_2ST_3ksp_1__get__(o);
+}
 
-  /* "SLEPc/EPS.pyx":169
- *     CONVERGED_TOL         = EPS_CONVERGED_TOL
- *     DIVERGED_ITS          = EPS_DIVERGED_ITS
- *     DIVERGED_BREAKDOWN    = EPS_DIVERGED_BREAKDOWN             # <<<<<<<<<<<<<<
- *     CONVERGED_ITERATING   = EPS_CONVERGED_ITERATING
- *     ITERATING             = EPS_CONVERGED_ITERATING
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_DIVERGED_BREAKDOWN); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_BREAKDOWN, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static int __pyx_setprop_8slepc4py_5SLEPc_2ST_ksp(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_8slepc4py_5SLEPc_2ST_3ksp_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-  /* "SLEPc/EPS.pyx":170
- *     DIVERGED_ITS          = EPS_DIVERGED_ITS
- *     DIVERGED_BREAKDOWN    = EPS_DIVERGED_BREAKDOWN
- *     CONVERGED_ITERATING   = EPS_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
- *     ITERATING             = EPS_CONVERGED_ITERATING
- * 
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_CONVERGED_ITERATING); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ITERATING, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyMethodDef __pyx_methods_8slepc4py_5SLEPc_ST[] = {
+  {"view", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_3view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_2view},
+  {"destroy", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_5destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_4destroy},
+  {"reset", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_7reset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_6reset},
+  {"create", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_9create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_8create},
+  {"setType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_11setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_10setType},
+  {"getType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_13getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_12getType},
+  {"setOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_15setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_14setOptionsPrefix},
+  {"getOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_17getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_16getOptionsPrefix},
+  {"setFromOptions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_19setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_18setFromOptions},
+  {"setShift", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_21setShift, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_20setShift},
+  {"getShift", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_23getShift, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_22getShift},
+  {"setTransform", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_25setTransform, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_24setTransform},
+  {"getTransform", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_27getTransform, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_26getTransform},
+  {"setMatMode", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_29setMatMode, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_28setMatMode},
+  {"getMatMode", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_31getMatMode, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_30getMatMode},
+  {"setOperators", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_33setOperators, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_32setOperators},
+  {"getOperators", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_35getOperators, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_34getOperators},
+  {"setMatStructure", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_37setMatStructure, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_36setMatStructure},
+  {"setKSP", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_39setKSP, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_38setKSP},
+  {"getKSP", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_41getKSP, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_40getKSP},
+  {"setUp", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_43setUp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_42setUp},
+  {"apply", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_45apply, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_44apply},
+  {"applyTranspose", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_47applyTranspose, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_46applyTranspose},
+  {"setCayleyAntishift", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2ST_49setCayleyAntishift, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2ST_48setCayleyAntishift},
+  {0, 0, 0, 0}
+};
 
-  /* "SLEPc/EPS.pyx":171
- *     DIVERGED_BREAKDOWN    = EPS_DIVERGED_BREAKDOWN
- *     CONVERGED_ITERATING   = EPS_CONVERGED_ITERATING
- *     ITERATING             = EPS_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
- * 
- * class EPSPowerShiftType(object):
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_CONVERGED_ITERATING); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ITERATING, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static struct PyGetSetDef __pyx_getsets_8slepc4py_5SLEPc_ST[] = {
+  {(char *)"shift", __pyx_getprop_8slepc4py_5SLEPc_2ST_shift, __pyx_setprop_8slepc4py_5SLEPc_2ST_shift, (char *)0, 0},
+  {(char *)"mat_mode", __pyx_getprop_8slepc4py_5SLEPc_2ST_mat_mode, __pyx_setprop_8slepc4py_5SLEPc_2ST_mat_mode, (char *)0, 0},
+  {(char *)"ksp", __pyx_getprop_8slepc4py_5SLEPc_2ST_ksp, __pyx_setprop_8slepc4py_5SLEPc_2ST_ksp, (char *)0, 0},
+  {0, 0, 0, 0, 0}
+};
 
-  /* "SLEPc/EPS.pyx":158
- *     USER = EPS_CONV_USER
- * 
- * class EPSConvergedReason(object):             # <<<<<<<<<<<<<<
- *     """
- *     EPS convergence reasons
- */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_EPSConvergedReason, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_EPSConvergedReason, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+DL_EXPORT(PyTypeObject) PySlepcST_Type = {
+  PyVarObject_HEAD_INIT(0, 0)
+  "slepc4py.SLEPc.ST", /*tp_name*/
+  sizeof(struct PySlepcSTObject), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_8slepc4py_5SLEPc_ST, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
+  #endif
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  "\n    ST\n    ", /*tp_doc*/
+  __pyx_tp_traverse_8slepc4py_5SLEPc_ST, /*tp_traverse*/
+  __pyx_tp_clear_8slepc4py_5SLEPc_ST, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_8slepc4py_5SLEPc_ST, /*tp_methods*/
+  0, /*tp_members*/
+  __pyx_getsets_8slepc4py_5SLEPc_ST, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  0, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_8slepc4py_5SLEPc_ST, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  0, /*tp_version_tag*/
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
+static struct __pyx_vtabstruct_8slepc4py_5SLEPc_BV __pyx_vtable_8slepc4py_5SLEPc_BV;
 
-  /* "SLEPc/EPS.pyx":173
- *     ITERATING             = EPS_CONVERGED_ITERATING
- * 
- * class EPSPowerShiftType(object):             # <<<<<<<<<<<<<<
- *     """
- *     EPS Power shift type.
- */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_EPSPowerShiftType, __pyx_n_s_EPSPowerShiftType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_EPS_Power_shift_type_CONSTANT_R); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_BV(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct PySlepcBVObject *p;
+  PyObject *o = __pyx_ptype_8petsc4py_5PETSc_Object->tp_new(t, a, k);
+  if (unlikely(!o)) return 0;
+  p = ((struct PySlepcBVObject *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8slepc4py_5SLEPc_BV;
+  if (unlikely(__pyx_pw_8slepc4py_5SLEPc_2BV_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
+  return o;
+}
 
-  /* "SLEPc/EPS.pyx":181
- *     - `WILKINSON`:
- *     """
- *     CONSTANT  = EPS_POWER_SHIFT_CONSTANT             # <<<<<<<<<<<<<<
- *     RAYLEIGH  = EPS_POWER_SHIFT_RAYLEIGH
- *     WILKINSON = EPS_POWER_SHIFT_WILKINSON
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_POWER_SHIFT_CONSTANT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONSTANT, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static void __pyx_tp_dealloc_8slepc4py_5SLEPc_BV(PyObject *o) {
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  PyObject_GC_Track(o);
+  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) __pyx_ptype_8petsc4py_5PETSc_Object->tp_dealloc(o); else __Pyx_call_next_tp_dealloc(o, __pyx_tp_dealloc_8slepc4py_5SLEPc_BV);
+}
 
-  /* "SLEPc/EPS.pyx":182
- *     """
- *     CONSTANT  = EPS_POWER_SHIFT_CONSTANT
- *     RAYLEIGH  = EPS_POWER_SHIFT_RAYLEIGH             # <<<<<<<<<<<<<<
- *     WILKINSON = EPS_POWER_SHIFT_WILKINSON
- * 
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_POWER_SHIFT_RAYLEIGH); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RAYLEIGH, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static int __pyx_tp_traverse_8slepc4py_5SLEPc_BV(PyObject *o, visitproc v, void *a) {
+  int e;
+  e = ((likely(__pyx_ptype_8petsc4py_5PETSc_Object)) ? ((__pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse) ? __pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_8slepc4py_5SLEPc_BV)); if (e) return e;
+  return 0;
+}
 
-  /* "SLEPc/EPS.pyx":183
- *     CONSTANT  = EPS_POWER_SHIFT_CONSTANT
- *     RAYLEIGH  = EPS_POWER_SHIFT_RAYLEIGH
- *     WILKINSON = EPS_POWER_SHIFT_WILKINSON             # <<<<<<<<<<<<<<
- * 
- * class EPSLanczosReorthogType(object):
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_POWER_SHIFT_WILKINSON); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_WILKINSON, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static int __pyx_tp_clear_8slepc4py_5SLEPc_BV(PyObject *o) {
+  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) { if (__pyx_ptype_8petsc4py_5PETSc_Object->tp_clear) __pyx_ptype_8petsc4py_5PETSc_Object->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_8slepc4py_5SLEPc_BV);
+  return 0;
+}
 
-  /* "SLEPc/EPS.pyx":173
- *     ITERATING             = EPS_CONVERGED_ITERATING
- * 
- * class EPSPowerShiftType(object):             # <<<<<<<<<<<<<<
- *     """
- *     EPS Power shift type.
- */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_EPSPowerShiftType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_EPSPowerShiftType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+static PyMethodDef __pyx_methods_8slepc4py_5SLEPc_BV[] = {
+  {"view", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_3view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_2view},
+  {"destroy", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_5destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_4destroy},
+  {"create", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_7create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_6create},
+  {"duplicate", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_9duplicate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_8duplicate},
+  {"copy", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_11copy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_10copy},
+  {"setType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_13setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_12setType},
+  {"getType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_15getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_14getType},
+  {"setSizes", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_17setSizes, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_16setSizes},
+  {"setSizesFromVec", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_19setSizesFromVec, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_18setSizesFromVec},
+  {"getSizes", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_21getSizes, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_20getSizes},
+  {"setOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_23setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_22setOptionsPrefix},
+  {"getOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_25getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_24getOptionsPrefix},
+  {"setFromOptions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_27setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_26setFromOptions},
+  {"getOrthogonalization", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_29getOrthogonalization, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_28getOrthogonalization},
+  {"setOrthogonalization", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_31setOrthogonalization, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_30setOrthogonalization},
+  {"getMatrix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_33getMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_32getMatrix},
+  {"setMatrix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_35setMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_34setMatrix},
+  {"applyMatrix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_37applyMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_36applyMatrix},
+  {"setActiveColumns", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_39setActiveColumns, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_38setActiveColumns},
+  {"getActiveColumns", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_41getActiveColumns, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_40getActiveColumns},
+  {"scaleColumn", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_43scaleColumn, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_42scaleColumn},
+  {"scale", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_45scale, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_44scale},
+  {"insertVec", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_47insertVec, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_46insertVec},
+  {"insertVecs", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_49insertVecs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_48insertVecs},
+  {"dotVec", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_51dotVec, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_50dotVec},
+  {"getColumn", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_53getColumn, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_52getColumn},
+  {"restoreColumn", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_55restoreColumn, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_54restoreColumn},
+  {"dot", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_57dot, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_56dot},
+  {"matProject", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_59matProject, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_58matProject},
+  {"matMult", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_61matMult, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_60matMult},
+  {"matMultHermitianTranspose", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_63matMultHermitianTranspose, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_62matMultHermitianTranspose},
+  {"multVec", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_65multVec, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_64multVec},
+  {"normColumn", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_67normColumn, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_66normColumn},
+  {"norm", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_69norm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_68norm},
+  {"setRandom", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_71setRandom, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_70setRandom},
+  {"orthogonalizeVec", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_73orthogonalizeVec, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_72orthogonalizeVec},
+  {"orthogonalize", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2BV_75orthogonalize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2BV_74orthogonalize},
+  {0, 0, 0, 0}
+};
 
-  /* "SLEPc/EPS.pyx":185
- *     WILKINSON = EPS_POWER_SHIFT_WILKINSON
- * 
- * class EPSLanczosReorthogType(object):             # <<<<<<<<<<<<<<
- *     """
- *     EPS Lanczos reorthogonalization type
- */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_EPSLanczosReorthogType, __pyx_n_s_EPSLanczosReorthogType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_EPS_Lanczos_reorthogonalization); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+DL_EXPORT(PyTypeObject) PySlepcBV_Type = {
+  PyVarObject_HEAD_INIT(0, 0)
+  "slepc4py.SLEPc.BV", /*tp_name*/
+  sizeof(struct PySlepcBVObject), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_8slepc4py_5SLEPc_BV, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
+  #endif
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  "\n    BV\n    ", /*tp_doc*/
+  __pyx_tp_traverse_8slepc4py_5SLEPc_BV, /*tp_traverse*/
+  __pyx_tp_clear_8slepc4py_5SLEPc_BV, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_8slepc4py_5SLEPc_BV, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  0, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_8slepc4py_5SLEPc_BV, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  0, /*tp_version_tag*/
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
+static struct __pyx_vtabstruct_8slepc4py_5SLEPc_DS __pyx_vtable_8slepc4py_5SLEPc_DS;
 
-  /* "SLEPc/EPS.pyx":196
- *     - `DELAYED`:
- *     """
- *     LOCAL     =  EPS_LANCZOS_REORTHOG_LOCAL             # <<<<<<<<<<<<<<
- *     FULL      =  EPS_LANCZOS_REORTHOG_FULL
- *     SELECTIVE =  EPS_LANCZOS_REORTHOG_SELECTIVE
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_LANCZOS_REORTHOG_LOCAL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LOCAL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_DS(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct PySlepcDSObject *p;
+  PyObject *o = __pyx_ptype_8petsc4py_5PETSc_Object->tp_new(t, a, k);
+  if (unlikely(!o)) return 0;
+  p = ((struct PySlepcDSObject *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8slepc4py_5SLEPc_DS;
+  if (unlikely(__pyx_pw_8slepc4py_5SLEPc_2DS_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
+  return o;
+}
 
-  /* "SLEPc/EPS.pyx":197
- *     """
- *     LOCAL     =  EPS_LANCZOS_REORTHOG_LOCAL
- *     FULL      =  EPS_LANCZOS_REORTHOG_FULL             # <<<<<<<<<<<<<<
- *     SELECTIVE =  EPS_LANCZOS_REORTHOG_SELECTIVE
- *     PERIODIC  =  EPS_LANCZOS_REORTHOG_PERIODIC
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_LANCZOS_REORTHOG_FULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FULL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static void __pyx_tp_dealloc_8slepc4py_5SLEPc_DS(PyObject *o) {
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  PyObject_GC_Track(o);
+  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) __pyx_ptype_8petsc4py_5PETSc_Object->tp_dealloc(o); else __Pyx_call_next_tp_dealloc(o, __pyx_tp_dealloc_8slepc4py_5SLEPc_DS);
+}
 
-  /* "SLEPc/EPS.pyx":198
- *     LOCAL     =  EPS_LANCZOS_REORTHOG_LOCAL
- *     FULL      =  EPS_LANCZOS_REORTHOG_FULL
- *     SELECTIVE =  EPS_LANCZOS_REORTHOG_SELECTIVE             # <<<<<<<<<<<<<<
- *     PERIODIC  =  EPS_LANCZOS_REORTHOG_PERIODIC
- *     PARTIAL   =  EPS_LANCZOS_REORTHOG_PARTIAL
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_LANCZOS_REORTHOG_SELECTIVE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SELECTIVE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static int __pyx_tp_traverse_8slepc4py_5SLEPc_DS(PyObject *o, visitproc v, void *a) {
+  int e;
+  e = ((likely(__pyx_ptype_8petsc4py_5PETSc_Object)) ? ((__pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse) ? __pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_8slepc4py_5SLEPc_DS)); if (e) return e;
+  return 0;
+}
 
-  /* "SLEPc/EPS.pyx":199
- *     FULL      =  EPS_LANCZOS_REORTHOG_FULL
- *     SELECTIVE =  EPS_LANCZOS_REORTHOG_SELECTIVE
- *     PERIODIC  =  EPS_LANCZOS_REORTHOG_PERIODIC             # <<<<<<<<<<<<<<
- *     PARTIAL   =  EPS_LANCZOS_REORTHOG_PARTIAL
- *     DELAYED   =  EPS_LANCZOS_REORTHOG_DELAYED
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_LANCZOS_REORTHOG_PERIODIC); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PERIODIC, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static int __pyx_tp_clear_8slepc4py_5SLEPc_DS(PyObject *o) {
+  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) { if (__pyx_ptype_8petsc4py_5PETSc_Object->tp_clear) __pyx_ptype_8petsc4py_5PETSc_Object->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_8slepc4py_5SLEPc_DS);
+  return 0;
+}
 
-  /* "SLEPc/EPS.pyx":200
- *     SELECTIVE =  EPS_LANCZOS_REORTHOG_SELECTIVE
- *     PERIODIC  =  EPS_LANCZOS_REORTHOG_PERIODIC
- *     PARTIAL   =  EPS_LANCZOS_REORTHOG_PARTIAL             # <<<<<<<<<<<<<<
- *     DELAYED   =  EPS_LANCZOS_REORTHOG_DELAYED
- * 
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_LANCZOS_REORTHOG_PARTIAL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PARTIAL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyMethodDef __pyx_methods_8slepc4py_5SLEPc_DS[] = {
+  {"view", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_3view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_2view},
+  {"destroy", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_5destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_4destroy},
+  {"reset", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_7reset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_6reset},
+  {"create", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_9create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_8create},
+  {"setType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_11setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_10setType},
+  {"getType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_13getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_12getType},
+  {"setOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_15setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_14setOptionsPrefix},
+  {"getOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_17getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_16getOptionsPrefix},
+  {"setFromOptions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_19setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_18setFromOptions},
+  {"allocate", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_21allocate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_20allocate},
+  {"getLeadingDimension", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_23getLeadingDimension, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_22getLeadingDimension},
+  {"setState", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_25setState, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_24setState},
+  {"getState", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_27getState, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_26getState},
+  {"setDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_29setDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_28setDimensions},
+  {"getDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_31getDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_30getDimensions},
+  {"setMethod", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_33setMethod, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_32setMethod},
+  {"getMethod", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_35getMethod, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_34getMethod},
+  {"setCompact", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_37setCompact, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_36setCompact},
+  {"getCompact", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_39getCompact, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_38getCompact},
+  {"setExtraRow", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_41setExtraRow, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_40setExtraRow},
+  {"getExtraRow", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_43getExtraRow, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_42getExtraRow},
+  {"setRefined", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_45setRefined, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_44setRefined},
+  {"getRefined", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_47getRefined, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_46getRefined},
+  {"truncate", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_49truncate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_48truncate},
+  {"updateExtraRow", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2DS_51updateExtraRow, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2DS_50updateExtraRow},
+  {0, 0, 0, 0}
+};
 
-  /* "SLEPc/EPS.pyx":201
- *     PERIODIC  =  EPS_LANCZOS_REORTHOG_PERIODIC
- *     PARTIAL   =  EPS_LANCZOS_REORTHOG_PARTIAL
- *     DELAYED   =  EPS_LANCZOS_REORTHOG_DELAYED             # <<<<<<<<<<<<<<
- * 
- * # -----------------------------------------------------------------------------
- */
-  __pyx_t_5 = PyInt_FromLong(EPS_LANCZOS_REORTHOG_DELAYED); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DELAYED, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+DL_EXPORT(PyTypeObject) PySlepcDS_Type = {
+  PyVarObject_HEAD_INIT(0, 0)
+  "slepc4py.SLEPc.DS", /*tp_name*/
+  sizeof(struct PySlepcDSObject), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_8slepc4py_5SLEPc_DS, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
+  #endif
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  "\n    DS\n    ", /*tp_doc*/
+  __pyx_tp_traverse_8slepc4py_5SLEPc_DS, /*tp_traverse*/
+  __pyx_tp_clear_8slepc4py_5SLEPc_DS, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_8slepc4py_5SLEPc_DS, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  0, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_8slepc4py_5SLEPc_DS, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  0, /*tp_version_tag*/
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
+static struct __pyx_vtabstruct_8slepc4py_5SLEPc_FN __pyx_vtable_8slepc4py_5SLEPc_FN;
 
-  /* "SLEPc/EPS.pyx":185
- *     WILKINSON = EPS_POWER_SHIFT_WILKINSON
- * 
- * class EPSLanczosReorthogType(object):             # <<<<<<<<<<<<<<
- *     """
- *     EPS Lanczos reorthogonalization type
- */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_EPSLanczosReorthogType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_EPSLanczosReorthogType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_FN(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct PySlepcFNObject *p;
+  PyObject *o = __pyx_ptype_8petsc4py_5PETSc_Object->tp_new(t, a, k);
+  if (unlikely(!o)) return 0;
+  p = ((struct PySlepcFNObject *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8slepc4py_5SLEPc_FN;
+  if (unlikely(__pyx_pw_8slepc4py_5SLEPc_2FN_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
+  return o;
+}
 
-  /* "SLEPc/EPS.pyx":211
- *     """
- * 
- *     Type            = EPSType             # <<<<<<<<<<<<<<
- *     ProblemType     = EPSProblemType
- *     Extraction      = EPSExtraction
- */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_EPSType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_EPS->tp_dict, __pyx_n_s_Type, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_EPS);
+static void __pyx_tp_dealloc_8slepc4py_5SLEPc_FN(PyObject *o) {
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  PyObject_GC_Track(o);
+  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) __pyx_ptype_8petsc4py_5PETSc_Object->tp_dealloc(o); else __Pyx_call_next_tp_dealloc(o, __pyx_tp_dealloc_8slepc4py_5SLEPc_FN);
+}
 
-  /* "SLEPc/EPS.pyx":212
- * 
- *     Type            = EPSType
- *     ProblemType     = EPSProblemType             # <<<<<<<<<<<<<<
- *     Extraction      = EPSExtraction
- *     Balance         = EPSBalance
- */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_EPSProblemType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_EPS->tp_dict, __pyx_n_s_ProblemType, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_EPS);
+static int __pyx_tp_traverse_8slepc4py_5SLEPc_FN(PyObject *o, visitproc v, void *a) {
+  int e;
+  e = ((likely(__pyx_ptype_8petsc4py_5PETSc_Object)) ? ((__pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse) ? __pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_8slepc4py_5SLEPc_FN)); if (e) return e;
+  return 0;
+}
 
-  /* "SLEPc/EPS.pyx":213
- *     Type            = EPSType
- *     ProblemType     = EPSProblemType
- *     Extraction      = EPSExtraction             # <<<<<<<<<<<<<<
- *     Balance         = EPSBalance
- *     ErrorType       = EPSErrorType
- */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_EPSExtraction); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_EPS->tp_dict, __pyx_n_s_Extraction, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_EPS);
+static int __pyx_tp_clear_8slepc4py_5SLEPc_FN(PyObject *o) {
+  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) { if (__pyx_ptype_8petsc4py_5PETSc_Object->tp_clear) __pyx_ptype_8petsc4py_5PETSc_Object->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_8slepc4py_5SLEPc_FN);
+  return 0;
+}
 
-  /* "SLEPc/EPS.pyx":214
- *     ProblemType     = EPSProblemType
- *     Extraction      = EPSExtraction
- *     Balance         = EPSBalance             # <<<<<<<<<<<<<<
- *     ErrorType       = EPSErrorType
- *     Which           = EPSWhich
- */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_EPSBalance); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_EPS->tp_dict, __pyx_n_s_Balance, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_EPS);
+static PyMethodDef __pyx_methods_8slepc4py_5SLEPc_FN[] = {
+  {"view", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_3view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_2view},
+  {"destroy", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_5destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_4destroy},
+  {"create", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_7create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_6create},
+  {"setType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_9setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_8setType},
+  {"getType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_11getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_10getType},
+  {"setOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_13setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_12setOptionsPrefix},
+  {"getOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_15getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_14getOptionsPrefix},
+  {"setFromOptions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_17setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_16setFromOptions},
+  {"evaluateFunction", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_19evaluateFunction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_18evaluateFunction},
+  {"evaluateDerivative", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_21evaluateDerivative, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_20evaluateDerivative},
+  {"setScale", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_23setScale, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_22setScale},
+  {"getScale", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_25getScale, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_24getScale},
+  {"setRationalNumerator", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_27setRationalNumerator, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_26setRationalNumerator},
+  {"setRationalDenominator", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2FN_29setRationalDenominator, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2FN_28setRationalDenominator},
+  {0, 0, 0, 0}
+};
 
-  /* "SLEPc/EPS.pyx":215
- *     Extraction      = EPSExtraction
- *     Balance         = EPSBalance
- *     ErrorType       = EPSErrorType             # <<<<<<<<<<<<<<
- *     Which           = EPSWhich
- *     Conv            = EPSConv
- */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_EPSErrorType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_EPS->tp_dict, __pyx_n_s_ErrorType, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_EPS);
+DL_EXPORT(PyTypeObject) PySlepcFN_Type = {
+  PyVarObject_HEAD_INIT(0, 0)
+  "slepc4py.SLEPc.FN", /*tp_name*/
+  sizeof(struct PySlepcFNObject), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_8slepc4py_5SLEPc_FN, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
+  #endif
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  "\n    FN\n    ", /*tp_doc*/
+  __pyx_tp_traverse_8slepc4py_5SLEPc_FN, /*tp_traverse*/
+  __pyx_tp_clear_8slepc4py_5SLEPc_FN, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_8slepc4py_5SLEPc_FN, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  0, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_8slepc4py_5SLEPc_FN, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  0, /*tp_version_tag*/
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
+static struct __pyx_vtabstruct_8slepc4py_5SLEPc_RG __pyx_vtable_8slepc4py_5SLEPc_RG;
 
-  /* "SLEPc/EPS.pyx":216
- *     Balance         = EPSBalance
- *     ErrorType       = EPSErrorType
- *     Which           = EPSWhich             # <<<<<<<<<<<<<<
- *     Conv            = EPSConv
- *     ConvergedReason = EPSConvergedReason
- */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_EPSWhich); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_EPS->tp_dict, __pyx_n_s_Which, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_EPS);
+static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_RG(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct PySlepcRGObject *p;
+  PyObject *o = __pyx_ptype_8petsc4py_5PETSc_Object->tp_new(t, a, k);
+  if (unlikely(!o)) return 0;
+  p = ((struct PySlepcRGObject *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8slepc4py_5SLEPc_RG;
+  if (unlikely(__pyx_pw_8slepc4py_5SLEPc_2RG_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
+  return o;
+}
 
-  /* "SLEPc/EPS.pyx":217
- *     ErrorType       = EPSErrorType
- *     Which           = EPSWhich
- *     Conv            = EPSConv             # <<<<<<<<<<<<<<
- *     ConvergedReason = EPSConvergedReason
- * 
- */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_EPSConv); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_EPS->tp_dict, __pyx_n_s_Conv, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_EPS);
+static void __pyx_tp_dealloc_8slepc4py_5SLEPc_RG(PyObject *o) {
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  PyObject_GC_Track(o);
+  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) __pyx_ptype_8petsc4py_5PETSc_Object->tp_dealloc(o); else __Pyx_call_next_tp_dealloc(o, __pyx_tp_dealloc_8slepc4py_5SLEPc_RG);
+}
 
-  /* "SLEPc/EPS.pyx":218
- *     Which           = EPSWhich
- *     Conv            = EPSConv
- *     ConvergedReason = EPSConvergedReason             # <<<<<<<<<<<<<<
- * 
- *     PowerShiftType      = EPSPowerShiftType
- */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_EPSConvergedReason); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_EPS->tp_dict, __pyx_n_s_ConvergedReason, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_EPS);
+static int __pyx_tp_traverse_8slepc4py_5SLEPc_RG(PyObject *o, visitproc v, void *a) {
+  int e;
+  e = ((likely(__pyx_ptype_8petsc4py_5PETSc_Object)) ? ((__pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse) ? __pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_8slepc4py_5SLEPc_RG)); if (e) return e;
+  return 0;
+}
 
-  /* "SLEPc/EPS.pyx":220
- *     ConvergedReason = EPSConvergedReason
- * 
- *     PowerShiftType      = EPSPowerShiftType             # <<<<<<<<<<<<<<
- *     LanczosReorthogType = EPSLanczosReorthogType
- * 
- */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_EPSPowerShiftType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_EPS->tp_dict, __pyx_n_s_PowerShiftType, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_EPS);
+static int __pyx_tp_clear_8slepc4py_5SLEPc_RG(PyObject *o) {
+  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) { if (__pyx_ptype_8petsc4py_5PETSc_Object->tp_clear) __pyx_ptype_8petsc4py_5PETSc_Object->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_8slepc4py_5SLEPc_RG);
+  return 0;
+}
 
-  /* "SLEPc/EPS.pyx":221
- * 
- *     PowerShiftType      = EPSPowerShiftType
- *     LanczosReorthogType = EPSLanczosReorthogType             # <<<<<<<<<<<<<<
- * 
- *     def __cinit__(self):
- */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_EPSLanczosReorthogType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_EPS->tp_dict, __pyx_n_s_LanczosReorthogType, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_EPS);
+static PyMethodDef __pyx_methods_8slepc4py_5SLEPc_RG[] = {
+  {"view", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_3view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_2view},
+  {"destroy", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_5destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_4destroy},
+  {"create", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_7create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_6create},
+  {"setType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_9setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_8setType},
+  {"getType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_11getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_10getType},
+  {"setOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_13setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_12setOptionsPrefix},
+  {"getOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_15getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_14getOptionsPrefix},
+  {"setFromOptions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_17setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_16setFromOptions},
+  {"isTrivial", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_19isTrivial, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_18isTrivial},
+  {"getComplement", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_21getComplement, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_20getComplement},
+  {"setComplement", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_23setComplement, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_22setComplement},
+  {"setEllipseParameters", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_25setEllipseParameters, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_24setEllipseParameters},
+  {"getEllipseParameters", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_27getEllipseParameters, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_26getEllipseParameters},
+  {"setIntervalEndpoints", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_29setIntervalEndpoints, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_28setIntervalEndpoints},
+  {"getIntervalEndpoints", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_2RG_31getIntervalEndpoints, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_2RG_30getIntervalEndpoints},
+  {0, 0, 0, 0}
+};
 
-  /* "SLEPc/EPS.pyx":1701
- * # -----------------------------------------------------------------------------
- * 
- * del EPSType             # <<<<<<<<<<<<<<
- * del EPSProblemType
- * del EPSExtraction
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_EPSType) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1701; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+DL_EXPORT(PyTypeObject) PySlepcRG_Type = {
+  PyVarObject_HEAD_INIT(0, 0)
+  "slepc4py.SLEPc.RG", /*tp_name*/
+  sizeof(struct PySlepcRGObject), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_8slepc4py_5SLEPc_RG, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
+  #endif
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  "\n    RG\n    ", /*tp_doc*/
+  __pyx_tp_traverse_8slepc4py_5SLEPc_RG, /*tp_traverse*/
+  __pyx_tp_clear_8slepc4py_5SLEPc_RG, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_8slepc4py_5SLEPc_RG, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  0, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_8slepc4py_5SLEPc_RG, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  0, /*tp_version_tag*/
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
+static struct __pyx_vtabstruct_8slepc4py_5SLEPc_EPS __pyx_vtable_8slepc4py_5SLEPc_EPS;
 
-  /* "SLEPc/EPS.pyx":1702
- * 
- * del EPSType
- * del EPSProblemType             # <<<<<<<<<<<<<<
- * del EPSExtraction
- * del EPSBalance
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_EPSProblemType) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_EPS(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct PySlepcEPSObject *p;
+  PyObject *o = __pyx_ptype_8petsc4py_5PETSc_Object->tp_new(t, a, k);
+  if (unlikely(!o)) return 0;
+  p = ((struct PySlepcEPSObject *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8slepc4py_5SLEPc_EPS;
+  if (unlikely(__pyx_pw_8slepc4py_5SLEPc_3EPS_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
+  return o;
+}
 
-  /* "SLEPc/EPS.pyx":1703
- * del EPSType
- * del EPSProblemType
- * del EPSExtraction             # <<<<<<<<<<<<<<
- * del EPSBalance
- * del EPSErrorType
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_EPSExtraction) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+static void __pyx_tp_dealloc_8slepc4py_5SLEPc_EPS(PyObject *o) {
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  PyObject_GC_Track(o);
+  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) __pyx_ptype_8petsc4py_5PETSc_Object->tp_dealloc(o); else __Pyx_call_next_tp_dealloc(o, __pyx_tp_dealloc_8slepc4py_5SLEPc_EPS);
+}
 
-  /* "SLEPc/EPS.pyx":1704
- * del EPSProblemType
- * del EPSExtraction
- * del EPSBalance             # <<<<<<<<<<<<<<
- * del EPSErrorType
- * del EPSWhich
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_EPSBalance) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1704; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+static int __pyx_tp_traverse_8slepc4py_5SLEPc_EPS(PyObject *o, visitproc v, void *a) {
+  int e;
+  e = ((likely(__pyx_ptype_8petsc4py_5PETSc_Object)) ? ((__pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse) ? __pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_8slepc4py_5SLEPc_EPS)); if (e) return e;
+  return 0;
+}
 
-  /* "SLEPc/EPS.pyx":1705
- * del EPSExtraction
- * del EPSBalance
- * del EPSErrorType             # <<<<<<<<<<<<<<
- * del EPSWhich
- * del EPSConv
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_EPSErrorType) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1705; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+static int __pyx_tp_clear_8slepc4py_5SLEPc_EPS(PyObject *o) {
+  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) { if (__pyx_ptype_8petsc4py_5PETSc_Object->tp_clear) __pyx_ptype_8petsc4py_5PETSc_Object->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_8slepc4py_5SLEPc_EPS);
+  return 0;
+}
 
-  /* "SLEPc/EPS.pyx":1706
- * del EPSBalance
- * del EPSErrorType
- * del EPSWhich             # <<<<<<<<<<<<<<
- * del EPSConv
- * del EPSConvergedReason
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_EPSWhich) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1706; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3EPS_problem_type(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_8slepc4py_5SLEPc_3EPS_12problem_type_1__get__(o);
+}
 
-  /* "SLEPc/EPS.pyx":1707
- * del EPSErrorType
- * del EPSWhich
- * del EPSConv             # <<<<<<<<<<<<<<
- * del EPSConvergedReason
- * del EPSPowerShiftType
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_EPSConv) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1707; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+static int __pyx_setprop_8slepc4py_5SLEPc_3EPS_problem_type(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_8slepc4py_5SLEPc_3EPS_12problem_type_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-  /* "SLEPc/EPS.pyx":1708
- * del EPSWhich
- * del EPSConv
- * del EPSConvergedReason             # <<<<<<<<<<<<<<
- * del EPSPowerShiftType
- * del EPSLanczosReorthogType
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_EPSConvergedReason) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1708; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3EPS_extraction(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_8slepc4py_5SLEPc_3EPS_10extraction_1__get__(o);
+}
 
-  /* "SLEPc/EPS.pyx":1709
- * del EPSConv
- * del EPSConvergedReason
- * del EPSPowerShiftType             # <<<<<<<<<<<<<<
- * del EPSLanczosReorthogType
- * 
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_EPSPowerShiftType) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1709; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+static int __pyx_setprop_8slepc4py_5SLEPc_3EPS_extraction(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_8slepc4py_5SLEPc_3EPS_10extraction_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-  /* "SLEPc/EPS.pyx":1710
- * del EPSConvergedReason
- * del EPSPowerShiftType
- * del EPSLanczosReorthogType             # <<<<<<<<<<<<<<
- * 
- * # -----------------------------------------------------------------------------
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_EPSLanczosReorthogType) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 1710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3EPS_which(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_8slepc4py_5SLEPc_3EPS_5which_1__get__(o);
+}
 
-  /* "SLEPc/SVD.pyx":3
- * # -----------------------------------------------------------------------------
- * 
- * class SVDType(object):             # <<<<<<<<<<<<<<
- *     """
- *     SVD types
- */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_SVDType, __pyx_n_s_SVDType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_SVD_types_CROSS_Eigenproblem_wi); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+static int __pyx_setprop_8slepc4py_5SLEPc_3EPS_which(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_8slepc4py_5SLEPc_3EPS_5which_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-  /* "SLEPc/SVD.pyx":13
- *     - `TRLANCZOS`: Thick-restart Lanczos.
- *     """
- *     CROSS     = S_(SVDCROSS)             # <<<<<<<<<<<<<<
- *     CYCLIC    = S_(SVDCYCLIC)
- *     LAPACK    = S_(SVDLAPACK)
- */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(SVDCROSS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CROSS, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3EPS_target(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_8slepc4py_5SLEPc_3EPS_6target_1__get__(o);
+}
 
-  /* "SLEPc/SVD.pyx":14
- *     """
- *     CROSS     = S_(SVDCROSS)
- *     CYCLIC    = S_(SVDCYCLIC)             # <<<<<<<<<<<<<<
- *     LAPACK    = S_(SVDLAPACK)
- *     LANCZOS   = S_(SVDLANCZOS)
- */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(SVDCYCLIC); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CYCLIC, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static int __pyx_setprop_8slepc4py_5SLEPc_3EPS_target(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_8slepc4py_5SLEPc_3EPS_6target_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-  /* "SLEPc/SVD.pyx":15
- *     CROSS     = S_(SVDCROSS)
- *     CYCLIC    = S_(SVDCYCLIC)
- *     LAPACK    = S_(SVDLAPACK)             # <<<<<<<<<<<<<<
- *     LANCZOS   = S_(SVDLANCZOS)
- *     TRLANCZOS = S_(SVDTRLANCZOS)
- */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(SVDLAPACK); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LAPACK, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3EPS_tol(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_8slepc4py_5SLEPc_3EPS_3tol_1__get__(o);
+}
 
-  /* "SLEPc/SVD.pyx":16
- *     CYCLIC    = S_(SVDCYCLIC)
- *     LAPACK    = S_(SVDLAPACK)
- *     LANCZOS   = S_(SVDLANCZOS)             # <<<<<<<<<<<<<<
- *     TRLANCZOS = S_(SVDTRLANCZOS)
- * 
- */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(SVDLANCZOS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LANCZOS, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static int __pyx_setprop_8slepc4py_5SLEPc_3EPS_tol(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_8slepc4py_5SLEPc_3EPS_3tol_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-  /* "SLEPc/SVD.pyx":17
- *     LAPACK    = S_(SVDLAPACK)
- *     LANCZOS   = S_(SVDLANCZOS)
- *     TRLANCZOS = S_(SVDTRLANCZOS)             # <<<<<<<<<<<<<<
- * 
- * class SVDErrorType(object):
- */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(SVDTRLANCZOS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TRLANCZOS, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3EPS_max_it(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_8slepc4py_5SLEPc_3EPS_6max_it_1__get__(o);
+}
 
-  /* "SLEPc/SVD.pyx":3
- * # -----------------------------------------------------------------------------
- * 
- * class SVDType(object):             # <<<<<<<<<<<<<<
- *     """
- *     SVD types
- */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_SVDType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SVDType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+static int __pyx_setprop_8slepc4py_5SLEPc_3EPS_max_it(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_8slepc4py_5SLEPc_3EPS_6max_it_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-  /* "SLEPc/SVD.pyx":19
- *     TRLANCZOS = S_(SVDTRLANCZOS)
- * 
- * class SVDErrorType(object):             # <<<<<<<<<<<<<<
- *     """
- *     SVD error type to assess accuracy of computed solutions
- */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_SVDErrorType, __pyx_n_s_SVDErrorType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_SVD_error_type_to_assess_accura); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3EPS_st(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_8slepc4py_5SLEPc_3EPS_2st_1__get__(o);
+}
 
-  /* "SLEPc/SVD.pyx":26
- *     - `RELATIVE`:  Relative error.
- *     """
- *     ABSOLUTE = SVD_ERROR_ABSOLUTE             # <<<<<<<<<<<<<<
- *     RELATIVE = SVD_ERROR_RELATIVE
- * 
- */
-  __pyx_t_5 = PyInt_FromLong(SVD_ERROR_ABSOLUTE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ABSOLUTE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static int __pyx_setprop_8slepc4py_5SLEPc_3EPS_st(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_8slepc4py_5SLEPc_3EPS_2st_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-  /* "SLEPc/SVD.pyx":27
- *     """
- *     ABSOLUTE = SVD_ERROR_ABSOLUTE
- *     RELATIVE = SVD_ERROR_RELATIVE             # <<<<<<<<<<<<<<
- * 
- * class SVDWhich(object):
- */
-  __pyx_t_5 = PyInt_FromLong(SVD_ERROR_RELATIVE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RELATIVE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3EPS_bv(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_8slepc4py_5SLEPc_3EPS_2bv_1__get__(o);
+}
 
-  /* "SLEPc/SVD.pyx":19
- *     TRLANCZOS = S_(SVDTRLANCZOS)
- * 
- * class SVDErrorType(object):             # <<<<<<<<<<<<<<
- *     """
- *     SVD error type to assess accuracy of computed solutions
- */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_SVDErrorType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SVDErrorType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+static int __pyx_setprop_8slepc4py_5SLEPc_3EPS_bv(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_8slepc4py_5SLEPc_3EPS_2bv_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-  /* "SLEPc/SVD.pyx":29
- *     RELATIVE = SVD_ERROR_RELATIVE
- * 
- * class SVDWhich(object):             # <<<<<<<<<<<<<<
- *     """
- *     SVD desired piece of spectrum
- */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_SVDWhich, __pyx_n_s_SVDWhich, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_SVD_desired_piece_of_spectrum_L); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+static PyMethodDef __pyx_methods_8slepc4py_5SLEPc_EPS[] = {
+  {"view", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_3view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_2view},
+  {"destroy", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_5destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_4destroy},
+  {"reset", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_7reset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_6reset},
+  {"create", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_9create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_8create},
+  {"setType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_11setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_10setType},
+  {"getType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_13getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_12getType},
+  {"getOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_15getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_14getOptionsPrefix},
+  {"setOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_17setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_16setOptionsPrefix},
+  {"appendOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_19appendOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_18appendOptionsPrefix},
+  {"setFromOptions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_21setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_20setFromOptions},
+  {"getProblemType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_23getProblemType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_22getProblemType},
+  {"setProblemType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_25setProblemType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_24setProblemType},
+  {"isGeneralized", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_27isGeneralized, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_26isGeneralized},
+  {"isHermitian", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_29isHermitian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_28isHermitian},
+  {"isPositive", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_31isPositive, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_30isPositive},
+  {"getBalance", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_33getBalance, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_32getBalance},
+  {"setBalance", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_35setBalance, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_34setBalance},
+  {"getExtraction", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_37getExtraction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_36getExtraction},
+  {"setExtraction", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_39setExtraction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_38setExtraction},
+  {"getWhichEigenpairs", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_41getWhichEigenpairs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_40getWhichEigenpairs},
+  {"setWhichEigenpairs", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_43setWhichEigenpairs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_42setWhichEigenpairs},
+  {"getTarget", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_45getTarget, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_44getTarget},
+  {"setTarget", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_47setTarget, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_46setTarget},
+  {"getInterval", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_49getInterval, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_48getInterval},
+  {"setInterval", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_51setInterval, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_50setInterval},
+  {"getTolerances", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_53getTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_52getTolerances},
+  {"setTolerances", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_55setTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_54setTolerances},
+  {"getConvergenceTest", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_57getConvergenceTest, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_56getConvergenceTest},
+  {"setConvergenceTest", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_59setConvergenceTest, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_58setConvergenceTest},
+  {"getTrueResidual", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_61getTrueResidual, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_60getTrueResidual},
+  {"setTrueResidual", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_63setTrueResidual, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_62setTrueResidual},
+  {"getTrackAll", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_65getTrackAll, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_64getTrackAll},
+  {"setTrackAll", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_67setTrackAll, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_66setTrackAll},
+  {"getDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_69getDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_68getDimensions},
+  {"setDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_71setDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_70setDimensions},
+  {"getST", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_73getST, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_72getST},
+  {"setST", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_75setST, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_74setST},
+  {"getBV", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_77getBV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_76getBV},
+  {"setBV", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_79setBV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_78setBV},
+  {"getDS", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_81getDS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_80getDS},
+  {"setDS", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_83setDS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_82setDS},
+  {"getRG", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_85getRG, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_84getRG},
+  {"setRG", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_87setRG, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_86setRG},
+  {"getOperators", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_89getOperators, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_88getOperators},
+  {"setOperators", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_91setOperators, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_90setOperators},
+  {"setDeflationSpace", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_93setDeflationSpace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_92setDeflationSpace},
+  {"setInitialSpace", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_95setInitialSpace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_94setInitialSpace},
+  {"cancelMonitor", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_97cancelMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_96cancelMonitor},
+  {"setUp", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_99setUp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_98setUp},
+  {"solve", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_101solve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_100solve},
+  {"getIterationNumber", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_103getIterationNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_102getIterationNumber},
+  {"getConvergedReason", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_105getConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_104getConvergedReason},
+  {"getConverged", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_107getConverged, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_106getConverged},
+  {"getEigenvalue", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_109getEigenvalue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_108getEigenvalue},
+  {"getEigenvector", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_111getEigenvector, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_110getEigenvector},
+  {"getEigenpair", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_113getEigenpair, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_112getEigenpair},
+  {"getInvariantSubspace", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_115getInvariantSubspace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_114getInvariantSubspace},
+  {"getErrorEstimate", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_117getErrorEstimate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_116getErrorEstimate},
+  {"computeError", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_119computeError, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_118computeError},
+  {"errorView", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_121errorView, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_120errorView},
+  {"setPowerShiftType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_123setPowerShiftType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_122setPowerShiftType},
+  {"getPowerShiftType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_125getPowerShiftType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_124getPowerShiftType},
+  {"setArnoldiDelayed", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_127setArnoldiDelayed, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_126setArnoldiDelayed},
+  {"getArnoldiDelayed", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_129getArnoldiDelayed, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_128getArnoldiDelayed},
+  {"setLanczosReorthogType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_131setLanczosReorthogType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_130setLanczosReorthogType},
+  {"getLanczosReorthogType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_133getLanczosReorthogType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_132getLanczosReorthogType},
+  {"setKrylovSchurRestart", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_135setKrylovSchurRestart, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_134setKrylovSchurRestart},
+  {"getKrylovSchurRestart", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_137getKrylovSchurRestart, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_136getKrylovSchurRestart},
+  {"setKrylovSchurLocking", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_139setKrylovSchurLocking, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_138setKrylovSchurLocking},
+  {"getKrylovSchurLocking", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_141getKrylovSchurLocking, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_140getKrylovSchurLocking},
+  {"setKrylovSchurPartitions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_143setKrylovSchurPartitions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_142setKrylovSchurPartitions},
+  {"getKrylovSchurPartitions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_145getKrylovSchurPartitions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_144getKrylovSchurPartitions},
+  {"setKrylovSchurDetectZeros", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_147setKrylovSchurDetectZeros, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_146setKrylovSchurDetectZeros},
+  {"getKrylovSchurDetectZeros", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_149getKrylovSchurDetectZeros, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_148getKrylovSchurDetectZeros},
+  {"setKrylovSchurDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_151setKrylovSchurDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_150setKrylovSchurDimensions},
+  {"getKrylovSchurDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_153getKrylovSchurDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_152getKrylovSchurDimensions},
+  {"getKrylovSchurSubcommInfo", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_155getKrylovSchurSubcommInfo, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_154getKrylovSchurSubcommInfo},
+  {"getKrylovSchurSubcommPairs", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_157getKrylovSchurSubcommPairs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_156getKrylovSchurSubcommPairs},
+  {"getKrylovSchurSubcommMats", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_159getKrylovSchurSubcommMats, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_158getKrylovSchurSubcommMats},
+  {"updateKrylovSchurSubcommMats", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_161updateKrylovSchurSubcommMats, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_160updateKrylovSchurSubcommMats},
+  {"setKrylovSchurSubintervals", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_163setKrylovSchurSubintervals, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_162setKrylovSchurSubintervals},
+  {"setRQCGReset", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_165setRQCGReset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_164setRQCGReset},
+  {"getRQCGReset", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3EPS_167getRQCGReset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3EPS_166getRQCGReset},
+  {0, 0, 0, 0}
+};
 
-  /* "SLEPc/SVD.pyx":36
- *     - `SMALLEST`: smallest singular values.
- *     """
- *     LARGEST  = SVD_LARGEST             # <<<<<<<<<<<<<<
- *     SMALLEST = SVD_SMALLEST
- * 
- */
-  __pyx_t_5 = PyInt_FromLong(SVD_LARGEST); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LARGEST, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static struct PyGetSetDef __pyx_getsets_8slepc4py_5SLEPc_EPS[] = {
+  {(char *)"problem_type", __pyx_getprop_8slepc4py_5SLEPc_3EPS_problem_type, __pyx_setprop_8slepc4py_5SLEPc_3EPS_problem_type, (char *)0, 0},
+  {(char *)"extraction", __pyx_getprop_8slepc4py_5SLEPc_3EPS_extraction, __pyx_setprop_8slepc4py_5SLEPc_3EPS_extraction, (char *)0, 0},
+  {(char *)"which", __pyx_getprop_8slepc4py_5SLEPc_3EPS_which, __pyx_setprop_8slepc4py_5SLEPc_3EPS_which, (char *)0, 0},
+  {(char *)"target", __pyx_getprop_8slepc4py_5SLEPc_3EPS_target, __pyx_setprop_8slepc4py_5SLEPc_3EPS_target, (char *)0, 0},
+  {(char *)"tol", __pyx_getprop_8slepc4py_5SLEPc_3EPS_tol, __pyx_setprop_8slepc4py_5SLEPc_3EPS_tol, (char *)0, 0},
+  {(char *)"max_it", __pyx_getprop_8slepc4py_5SLEPc_3EPS_max_it, __pyx_setprop_8slepc4py_5SLEPc_3EPS_max_it, (char *)0, 0},
+  {(char *)"st", __pyx_getprop_8slepc4py_5SLEPc_3EPS_st, __pyx_setprop_8slepc4py_5SLEPc_3EPS_st, (char *)0, 0},
+  {(char *)"bv", __pyx_getprop_8slepc4py_5SLEPc_3EPS_bv, __pyx_setprop_8slepc4py_5SLEPc_3EPS_bv, (char *)0, 0},
+  {0, 0, 0, 0, 0}
+};
 
-  /* "SLEPc/SVD.pyx":37
- *     """
- *     LARGEST  = SVD_LARGEST
- *     SMALLEST = SVD_SMALLEST             # <<<<<<<<<<<<<<
- * 
- * class SVDConvergedReason(object):
- */
-  __pyx_t_5 = PyInt_FromLong(SVD_SMALLEST); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SMALLEST, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+DL_EXPORT(PyTypeObject) PySlepcEPS_Type = {
+  PyVarObject_HEAD_INIT(0, 0)
+  "slepc4py.SLEPc.EPS", /*tp_name*/
+  sizeof(struct PySlepcEPSObject), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_8slepc4py_5SLEPc_EPS, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
+  #endif
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  "\n    EPS\n    ", /*tp_doc*/
+  __pyx_tp_traverse_8slepc4py_5SLEPc_EPS, /*tp_traverse*/
+  __pyx_tp_clear_8slepc4py_5SLEPc_EPS, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_8slepc4py_5SLEPc_EPS, /*tp_methods*/
+  0, /*tp_members*/
+  __pyx_getsets_8slepc4py_5SLEPc_EPS, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  0, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_8slepc4py_5SLEPc_EPS, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  0, /*tp_version_tag*/
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
+static struct __pyx_vtabstruct_8slepc4py_5SLEPc_SVD __pyx_vtable_8slepc4py_5SLEPc_SVD;
 
-  /* "SLEPc/SVD.pyx":29
- *     RELATIVE = SVD_ERROR_RELATIVE
- * 
- * class SVDWhich(object):             # <<<<<<<<<<<<<<
- *     """
- *     SVD desired piece of spectrum
- */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_SVDWhich, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SVDWhich, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_SVD(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct PySlepcSVDObject *p;
+  PyObject *o = __pyx_ptype_8petsc4py_5PETSc_Object->tp_new(t, a, k);
+  if (unlikely(!o)) return 0;
+  p = ((struct PySlepcSVDObject *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8slepc4py_5SLEPc_SVD;
+  if (unlikely(__pyx_pw_8slepc4py_5SLEPc_3SVD_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
+  return o;
+}
 
-  /* "SLEPc/SVD.pyx":39
- *     SMALLEST = SVD_SMALLEST
- * 
- * class SVDConvergedReason(object):             # <<<<<<<<<<<<<<
- *     """
- *     SVD convergence reasons
- */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_SVDConvergedReason, __pyx_n_s_SVDConvergedReason, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_SVD_convergence_reasons_CONVERG); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+static void __pyx_tp_dealloc_8slepc4py_5SLEPc_SVD(PyObject *o) {
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  PyObject_GC_Track(o);
+  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) __pyx_ptype_8petsc4py_5PETSc_Object->tp_dealloc(o); else __Pyx_call_next_tp_dealloc(o, __pyx_tp_dealloc_8slepc4py_5SLEPc_SVD);
+}
 
-  /* "SLEPc/SVD.pyx":48
- *     - `CONVERGED_ITERATING`:
- *     """
- *     CONVERGED_TOL       = SVD_CONVERGED_TOL             # <<<<<<<<<<<<<<
- *     DIVERGED_ITS        = SVD_DIVERGED_ITS
- *     DIVERGED_BREAKDOWN  = SVD_DIVERGED_BREAKDOWN
- */
-  __pyx_t_5 = PyInt_FromLong(SVD_CONVERGED_TOL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_TOL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static int __pyx_tp_traverse_8slepc4py_5SLEPc_SVD(PyObject *o, visitproc v, void *a) {
+  int e;
+  e = ((likely(__pyx_ptype_8petsc4py_5PETSc_Object)) ? ((__pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse) ? __pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_8slepc4py_5SLEPc_SVD)); if (e) return e;
+  return 0;
+}
 
-  /* "SLEPc/SVD.pyx":49
- *     """
- *     CONVERGED_TOL       = SVD_CONVERGED_TOL
- *     DIVERGED_ITS        = SVD_DIVERGED_ITS             # <<<<<<<<<<<<<<
- *     DIVERGED_BREAKDOWN  = SVD_DIVERGED_BREAKDOWN
- *     CONVERGED_ITERATING = SVD_CONVERGED_ITERATING
- */
-  __pyx_t_5 = PyInt_FromLong(SVD_DIVERGED_ITS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_ITS, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static int __pyx_tp_clear_8slepc4py_5SLEPc_SVD(PyObject *o) {
+  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) { if (__pyx_ptype_8petsc4py_5PETSc_Object->tp_clear) __pyx_ptype_8petsc4py_5PETSc_Object->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_8slepc4py_5SLEPc_SVD);
+  return 0;
+}
 
-  /* "SLEPc/SVD.pyx":50
- *     CONVERGED_TOL       = SVD_CONVERGED_TOL
- *     DIVERGED_ITS        = SVD_DIVERGED_ITS
- *     DIVERGED_BREAKDOWN  = SVD_DIVERGED_BREAKDOWN             # <<<<<<<<<<<<<<
- *     CONVERGED_ITERATING = SVD_CONVERGED_ITERATING
- *     ITERATING           = SVD_CONVERGED_ITERATING
- */
-  __pyx_t_5 = PyInt_FromLong(SVD_DIVERGED_BREAKDOWN); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_BREAKDOWN, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3SVD_transpose_mode(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_8slepc4py_5SLEPc_3SVD_14transpose_mode_1__get__(o);
+}
 
-  /* "SLEPc/SVD.pyx":51
- *     DIVERGED_ITS        = SVD_DIVERGED_ITS
- *     DIVERGED_BREAKDOWN  = SVD_DIVERGED_BREAKDOWN
- *     CONVERGED_ITERATING = SVD_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
- *     ITERATING           = SVD_CONVERGED_ITERATING
- * 
- */
-  __pyx_t_5 = PyInt_FromLong(SVD_CONVERGED_ITERATING); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ITERATING, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static int __pyx_setprop_8slepc4py_5SLEPc_3SVD_transpose_mode(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_8slepc4py_5SLEPc_3SVD_14transpose_mode_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-  /* "SLEPc/SVD.pyx":52
- *     DIVERGED_BREAKDOWN  = SVD_DIVERGED_BREAKDOWN
- *     CONVERGED_ITERATING = SVD_CONVERGED_ITERATING
- *     ITERATING           = SVD_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
- * 
- * # -----------------------------------------------------------------------------
- */
-  __pyx_t_5 = PyInt_FromLong(SVD_CONVERGED_ITERATING); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ITERATING, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3SVD_which(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_8slepc4py_5SLEPc_3SVD_5which_1__get__(o);
+}
 
-  /* "SLEPc/SVD.pyx":39
- *     SMALLEST = SVD_SMALLEST
- * 
- * class SVDConvergedReason(object):             # <<<<<<<<<<<<<<
- *     """
- *     SVD convergence reasons
- */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_SVDConvergedReason, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SVDConvergedReason, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+static int __pyx_setprop_8slepc4py_5SLEPc_3SVD_which(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_8slepc4py_5SLEPc_3SVD_5which_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-  /* "SLEPc/SVD.pyx":62
- *     """
- * 
- *     Type            = SVDType             # <<<<<<<<<<<<<<
- *     ErrorType       = SVDErrorType
- *     Which           = SVDWhich
- */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_SVDType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_SVD->tp_dict, __pyx_n_s_Type, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_SVD);
+static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3SVD_tol(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_8slepc4py_5SLEPc_3SVD_3tol_1__get__(o);
+}
 
-  /* "SLEPc/SVD.pyx":63
- * 
- *     Type            = SVDType
- *     ErrorType       = SVDErrorType             # <<<<<<<<<<<<<<
- *     Which           = SVDWhich
- *     ConvergedReason = SVDConvergedReason
- */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_SVDErrorType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_SVD->tp_dict, __pyx_n_s_ErrorType, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_SVD);
+static int __pyx_setprop_8slepc4py_5SLEPc_3SVD_tol(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_8slepc4py_5SLEPc_3SVD_3tol_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-  /* "SLEPc/SVD.pyx":64
- *     Type            = SVDType
- *     ErrorType       = SVDErrorType
- *     Which           = SVDWhich             # <<<<<<<<<<<<<<
- *     ConvergedReason = SVDConvergedReason
- * 
- */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_SVDWhich); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_SVD->tp_dict, __pyx_n_s_Which, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_SVD);
-
-  /* "SLEPc/SVD.pyx":65
- *     ErrorType       = SVDErrorType
- *     Which           = SVDWhich
- *     ConvergedReason = SVDConvergedReason             # <<<<<<<<<<<<<<
- * 
- *     def __cinit__(self):
- */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_SVDConvergedReason); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_SVD->tp_dict, __pyx_n_s_ConvergedReason, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_SVD);
-
-  /* "SLEPc/SVD.pyx":817
- * # -----------------------------------------------------------------------------
- * 
- * del SVDType             # <<<<<<<<<<<<<<
- * del SVDErrorType
- * del SVDWhich
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_SVDType) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 817; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/SVD.pyx":818
- * 
- * del SVDType
- * del SVDErrorType             # <<<<<<<<<<<<<<
- * del SVDWhich
- * del SVDConvergedReason
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_SVDErrorType) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 818; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/SVD.pyx":819
- * del SVDType
- * del SVDErrorType
- * del SVDWhich             # <<<<<<<<<<<<<<
- * del SVDConvergedReason
- * 
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_SVDWhich) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 819; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/SVD.pyx":820
- * del SVDErrorType
- * del SVDWhich
- * del SVDConvergedReason             # <<<<<<<<<<<<<<
- * 
- * # -----------------------------------------------------------------------------
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_SVDConvergedReason) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 820; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3SVD_max_it(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_8slepc4py_5SLEPc_3SVD_6max_it_1__get__(o);
+}
 
-  /* "SLEPc/PEP.pyx":3
- * # -----------------------------------------------------------------------------
- * 
- * class PEPType(object):             # <<<<<<<<<<<<<<
- *     """
- *     PEP type
- */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_PEPType, __pyx_n_s_PEPType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_PEP_type_Polynomial_eigensolver); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+static int __pyx_setprop_8slepc4py_5SLEPc_3SVD_max_it(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_8slepc4py_5SLEPc_3SVD_6max_it_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-  /* "SLEPc/PEP.pyx":15
- *     - `JD`:           Polynomial Jacobi-Davidson.
- *     """
- *     LINEAR   = S_(PEPLINEAR)             # <<<<<<<<<<<<<<
- *     QARNOLDI = S_(PEPQARNOLDI)
- *     TOAR     = S_(PEPTOAR)
- */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(PEPLINEAR); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LINEAR, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyObject *__pyx_getprop_8slepc4py_5SLEPc_3SVD_bv(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_8slepc4py_5SLEPc_3SVD_2bv_1__get__(o);
+}
 
-  /* "SLEPc/PEP.pyx":16
- *     """
- *     LINEAR   = S_(PEPLINEAR)
- *     QARNOLDI = S_(PEPQARNOLDI)             # <<<<<<<<<<<<<<
- *     TOAR     = S_(PEPTOAR)
- *     STOAR    = S_(PEPSTOAR)
- */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(PEPQARNOLDI); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_QARNOLDI, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static int __pyx_setprop_8slepc4py_5SLEPc_3SVD_bv(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_8slepc4py_5SLEPc_3SVD_2bv_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
 
-  /* "SLEPc/PEP.pyx":17
- *     LINEAR   = S_(PEPLINEAR)
- *     QARNOLDI = S_(PEPQARNOLDI)
- *     TOAR     = S_(PEPTOAR)             # <<<<<<<<<<<<<<
- *     STOAR    = S_(PEPSTOAR)
- *     JD       = S_(PEPJD)
- */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(PEPTOAR); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TOAR, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyMethodDef __pyx_methods_8slepc4py_5SLEPc_SVD[] = {
+  {"view", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_3view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_2view},
+  {"destroy", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_5destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_4destroy},
+  {"reset", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_7reset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_6reset},
+  {"create", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_9create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_8create},
+  {"setType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_11setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_10setType},
+  {"getType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_13getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_12getType},
+  {"getOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_15getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_14getOptionsPrefix},
+  {"setOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_17setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_16setOptionsPrefix},
+  {"appendOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_19appendOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_18appendOptionsPrefix},
+  {"setFromOptions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_21setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_20setFromOptions},
+  {"getImplicitTranspose", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_23getImplicitTranspose, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_22getImplicitTranspose},
+  {"setImplicitTranspose", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_25setImplicitTranspose, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_24setImplicitTranspose},
+  {"getWhichSingularTriplets", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_27getWhichSingularTriplets, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_26getWhichSingularTriplets},
+  {"setWhichSingularTriplets", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_29setWhichSingularTriplets, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_28setWhichSingularTriplets},
+  {"getTolerances", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_31getTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_30getTolerances},
+  {"setTolerances", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_33setTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_32setTolerances},
+  {"getDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_35getDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_34getDimensions},
+  {"setDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_37setDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_36setDimensions},
+  {"getBV", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_39getBV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_38getBV},
+  {"setBV", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_41setBV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_40setBV},
+  {"getOperator", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_43getOperator, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_42getOperator},
+  {"setOperator", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_45setOperator, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_44setOperator},
+  {"setInitialSpace", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_47setInitialSpace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_46setInitialSpace},
+  {"cancelMonitor", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_49cancelMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_48cancelMonitor},
+  {"setUp", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_51setUp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_50setUp},
+  {"solve", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_53solve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_52solve},
+  {"getIterationNumber", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_55getIterationNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_54getIterationNumber},
+  {"getConvergedReason", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_57getConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_56getConvergedReason},
+  {"getConverged", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_59getConverged, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_58getConverged},
+  {"getValue", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_61getValue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_60getValue},
+  {"getVectors", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_63getVectors, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_62getVectors},
+  {"getSingularTriplet", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_65getSingularTriplet, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_64getSingularTriplet},
+  {"computeError", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_67computeError, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_66computeError},
+  {"errorView", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_69errorView, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_68errorView},
+  {"setCrossEPS", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_71setCrossEPS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_70setCrossEPS},
+  {"getCrossEPS", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_73getCrossEPS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_72getCrossEPS},
+  {"setCyclicEPS", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_75setCyclicEPS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_74setCyclicEPS},
+  {"getCyclicEPS", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_77getCyclicEPS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_76getCyclicEPS},
+  {"setCyclicExplicitMatrix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_79setCyclicExplicitMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_78setCyclicExplicitMatrix},
+  {"getCyclicExplicitMatrix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_81getCyclicExplicitMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_80getCyclicExplicitMatrix},
+  {"setLanczosOneSide", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_83setLanczosOneSide, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_82setLanczosOneSide},
+  {"setTRLanczosOneSide", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3SVD_85setTRLanczosOneSide, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3SVD_84setTRLanczosOneSide},
+  {0, 0, 0, 0}
+};
 
-  /* "SLEPc/PEP.pyx":18
- *     QARNOLDI = S_(PEPQARNOLDI)
- *     TOAR     = S_(PEPTOAR)
- *     STOAR    = S_(PEPSTOAR)             # <<<<<<<<<<<<<<
- *     JD       = S_(PEPJD)
- * 
- */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(PEPSTOAR); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_STOAR, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static struct PyGetSetDef __pyx_getsets_8slepc4py_5SLEPc_SVD[] = {
+  {(char *)"transpose_mode", __pyx_getprop_8slepc4py_5SLEPc_3SVD_transpose_mode, __pyx_setprop_8slepc4py_5SLEPc_3SVD_transpose_mode, (char *)0, 0},
+  {(char *)"which", __pyx_getprop_8slepc4py_5SLEPc_3SVD_which, __pyx_setprop_8slepc4py_5SLEPc_3SVD_which, (char *)0, 0},
+  {(char *)"tol", __pyx_getprop_8slepc4py_5SLEPc_3SVD_tol, __pyx_setprop_8slepc4py_5SLEPc_3SVD_tol, (char *)0, 0},
+  {(char *)"max_it", __pyx_getprop_8slepc4py_5SLEPc_3SVD_max_it, __pyx_setprop_8slepc4py_5SLEPc_3SVD_max_it, (char *)0, 0},
+  {(char *)"bv", __pyx_getprop_8slepc4py_5SLEPc_3SVD_bv, __pyx_setprop_8slepc4py_5SLEPc_3SVD_bv, (char *)0, 0},
+  {0, 0, 0, 0, 0}
+};
 
-  /* "SLEPc/PEP.pyx":19
- *     TOAR     = S_(PEPTOAR)
- *     STOAR    = S_(PEPSTOAR)
- *     JD       = S_(PEPJD)             # <<<<<<<<<<<<<<
- * 
- * class PEPProblemType(object):
- */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(PEPJD); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_JD, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+DL_EXPORT(PyTypeObject) PySlepcSVD_Type = {
+  PyVarObject_HEAD_INIT(0, 0)
+  "slepc4py.SLEPc.SVD", /*tp_name*/
+  sizeof(struct PySlepcSVDObject), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_8slepc4py_5SLEPc_SVD, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
+  #endif
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  "\n    SVD\n    ", /*tp_doc*/
+  __pyx_tp_traverse_8slepc4py_5SLEPc_SVD, /*tp_traverse*/
+  __pyx_tp_clear_8slepc4py_5SLEPc_SVD, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_8slepc4py_5SLEPc_SVD, /*tp_methods*/
+  0, /*tp_members*/
+  __pyx_getsets_8slepc4py_5SLEPc_SVD, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  0, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_8slepc4py_5SLEPc_SVD, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  0, /*tp_version_tag*/
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
+static struct __pyx_vtabstruct_8slepc4py_5SLEPc_PEP __pyx_vtable_8slepc4py_5SLEPc_PEP;
 
-  /* "SLEPc/PEP.pyx":3
- * # -----------------------------------------------------------------------------
- * 
- * class PEPType(object):             # <<<<<<<<<<<<<<
- *     """
- *     PEP type
- */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_PEPType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PEPType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_PEP(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct PySlepcPEPObject *p;
+  PyObject *o = __pyx_ptype_8petsc4py_5PETSc_Object->tp_new(t, a, k);
+  if (unlikely(!o)) return 0;
+  p = ((struct PySlepcPEPObject *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8slepc4py_5SLEPc_PEP;
+  if (unlikely(__pyx_pw_8slepc4py_5SLEPc_3PEP_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
+  return o;
+}
 
-  /* "SLEPc/PEP.pyx":21
- *     JD       = S_(PEPJD)
- * 
- * class PEPProblemType(object):             # <<<<<<<<<<<<<<
- *     """
- *     PEP problem type
- */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_PEPProblemType, __pyx_n_s_PEPProblemType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_PEP_problem_type_GENERAL_No_str); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+static void __pyx_tp_dealloc_8slepc4py_5SLEPc_PEP(PyObject *o) {
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  PyObject_GC_Track(o);
+  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) __pyx_ptype_8petsc4py_5PETSc_Object->tp_dealloc(o); else __Pyx_call_next_tp_dealloc(o, __pyx_tp_dealloc_8slepc4py_5SLEPc_PEP);
+}
 
-  /* "SLEPc/PEP.pyx":29
- *     - `GYROSCOPIC`:   Hamiltonian structure.
- *     """
- *     GENERAL    = PEP_GENERAL             # <<<<<<<<<<<<<<
- *     HERMITIAN  = PEP_HERMITIAN
- *     GYROSCOPIC = PEP_GYROSCOPIC
- */
-  __pyx_t_5 = PyInt_FromLong(PEP_GENERAL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GENERAL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static int __pyx_tp_traverse_8slepc4py_5SLEPc_PEP(PyObject *o, visitproc v, void *a) {
+  int e;
+  e = ((likely(__pyx_ptype_8petsc4py_5PETSc_Object)) ? ((__pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse) ? __pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_8slepc4py_5SLEPc_PEP)); if (e) return e;
+  return 0;
+}
 
-  /* "SLEPc/PEP.pyx":30
- *     """
- *     GENERAL    = PEP_GENERAL
- *     HERMITIAN  = PEP_HERMITIAN             # <<<<<<<<<<<<<<
- *     GYROSCOPIC = PEP_GYROSCOPIC
- * 
- */
-  __pyx_t_5 = PyInt_FromLong(PEP_HERMITIAN); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HERMITIAN, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static int __pyx_tp_clear_8slepc4py_5SLEPc_PEP(PyObject *o) {
+  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) { if (__pyx_ptype_8petsc4py_5PETSc_Object->tp_clear) __pyx_ptype_8petsc4py_5PETSc_Object->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_8slepc4py_5SLEPc_PEP);
+  return 0;
+}
 
-  /* "SLEPc/PEP.pyx":31
- *     GENERAL    = PEP_GENERAL
- *     HERMITIAN  = PEP_HERMITIAN
- *     GYROSCOPIC = PEP_GYROSCOPIC             # <<<<<<<<<<<<<<
- * 
- * class PEPErrorType(object):
- */
-  __pyx_t_5 = PyInt_FromLong(PEP_GYROSCOPIC); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GYROSCOPIC, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyMethodDef __pyx_methods_8slepc4py_5SLEPc_PEP[] = {
+  {"view", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_3view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_2view},
+  {"destroy", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_5destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_4destroy},
+  {"reset", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_7reset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_6reset},
+  {"create", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_9create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_8create},
+  {"setType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_11setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_10setType},
+  {"getType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_13getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_12getType},
+  {"getOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_15getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_14getOptionsPrefix},
+  {"setOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_17setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_16setOptionsPrefix},
+  {"appendOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_19appendOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_18appendOptionsPrefix},
+  {"setFromOptions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_21setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_20setFromOptions},
+  {"getBasis", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_23getBasis, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_22getBasis},
+  {"setBasis", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_25setBasis, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_24setBasis},
+  {"getProblemType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_27getProblemType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_26getProblemType},
+  {"setProblemType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_29setProblemType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_28setProblemType},
+  {"getWhichEigenpairs", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_31getWhichEigenpairs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_30getWhichEigenpairs},
+  {"setWhichEigenpairs", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_33setWhichEigenpairs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_32setWhichEigenpairs},
+  {"getTolerances", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_35getTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_34getTolerances},
+  {"setTolerances", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_37setTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_36setTolerances},
+  {"getConvergenceTest", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_39getConvergenceTest, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_38getConvergenceTest},
+  {"setConvergenceTest", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_41setConvergenceTest, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_40setConvergenceTest},
+  {"getRefine", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_43getRefine, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_42getRefine},
+  {"setRefine", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_45setRefine, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_44setRefine},
+  {"getTrackAll", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_47getTrackAll, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_46getTrackAll},
+  {"setTrackAll", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_49setTrackAll, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_48setTrackAll},
+  {"getDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_51getDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_50getDimensions},
+  {"setDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_53setDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_52setDimensions},
+  {"getST", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_55getST, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_54getST},
+  {"setST", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_57setST, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_56setST},
+  {"getScale", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_59getScale, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_58getScale},
+  {"setScale", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_61setScale, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_60setScale},
+  {"getBV", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_63getBV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_62getBV},
+  {"setBV", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_65setBV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_64setBV},
+  {"getRG", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_67getRG, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_66getRG},
+  {"setRG", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_69setRG, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_68setRG},
+  {"getOperators", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_71getOperators, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_70getOperators},
+  {"setOperators", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_73setOperators, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_72setOperators},
+  {"setInitialSpace", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_75setInitialSpace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_74setInitialSpace},
+  {"cancelMonitor", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_77cancelMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_76cancelMonitor},
+  {"setUp", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_79setUp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_78setUp},
+  {"solve", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_81solve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_80solve},
+  {"getIterationNumber", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_83getIterationNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_82getIterationNumber},
+  {"getConvergedReason", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_85getConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_84getConvergedReason},
+  {"getConverged", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_87getConverged, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_86getConverged},
+  {"getEigenpair", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_89getEigenpair, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_88getEigenpair},
+  {"getErrorEstimate", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_91getErrorEstimate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_90getErrorEstimate},
+  {"computeError", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_93computeError, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_92computeError},
+  {"errorView", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_95errorView, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_94errorView},
+  {"setLinearEPS", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_97setLinearEPS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_96setLinearEPS},
+  {"getLinearEPS", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_99getLinearEPS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_98getLinearEPS},
+  {"setLinearCompanionForm", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_101setLinearCompanionForm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_100setLinearCompanionForm},
+  {"getLinearCompanionForm", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_103getLinearCompanionForm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_102getLinearCompanionForm},
+  {"setLinearExplicitMatrix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_105setLinearExplicitMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_104setLinearExplicitMatrix},
+  {"getLinearExplicitMatrix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3PEP_107getLinearExplicitMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3PEP_106getLinearExplicitMatrix},
+  {0, 0, 0, 0}
+};
 
-  /* "SLEPc/PEP.pyx":21
- *     JD       = S_(PEPJD)
- * 
- * class PEPProblemType(object):             # <<<<<<<<<<<<<<
- *     """
- *     PEP problem type
- */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_PEPProblemType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PEPProblemType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+DL_EXPORT(PyTypeObject) PySlepcPEP_Type = {
+  PyVarObject_HEAD_INIT(0, 0)
+  "slepc4py.SLEPc.PEP", /*tp_name*/
+  sizeof(struct PySlepcPEPObject), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_8slepc4py_5SLEPc_PEP, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
+  #endif
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  "\n    PEP\n    ", /*tp_doc*/
+  __pyx_tp_traverse_8slepc4py_5SLEPc_PEP, /*tp_traverse*/
+  __pyx_tp_clear_8slepc4py_5SLEPc_PEP, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_8slepc4py_5SLEPc_PEP, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  0, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_8slepc4py_5SLEPc_PEP, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  0, /*tp_version_tag*/
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
+static struct __pyx_vtabstruct_8slepc4py_5SLEPc_NEP __pyx_vtable_8slepc4py_5SLEPc_NEP;
 
-  /* "SLEPc/PEP.pyx":33
- *     GYROSCOPIC = PEP_GYROSCOPIC
- * 
- * class PEPErrorType(object):             # <<<<<<<<<<<<<<
- *     """
- *     PEP error type to assess accuracy of computed solutions
- */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_PEPErrorType, __pyx_n_s_PEPErrorType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_PEP_error_type_to_assess_accura); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_NEP(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct PySlepcNEPObject *p;
+  PyObject *o = __pyx_ptype_8petsc4py_5PETSc_Object->tp_new(t, a, k);
+  if (unlikely(!o)) return 0;
+  p = ((struct PySlepcNEPObject *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8slepc4py_5SLEPc_NEP;
+  if (unlikely(__pyx_pw_8slepc4py_5SLEPc_3NEP_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
+  return o;
+}
 
-  /* "SLEPc/PEP.pyx":41
- *     - `BACKWARD`:  Backward error.
- *     """
- *     ABSOLUTE = PEP_ERROR_ABSOLUTE             # <<<<<<<<<<<<<<
- *     RELATIVE = PEP_ERROR_RELATIVE
- *     BACKWARD = PEP_ERROR_BACKWARD
- */
-  __pyx_t_5 = PyInt_FromLong(PEP_ERROR_ABSOLUTE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ABSOLUTE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static void __pyx_tp_dealloc_8slepc4py_5SLEPc_NEP(PyObject *o) {
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  PyObject_GC_Track(o);
+  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) __pyx_ptype_8petsc4py_5PETSc_Object->tp_dealloc(o); else __Pyx_call_next_tp_dealloc(o, __pyx_tp_dealloc_8slepc4py_5SLEPc_NEP);
+}
 
-  /* "SLEPc/PEP.pyx":42
- *     """
- *     ABSOLUTE = PEP_ERROR_ABSOLUTE
- *     RELATIVE = PEP_ERROR_RELATIVE             # <<<<<<<<<<<<<<
- *     BACKWARD = PEP_ERROR_BACKWARD
- * 
- */
-  __pyx_t_5 = PyInt_FromLong(PEP_ERROR_RELATIVE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RELATIVE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static int __pyx_tp_traverse_8slepc4py_5SLEPc_NEP(PyObject *o, visitproc v, void *a) {
+  int e;
+  e = ((likely(__pyx_ptype_8petsc4py_5PETSc_Object)) ? ((__pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse) ? __pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_8slepc4py_5SLEPc_NEP)); if (e) return e;
+  return 0;
+}
 
-  /* "SLEPc/PEP.pyx":43
- *     ABSOLUTE = PEP_ERROR_ABSOLUTE
- *     RELATIVE = PEP_ERROR_RELATIVE
- *     BACKWARD = PEP_ERROR_BACKWARD             # <<<<<<<<<<<<<<
- * 
- * class PEPWhich(object):
- */
-  __pyx_t_5 = PyInt_FromLong(PEP_ERROR_BACKWARD); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BACKWARD, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static int __pyx_tp_clear_8slepc4py_5SLEPc_NEP(PyObject *o) {
+  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) { if (__pyx_ptype_8petsc4py_5PETSc_Object->tp_clear) __pyx_ptype_8petsc4py_5PETSc_Object->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_8slepc4py_5SLEPc_NEP);
+  return 0;
+}
 
-  /* "SLEPc/PEP.pyx":33
- *     GYROSCOPIC = PEP_GYROSCOPIC
- * 
- * class PEPErrorType(object):             # <<<<<<<<<<<<<<
- *     """
- *     PEP error type to assess accuracy of computed solutions
- */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_PEPErrorType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PEPErrorType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+static PyMethodDef __pyx_methods_8slepc4py_5SLEPc_NEP[] = {
+  {"view", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_3view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_2view},
+  {"destroy", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_5destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_4destroy},
+  {"reset", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_7reset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_6reset},
+  {"create", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_9create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_8create},
+  {"setType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_11setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_10setType},
+  {"getType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_13getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_12getType},
+  {"getOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_15getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_14getOptionsPrefix},
+  {"setOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_17setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_16setOptionsPrefix},
+  {"appendOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_19appendOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_18appendOptionsPrefix},
+  {"setFromOptions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_21setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_20setFromOptions},
+  {"getWhichEigenpairs", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_23getWhichEigenpairs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_22getWhichEigenpairs},
+  {"setWhichEigenpairs", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_25setWhichEigenpairs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_24setWhichEigenpairs},
+  {"getTolerances", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_27getTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_26getTolerances},
+  {"setTolerances", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_29setTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_28setTolerances},
+  {"getRIILagPreconditioner", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_31getRIILagPreconditioner, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_30getRIILagPreconditioner},
+  {"setRIILagPreconditioner", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_33setRIILagPreconditioner, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_32setRIILagPreconditioner},
+  {"getTrackAll", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_35getTrackAll, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_34getTrackAll},
+  {"setTrackAll", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_37setTrackAll, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_36setTrackAll},
+  {"getDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_39getDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_38getDimensions},
+  {"setDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_41setDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_40setDimensions},
+  {"getBV", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_43getBV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_42getBV},
+  {"setBV", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_45setBV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_44setBV},
+  {"getRG", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_47getRG, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_46getRG},
+  {"setRG", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_49setRG, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_48setRG},
+  {"setInitialSpace", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_51setInitialSpace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_50setInitialSpace},
+  {"cancelMonitor", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_53cancelMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_52cancelMonitor},
+  {"setUp", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_55setUp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_54setUp},
+  {"solve", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_57solve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_56solve},
+  {"getIterationNumber", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_59getIterationNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_58getIterationNumber},
+  {"getConvergedReason", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_61getConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_60getConvergedReason},
+  {"getConverged", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_63getConverged, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_62getConverged},
+  {"getEigenpair", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_65getEigenpair, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_64getEigenpair},
+  {"getErrorEstimate", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_67getErrorEstimate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_66getErrorEstimate},
+  {"computeError", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_69computeError, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_68computeError},
+  {"errorView", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_71errorView, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_70errorView},
+  {"setFunction", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_73setFunction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_72setFunction},
+  {"setJacobian", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_75setJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_74setJacobian},
+  {"setSplitOperator", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3NEP_77setSplitOperator, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3NEP_76setSplitOperator},
+  {0, 0, 0, 0}
+};
 
-  /* "SLEPc/PEP.pyx":45
- *     BACKWARD = PEP_ERROR_BACKWARD
- * 
- * class PEPWhich(object):             # <<<<<<<<<<<<<<
- *     """
- *     PEP desired part of spectrum
- */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_PEPWhich, __pyx_n_s_PEPWhich, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_PEP_desired_part_of_spectrum_LA); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+DL_EXPORT(PyTypeObject) PySlepcNEP_Type = {
+  PyVarObject_HEAD_INIT(0, 0)
+  "slepc4py.SLEPc.NEP", /*tp_name*/
+  sizeof(struct PySlepcNEPObject), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_8slepc4py_5SLEPc_NEP, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
+  #endif
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  "\n    NEP\n    ", /*tp_doc*/
+  __pyx_tp_traverse_8slepc4py_5SLEPc_NEP, /*tp_traverse*/
+  __pyx_tp_clear_8slepc4py_5SLEPc_NEP, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_8slepc4py_5SLEPc_NEP, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  0, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_8slepc4py_5SLEPc_NEP, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  0, /*tp_version_tag*/
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
+static struct __pyx_vtabstruct_8slepc4py_5SLEPc_MFN __pyx_vtable_8slepc4py_5SLEPc_MFN;
 
-  /* "SLEPc/PEP.pyx":59
- *     - `TARGET_IMAGINARY`:   Imaginary part closest to target.
- *     """
- *     LARGEST_MAGNITUDE  = PEP_LARGEST_MAGNITUDE             # <<<<<<<<<<<<<<
- *     SMALLEST_MAGNITUDE = PEP_SMALLEST_MAGNITUDE
- *     LARGEST_REAL       = PEP_LARGEST_REAL
- */
-  __pyx_t_5 = PyInt_FromLong(PEP_LARGEST_MAGNITUDE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LARGEST_MAGNITUDE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_MFN(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct PySlepcMFNObject *p;
+  PyObject *o = __pyx_ptype_8petsc4py_5PETSc_Object->tp_new(t, a, k);
+  if (unlikely(!o)) return 0;
+  p = ((struct PySlepcMFNObject *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8slepc4py_5SLEPc_MFN;
+  if (unlikely(__pyx_pw_8slepc4py_5SLEPc_3MFN_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
+  return o;
+}
 
-  /* "SLEPc/PEP.pyx":60
- *     """
- *     LARGEST_MAGNITUDE  = PEP_LARGEST_MAGNITUDE
- *     SMALLEST_MAGNITUDE = PEP_SMALLEST_MAGNITUDE             # <<<<<<<<<<<<<<
- *     LARGEST_REAL       = PEP_LARGEST_REAL
- *     SMALLEST_REAL      = PEP_SMALLEST_REAL
- */
-  __pyx_t_5 = PyInt_FromLong(PEP_SMALLEST_MAGNITUDE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SMALLEST_MAGNITUDE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static void __pyx_tp_dealloc_8slepc4py_5SLEPc_MFN(PyObject *o) {
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  PyObject_GC_Track(o);
+  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) __pyx_ptype_8petsc4py_5PETSc_Object->tp_dealloc(o); else __Pyx_call_next_tp_dealloc(o, __pyx_tp_dealloc_8slepc4py_5SLEPc_MFN);
+}
 
-  /* "SLEPc/PEP.pyx":61
- *     LARGEST_MAGNITUDE  = PEP_LARGEST_MAGNITUDE
- *     SMALLEST_MAGNITUDE = PEP_SMALLEST_MAGNITUDE
- *     LARGEST_REAL       = PEP_LARGEST_REAL             # <<<<<<<<<<<<<<
- *     SMALLEST_REAL      = PEP_SMALLEST_REAL
- *     LARGEST_IMAGINARY  = PEP_LARGEST_IMAGINARY
- */
-  __pyx_t_5 = PyInt_FromLong(PEP_LARGEST_REAL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LARGEST_REAL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static int __pyx_tp_traverse_8slepc4py_5SLEPc_MFN(PyObject *o, visitproc v, void *a) {
+  int e;
+  e = ((likely(__pyx_ptype_8petsc4py_5PETSc_Object)) ? ((__pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse) ? __pyx_ptype_8petsc4py_5PETSc_Object->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_8slepc4py_5SLEPc_MFN)); if (e) return e;
+  return 0;
+}
 
-  /* "SLEPc/PEP.pyx":62
- *     SMALLEST_MAGNITUDE = PEP_SMALLEST_MAGNITUDE
- *     LARGEST_REAL       = PEP_LARGEST_REAL
- *     SMALLEST_REAL      = PEP_SMALLEST_REAL             # <<<<<<<<<<<<<<
- *     LARGEST_IMAGINARY  = PEP_LARGEST_IMAGINARY
- *     SMALLEST_IMAGINARY = PEP_SMALLEST_IMAGINARY
- */
-  __pyx_t_5 = PyInt_FromLong(PEP_SMALLEST_REAL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SMALLEST_REAL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static int __pyx_tp_clear_8slepc4py_5SLEPc_MFN(PyObject *o) {
+  if (likely(__pyx_ptype_8petsc4py_5PETSc_Object)) { if (__pyx_ptype_8petsc4py_5PETSc_Object->tp_clear) __pyx_ptype_8petsc4py_5PETSc_Object->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_8slepc4py_5SLEPc_MFN);
+  return 0;
+}
 
-  /* "SLEPc/PEP.pyx":63
- *     LARGEST_REAL       = PEP_LARGEST_REAL
- *     SMALLEST_REAL      = PEP_SMALLEST_REAL
- *     LARGEST_IMAGINARY  = PEP_LARGEST_IMAGINARY             # <<<<<<<<<<<<<<
- *     SMALLEST_IMAGINARY = PEP_SMALLEST_IMAGINARY
- *     TARGET_MAGNITUDE   = PEP_TARGET_MAGNITUDE
- */
-  __pyx_t_5 = PyInt_FromLong(PEP_LARGEST_IMAGINARY); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LARGEST_IMAGINARY, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyMethodDef __pyx_methods_8slepc4py_5SLEPc_MFN[] = {
+  {"view", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_3view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_2view},
+  {"destroy", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_5destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_4destroy},
+  {"reset", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_7reset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_6reset},
+  {"create", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_9create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_8create},
+  {"setType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_11setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_10setType},
+  {"getType", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_13getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_12getType},
+  {"getOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_15getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_14getOptionsPrefix},
+  {"setOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_17setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_16setOptionsPrefix},
+  {"appendOptionsPrefix", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_19appendOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_18appendOptionsPrefix},
+  {"setFromOptions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_21setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_20setFromOptions},
+  {"getTolerances", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_23getTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_22getTolerances},
+  {"setTolerances", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_25setTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_24setTolerances},
+  {"getDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_27getDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_26getDimensions},
+  {"setDimensions", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_29setDimensions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_28setDimensions},
+  {"getFN", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_31getFN, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_30getFN},
+  {"setFN", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_33setFN, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_32setFN},
+  {"getBV", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_35getBV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_34getBV},
+  {"setBV", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_37setBV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_36setBV},
+  {"getOperator", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_39getOperator, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_38getOperator},
+  {"setOperator", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_41setOperator, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_40setOperator},
+  {"cancelMonitor", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_43cancelMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_42cancelMonitor},
+  {"setUp", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_45setUp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_44setUp},
+  {"solve", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_47solve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_46solve},
+  {"getIterationNumber", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_49getIterationNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_48getIterationNumber},
+  {"getConvergedReason", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3MFN_51getConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3MFN_50getConvergedReason},
+  {0, 0, 0, 0}
+};
 
-  /* "SLEPc/PEP.pyx":64
- *     SMALLEST_REAL      = PEP_SMALLEST_REAL
- *     LARGEST_IMAGINARY  = PEP_LARGEST_IMAGINARY
- *     SMALLEST_IMAGINARY = PEP_SMALLEST_IMAGINARY             # <<<<<<<<<<<<<<
- *     TARGET_MAGNITUDE   = PEP_TARGET_MAGNITUDE
- *     TARGET_REAL        = PEP_TARGET_REAL
- */
-  __pyx_t_5 = PyInt_FromLong(PEP_SMALLEST_IMAGINARY); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SMALLEST_IMAGINARY, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+DL_EXPORT(PyTypeObject) PySlepcMFN_Type = {
+  PyVarObject_HEAD_INIT(0, 0)
+  "slepc4py.SLEPc.MFN", /*tp_name*/
+  sizeof(struct PySlepcMFNObject), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_8slepc4py_5SLEPc_MFN, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
+  #endif
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  "\n    MFN\n    ", /*tp_doc*/
+  __pyx_tp_traverse_8slepc4py_5SLEPc_MFN, /*tp_traverse*/
+  __pyx_tp_clear_8slepc4py_5SLEPc_MFN, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_8slepc4py_5SLEPc_MFN, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  0, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_8slepc4py_5SLEPc_MFN, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  0, /*tp_version_tag*/
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
 
-  /* "SLEPc/PEP.pyx":65
- *     LARGEST_IMAGINARY  = PEP_LARGEST_IMAGINARY
- *     SMALLEST_IMAGINARY = PEP_SMALLEST_IMAGINARY
- *     TARGET_MAGNITUDE   = PEP_TARGET_MAGNITUDE             # <<<<<<<<<<<<<<
- *     TARGET_REAL        = PEP_TARGET_REAL
- *     TARGET_IMAGINARY   = PEP_TARGET_IMAGINARY
- */
-  __pyx_t_5 = PyInt_FromLong(PEP_TARGET_MAGNITUDE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TARGET_MAGNITUDE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyObject *__pyx_tp_new_8slepc4py_5SLEPc__p_mem(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  PyObject *o;
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+  }
+  if (unlikely(!o)) return 0;
+  if (unlikely(__pyx_pw_8slepc4py_5SLEPc_6_p_mem_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
+  return o;
+}
 
-  /* "SLEPc/PEP.pyx":66
- *     SMALLEST_IMAGINARY = PEP_SMALLEST_IMAGINARY
- *     TARGET_MAGNITUDE   = PEP_TARGET_MAGNITUDE
- *     TARGET_REAL        = PEP_TARGET_REAL             # <<<<<<<<<<<<<<
- *     TARGET_IMAGINARY   = PEP_TARGET_IMAGINARY
- * 
- */
-  __pyx_t_5 = PyInt_FromLong(PEP_TARGET_REAL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TARGET_REAL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static void __pyx_tp_dealloc_8slepc4py_5SLEPc__p_mem(PyObject *o) {
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  {
+    PyObject *etype, *eval, *etb;
+    PyErr_Fetch(&etype, &eval, &etb);
+    ++Py_REFCNT(o);
+    __pyx_pw_8slepc4py_5SLEPc_6_p_mem_3__dealloc__(o);
+    --Py_REFCNT(o);
+    PyErr_Restore(etype, eval, etb);
+  }
+  (*Py_TYPE(o)->tp_free)(o);
+}
 
-  /* "SLEPc/PEP.pyx":67
- *     TARGET_MAGNITUDE   = PEP_TARGET_MAGNITUDE
- *     TARGET_REAL        = PEP_TARGET_REAL
- *     TARGET_IMAGINARY   = PEP_TARGET_IMAGINARY             # <<<<<<<<<<<<<<
- * 
- * class PEPBasis(object):
- */
-  __pyx_t_5 = PyInt_FromLong(PEP_TARGET_IMAGINARY); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TARGET_IMAGINARY, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyMethodDef __pyx_methods_8slepc4py_5SLEPc__p_mem[] = {
+  {0, 0, 0, 0}
+};
 
-  /* "SLEPc/PEP.pyx":45
- *     BACKWARD = PEP_ERROR_BACKWARD
- * 
- * class PEPWhich(object):             # <<<<<<<<<<<<<<
- *     """
- *     PEP desired part of spectrum
- */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_PEPWhich, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PEPWhich, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+static PyTypeObject __pyx_type_8slepc4py_5SLEPc__p_mem = {
+  PyVarObject_HEAD_INIT(0, 0)
+  "slepc4py.SLEPc._p_mem", /*tp_name*/
+  sizeof(struct __pyx_obj_8slepc4py_5SLEPc__p_mem), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_8slepc4py_5SLEPc__p_mem, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
+  #endif
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
+  0, /*tp_doc*/
+  0, /*tp_traverse*/
+  0, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_8slepc4py_5SLEPc__p_mem, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  0, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_8slepc4py_5SLEPc__p_mem, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  0, /*tp_version_tag*/
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
 
-  /* "SLEPc/PEP.pyx":69
- *     TARGET_IMAGINARY   = PEP_TARGET_IMAGINARY
- * 
- * class PEPBasis(object):             # <<<<<<<<<<<<<<
- *     MONOMIAL   = PEP_BASIS_MONOMIAL
- *     CHEBYSHEV1 = PEP_BASIS_CHEBYSHEV1
- */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_PEPBasis, __pyx_n_s_PEPBasis, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+static PyObject *__pyx_tp_new_8slepc4py_5SLEPc_Sys(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  PyObject *o;
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+  }
+  if (unlikely(!o)) return 0;
+  return o;
+}
 
-  /* "SLEPc/PEP.pyx":70
- * 
- * class PEPBasis(object):
- *     MONOMIAL   = PEP_BASIS_MONOMIAL             # <<<<<<<<<<<<<<
- *     CHEBYSHEV1 = PEP_BASIS_CHEBYSHEV1
- *     CHEBYSHEV2 = PEP_BASIS_CHEBYSHEV2
- */
-  __pyx_t_5 = PyInt_FromLong(PEP_BASIS_MONOMIAL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MONOMIAL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static void __pyx_tp_dealloc_8slepc4py_5SLEPc_Sys(PyObject *o) {
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  (*Py_TYPE(o)->tp_free)(o);
+}
 
-  /* "SLEPc/PEP.pyx":71
- * class PEPBasis(object):
- *     MONOMIAL   = PEP_BASIS_MONOMIAL
- *     CHEBYSHEV1 = PEP_BASIS_CHEBYSHEV1             # <<<<<<<<<<<<<<
- *     CHEBYSHEV2 = PEP_BASIS_CHEBYSHEV2
- *     LEGENDRE   = PEP_BASIS_LEGENDRE
- */
-  __pyx_t_5 = PyInt_FromLong(PEP_BASIS_CHEBYSHEV1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CHEBYSHEV1, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyMethodDef __pyx_methods_8slepc4py_5SLEPc_Sys[] = {
+  {"getVersion", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3Sys_1getVersion, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3Sys_getVersion},
+  {"getVersionInfo", (PyCFunction)__pyx_pw_8slepc4py_5SLEPc_3Sys_3getVersionInfo, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8slepc4py_5SLEPc_3Sys_2getVersionInfo},
+  {0, 0, 0, 0}
+};
 
-  /* "SLEPc/PEP.pyx":72
- *     MONOMIAL   = PEP_BASIS_MONOMIAL
- *     CHEBYSHEV1 = PEP_BASIS_CHEBYSHEV1
- *     CHEBYSHEV2 = PEP_BASIS_CHEBYSHEV2             # <<<<<<<<<<<<<<
- *     LEGENDRE   = PEP_BASIS_LEGENDRE
- *     LAGUERRE   = PEP_BASIS_LAGUERRE
- */
-  __pyx_t_5 = PyInt_FromLong(PEP_BASIS_CHEBYSHEV2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CHEBYSHEV2, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyTypeObject __pyx_type_8slepc4py_5SLEPc_Sys = {
+  PyVarObject_HEAD_INIT(0, 0)
+  "slepc4py.SLEPc.Sys", /*tp_name*/
+  sizeof(struct __pyx_obj_8slepc4py_5SLEPc_Sys), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_8slepc4py_5SLEPc_Sys, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #endif
+  #if PY_MAJOR_VERSION >= 3
+  0, /*tp_as_async*/
+  #endif
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
+  0, /*tp_doc*/
+  0, /*tp_traverse*/
+  0, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_8slepc4py_5SLEPc_Sys, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  0, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_8slepc4py_5SLEPc_Sys, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  0, /*tp_version_tag*/
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
 
-  /* "SLEPc/PEP.pyx":73
- *     CHEBYSHEV1 = PEP_BASIS_CHEBYSHEV1
- *     CHEBYSHEV2 = PEP_BASIS_CHEBYSHEV2
- *     LEGENDRE   = PEP_BASIS_LEGENDRE             # <<<<<<<<<<<<<<
- *     LAGUERRE   = PEP_BASIS_LAGUERRE
- *     HERMITE    = PEP_BASIS_HERMITE
- */
-  __pyx_t_5 = PyInt_FromLong(PEP_BASIS_LEGENDRE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LEGENDRE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static PyMethodDef __pyx_methods[] = {
+  {0, 0, 0, 0}
+};
 
-  /* "SLEPc/PEP.pyx":74
- *     CHEBYSHEV2 = PEP_BASIS_CHEBYSHEV2
- *     LEGENDRE   = PEP_BASIS_LEGENDRE
- *     LAGUERRE   = PEP_BASIS_LAGUERRE             # <<<<<<<<<<<<<<
- *     HERMITE    = PEP_BASIS_HERMITE
- * 
- */
-  __pyx_t_5 = PyInt_FromLong(PEP_BASIS_LAGUERRE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LAGUERRE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+#if PY_MAJOR_VERSION >= 3
+static struct PyModuleDef __pyx_moduledef = {
+  #if PY_VERSION_HEX < 0x03020000
+    { PyObject_HEAD_INIT(NULL) NULL, 0, NULL },
+  #else
+    PyModuleDef_HEAD_INIT,
+  #endif
+    "SLEPc",
+    0, /* m_doc */
+    -1, /* m_size */
+    __pyx_methods /* m_methods */,
+    NULL, /* m_reload */
+    NULL, /* m_traverse */
+    NULL, /* m_clear */
+    (freefunc)__pyx_module_cleanup /* m_free */
+};
+#endif
 
-  /* "SLEPc/PEP.pyx":75
- *     LEGENDRE   = PEP_BASIS_LEGENDRE
- *     LAGUERRE   = PEP_BASIS_LAGUERRE
- *     HERMITE    = PEP_BASIS_HERMITE             # <<<<<<<<<<<<<<
- * 
- * class PEPScale(object):
- */
-  __pyx_t_5 = PyInt_FromLong(PEP_BASIS_HERMITE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HERMITE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+static __Pyx_StringTabEntry __pyx_string_tab[] = {
+  {&__pyx_n_s_A, __pyx_k_A, sizeof(__pyx_k_A), 0, 0, 1, 1},
+  {&__pyx_n_s_ABS, __pyx_k_ABS, sizeof(__pyx_k_ABS), 0, 0, 1, 1},
+  {&__pyx_n_s_ABSOLUTE, __pyx_k_ABSOLUTE, sizeof(__pyx_k_ABSOLUTE), 0, 0, 1, 1},
+  {&__pyx_n_s_ADD, __pyx_k_ADD, sizeof(__pyx_k_ADD), 0, 0, 1, 1},
+  {&__pyx_n_s_ALL, __pyx_k_ALL, sizeof(__pyx_k_ALL), 0, 0, 1, 1},
+  {&__pyx_n_s_ALWAYS, __pyx_k_ALWAYS, sizeof(__pyx_k_ALWAYS), 0, 0, 1, 1},
+  {&__pyx_n_s_ARNOLDI, __pyx_k_ARNOLDI, sizeof(__pyx_k_ARNOLDI), 0, 0, 1, 1},
+  {&__pyx_n_s_ARPACK, __pyx_k_ARPACK, sizeof(__pyx_k_ARPACK), 0, 0, 1, 1},
+  {&__pyx_n_s_Au, __pyx_k_Au, sizeof(__pyx_k_Au), 0, 0, 1, 1},
+  {&__pyx_n_s_B, __pyx_k_B, sizeof(__pyx_k_B), 0, 0, 1, 1},
+  {&__pyx_n_s_BACKWARD, __pyx_k_BACKWARD, sizeof(__pyx_k_BACKWARD), 0, 0, 1, 1},
+  {&__pyx_n_s_BLOPEX, __pyx_k_BLOPEX, sizeof(__pyx_k_BLOPEX), 0, 0, 1, 1},
+  {&__pyx_n_s_BLZPACK, __pyx_k_BLZPACK, sizeof(__pyx_k_BLZPACK), 0, 0, 1, 1},
+  {&__pyx_n_s_BOTH, __pyx_k_BOTH, sizeof(__pyx_k_BOTH), 0, 0, 1, 1},
+  {&__pyx_n_s_BVOrthogBlockType, __pyx_k_BVOrthogBlockType, sizeof(__pyx_k_BVOrthogBlockType), 0, 0, 1, 1},
+  {&__pyx_n_s_BVOrthogRefineType, __pyx_k_BVOrthogRefineType, sizeof(__pyx_k_BVOrthogRefineType), 0, 0, 1, 1},
+  {&__pyx_n_s_BVOrthogType, __pyx_k_BVOrthogType, sizeof(__pyx_k_BVOrthogType), 0, 0, 1, 1},
+  {&__pyx_n_s_BVType, __pyx_k_BVType, sizeof(__pyx_k_BVType), 0, 0, 1, 1},
+  {&__pyx_kp_s_BV_block_orthogonalization_type, __pyx_k_BV_block_orthogonalization_type, sizeof(__pyx_k_BV_block_orthogonalization_type), 0, 0, 1, 0},
+  {&__pyx_kp_s_BV_orthogonalization_refinement, __pyx_k_BV_orthogonalization_refinement, sizeof(__pyx_k_BV_orthogonalization_refinement), 0, 0, 1, 0},
+  {&__pyx_kp_s_BV_orthogonalization_types_CGS, __pyx_k_BV_orthogonalization_types_CGS, sizeof(__pyx_k_BV_orthogonalization_types_CGS), 0, 0, 1, 0},
+  {&__pyx_kp_s_BV_type, __pyx_k_BV_type, sizeof(__pyx_k_BV_type), 0, 0, 1, 0},
+  {&__pyx_n_s_Balance, __pyx_k_Balance, sizeof(__pyx_k_Balance), 0, 0, 1, 1},
+  {&__pyx_n_s_Basis, __pyx_k_Basis, sizeof(__pyx_k_Basis), 0, 0, 1, 1},
+  {&__pyx_n_s_BlockType, __pyx_k_BlockType, sizeof(__pyx_k_BlockType), 0, 0, 1, 1},
+  {&__pyx_n_s_Bu, __pyx_k_Bu, sizeof(__pyx_k_Bu), 0, 0, 1, 1},
+  {&__pyx_n_s_C, __pyx_k_C, sizeof(__pyx_k_C), 0, 0, 1, 1},
+  {&__pyx_n_s_CAYLEY, __pyx_k_CAYLEY, sizeof(__pyx_k_CAYLEY), 0, 0, 1, 1},
+  {&__pyx_n_s_CGS, __pyx_k_CGS, sizeof(__pyx_k_CGS), 0, 0, 1, 1},
+  {&__pyx_n_s_CHEBYSHEV1, __pyx_k_CHEBYSHEV1, sizeof(__pyx_k_CHEBYSHEV1), 0, 0, 1, 1},
+  {&__pyx_n_s_CHEBYSHEV2, __pyx_k_CHEBYSHEV2, sizeof(__pyx_k_CHEBYSHEV2), 0, 0, 1, 1},
+  {&__pyx_n_s_CHOL, __pyx_k_CHOL, sizeof(__pyx_k_CHOL), 0, 0, 1, 1},
+  {&__pyx_n_s_CISS, __pyx_k_CISS, sizeof(__pyx_k_CISS), 0, 0, 1, 1},
+  {&__pyx_n_s_COMBINE, __pyx_k_COMBINE, sizeof(__pyx_k_COMBINE), 0, 0, 1, 1},
+  {&__pyx_n_s_COMM_NULL, __pyx_k_COMM_NULL, sizeof(__pyx_k_COMM_NULL), 0, 0, 1, 1},
+  {&__pyx_n_s_COMM_SELF, __pyx_k_COMM_SELF, sizeof(__pyx_k_COMM_SELF), 0, 0, 1, 1},
+  {&__pyx_n_s_COMM_WORLD, __pyx_k_COMM_WORLD, sizeof(__pyx_k_COMM_WORLD), 0, 0, 1, 1},
+  {&__pyx_n_s_COMPOSE, __pyx_k_COMPOSE, sizeof(__pyx_k_COMPOSE), 0, 0, 1, 1},
+  {&__pyx_n_s_CONDENSED, __pyx_k_CONDENSED, sizeof(__pyx_k_CONDENSED), 0, 0, 1, 1},
+  {&__pyx_n_s_CONSTANT, __pyx_k_CONSTANT, sizeof(__pyx_k_CONSTANT), 0, 0, 1, 1},
+  {&__pyx_n_s_CONTIGUOUS, __pyx_k_CONTIGUOUS, sizeof(__pyx_k_CONTIGUOUS), 0, 0, 1, 1},
+  {&__pyx_n_s_CONVERGED_ITERATING, __pyx_k_CONVERGED_ITERATING, sizeof(__pyx_k_CONVERGED_ITERATING), 0, 0, 1, 1},
+  {&__pyx_n_s_CONVERGED_ITS, __pyx_k_CONVERGED_ITS, sizeof(__pyx_k_CONVERGED_ITS), 0, 0, 1, 1},
+  {&__pyx_n_s_CONVERGED_TOL, __pyx_k_CONVERGED_TOL, sizeof(__pyx_k_CONVERGED_TOL), 0, 0, 1, 1},
+  {&__pyx_n_s_CONVERGED_USER, __pyx_k_CONVERGED_USER, sizeof(__pyx_k_CONVERGED_USER), 0, 0, 1, 1},
+  {&__pyx_n_s_COPY, __pyx_k_COPY, sizeof(__pyx_k_COPY), 0, 0, 1, 1},
+  {&__pyx_n_s_CROSS, __pyx_k_CROSS, sizeof(__pyx_k_CROSS), 0, 0, 1, 1},
+  {&__pyx_n_s_CYCLIC, __pyx_k_CYCLIC, sizeof(__pyx_k_CYCLIC), 0, 0, 1, 1},
+  {&__pyx_n_s_CombineType, __pyx_k_CombineType, sizeof(__pyx_k_CombineType), 0, 0, 1, 1},
+  {&__pyx_n_s_Conv, __pyx_k_Conv, sizeof(__pyx_k_Conv), 0, 0, 1, 1},
+  {&__pyx_n_s_ConvergedReason, __pyx_k_ConvergedReason, sizeof(__pyx_k_ConvergedReason), 0, 0, 1, 1},
+  {&__pyx_n_s_D, __pyx_k_D, sizeof(__pyx_k_D), 0, 0, 1, 1},
+  {&__pyx_n_s_DECIDE, __pyx_k_DECIDE, sizeof(__pyx_k_DECIDE), 0, 0, 1, 1},
+  {&__pyx_n_s_DEFAULT, __pyx_k_DEFAULT, sizeof(__pyx_k_DEFAULT), 0, 0, 1, 1},
+  {&__pyx_n_s_DELAYED, __pyx_k_DELAYED, sizeof(__pyx_k_DELAYED), 0, 0, 1, 1},
+  {&__pyx_n_s_DETERMINE, __pyx_k_DETERMINE, sizeof(__pyx_k_DETERMINE), 0, 0, 1, 1},
+  {&__pyx_n_s_DIAGONAL, __pyx_k_DIAGONAL, sizeof(__pyx_k_DIAGONAL), 0, 0, 1, 1},
+  {&__pyx_n_s_DIVERGED_BREAKDOWN, __pyx_k_DIVERGED_BREAKDOWN, sizeof(__pyx_k_DIVERGED_BREAKDOWN), 0, 0, 1, 1},
+  {&__pyx_n_s_DIVERGED_ITS, __pyx_k_DIVERGED_ITS, sizeof(__pyx_k_DIVERGED_ITS), 0, 0, 1, 1},
+  {&__pyx_n_s_DIVERGED_LINEAR_SOLVE, __pyx_k_DIVERGED_LINEAR_SOLVE, sizeof(__pyx_k_DIVERGED_LINEAR_SOLVE), 0, 0, 1, 1},
+  {&__pyx_n_s_DIVERGED_SYMMETRY_LOST, __pyx_k_DIVERGED_SYMMETRY_LOST, sizeof(__pyx_k_DIVERGED_SYMMETRY_LOST), 0, 0, 1, 1},
+  {&__pyx_n_s_DIVIDE, __pyx_k_DIVIDE, sizeof(__pyx_k_DIVIDE), 0, 0, 1, 1},
+  {&__pyx_n_s_DSMatType, __pyx_k_DSMatType, sizeof(__pyx_k_DSMatType), 0, 0, 1, 1},
+  {&__pyx_n_s_DSStateType, __pyx_k_DSStateType, sizeof(__pyx_k_DSStateType), 0, 0, 1, 1},
+  {&__pyx_n_s_DSType, __pyx_k_DSType, sizeof(__pyx_k_DSType), 0, 0, 1, 1},
+  {&__pyx_kp_s_DS_state_types_RAW_Not_processe, __pyx_k_DS_state_types_RAW_Not_processe, sizeof(__pyx_k_DS_state_types_RAW_Not_processe), 0, 0, 1, 0},
+  {&__pyx_kp_s_DS_type, __pyx_k_DS_type, sizeof(__pyx_k_DS_type), 0, 0, 1, 0},
+  {&__pyx_n_s_Dl, __pyx_k_Dl, sizeof(__pyx_k_Dl), 0, 0, 1, 1},
+  {&__pyx_n_s_Dr, __pyx_k_Dr, sizeof(__pyx_k_Dr), 0, 0, 1, 1},
+  {&__pyx_n_s_ELLIPSE, __pyx_k_ELLIPSE, sizeof(__pyx_k_ELLIPSE), 0, 0, 1, 1},
+  {&__pyx_n_s_EPSBalance, __pyx_k_EPSBalance, sizeof(__pyx_k_EPSBalance), 0, 0, 1, 1},
+  {&__pyx_n_s_EPSConv, __pyx_k_EPSConv, sizeof(__pyx_k_EPSConv), 0, 0, 1, 1},
+  {&__pyx_n_s_EPSConvergedReason, __pyx_k_EPSConvergedReason, sizeof(__pyx_k_EPSConvergedReason), 0, 0, 1, 1},
+  {&__pyx_n_s_EPSErrorType, __pyx_k_EPSErrorType, sizeof(__pyx_k_EPSErrorType), 0, 0, 1, 1},
+  {&__pyx_n_s_EPSExtraction, __pyx_k_EPSExtraction, sizeof(__pyx_k_EPSExtraction), 0, 0, 1, 1},
+  {&__pyx_n_s_EPSLanczosReorthogType, __pyx_k_EPSLanczosReorthogType, sizeof(__pyx_k_EPSLanczosReorthogType), 0, 0, 1, 1},
+  {&__pyx_n_s_EPSPowerShiftType, __pyx_k_EPSPowerShiftType, sizeof(__pyx_k_EPSPowerShiftType), 0, 0, 1, 1},
+  {&__pyx_n_s_EPSProblemType, __pyx_k_EPSProblemType, sizeof(__pyx_k_EPSProblemType), 0, 0, 1, 1},
+  {&__pyx_n_s_EPSType, __pyx_k_EPSType, sizeof(__pyx_k_EPSType), 0, 0, 1, 1},
+  {&__pyx_n_s_EPSWhich, __pyx_k_EPSWhich, sizeof(__pyx_k_EPSWhich), 0, 0, 1, 1},
+  {&__pyx_kp_s_EPS_Lanczos_reorthogonalization, __pyx_k_EPS_Lanczos_reorthogonalization, sizeof(__pyx_k_EPS_Lanczos_reorthogonalization), 0, 0, 1, 0},
+  {&__pyx_kp_s_EPS_Power_shift_type_CONSTANT_R, __pyx_k_EPS_Power_shift_type_CONSTANT_R, sizeof(__pyx_k_EPS_Power_shift_type_CONSTANT_R), 0, 0, 1, 0},
+  {&__pyx_kp_s_EPS_convergence_reasons_CONVERG, __pyx_k_EPS_convergence_reasons_CONVERG, sizeof(__pyx_k_EPS_convergence_reasons_CONVERG), 0, 0, 1, 0},
+  {&__pyx_kp_s_EPS_convergence_test_ABS_REL_NO, __pyx_k_EPS_convergence_test_ABS_REL_NO, sizeof(__pyx_k_EPS_convergence_test_ABS_REL_NO), 0, 0, 1, 0},
+  {&__pyx_kp_s_EPS_desired_piece_of_spectrum_L, __pyx_k_EPS_desired_piece_of_spectrum_L, sizeof(__pyx_k_EPS_desired_piece_of_spectrum_L), 0, 0, 1, 0},
+  {&__pyx_kp_s_EPS_error_type_to_assess_accura, __pyx_k_EPS_error_type_to_assess_accura, sizeof(__pyx_k_EPS_error_type_to_assess_accura), 0, 0, 1, 0},
+  {&__pyx_kp_s_EPS_extraction_technique_RITZ_S, __pyx_k_EPS_extraction_technique_RITZ_S, sizeof(__pyx_k_EPS_extraction_technique_RITZ_S), 0, 0, 1, 0},
+  {&__pyx_kp_s_EPS_problem_type_HEP_Hermitian, __pyx_k_EPS_problem_type_HEP_Hermitian, sizeof(__pyx_k_EPS_problem_type_HEP_Hermitian), 0, 0, 1, 0},
+  {&__pyx_kp_s_EPS_type_Native_sparse_eigensol, __pyx_k_EPS_type_Native_sparse_eigensol, sizeof(__pyx_k_EPS_type_Native_sparse_eigensol), 0, 0, 1, 0},
+  {&__pyx_kp_s_EPS_type_of_balancing_used_for, __pyx_k_EPS_type_of_balancing_used_for, sizeof(__pyx_k_EPS_type_of_balancing_used_for), 0, 0, 1, 0},
+  {&__pyx_n_s_EXP, __pyx_k_EXP, sizeof(__pyx_k_EXP), 0, 0, 1, 1},
+  {&__pyx_n_s_EXPLICIT, __pyx_k_EXPLICIT, sizeof(__pyx_k_EXPLICIT), 0, 0, 1, 1},
+  {&__pyx_n_s_EXPOKIT, __pyx_k_EXPOKIT, sizeof(__pyx_k_EXPOKIT), 0, 0, 1, 1},
+  {&__pyx_n_s_Error, __pyx_k_Error, sizeof(__pyx_k_Error), 0, 0, 1, 1},
+  {&__pyx_n_s_ErrorType, __pyx_k_ErrorType, sizeof(__pyx_k_ErrorType), 0, 0, 1, 1},
+  {&__pyx_n_s_Extract, __pyx_k_Extract, sizeof(__pyx_k_Extract), 0, 0, 1, 1},
+  {&__pyx_n_s_Extraction, __pyx_k_Extraction, sizeof(__pyx_k_Extraction), 0, 0, 1, 1},
+  {&__pyx_kp_s_Extraction_strategy_used_to_obt, __pyx_k_Extraction_strategy_used_to_obt, sizeof(__pyx_k_Extraction_strategy_used_to_obt), 0, 0, 1, 0},
+  {&__pyx_n_s_F, __pyx_k_F, sizeof(__pyx_k_F), 0, 0, 1, 1},
+  {&__pyx_n_s_FEAST, __pyx_k_FEAST, sizeof(__pyx_k_FEAST), 0, 0, 1, 1},
+  {&__pyx_n_s_FNCombineType, __pyx_k_FNCombineType, sizeof(__pyx_k_FNCombineType), 0, 0, 1, 1},
+  {&__pyx_n_s_FNType, __pyx_k_FNType, sizeof(__pyx_k_FNType), 0, 0, 1, 1},
+  {&__pyx_kp_s_FN_type, __pyx_k_FN_type, sizeof(__pyx_k_FN_type), 0, 0, 1, 0},
+  {&__pyx_kp_s_FN_type_of_combination_of_child, __pyx_k_FN_type_of_combination_of_child, sizeof(__pyx_k_FN_type_of_combination_of_child), 0, 0, 1, 0},
+  {&__pyx_n_s_FULL, __pyx_k_FULL, sizeof(__pyx_k_FULL), 0, 0, 1, 1},
+  {&__pyx_n_s_GD, __pyx_k_GD, sizeof(__pyx_k_GD), 0, 0, 1, 1},
+  {&__pyx_n_s_GENERAL, __pyx_k_GENERAL, sizeof(__pyx_k_GENERAL), 0, 0, 1, 1},
+  {&__pyx_n_s_GHEP, __pyx_k_GHEP, sizeof(__pyx_k_GHEP), 0, 0, 1, 1},
+  {&__pyx_n_s_GHIEP, __pyx_k_GHIEP, sizeof(__pyx_k_GHIEP), 0, 0, 1, 1},
+  {&__pyx_n_s_GNHEP, __pyx_k_GNHEP, sizeof(__pyx_k_GNHEP), 0, 0, 1, 1},
+  {&__pyx_n_s_GS, __pyx_k_GS, sizeof(__pyx_k_GS), 0, 0, 1, 1},
+  {&__pyx_n_s_GYROSCOPIC, __pyx_k_GYROSCOPIC, sizeof(__pyx_k_GYROSCOPIC), 0, 0, 1, 1},
+  {&__pyx_n_s_HARMONIC, __pyx_k_HARMONIC, sizeof(__pyx_k_HARMONIC), 0, 0, 1, 1},
+  {&__pyx_n_s_HARMONIC_LARGEST, __pyx_k_HARMONIC_LARGEST, sizeof(__pyx_k_HARMONIC_LARGEST), 0, 0, 1, 1},
+  {&__pyx_n_s_HARMONIC_RELATIVE, __pyx_k_HARMONIC_RELATIVE, sizeof(__pyx_k_HARMONIC_RELATIVE), 0, 0, 1, 1},
+  {&__pyx_n_s_HARMONIC_RIGHT, __pyx_k_HARMONIC_RIGHT, sizeof(__pyx_k_HARMONIC_RIGHT), 0, 0, 1, 1},
+  {&__pyx_n_s_HEP, __pyx_k_HEP, sizeof(__pyx_k_HEP), 0, 0, 1, 1},
+  {&__pyx_n_s_HERMITE, __pyx_k_HERMITE, sizeof(__pyx_k_HERMITE), 0, 0, 1, 1},
+  {&__pyx_n_s_HERMITIAN, __pyx_k_HERMITIAN, sizeof(__pyx_k_HERMITIAN), 0, 0, 1, 1},
+  {&__pyx_n_s_IFNEEDED, __pyx_k_IFNEEDED, sizeof(__pyx_k_IFNEEDED), 0, 0, 1, 1},
+  {&__pyx_n_s_INPLACE, __pyx_k_INPLACE, sizeof(__pyx_k_INPLACE), 0, 0, 1, 1},
+  {&__pyx_n_s_INTERMEDIATE, __pyx_k_INTERMEDIATE, sizeof(__pyx_k_INTERMEDIATE), 0, 0, 1, 1},
+  {&__pyx_n_s_INTERPOL, __pyx_k_INTERPOL, sizeof(__pyx_k_INTERPOL), 0, 0, 1, 1},
+  {&__pyx_n_s_INTERVAL, __pyx_k_INTERVAL, sizeof(__pyx_k_INTERVAL), 0, 0, 1, 1},
+  {&__pyx_n_s_INVSQRT, __pyx_k_INVSQRT, sizeof(__pyx_k_INVSQRT), 0, 0, 1, 1},
+  {&__pyx_n_s_ITERATING, __pyx_k_ITERATING, sizeof(__pyx_k_ITERATING), 0, 0, 1, 1},
+  {&__pyx_n_s_J, __pyx_k_J, sizeof(__pyx_k_J), 0, 0, 1, 1},
+  {&__pyx_n_s_JD, __pyx_k_JD, sizeof(__pyx_k_JD), 0, 0, 1, 1},
+  {&__pyx_n_s_KRYLOV, __pyx_k_KRYLOV, sizeof(__pyx_k_KRYLOV), 0, 0, 1, 1},
+  {&__pyx_n_s_KRYLOVSCHUR, __pyx_k_KRYLOVSCHUR, sizeof(__pyx_k_KRYLOVSCHUR), 0, 0, 1, 1},
+  {&__pyx_n_s_LAGUERRE, __pyx_k_LAGUERRE, sizeof(__pyx_k_LAGUERRE), 0, 0, 1, 1},
+  {&__pyx_n_s_LANCZOS, __pyx_k_LANCZOS, sizeof(__pyx_k_LANCZOS), 0, 0, 1, 1},
+  {&__pyx_n_s_LAPACK, __pyx_k_LAPACK, sizeof(__pyx_k_LAPACK), 0, 0, 1, 1},
+  {&__pyx_n_s_LARGEST, __pyx_k_LARGEST, sizeof(__pyx_k_LARGEST), 0, 0, 1, 1},
+  {&__pyx_n_s_LARGEST_IMAGINARY, __pyx_k_LARGEST_IMAGINARY, sizeof(__pyx_k_LARGEST_IMAGINARY), 0, 0, 1, 1},
+  {&__pyx_n_s_LARGEST_MAGNITUDE, __pyx_k_LARGEST_MAGNITUDE, sizeof(__pyx_k_LARGEST_MAGNITUDE), 0, 0, 1, 1},
+  {&__pyx_n_s_LARGEST_REAL, __pyx_k_LARGEST_REAL, sizeof(__pyx_k_LARGEST_REAL), 0, 0, 1, 1},
+  {&__pyx_n_s_LEGENDRE, __pyx_k_LEGENDRE, sizeof(__pyx_k_LEGENDRE), 0, 0, 1, 1},
+  {&__pyx_n_s_LINEAR, __pyx_k_LINEAR, sizeof(__pyx_k_LINEAR), 0, 0, 1, 1},
+  {&__pyx_n_s_LOBPCG, __pyx_k_LOBPCG, sizeof(__pyx_k_LOBPCG), 0, 0, 1, 1},
+  {&__pyx_n_s_LOCAL, __pyx_k_LOCAL, sizeof(__pyx_k_LOCAL), 0, 0, 1, 1},
+  {&__pyx_n_s_LOG, __pyx_k_LOG, sizeof(__pyx_k_LOG), 0, 0, 1, 1},
+  {&__pyx_n_s_LanczosReorthogType, __pyx_k_LanczosReorthogType, sizeof(__pyx_k_LanczosReorthogType), 0, 0, 1, 1},
+  {&__pyx_n_s_MAT, __pyx_k_MAT, sizeof(__pyx_k_MAT), 0, 0, 1, 1},
+  {&__pyx_n_s_MBE, __pyx_k_MBE, sizeof(__pyx_k_MBE), 0, 0, 1, 1},
+  {&__pyx_n_s_MFNConvergedReason, __pyx_k_MFNConvergedReason, sizeof(__pyx_k_MFNConvergedReason), 0, 0, 1, 1},
+  {&__pyx_n_s_MFNType, __pyx_k_MFNType, sizeof(__pyx_k_MFNType), 0, 0, 1, 1},
+  {&__pyx_kp_s_MFN_type_Action_of_a_matrix_fun, __pyx_k_MFN_type_Action_of_a_matrix_fun, sizeof(__pyx_k_MFN_type_Action_of_a_matrix_fun), 0, 0, 1, 0},
+  {&__pyx_n_s_MGS, __pyx_k_MGS, sizeof(__pyx_k_MGS), 0, 0, 1, 1},
+  {&__pyx_n_s_MONOMIAL, __pyx_k_MONOMIAL, sizeof(__pyx_k_MONOMIAL), 0, 0, 1, 1},
+  {&__pyx_n_s_MULTIPLE, __pyx_k_MULTIPLE, sizeof(__pyx_k_MULTIPLE), 0, 0, 1, 1},
+  {&__pyx_n_s_MULTIPLY, __pyx_k_MULTIPLY, sizeof(__pyx_k_MULTIPLY), 0, 0, 1, 1},
+  {&__pyx_n_s_MatMode, __pyx_k_MatMode, sizeof(__pyx_k_MatMode), 0, 0, 1, 1},
+  {&__pyx_n_s_MatType, __pyx_k_MatType, sizeof(__pyx_k_MatType), 0, 0, 1, 1},
+  {&__pyx_n_s_MemoryError, __pyx_k_MemoryError, sizeof(__pyx_k_MemoryError), 0, 0, 1, 1},
+  {&__pyx_n_s_NARNOLDI, __pyx_k_NARNOLDI, sizeof(__pyx_k_NARNOLDI), 0, 0, 1, 1},
+  {&__pyx_n_s_NEP, __pyx_k_NEP, sizeof(__pyx_k_NEP), 0, 0, 1, 1},
+  {&__pyx_n_s_NEPConvergedReason, __pyx_k_NEPConvergedReason, sizeof(__pyx_k_NEPConvergedReason), 0, 0, 1, 1},
+  {&__pyx_n_s_NEPErrorType, __pyx_k_NEPErrorType, sizeof(__pyx_k_NEPErrorType), 0, 0, 1, 1},
+  {&__pyx_n_s_NEPRefine, __pyx_k_NEPRefine, sizeof(__pyx_k_NEPRefine), 0, 0, 1, 1},
+  {&__pyx_n_s_NEPRefineScheme, __pyx_k_NEPRefineScheme, sizeof(__pyx_k_NEPRefineScheme), 0, 0, 1, 1},
+  {&__pyx_n_s_NEPType, __pyx_k_NEPType, sizeof(__pyx_k_NEPType), 0, 0, 1, 1},
+  {&__pyx_n_s_NEPWhich, __pyx_k_NEPWhich, sizeof(__pyx_k_NEPWhich), 0, 0, 1, 1},
+  {&__pyx_kp_s_NEP_error_type_to_assess_accura, __pyx_k_NEP_error_type_to_assess_accura, sizeof(__pyx_k_NEP_error_type_to_assess_accura), 0, 0, 1, 0},
+  {&__pyx_kp_s_NEP_refinement_strategy_NONE_No, __pyx_k_NEP_refinement_strategy_NONE_No, sizeof(__pyx_k_NEP_refinement_strategy_NONE_No), 0, 0, 1, 0},
+  {&__pyx_kp_s_NEP_type_Nonlinear_eigensolvers, __pyx_k_NEP_type_Nonlinear_eigensolvers, sizeof(__pyx_k_NEP_type_Nonlinear_eigensolvers), 0, 0, 1, 0},
+  {&__pyx_n_s_NEVER, __pyx_k_NEVER, sizeof(__pyx_k_NEVER), 0, 0, 1, 1},
+  {&__pyx_n_s_NHEP, __pyx_k_NHEP, sizeof(__pyx_k_NHEP), 0, 0, 1, 1},
+  {&__pyx_n_s_NLEIGS, __pyx_k_NLEIGS, sizeof(__pyx_k_NLEIGS), 0, 0, 1, 1},
+  {&__pyx_n_s_NONE, __pyx_k_NONE, sizeof(__pyx_k_NONE), 0, 0, 1, 1},
+  {&__pyx_n_s_NORM, __pyx_k_NORM, sizeof(__pyx_k_NORM), 0, 0, 1, 1},
+  {&__pyx_n_s_ONESIDE, __pyx_k_ONESIDE, sizeof(__pyx_k_ONESIDE), 0, 0, 1, 1},
+  {&__pyx_n_s_OrthogBlockType, __pyx_k_OrthogBlockType, sizeof(__pyx_k_OrthogBlockType), 0, 0, 1, 1},
+  {&__pyx_n_s_OrthogRefineType, __pyx_k_OrthogRefineType, sizeof(__pyx_k_OrthogRefineType), 0, 0, 1, 1},
+  {&__pyx_n_s_OrthogType, __pyx_k_OrthogType, sizeof(__pyx_k_OrthogType), 0, 0, 1, 1},
+  {&__pyx_n_s_P, __pyx_k_P, sizeof(__pyx_k_P), 0, 0, 1, 1},
+  {&__pyx_n_s_PARTIAL, __pyx_k_PARTIAL, sizeof(__pyx_k_PARTIAL), 0, 0, 1, 1},
+  {&__pyx_n_s_PEP, __pyx_k_PEP, sizeof(__pyx_k_PEP), 0, 0, 1, 1},
+  {&__pyx_n_s_PEPBasis, __pyx_k_PEPBasis, sizeof(__pyx_k_PEPBasis), 0, 0, 1, 1},
+  {&__pyx_n_s_PEPConv, __pyx_k_PEPConv, sizeof(__pyx_k_PEPConv), 0, 0, 1, 1},
+  {&__pyx_n_s_PEPConvergedReason, __pyx_k_PEPConvergedReason, sizeof(__pyx_k_PEPConvergedReason), 0, 0, 1, 1},
+  {&__pyx_n_s_PEPErrorType, __pyx_k_PEPErrorType, sizeof(__pyx_k_PEPErrorType), 0, 0, 1, 1},
+  {&__pyx_n_s_PEPExtract, __pyx_k_PEPExtract, sizeof(__pyx_k_PEPExtract), 0, 0, 1, 1},
+  {&__pyx_n_s_PEPProblemType, __pyx_k_PEPProblemType, sizeof(__pyx_k_PEPProblemType), 0, 0, 1, 1},
+  {&__pyx_n_s_PEPRefine, __pyx_k_PEPRefine, sizeof(__pyx_k_PEPRefine), 0, 0, 1, 1},
+  {&__pyx_n_s_PEPRefineScheme, __pyx_k_PEPRefineScheme, sizeof(__pyx_k_PEPRefineScheme), 0, 0, 1, 1},
+  {&__pyx_n_s_PEPScale, __pyx_k_PEPScale, sizeof(__pyx_k_PEPScale), 0, 0, 1, 1},
+  {&__pyx_n_s_PEPType, __pyx_k_PEPType, sizeof(__pyx_k_PEPType), 0, 0, 1, 1},
+  {&__pyx_n_s_PEPWhich, __pyx_k_PEPWhich, sizeof(__pyx_k_PEPWhich), 0, 0, 1, 1},
+  {&__pyx_kp_s_PEP_convergence_reasons_CONVERG, __pyx_k_PEP_convergence_reasons_CONVERG, sizeof(__pyx_k_PEP_convergence_reasons_CONVERG), 0, 0, 1, 0},
+  {&__pyx_kp_s_PEP_convergence_test_ABS_REL_NO, __pyx_k_PEP_convergence_test_ABS_REL_NO, sizeof(__pyx_k_PEP_convergence_test_ABS_REL_NO), 0, 0, 1, 0},
+  {&__pyx_kp_s_PEP_desired_part_of_spectrum_LA, __pyx_k_PEP_desired_part_of_spectrum_LA, sizeof(__pyx_k_PEP_desired_part_of_spectrum_LA), 0, 0, 1, 0},
+  {&__pyx_kp_s_PEP_error_type_to_assess_accura, __pyx_k_PEP_error_type_to_assess_accura, sizeof(__pyx_k_PEP_error_type_to_assess_accura), 0, 0, 1, 0},
+  {&__pyx_kp_s_PEP_problem_type_GENERAL_No_str, __pyx_k_PEP_problem_type_GENERAL_No_str, sizeof(__pyx_k_PEP_problem_type_GENERAL_No_str), 0, 0, 1, 0},
+  {&__pyx_kp_s_PEP_refinement_strategy_NONE_No, __pyx_k_PEP_refinement_strategy_NONE_No, sizeof(__pyx_k_PEP_refinement_strategy_NONE_No), 0, 0, 1, 0},
+  {&__pyx_kp_s_PEP_scaling_strategy_NONE_No_sc, __pyx_k_PEP_scaling_strategy_NONE_No_sc, sizeof(__pyx_k_PEP_scaling_strategy_NONE_No_sc), 0, 0, 1, 0},
+  {&__pyx_kp_s_PEP_type_Polynomial_eigensolver, __pyx_k_PEP_type_Polynomial_eigensolver, sizeof(__pyx_k_PEP_type_Polynomial_eigensolver), 0, 0, 1, 0},
+  {&__pyx_n_s_PERIODIC, __pyx_k_PERIODIC, sizeof(__pyx_k_PERIODIC), 0, 0, 1, 1},
+  {&__pyx_n_s_PGNHEP, __pyx_k_PGNHEP, sizeof(__pyx_k_PGNHEP), 0, 0, 1, 1},
+  {&__pyx_n_s_PHI, __pyx_k_PHI, sizeof(__pyx_k_PHI), 0, 0, 1, 1},
+  {&__pyx_n_s_POLYGON, __pyx_k_POLYGON, sizeof(__pyx_k_POLYGON), 0, 0, 1, 1},
+  {&__pyx_n_s_POWER, __pyx_k_POWER, sizeof(__pyx_k_POWER), 0, 0, 1, 1},
+  {&__pyx_n_s_PRECOND, __pyx_k_PRECOND, sizeof(__pyx_k_PRECOND), 0, 0, 1, 1},
+  {&__pyx_n_s_PRIMME, __pyx_k_PRIMME, sizeof(__pyx_k_PRIMME), 0, 0, 1, 1},
+  {&__pyx_n_s_PowerShiftType, __pyx_k_PowerShiftType, sizeof(__pyx_k_PowerShiftType), 0, 0, 1, 1},
+  {&__pyx_n_s_ProblemType, __pyx_k_ProblemType, sizeof(__pyx_k_ProblemType), 0, 0, 1, 1},
+  {&__pyx_n_s_Q, __pyx_k_Q, sizeof(__pyx_k_Q), 0, 0, 1, 1},
+  {&__pyx_n_s_QARNOLDI, __pyx_k_QARNOLDI, sizeof(__pyx_k_QARNOLDI), 0, 0, 1, 1},
+  {&__pyx_n_s_R, __pyx_k_R, sizeof(__pyx_k_R), 0, 0, 1, 1},
+  {&__pyx_n_s_RATIONAL, __pyx_k_RATIONAL, sizeof(__pyx_k_RATIONAL), 0, 0, 1, 1},
+  {&__pyx_n_s_RAW, __pyx_k_RAW, sizeof(__pyx_k_RAW), 0, 0, 1, 1},
+  {&__pyx_n_s_RAYLEIGH, __pyx_k_RAYLEIGH, sizeof(__pyx_k_RAYLEIGH), 0, 0, 1, 1},
+  {&__pyx_n_s_REFINED, __pyx_k_REFINED, sizeof(__pyx_k_REFINED), 0, 0, 1, 1},
+  {&__pyx_n_s_REFINED_HARMONIC, __pyx_k_REFINED_HARMONIC, sizeof(__pyx_k_REFINED_HARMONIC), 0, 0, 1, 1},
+  {&__pyx_n_s_REL, __pyx_k_REL, sizeof(__pyx_k_REL), 0, 0, 1, 1},
+  {&__pyx_n_s_RELATIVE, __pyx_k_RELATIVE, sizeof(__pyx_k_RELATIVE), 0, 0, 1, 1},
+  {&__pyx_n_s_RESIDUAL, __pyx_k_RESIDUAL, sizeof(__pyx_k_RESIDUAL), 0, 0, 1, 1},
+  {&__pyx_n_s_RGType, __pyx_k_RGType, sizeof(__pyx_k_RGType), 0, 0, 1, 1},
+  {&__pyx_kp_s_RG_type, __pyx_k_RG_type, sizeof(__pyx_k_RG_type), 0, 0, 1, 0},
+  {&__pyx_n_s_RII, __pyx_k_RII, sizeof(__pyx_k_RII), 0, 0, 1, 1},
+  {&__pyx_n_s_RING, __pyx_k_RING, sizeof(__pyx_k_RING), 0, 0, 1, 1},
+  {&__pyx_n_s_RITZ, __pyx_k_RITZ, sizeof(__pyx_k_RITZ), 0, 0, 1, 1},
+  {&__pyx_n_s_RQCG, __pyx_k_RQCG, sizeof(__pyx_k_RQCG), 0, 0, 1, 1},
+  {&__pyx_n_s_Refine, __pyx_k_Refine, sizeof(__pyx_k_Refine), 0, 0, 1, 1},
+  {&__pyx_n_s_RefineScheme, __pyx_k_RefineScheme, sizeof(__pyx_k_RefineScheme), 0, 0, 1, 1},
+  {&__pyx_n_s_RefineType, __pyx_k_RefineType, sizeof(__pyx_k_RefineType), 0, 0, 1, 1},
+  {&__pyx_n_s_SCALAR, __pyx_k_SCALAR, sizeof(__pyx_k_SCALAR), 0, 0, 1, 1},
+  {&__pyx_n_s_SCHUR, __pyx_k_SCHUR, sizeof(__pyx_k_SCHUR), 0, 0, 1, 1},
+  {&__pyx_n_s_SELECTIVE, __pyx_k_SELECTIVE, sizeof(__pyx_k_SELECTIVE), 0, 0, 1, 1},
+  {&__pyx_n_s_SHELL, __pyx_k_SHELL, sizeof(__pyx_k_SHELL), 0, 0, 1, 1},
+  {&__pyx_n_s_SHIFT, __pyx_k_SHIFT, sizeof(__pyx_k_SHIFT), 0, 0, 1, 1},
+  {&__pyx_n_s_SIMPLE, __pyx_k_SIMPLE, sizeof(__pyx_k_SIMPLE), 0, 0, 1, 1},
+  {&__pyx_n_s_SINVERT, __pyx_k_SINVERT, sizeof(__pyx_k_SINVERT), 0, 0, 1, 1},
+  {&__pyx_n_s_SLP, __pyx_k_SLP, sizeof(__pyx_k_SLP), 0, 0, 1, 1},
+  {&__pyx_n_s_SMALLEST, __pyx_k_SMALLEST, sizeof(__pyx_k_SMALLEST), 0, 0, 1, 1},
+  {&__pyx_n_s_SMALLEST_IMAGINARY, __pyx_k_SMALLEST_IMAGINARY, sizeof(__pyx_k_SMALLEST_IMAGINARY), 0, 0, 1, 1},
+  {&__pyx_n_s_SMALLEST_MAGNITUDE, __pyx_k_SMALLEST_MAGNITUDE, sizeof(__pyx_k_SMALLEST_MAGNITUDE), 0, 0, 1, 1},
+  {&__pyx_n_s_SMALLEST_REAL, __pyx_k_SMALLEST_REAL, sizeof(__pyx_k_SMALLEST_REAL), 0, 0, 1, 1},
+  {&__pyx_n_s_SQRT, __pyx_k_SQRT, sizeof(__pyx_k_SQRT), 0, 0, 1, 1},
+  {&__pyx_n_s_STMatMode, __pyx_k_STMatMode, sizeof(__pyx_k_STMatMode), 0, 0, 1, 1},
+  {&__pyx_n_s_STOAR, __pyx_k_STOAR, sizeof(__pyx_k_STOAR), 0, 0, 1, 1},
+  {&__pyx_n_s_STRUCTURED, __pyx_k_STRUCTURED, sizeof(__pyx_k_STRUCTURED), 0, 0, 1, 1},
+  {&__pyx_n_s_STType, __pyx_k_STType, sizeof(__pyx_k_STType), 0, 0, 1, 1},
+  {&__pyx_kp_s_ST_matrix_mode_COPY_A_working_c, __pyx_k_ST_matrix_mode_COPY_A_working_c, sizeof(__pyx_k_ST_matrix_mode_COPY_A_working_c), 0, 0, 1, 0},
+  {&__pyx_kp_s_ST_types_SHELL_User_defined_SHI, __pyx_k_ST_types_SHELL_User_defined_SHI, sizeof(__pyx_k_ST_types_SHELL_User_defined_SHI), 0, 0, 1, 0},
+  {&__pyx_n_s_SUBSPACE, __pyx_k_SUBSPACE, sizeof(__pyx_k_SUBSPACE), 0, 0, 1, 1},
+  {&__pyx_n_s_SVD, __pyx_k_SVD, sizeof(__pyx_k_SVD), 0, 0, 1, 1},
+  {&__pyx_n_s_SVDConvergedReason, __pyx_k_SVDConvergedReason, sizeof(__pyx_k_SVDConvergedReason), 0, 0, 1, 1},
+  {&__pyx_n_s_SVDErrorType, __pyx_k_SVDErrorType, sizeof(__pyx_k_SVDErrorType), 0, 0, 1, 1},
+  {&__pyx_n_s_SVDType, __pyx_k_SVDType, sizeof(__pyx_k_SVDType), 0, 0, 1, 1},
+  {&__pyx_n_s_SVDWhich, __pyx_k_SVDWhich, sizeof(__pyx_k_SVDWhich), 0, 0, 1, 1},
+  {&__pyx_kp_s_SVD_convergence_reasons_CONVERG, __pyx_k_SVD_convergence_reasons_CONVERG, sizeof(__pyx_k_SVD_convergence_reasons_CONVERG), 0, 0, 1, 0},
+  {&__pyx_kp_s_SVD_desired_piece_of_spectrum_L, __pyx_k_SVD_desired_piece_of_spectrum_L, sizeof(__pyx_k_SVD_desired_piece_of_spectrum_L), 0, 0, 1, 0},
+  {&__pyx_kp_s_SVD_error_type_to_assess_accura, __pyx_k_SVD_error_type_to_assess_accura, sizeof(__pyx_k_SVD_error_type_to_assess_accura), 0, 0, 1, 0},
+  {&__pyx_kp_s_SVD_types_CROSS_Eigenproblem_wi, __pyx_k_SVD_types_CROSS_Eigenproblem_wi, sizeof(__pyx_k_SVD_types_CROSS_Eigenproblem_wi), 0, 0, 1, 0},
+  {&__pyx_n_s_SVEC, __pyx_k_SVEC, sizeof(__pyx_k_SVEC), 0, 0, 1, 1},
+  {&__pyx_kp_s_Scalable_Library_for_Eigenvalue, __pyx_k_Scalable_Library_for_Eigenvalue, sizeof(__pyx_k_Scalable_Library_for_Eigenvalue), 0, 0, 1, 0},
+  {&__pyx_n_s_Scale, __pyx_k_Scale, sizeof(__pyx_k_Scale), 0, 0, 1, 1},
+  {&__pyx_kp_s_Scheme_for_solving_linear_syste, __pyx_k_Scheme_for_solving_linear_syste, sizeof(__pyx_k_Scheme_for_solving_linear_syste), 0, 0, 1, 0},
+  {&__pyx_n_s_StateType, __pyx_k_StateType, sizeof(__pyx_k_StateType), 0, 0, 1, 1},
+  {&__pyx_n_s_T, __pyx_k_T, sizeof(__pyx_k_T), 0, 0, 1, 1},
+  {&__pyx_n_s_TARGET_IMAGINARY, __pyx_k_TARGET_IMAGINARY, sizeof(__pyx_k_TARGET_IMAGINARY), 0, 0, 1, 1},
+  {&__pyx_n_s_TARGET_MAGNITUDE, __pyx_k_TARGET_MAGNITUDE, sizeof(__pyx_k_TARGET_MAGNITUDE), 0, 0, 1, 1},
+  {&__pyx_n_s_TARGET_REAL, __pyx_k_TARGET_REAL, sizeof(__pyx_k_TARGET_REAL), 0, 0, 1, 1},
+  {&__pyx_n_s_TOAR, __pyx_k_TOAR, sizeof(__pyx_k_TOAR), 0, 0, 1, 1},
+  {&__pyx_n_s_TRLAN, __pyx_k_TRLAN, sizeof(__pyx_k_TRLAN), 0, 0, 1, 1},
+  {&__pyx_n_s_TRLANCZOS, __pyx_k_TRLANCZOS, sizeof(__pyx_k_TRLANCZOS), 0, 0, 1, 1},
+  {&__pyx_n_s_TRUNCATED, __pyx_k_TRUNCATED, sizeof(__pyx_k_TRUNCATED), 0, 0, 1, 1},
+  {&__pyx_n_s_TWOSIDE, __pyx_k_TWOSIDE, sizeof(__pyx_k_TWOSIDE), 0, 0, 1, 1},
+  {&__pyx_kp_s_To_refer_to_one_of_the_matrices, __pyx_k_To_refer_to_one_of_the_matrices, sizeof(__pyx_k_To_refer_to_one_of_the_matrices), 0, 0, 1, 0},
+  {&__pyx_n_s_Type, __pyx_k_Type, sizeof(__pyx_k_Type), 0, 0, 1, 1},
+  {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1},
+  {&__pyx_n_s_U, __pyx_k_U, sizeof(__pyx_k_U), 0, 0, 1, 1},
+  {&__pyx_n_s_USER, __pyx_k_USER, sizeof(__pyx_k_USER), 0, 0, 1, 1},
+  {&__pyx_n_s_V, __pyx_k_V, sizeof(__pyx_k_V), 0, 0, 1, 1},
+  {&__pyx_n_s_VECS, __pyx_k_VECS, sizeof(__pyx_k_VECS), 0, 0, 1, 1},
+  {&__pyx_n_s_VT, __pyx_k_VT, sizeof(__pyx_k_VT), 0, 0, 1, 1},
+  {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1},
+  {&__pyx_n_s_Vi, __pyx_k_Vi, sizeof(__pyx_k_Vi), 0, 0, 1, 1},
+  {&__pyx_n_s_Vr, __pyx_k_Vr, sizeof(__pyx_k_Vr), 0, 0, 1, 1},
+  {&__pyx_n_s_W, __pyx_k_W, sizeof(__pyx_k_W), 0, 0, 1, 1},
+  {&__pyx_n_s_WILKINSON, __pyx_k_WILKINSON, sizeof(__pyx_k_WILKINSON), 0, 0, 1, 1},
+  {&__pyx_n_s_Which, __pyx_k_Which, sizeof(__pyx_k_Which), 0, 0, 1, 1},
+  {&__pyx_n_s_X, __pyx_k_X, sizeof(__pyx_k_X), 0, 0, 1, 1},
+  {&__pyx_n_s_Y, __pyx_k_Y, sizeof(__pyx_k_Y), 0, 0, 1, 1},
+  {&__pyx_n_s_Z, __pyx_k_Z, sizeof(__pyx_k_Z), 0, 0, 1, 1},
+  {&__pyx_kp_s__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 0, 1, 0},
+  {&__pyx_n_s_a, __pyx_k_a, sizeof(__pyx_k_a), 0, 0, 1, 1},
+  {&__pyx_n_s_alpha, __pyx_k_alpha, sizeof(__pyx_k_alpha), 0, 0, 1, 1},
+  {&__pyx_n_s_append, __pyx_k_append, sizeof(__pyx_k_append), 0, 0, 1, 1},
+  {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1},
+  {&__pyx_n_s_author, __pyx_k_author, sizeof(__pyx_k_author), 0, 0, 1, 1},
+  {&__pyx_n_s_authorinfo, __pyx_k_authorinfo, sizeof(__pyx_k_authorinfo), 0, 0, 1, 1},
+  {&__pyx_n_s_b, __pyx_k_b, sizeof(__pyx_k_b), 0, 0, 1, 1},
+  {&__pyx_n_s_balance, __pyx_k_balance, sizeof(__pyx_k_balance), 0, 0, 1, 1},
+  {&__pyx_n_s_basis, __pyx_k_basis, sizeof(__pyx_k_basis), 0, 0, 1, 1},
+  {&__pyx_n_s_beta, __pyx_k_beta, sizeof(__pyx_k_beta), 0, 0, 1, 1},
+  {&__pyx_n_s_block, __pyx_k_block, sizeof(__pyx_k_block), 0, 0, 1, 1},
+  {&__pyx_n_s_bv, __pyx_k_bv, sizeof(__pyx_k_bv), 0, 0, 1, 1},
+  {&__pyx_n_s_bv_type, __pyx_k_bv_type, sizeof(__pyx_k_bv_type), 0, 0, 1, 1},
+  {&__pyx_n_s_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 0, 1, 1},
+  {&__pyx_n_s_center, __pyx_k_center, sizeof(__pyx_k_center), 0, 0, 1, 1},
+  {&__pyx_n_s_cform, __pyx_k_cform, sizeof(__pyx_k_cform), 0, 0, 1, 1},
+  {&__pyx_n_s_comm, __pyx_k_comm, sizeof(__pyx_k_comm), 0, 0, 1, 1},
+  {&__pyx_n_s_comp, __pyx_k_comp, sizeof(__pyx_k_comp), 0, 0, 1, 1},
+  {&__pyx_n_s_conv, __pyx_k_conv, sizeof(__pyx_k_conv), 0, 0, 1, 1},
+  {&__pyx_n_s_create, __pyx_k_create, sizeof(__pyx_k_create), 0, 0, 1, 1},
+  {&__pyx_n_s_createDense, __pyx_k_createDense, sizeof(__pyx_k_createDense), 0, 0, 1, 1},
+  {&__pyx_n_s_cutoff, __pyx_k_cutoff, sizeof(__pyx_k_cutoff), 0, 0, 1, 1},
+  {&__pyx_n_s_d, __pyx_k_d, sizeof(__pyx_k_d), 0, 0, 1, 1},
+  {&__pyx_n_s_date, __pyx_k_date, sizeof(__pyx_k_date), 0, 0, 1, 1},
+  {&__pyx_n_s_decode, __pyx_k_decode, sizeof(__pyx_k_decode), 0, 0, 1, 1},
+  {&__pyx_n_s_delayed, __pyx_k_delayed, sizeof(__pyx_k_delayed), 0, 0, 1, 1},
+  {&__pyx_n_s_detect, __pyx_k_detect, sizeof(__pyx_k_detect), 0, 0, 1, 1},
+  {&__pyx_n_s_devel, __pyx_k_devel, sizeof(__pyx_k_devel), 0, 0, 1, 1},
+  {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1},
+  {&__pyx_n_s_ds, __pyx_k_ds, sizeof(__pyx_k_ds), 0, 0, 1, 1},
+  {&__pyx_n_s_ds_type, __pyx_k_ds_type, sizeof(__pyx_k_ds_type), 0, 0, 1, 1},
+  {&__pyx_n_s_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 0, 0, 1, 1},
+  {&__pyx_n_s_eps, __pyx_k_eps, sizeof(__pyx_k_eps), 0, 0, 1, 1},
+  {&__pyx_n_s_eps_type, __pyx_k_eps_type, sizeof(__pyx_k_eps_type), 0, 0, 1, 1},
+  {&__pyx_n_s_eta, __pyx_k_eta, sizeof(__pyx_k_eta), 0, 0, 1, 1},
+  {&__pyx_n_s_etype, __pyx_k_etype, sizeof(__pyx_k_etype), 0, 0, 1, 1},
+  {&__pyx_n_s_ext, __pyx_k_ext, sizeof(__pyx_k_ext), 0, 0, 1, 1},
+  {&__pyx_n_s_extraction, __pyx_k_extraction, sizeof(__pyx_k_extraction), 0, 0, 1, 1},
+  {&__pyx_n_s_f, __pyx_k_f, sizeof(__pyx_k_f), 0, 0, 1, 1},
+  {&__pyx_n_s_finalize, __pyx_k_finalize, sizeof(__pyx_k_finalize), 0, 0, 1, 1},
+  {&__pyx_n_s_flag, __pyx_k_flag, sizeof(__pyx_k_flag), 0, 0, 1, 1},
+  {&__pyx_n_s_fn, __pyx_k_fn, sizeof(__pyx_k_fn), 0, 0, 1, 1},
+  {&__pyx_n_s_fn_type, __pyx_k_fn_type, sizeof(__pyx_k_fn_type), 0, 0, 1, 1},
+  {&__pyx_n_s_function, __pyx_k_function, sizeof(__pyx_k_function), 0, 0, 1, 1},
+  {&__pyx_n_s_getActiveColumns, __pyx_k_getActiveColumns, sizeof(__pyx_k_getActiveColumns), 0, 0, 1, 1},
+  {&__pyx_n_s_getBV, __pyx_k_getBV, sizeof(__pyx_k_getBV), 0, 0, 1, 1},
+  {&__pyx_n_s_getExtraction, __pyx_k_getExtraction, sizeof(__pyx_k_getExtraction), 0, 0, 1, 1},
+  {&__pyx_n_s_getKSP, __pyx_k_getKSP, sizeof(__pyx_k_getKSP), 0, 0, 1, 1},
+  {&__pyx_n_s_getMatMode, __pyx_k_getMatMode, sizeof(__pyx_k_getMatMode), 0, 0, 1, 1},
+  {&__pyx_n_s_getProblemType, __pyx_k_getProblemType, sizeof(__pyx_k_getProblemType), 0, 0, 1, 1},
+  {&__pyx_n_s_getST, __pyx_k_getST, sizeof(__pyx_k_getST), 0, 0, 1, 1},
+  {&__pyx_n_s_getShift, __pyx_k_getShift, sizeof(__pyx_k_getShift), 0, 0, 1, 1},
+  {&__pyx_n_s_getTarget, __pyx_k_getTarget, sizeof(__pyx_k_getTarget), 0, 0, 1, 1},
+  {&__pyx_n_s_getTolerances, __pyx_k_getTolerances, sizeof(__pyx_k_getTolerances), 0, 0, 1, 1},
+  {&__pyx_n_s_getTransposeMode, __pyx_k_getTransposeMode, sizeof(__pyx_k_getTransposeMode), 0, 0, 1, 1},
+  {&__pyx_n_s_getVersion, __pyx_k_getVersion, sizeof(__pyx_k_getVersion), 0, 0, 1, 1},
+  {&__pyx_n_s_getVersionInfo, __pyx_k_getVersionInfo, sizeof(__pyx_k_getVersionInfo), 0, 0, 1, 1},
+  {&__pyx_n_s_getWhichEigenpairs, __pyx_k_getWhichEigenpairs, sizeof(__pyx_k_getWhichEigenpairs), 0, 0, 1, 1},
+  {&__pyx_n_s_getWhichSingularTriplets, __pyx_k_getWhichSingularTriplets, sizeof(__pyx_k_getWhichSingularTriplets), 0, 0, 1, 1},
+  {&__pyx_n_s_ghostUpdate, __pyx_k_ghostUpdate, sizeof(__pyx_k_ghostUpdate), 0, 0, 1, 1},
+  {&__pyx_n_s_globalup, __pyx_k_globalup, sizeof(__pyx_k_globalup), 0, 0, 1, 1},
+  {&__pyx_kp_s_home_dalcinl_Devel_slepc4py_dev, __pyx_k_home_dalcinl_Devel_slepc4py_dev, sizeof(__pyx_k_home_dalcinl_Devel_slepc4py_dev), 0, 0, 1, 0},
+  {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1},
+  {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1},
+  {&__pyx_n_s_indef, __pyx_k_indef, sizeof(__pyx_k_indef), 0, 0, 1, 1},
+  {&__pyx_n_s_initialize, __pyx_k_initialize, sizeof(__pyx_k_initialize), 0, 0, 1, 1},
+  {&__pyx_n_s_inta, __pyx_k_inta, sizeof(__pyx_k_inta), 0, 0, 1, 1},
+  {&__pyx_n_s_intb, __pyx_k_intb, sizeof(__pyx_k_intb), 0, 0, 1, 1},
+  {&__pyx_n_s_iterations, __pyx_k_iterations, sizeof(__pyx_k_iterations), 0, 0, 1, 1},
+  {&__pyx_n_s_its, __pyx_k_its, sizeof(__pyx_k_its), 0, 0, 1, 1},
+  {&__pyx_n_s_j, __pyx_k_j, sizeof(__pyx_k_j), 0, 0, 1, 1},
+  {&__pyx_n_s_jacobian, __pyx_k_jacobian, sizeof(__pyx_k_jacobian), 0, 0, 1, 1},
+  {&__pyx_n_s_k, __pyx_k_k, sizeof(__pyx_k_k), 0, 0, 1, 1},
+  {&__pyx_n_s_kargs, __pyx_k_kargs, sizeof(__pyx_k_kargs), 0, 0, 1, 1},
+  {&__pyx_n_s_keep, __pyx_k_keep, sizeof(__pyx_k_keep), 0, 0, 1, 1},
+  {&__pyx_n_s_ksp, __pyx_k_ksp, sizeof(__pyx_k_ksp), 0, 0, 1, 1},
+  {&__pyx_n_s_l, __pyx_k_l, sizeof(__pyx_k_l), 0, 0, 1, 1},
+  {&__pyx_n_s_lag, __pyx_k_lag, sizeof(__pyx_k_lag), 0, 0, 1, 1},
+  {&__pyx_n_s_lbda, __pyx_k_lbda, sizeof(__pyx_k_lbda), 0, 0, 1, 1},
+  {&__pyx_n_s_ld, __pyx_k_ld, sizeof(__pyx_k_ld), 0, 0, 1, 1},
+  {&__pyx_kp_s_local_and_global_sizes_cannot_be, __pyx_k_local_and_global_sizes_cannot_be, sizeof(__pyx_k_local_and_global_sizes_cannot_be), 0, 0, 1, 0},
+  {&__pyx_n_s_lock, __pyx_k_lock, sizeof(__pyx_k_lock), 0, 0, 1, 1},
+  {&__pyx_n_s_m, __pyx_k_m, sizeof(__pyx_k_m), 0, 0, 1, 1},
+  {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1},
+  {&__pyx_n_s_major, __pyx_k_major, sizeof(__pyx_k_major), 0, 0, 1, 1},
+  {&__pyx_n_s_mat, __pyx_k_mat, sizeof(__pyx_k_mat), 0, 0, 1, 1},
+  {&__pyx_n_s_max_it, __pyx_k_max_it, sizeof(__pyx_k_max_it), 0, 0, 1, 1},
+  {&__pyx_n_s_maxit, __pyx_k_maxit, sizeof(__pyx_k_maxit), 0, 0, 1, 1},
+  {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1},
+  {&__pyx_n_s_meth, __pyx_k_meth, sizeof(__pyx_k_meth), 0, 0, 1, 1},
+  {&__pyx_n_s_mfn_type, __pyx_k_mfn_type, sizeof(__pyx_k_mfn_type), 0, 0, 1, 1},
+  {&__pyx_n_s_minor, __pyx_k_minor, sizeof(__pyx_k_minor), 0, 0, 1, 1},
+  {&__pyx_n_s_mode, __pyx_k_mode, sizeof(__pyx_k_mode), 0, 0, 1, 1},
+  {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1},
+  {&__pyx_n_s_mpd, __pyx_k_mpd, sizeof(__pyx_k_mpd), 0, 0, 1, 1},
+  {&__pyx_n_s_n, __pyx_k_n, sizeof(__pyx_k_n), 0, 0, 1, 1},
+  {&__pyx_n_s_ncv, __pyx_k_ncv, sizeof(__pyx_k_ncv), 0, 0, 1, 1},
+  {&__pyx_n_s_nep_type, __pyx_k_nep_type, sizeof(__pyx_k_nep_type), 0, 0, 1, 1},
+  {&__pyx_n_s_nev, __pyx_k_nev, sizeof(__pyx_k_nev), 0, 0, 1, 1},
+  {&__pyx_n_s_norm_type, __pyx_k_norm_type, sizeof(__pyx_k_norm_type), 0, 0, 1, 1},
+  {&__pyx_n_s_npart, __pyx_k_npart, sizeof(__pyx_k_npart), 0, 0, 1, 1},
+  {&__pyx_n_s_nrest, __pyx_k_nrest, sizeof(__pyx_k_nrest), 0, 0, 1, 1},
+  {&__pyx_n_s_nsv, __pyx_k_nsv, sizeof(__pyx_k_nsv), 0, 0, 1, 1},
+  {&__pyx_n_s_object, __pyx_k_object, sizeof(__pyx_k_object), 0, 0, 1, 1},
+  {&__pyx_n_s_operators, __pyx_k_operators, sizeof(__pyx_k_operators), 0, 0, 1, 1},
+  {&__pyx_n_s_orth, __pyx_k_orth, sizeof(__pyx_k_orth), 0, 0, 1, 1},
+  {&__pyx_n_s_patch, __pyx_k_patch, sizeof(__pyx_k_patch), 0, 0, 1, 1},
+  {&__pyx_n_s_pep_type, __pyx_k_pep_type, sizeof(__pyx_k_pep_type), 0, 0, 1, 1},
+  {&__pyx_n_s_petsc4py_PETSc, __pyx_k_petsc4py_PETSc, sizeof(__pyx_k_petsc4py_PETSc), 0, 0, 1, 1},
+  {&__pyx_n_s_prefix, __pyx_k_prefix, sizeof(__pyx_k_prefix), 0, 0, 1, 1},
+  {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1},
+  {&__pyx_n_s_problem_type, __pyx_k_problem_type, sizeof(__pyx_k_problem_type), 0, 0, 1, 1},
+  {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1},
+  {&__pyx_n_s_q, __pyx_k_q, sizeof(__pyx_k_q), 0, 0, 1, 1},
+  {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1},
+  {&__pyx_n_s_radius, __pyx_k_radius, sizeof(__pyx_k_radius), 0, 0, 1, 1},
+  {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1},
+  {&__pyx_n_s_ready, __pyx_k_ready, sizeof(__pyx_k_ready), 0, 0, 1, 1},
+  {&__pyx_n_s_ref, __pyx_k_ref, sizeof(__pyx_k_ref), 0, 0, 1, 1},
+  {&__pyx_n_s_refine, __pyx_k_refine, sizeof(__pyx_k_refine), 0, 0, 1, 1},
+  {&__pyx_n_s_release, __pyx_k_release, sizeof(__pyx_k_release), 0, 0, 1, 1},
+  {&__pyx_n_s_reorthog, __pyx_k_reorthog, sizeof(__pyx_k_reorthog), 0, 0, 1, 1},
+  {&__pyx_n_s_result, __pyx_k_result, sizeof(__pyx_k_result), 0, 0, 1, 1},
+  {&__pyx_n_s_rg, __pyx_k_rg, sizeof(__pyx_k_rg), 0, 0, 1, 1},
+  {&__pyx_n_s_rg_type, __pyx_k_rg_type, sizeof(__pyx_k_rg_type), 0, 0, 1, 1},
+  {&__pyx_n_s_s, __pyx_k_s, sizeof(__pyx_k_s), 0, 0, 1, 1},
+  {&__pyx_n_s_scale, __pyx_k_scale, sizeof(__pyx_k_scale), 0, 0, 1, 1},
+  {&__pyx_n_s_scheme, __pyx_k_scheme, sizeof(__pyx_k_scheme), 0, 0, 1, 1},
+  {&__pyx_n_s_seq, __pyx_k_seq, sizeof(__pyx_k_seq), 0, 0, 1, 1},
+  {&__pyx_n_s_setArray, __pyx_k_setArray, sizeof(__pyx_k_setArray), 0, 0, 1, 1},
+  {&__pyx_n_s_setBV, __pyx_k_setBV, sizeof(__pyx_k_setBV), 0, 0, 1, 1},
+  {&__pyx_n_s_setExtraction, __pyx_k_setExtraction, sizeof(__pyx_k_setExtraction), 0, 0, 1, 1},
+  {&__pyx_n_s_setKSP, __pyx_k_setKSP, sizeof(__pyx_k_setKSP), 0, 0, 1, 1},
+  {&__pyx_n_s_setMatMode, __pyx_k_setMatMode, sizeof(__pyx_k_setMatMode), 0, 0, 1, 1},
+  {&__pyx_n_s_setOrthogonalization, __pyx_k_setOrthogonalization, sizeof(__pyx_k_setOrthogonalization), 0, 0, 1, 1},
+  {&__pyx_n_s_setProblemType, __pyx_k_setProblemType, sizeof(__pyx_k_setProblemType), 0, 0, 1, 1},
+  {&__pyx_n_s_setST, __pyx_k_setST, sizeof(__pyx_k_setST), 0, 0, 1, 1},
+  {&__pyx_n_s_setShift, __pyx_k_setShift, sizeof(__pyx_k_setShift), 0, 0, 1, 1},
+  {&__pyx_n_s_setSizes, __pyx_k_setSizes, sizeof(__pyx_k_setSizes), 0, 0, 1, 1},
+  {&__pyx_n_s_setTarget, __pyx_k_setTarget, sizeof(__pyx_k_setTarget), 0, 0, 1, 1},
+  {&__pyx_n_s_setTolerances, __pyx_k_setTolerances, sizeof(__pyx_k_setTolerances), 0, 0, 1, 1},
+  {&__pyx_n_s_setTransposeMode, __pyx_k_setTransposeMode, sizeof(__pyx_k_setTransposeMode), 0, 0, 1, 1},
+  {&__pyx_n_s_setType, __pyx_k_setType, sizeof(__pyx_k_setType), 0, 0, 1, 1},
+  {&__pyx_n_s_setUp, __pyx_k_setUp, sizeof(__pyx_k_setUp), 0, 0, 1, 1},
+  {&__pyx_n_s_setWhichEigenpairs, __pyx_k_setWhichEigenpairs, sizeof(__pyx_k_setWhichEigenpairs), 0, 0, 1, 1},
+  {&__pyx_n_s_setWhichSingularTriplets, __pyx_k_setWhichSingularTriplets, sizeof(__pyx_k_setWhichSingularTriplets), 0, 0, 1, 1},
+  {&__pyx_n_s_shift, __pyx_k_shift, sizeof(__pyx_k_shift), 0, 0, 1, 1},
+  {&__pyx_n_s_sizes, __pyx_k_sizes, sizeof(__pyx_k_sizes), 0, 0, 1, 1},
+  {&__pyx_n_s_slepc4py_SLEPc, __pyx_k_slepc4py_SLEPc, sizeof(__pyx_k_slepc4py_SLEPc), 0, 0, 1, 1},
+  {&__pyx_n_s_space, __pyx_k_space, sizeof(__pyx_k_space), 0, 0, 1, 1},
+  {&__pyx_n_s_split, __pyx_k_split, sizeof(__pyx_k_split), 0, 0, 1, 1},
+  {&__pyx_n_s_st, __pyx_k_st, sizeof(__pyx_k_st), 0, 0, 1, 1},
+  {&__pyx_n_s_st_type, __pyx_k_st_type, sizeof(__pyx_k_st_type), 0, 0, 1, 1},
+  {&__pyx_n_s_state, __pyx_k_state, sizeof(__pyx_k_state), 0, 0, 1, 1},
+  {&__pyx_n_s_strip, __pyx_k_strip, sizeof(__pyx_k_strip), 0, 0, 1, 1},
+  {&__pyx_n_s_structure, __pyx_k_structure, sizeof(__pyx_k_structure), 0, 0, 1, 1},
+  {&__pyx_n_s_subint, __pyx_k_subint, sizeof(__pyx_k_subint), 0, 0, 1, 1},
+  {&__pyx_n_s_subminor, __pyx_k_subminor, sizeof(__pyx_k_subminor), 0, 0, 1, 1},
+  {&__pyx_n_s_svd_type, __pyx_k_svd_type, sizeof(__pyx_k_svd_type), 0, 0, 1, 1},
+  {&__pyx_n_s_t, __pyx_k_t, sizeof(__pyx_k_t), 0, 0, 1, 1},
+  {&__pyx_n_s_target, __pyx_k_target, sizeof(__pyx_k_target), 0, 0, 1, 1},
+  {&__pyx_n_s_tau, __pyx_k_tau, sizeof(__pyx_k_tau), 0, 0, 1, 1},
+  {&__pyx_n_s_tol, __pyx_k_tol, sizeof(__pyx_k_tol), 0, 0, 1, 1},
+  {&__pyx_n_s_trackall, __pyx_k_trackall, sizeof(__pyx_k_trackall), 0, 0, 1, 1},
+  {&__pyx_n_s_trueres, __pyx_k_trueres, sizeof(__pyx_k_trueres), 0, 0, 1, 1},
+  {&__pyx_n_s_type, __pyx_k_type, sizeof(__pyx_k_type), 0, 0, 1, 1},
+  {&__pyx_n_s_v, __pyx_k_v, sizeof(__pyx_k_v), 0, 0, 1, 1},
+  {&__pyx_n_s_viewer, __pyx_k_viewer, sizeof(__pyx_k_viewer), 0, 0, 1, 1},
+  {&__pyx_n_s_vscale, __pyx_k_vscale, sizeof(__pyx_k_vscale), 0, 0, 1, 1},
+  {&__pyx_n_s_w, __pyx_k_w, sizeof(__pyx_k_w), 0, 0, 1, 1},
+  {&__pyx_n_s_which, __pyx_k_which, sizeof(__pyx_k_which), 0, 0, 1, 1},
+  {&__pyx_n_s_x, __pyx_k_x, sizeof(__pyx_k_x), 0, 0, 1, 1},
+  {&__pyx_n_s_y, __pyx_k_y, sizeof(__pyx_k_y), 0, 0, 1, 1},
+  {0, 0, 0, 0, 0, 0, 0}
+};
+static int __Pyx_InitCachedBuiltins(void) {
+  __pyx_builtin_object = __Pyx_GetBuiltinName(__pyx_n_s_object); if (!__pyx_builtin_object) __PYX_ERR(0, 3, __pyx_L1_error)
+  __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(1, 21, __pyx_L1_error)
+  __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(2, 83, __pyx_L1_error)
+  __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(2, 83, __pyx_L1_error)
+  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(3, 461, __pyx_L1_error)
+  return 0;
+  __pyx_L1_error:;
+  return -1;
+}
 
-  /* "SLEPc/PEP.pyx":69
- *     TARGET_IMAGINARY   = PEP_TARGET_IMAGINARY
- * 
- * class PEPBasis(object):             # <<<<<<<<<<<<<<
- *     MONOMIAL   = PEP_BASIS_MONOMIAL
- *     CHEBYSHEV1 = PEP_BASIS_CHEBYSHEV1
- */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_PEPBasis, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PEPBasis, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+static int __Pyx_InitCachedConstants(void) {
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
 
-  /* "SLEPc/PEP.pyx":77
- *     HERMITE    = PEP_BASIS_HERMITE
- * 
- * class PEPScale(object):             # <<<<<<<<<<<<<<
- *     NONE     = PEP_SCALE_NONE
- *     SCALAR   = PEP_SCALE_SCALAR
+  /* "SLEPc/slepcbv.pxi":87
+ *     if on is not None: n = asInt(on)
+ *     if oN is not None: N = asInt(oN)
+ *     if n==PETSC_DECIDE and N==PETSC_DECIDE: raise ValueError(             # <<<<<<<<<<<<<<
+ *         "local and global sizes cannot be both 'DECIDE'")
+ *     # return result to the caller
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_PEPScale, __pyx_n_s_PEPScale, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_s_local_and_global_sizes_cannot_be); if (unlikely(!__pyx_tuple_)) __PYX_ERR(2, 87, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple_);
+  __Pyx_GIVEREF(__pyx_tuple_);
 
-  /* "SLEPc/PEP.pyx":78
- * 
- * class PEPScale(object):
- *     NONE     = PEP_SCALE_NONE             # <<<<<<<<<<<<<<
- *     SCALAR   = PEP_SCALE_SCALAR
- *     DIAGONAL = PEP_SCALE_DIAGONAL
+  /* "SLEPc/Sys.pyx":26
+ *                 out.append(bytes2str(cdate))
+ *             if author:
+ *                 author = bytes2str(cauthorinfo).split('\n')             # <<<<<<<<<<<<<<
+ *                 author = [s.strip() for s in author if s]
+ *                 out.append(author)
  */
-  __pyx_t_5 = PyInt_FromLong(PEP_SCALE_NONE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s__2); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(9, 26, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__3);
+  __Pyx_GIVEREF(__pyx_tuple__3);
 
-  /* "SLEPc/PEP.pyx":79
- * class PEPScale(object):
- *     NONE     = PEP_SCALE_NONE
- *     SCALAR   = PEP_SCALE_SCALAR             # <<<<<<<<<<<<<<
- *     DIAGONAL = PEP_SCALE_DIAGONAL
- *     BOTH     = PEP_SCALE_BOTH
+  /* "SLEPc/Sys.pyx":40
+ *         cdef const_char *cdate       = SLEPC_VERSION_DATE
+ *         cdef const_char *cauthorinfo = SLEPC_AUTHOR_INFO
+ *         author = bytes2str(cauthorinfo).split('\n')             # <<<<<<<<<<<<<<
+ *         author = [s.strip() for s in author if s]
+ *         return dict(major      = cmajor,
  */
-  __pyx_t_5 = PyInt_FromLong(PEP_SCALE_SCALAR); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SCALAR, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s__2); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(9, 40, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__4);
+  __Pyx_GIVEREF(__pyx_tuple__4);
 
-  /* "SLEPc/PEP.pyx":80
- *     NONE     = PEP_SCALE_NONE
- *     SCALAR   = PEP_SCALE_SCALAR
- *     DIAGONAL = PEP_SCALE_DIAGONAL             # <<<<<<<<<<<<<<
- *     BOTH     = PEP_SCALE_BOTH
+  /* "SLEPc/BV.pyx":496
  * 
+ *         v = Vec().create(COMM_SELF)
+ *         v.setType('seq')             # <<<<<<<<<<<<<<
+ *         v.setSizes((DECIDE,k-l))
+ *         v.setArray([mval[i] for i in range(0, k - l)])
  */
-  __pyx_t_5 = PyInt_FromLong(PEP_SCALE_DIAGONAL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIAGONAL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_tuple__5 = PyTuple_Pack(1, __pyx_n_s_seq); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(3, 496, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__5);
+  __Pyx_GIVEREF(__pyx_tuple__5);
 
-  /* "SLEPc/PEP.pyx":81
- *     SCALAR   = PEP_SCALE_SCALAR
- *     DIAGONAL = PEP_SCALE_DIAGONAL
- *     BOTH     = PEP_SCALE_BOTH             # <<<<<<<<<<<<<<
+  /* "SLEPc/SLEPc.pyx":224
+ * # -----------------------------------------------------------------------------
  * 
- * class PEPConv(object):
+ * def _initialize(args=None):             # <<<<<<<<<<<<<<
+ *     cdef int ready = initialize(args)
+ *     if ready: register(NULL)
  */
-  __pyx_t_5 = PyInt_FromLong(PEP_SCALE_BOTH); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BOTH, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_tuple__6 = PyTuple_Pack(2, __pyx_n_s_args, __pyx_n_s_ready); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(4, 224, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__6);
+  __Pyx_GIVEREF(__pyx_tuple__6);
+  __pyx_codeobj__7 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__6, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_dalcinl_Devel_slepc4py_dev, __pyx_n_s_initialize, 224, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__7)) __PYX_ERR(4, 224, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":77
- *     HERMITE    = PEP_BASIS_HERMITE
+  /* "SLEPc/SLEPc.pyx":228
+ *     if ready: register(NULL)
  * 
- * class PEPScale(object):             # <<<<<<<<<<<<<<
- *     NONE     = PEP_SCALE_NONE
- *     SCALAR   = PEP_SCALE_SCALAR
- */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_PEPScale, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PEPScale, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-
-  /* "SLEPc/PEP.pyx":83
- *     BOTH     = PEP_SCALE_BOTH
+ * def _finalize():             # <<<<<<<<<<<<<<
+ *     finalize()
  * 
- * class PEPConv(object):             # <<<<<<<<<<<<<<
- *     """
- *     PEP convergence test
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__8 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_dalcinl_Devel_slepc4py_dev, __pyx_n_s_finalize, 228, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__8)) __PYX_ERR(4, 228, __pyx_L1_error)
+  __Pyx_RefNannyFinishContext();
+  return 0;
+  __pyx_L1_error:;
+  __Pyx_RefNannyFinishContext();
+  return -1;
+}
+
+static int __Pyx_InitGlobals(void) {
+  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(19, 1, __pyx_L1_error);
+  __pyx_float_1_0 = PyFloat_FromDouble(1.0); if (unlikely(!__pyx_float_1_0)) __PYX_ERR(19, 1, __pyx_L1_error)
+  __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(19, 1, __pyx_L1_error)
+  return 0;
+  __pyx_L1_error:;
+  return -1;
+}
+
+#if PY_MAJOR_VERSION < 3
+PyMODINIT_FUNC initSLEPc(void); /*proto*/
+PyMODINIT_FUNC initSLEPc(void)
+#else
+PyMODINIT_FUNC PyInit_SLEPc(void); /*proto*/
+PyMODINIT_FUNC PyInit_SLEPc(void)
+#endif
+{
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannyDeclarations
+  #if CYTHON_REFNANNY
+  __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
+  if (!__Pyx_RefNanny) {
+      PyErr_Clear();
+      __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
+      if (!__Pyx_RefNanny)
+          Py_FatalError("failed to import 'refnanny' module");
+  }
+  #endif
+  __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_SLEPc(void)", 0);
+  if (__Pyx_check_binary_version() < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(19, 1, __pyx_L1_error)
+  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(19, 1, __pyx_L1_error)
+  __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(19, 1, __pyx_L1_error)
+  #ifdef __Pyx_CyFunction_USED
+  if (__pyx_CyFunction_init() < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  #endif
+  #ifdef __Pyx_FusedFunction_USED
+  if (__pyx_FusedFunction_init() < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  #endif
+  #ifdef __Pyx_Coroutine_USED
+  if (__pyx_Coroutine_init() < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  #endif
+  #ifdef __Pyx_Generator_USED
+  if (__pyx_Generator_init() < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  #endif
+  #ifdef __Pyx_StopAsyncIteration_USED
+  if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  #endif
+  /*--- Library function declarations ---*/
+  /*--- Threads initialization code ---*/
+  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
+  #ifdef WITH_THREAD /* Python build with threading support? */
+  PyEval_InitThreads();
+  #endif
+  #endif
+  /*--- Module creation code ---*/
+  #if PY_MAJOR_VERSION < 3
+  __pyx_m = Py_InitModule4("SLEPc", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
+  #else
+  __pyx_m = PyModule_Create(&__pyx_moduledef);
+  #endif
+  if (unlikely(!__pyx_m)) __PYX_ERR(19, 1, __pyx_L1_error)
+  __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(19, 1, __pyx_L1_error)
+  Py_INCREF(__pyx_d);
+  __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(19, 1, __pyx_L1_error)
+  #if CYTHON_COMPILING_IN_PYPY
+  Py_INCREF(__pyx_b);
+  #endif
+  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(19, 1, __pyx_L1_error);
+  /*--- Initialize various global constants etc. ---*/
+  if (__Pyx_InitGlobals() < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
+  if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  #endif
+  if (__pyx_module_is_main_slepc4py__SLEPc) {
+    if (PyObject_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  }
+  #if PY_MAJOR_VERSION >= 3
+  {
+    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(19, 1, __pyx_L1_error)
+    if (!PyDict_GetItemString(modules, "slepc4py.SLEPc")) {
+      if (unlikely(PyDict_SetItemString(modules, "slepc4py.SLEPc", __pyx_m) < 0)) __PYX_ERR(19, 1, __pyx_L1_error)
+    }
+  }
+  #endif
+  /*--- Builtin init code ---*/
+  if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  /*--- Constants init code ---*/
+  if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  /*--- Global init code ---*/
+  __pyx_v_8slepc4py_5SLEPc_PetscError = Py_None; Py_INCREF(Py_None);
+  /*--- Variable export code ---*/
+  /*--- Function export code ---*/
+  if (__Pyx_ExportFunction("PySlepcST_New", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcST_New, "PyObject *(ST)") < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PySlepcST_Get", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcST_Get, "ST (PyObject *)") < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PySlepcBV_New", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcBV_New, "PyObject *(BV)") < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PySlepcBV_Get", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcBV_Get, "BV (PyObject *)") < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PySlepcDS_New", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcDS_New, "PyObject *(DS)") < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PySlepcDS_Get", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcDS_Get, "DS (PyObject *)") < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PySlepcFN_New", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcFN_New, "PyObject *(FN)") < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PySlepcFN_Get", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcFN_Get, "FN (PyObject *)") < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PySlepcRG_New", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcRG_New, "PyObject *(RG)") < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PySlepcRG_Get", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcRG_Get, "RG (PyObject *)") < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PySlepcEPS_New", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcEPS_New, "PyObject *(EPS)") < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PySlepcEPS_Get", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcEPS_Get, "EPS (PyObject *)") < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PySlepcSVD_New", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcSVD_New, "PyObject *(SVD)") < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PySlepcSVD_Get", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcSVD_Get, "SVD (PyObject *)") < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PySlepcPEP_New", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcPEP_New, "PyObject *(PEP)") < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PySlepcPEP_Get", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcPEP_Get, "PEP (PyObject *)") < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PySlepcNEP_New", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcNEP_New, "PyObject *(NEP)") < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PySlepcNEP_Get", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcNEP_Get, "NEP (PyObject *)") < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PySlepcMFN_New", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcMFN_New, "PyObject *(MFN)") < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("PySlepcMFN_Get", (void (*)(void))__pyx_f_8slepc4py_5SLEPc_PySlepcMFN_Get, "MFN (PyObject *)") < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  /*--- Type init code ---*/
+  __pyx_ptype_8petsc4py_5PETSc_Object = __Pyx_ImportType("petsc4py.PETSc", "Object", sizeof(struct PyPetscObjectObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_Object)) __PYX_ERR(19, 1, __pyx_L1_error)
+  __pyx_vtabptr_8petsc4py_5PETSc_Object = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_Object->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_Object)) __PYX_ERR(19, 1, __pyx_L1_error)
+  __pyx_vtabptr_8slepc4py_5SLEPc_ST = &__pyx_vtable_8slepc4py_5SLEPc_ST;
+  __pyx_vtable_8slepc4py_5SLEPc_ST.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
+  PySlepcST_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
+  if (PyType_Ready(&PySlepcST_Type) < 0) __PYX_ERR(0, 34, __pyx_L1_error)
+  PySlepcST_Type.tp_print = 0;
+  if (__Pyx_SetVtable(PySlepcST_Type.tp_dict, __pyx_vtabptr_8slepc4py_5SLEPc_ST) < 0) __PYX_ERR(0, 34, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "ST", (PyObject *)&PySlepcST_Type) < 0) __PYX_ERR(0, 34, __pyx_L1_error)
+  if (PySlepcST_Type.tp_weaklistoffset == 0) PySlepcST_Type.tp_weaklistoffset = offsetof(struct PySlepcSTObject, __pyx_base.__weakref__);
+  __pyx_ptype_8slepc4py_5SLEPc_ST = &PySlepcST_Type;
+  __pyx_vtabptr_8slepc4py_5SLEPc_BV = &__pyx_vtable_8slepc4py_5SLEPc_BV;
+  __pyx_vtable_8slepc4py_5SLEPc_BV.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
+  PySlepcBV_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
+  if (PyType_Ready(&PySlepcBV_Type) < 0) __PYX_ERR(3, 46, __pyx_L1_error)
+  PySlepcBV_Type.tp_print = 0;
+  if (__Pyx_SetVtable(PySlepcBV_Type.tp_dict, __pyx_vtabptr_8slepc4py_5SLEPc_BV) < 0) __PYX_ERR(3, 46, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "BV", (PyObject *)&PySlepcBV_Type) < 0) __PYX_ERR(3, 46, __pyx_L1_error)
+  if (PySlepcBV_Type.tp_weaklistoffset == 0) PySlepcBV_Type.tp_weaklistoffset = offsetof(struct PySlepcBVObject, __pyx_base.__weakref__);
+  __pyx_ptype_8slepc4py_5SLEPc_BV = &PySlepcBV_Type;
+  __pyx_vtabptr_8slepc4py_5SLEPc_DS = &__pyx_vtable_8slepc4py_5SLEPc_DS;
+  __pyx_vtable_8slepc4py_5SLEPc_DS.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
+  PySlepcDS_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
+  if (PyType_Ready(&PySlepcDS_Type) < 0) __PYX_ERR(10, 62, __pyx_L1_error)
+  PySlepcDS_Type.tp_print = 0;
+  if (__Pyx_SetVtable(PySlepcDS_Type.tp_dict, __pyx_vtabptr_8slepc4py_5SLEPc_DS) < 0) __PYX_ERR(10, 62, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "DS", (PyObject *)&PySlepcDS_Type) < 0) __PYX_ERR(10, 62, __pyx_L1_error)
+  if (PySlepcDS_Type.tp_weaklistoffset == 0) PySlepcDS_Type.tp_weaklistoffset = offsetof(struct PySlepcDSObject, __pyx_base.__weakref__);
+  __pyx_ptype_8slepc4py_5SLEPc_DS = &PySlepcDS_Type;
+  __pyx_vtabptr_8slepc4py_5SLEPc_FN = &__pyx_vtable_8slepc4py_5SLEPc_FN;
+  __pyx_vtable_8slepc4py_5SLEPc_FN.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
+  PySlepcFN_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
+  if (PyType_Ready(&PySlepcFN_Type) < 0) __PYX_ERR(11, 31, __pyx_L1_error)
+  PySlepcFN_Type.tp_print = 0;
+  if (__Pyx_SetVtable(PySlepcFN_Type.tp_dict, __pyx_vtabptr_8slepc4py_5SLEPc_FN) < 0) __PYX_ERR(11, 31, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "FN", (PyObject *)&PySlepcFN_Type) < 0) __PYX_ERR(11, 31, __pyx_L1_error)
+  if (PySlepcFN_Type.tp_weaklistoffset == 0) PySlepcFN_Type.tp_weaklistoffset = offsetof(struct PySlepcFNObject, __pyx_base.__weakref__);
+  __pyx_ptype_8slepc4py_5SLEPc_FN = &PySlepcFN_Type;
+  __pyx_vtabptr_8slepc4py_5SLEPc_RG = &__pyx_vtable_8slepc4py_5SLEPc_RG;
+  __pyx_vtable_8slepc4py_5SLEPc_RG.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
+  PySlepcRG_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
+  if (PyType_Ready(&PySlepcRG_Type) < 0) __PYX_ERR(12, 14, __pyx_L1_error)
+  PySlepcRG_Type.tp_print = 0;
+  if (__Pyx_SetVtable(PySlepcRG_Type.tp_dict, __pyx_vtabptr_8slepc4py_5SLEPc_RG) < 0) __PYX_ERR(12, 14, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "RG", (PyObject *)&PySlepcRG_Type) < 0) __PYX_ERR(12, 14, __pyx_L1_error)
+  if (PySlepcRG_Type.tp_weaklistoffset == 0) PySlepcRG_Type.tp_weaklistoffset = offsetof(struct PySlepcRGObject, __pyx_base.__weakref__);
+  __pyx_ptype_8slepc4py_5SLEPc_RG = &PySlepcRG_Type;
+  __pyx_vtabptr_8slepc4py_5SLEPc_EPS = &__pyx_vtable_8slepc4py_5SLEPc_EPS;
+  __pyx_vtable_8slepc4py_5SLEPc_EPS.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
+  PySlepcEPS_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
+  if (PyType_Ready(&PySlepcEPS_Type) < 0) __PYX_ERR(13, 209, __pyx_L1_error)
+  PySlepcEPS_Type.tp_print = 0;
+  if (__Pyx_SetVtable(PySlepcEPS_Type.tp_dict, __pyx_vtabptr_8slepc4py_5SLEPc_EPS) < 0) __PYX_ERR(13, 209, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "EPS", (PyObject *)&PySlepcEPS_Type) < 0) __PYX_ERR(13, 209, __pyx_L1_error)
+  if (PySlepcEPS_Type.tp_weaklistoffset == 0) PySlepcEPS_Type.tp_weaklistoffset = offsetof(struct PySlepcEPSObject, __pyx_base.__weakref__);
+  __pyx_ptype_8slepc4py_5SLEPc_EPS = &PySlepcEPS_Type;
+  __pyx_vtabptr_8slepc4py_5SLEPc_SVD = &__pyx_vtable_8slepc4py_5SLEPc_SVD;
+  __pyx_vtable_8slepc4py_5SLEPc_SVD.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
+  PySlepcSVD_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
+  if (PyType_Ready(&PySlepcSVD_Type) < 0) __PYX_ERR(14, 58, __pyx_L1_error)
+  PySlepcSVD_Type.tp_print = 0;
+  if (__Pyx_SetVtable(PySlepcSVD_Type.tp_dict, __pyx_vtabptr_8slepc4py_5SLEPc_SVD) < 0) __PYX_ERR(14, 58, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "SVD", (PyObject *)&PySlepcSVD_Type) < 0) __PYX_ERR(14, 58, __pyx_L1_error)
+  if (PySlepcSVD_Type.tp_weaklistoffset == 0) PySlepcSVD_Type.tp_weaklistoffset = offsetof(struct PySlepcSVDObject, __pyx_base.__weakref__);
+  __pyx_ptype_8slepc4py_5SLEPc_SVD = &PySlepcSVD_Type;
+  __pyx_vtabptr_8slepc4py_5SLEPc_PEP = &__pyx_vtable_8slepc4py_5SLEPc_PEP;
+  __pyx_vtable_8slepc4py_5SLEPc_PEP.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
+  PySlepcPEP_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
+  if (PyType_Ready(&PySlepcPEP_Type) < 0) __PYX_ERR(15, 167, __pyx_L1_error)
+  PySlepcPEP_Type.tp_print = 0;
+  if (__Pyx_SetVtable(PySlepcPEP_Type.tp_dict, __pyx_vtabptr_8slepc4py_5SLEPc_PEP) < 0) __PYX_ERR(15, 167, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "PEP", (PyObject *)&PySlepcPEP_Type) < 0) __PYX_ERR(15, 167, __pyx_L1_error)
+  if (PySlepcPEP_Type.tp_weaklistoffset == 0) PySlepcPEP_Type.tp_weaklistoffset = offsetof(struct PySlepcPEPObject, __pyx_base.__weakref__);
+  __pyx_ptype_8slepc4py_5SLEPc_PEP = &PySlepcPEP_Type;
+  __pyx_vtabptr_8slepc4py_5SLEPc_NEP = &__pyx_vtable_8slepc4py_5SLEPc_NEP;
+  __pyx_vtable_8slepc4py_5SLEPc_NEP.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
+  PySlepcNEP_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
+  if (PyType_Ready(&PySlepcNEP_Type) < 0) __PYX_ERR(16, 83, __pyx_L1_error)
+  PySlepcNEP_Type.tp_print = 0;
+  if (__Pyx_SetVtable(PySlepcNEP_Type.tp_dict, __pyx_vtabptr_8slepc4py_5SLEPc_NEP) < 0) __PYX_ERR(16, 83, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "NEP", (PyObject *)&PySlepcNEP_Type) < 0) __PYX_ERR(16, 83, __pyx_L1_error)
+  if (PySlepcNEP_Type.tp_weaklistoffset == 0) PySlepcNEP_Type.tp_weaklistoffset = offsetof(struct PySlepcNEPObject, __pyx_base.__weakref__);
+  __pyx_ptype_8slepc4py_5SLEPc_NEP = &PySlepcNEP_Type;
+  __pyx_vtabptr_8slepc4py_5SLEPc_MFN = &__pyx_vtable_8slepc4py_5SLEPc_MFN;
+  __pyx_vtable_8slepc4py_5SLEPc_MFN.__pyx_base = *__pyx_vtabptr_8petsc4py_5PETSc_Object;
+  PySlepcMFN_Type.tp_base = __pyx_ptype_8petsc4py_5PETSc_Object;
+  if (PyType_Ready(&PySlepcMFN_Type) < 0) __PYX_ERR(17, 25, __pyx_L1_error)
+  PySlepcMFN_Type.tp_print = 0;
+  if (__Pyx_SetVtable(PySlepcMFN_Type.tp_dict, __pyx_vtabptr_8slepc4py_5SLEPc_MFN) < 0) __PYX_ERR(17, 25, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "MFN", (PyObject *)&PySlepcMFN_Type) < 0) __PYX_ERR(17, 25, __pyx_L1_error)
+  if (PySlepcMFN_Type.tp_weaklistoffset == 0) PySlepcMFN_Type.tp_weaklistoffset = offsetof(struct PySlepcMFNObject, __pyx_base.__weakref__);
+  __pyx_ptype_8slepc4py_5SLEPc_MFN = &PySlepcMFN_Type;
+  if (PyType_Ready(&__pyx_type_8slepc4py_5SLEPc__p_mem) < 0) __PYX_ERR(1, 11, __pyx_L1_error)
+  __pyx_type_8slepc4py_5SLEPc__p_mem.tp_print = 0;
+  if (PyObject_SetAttrString(__pyx_m, "_p_mem", (PyObject *)&__pyx_type_8slepc4py_5SLEPc__p_mem) < 0) __PYX_ERR(1, 11, __pyx_L1_error)
+  __pyx_ptype_8slepc4py_5SLEPc__p_mem = &__pyx_type_8slepc4py_5SLEPc__p_mem;
+  if (PyType_Ready(&__pyx_type_8slepc4py_5SLEPc_Sys) < 0) __PYX_ERR(9, 3, __pyx_L1_error)
+  __pyx_type_8slepc4py_5SLEPc_Sys.tp_print = 0;
+  if (PyObject_SetAttrString(__pyx_m, "Sys", (PyObject *)&__pyx_type_8slepc4py_5SLEPc_Sys) < 0) __PYX_ERR(9, 3, __pyx_L1_error)
+  __pyx_ptype_8slepc4py_5SLEPc_Sys = &__pyx_type_8slepc4py_5SLEPc_Sys;
+  /*--- Type import code ---*/
+  __pyx_ptype_8petsc4py_5PETSc_Comm = __Pyx_ImportType("petsc4py.PETSc", "Comm", sizeof(struct PyPetscCommObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_Comm)) __PYX_ERR(20, 70, __pyx_L1_error)
+  __pyx_ptype_8petsc4py_5PETSc_Viewer = __Pyx_ImportType("petsc4py.PETSc", "Viewer", sizeof(struct PyPetscViewerObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_Viewer)) __PYX_ERR(20, 90, __pyx_L1_error)
+  __pyx_vtabptr_8petsc4py_5PETSc_Viewer = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Viewer*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_Viewer->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_Viewer)) __PYX_ERR(20, 90, __pyx_L1_error)
+  __pyx_ptype_8petsc4py_5PETSc_Random = __Pyx_ImportType("petsc4py.PETSc", "Random", sizeof(struct PyPetscRandomObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_Random)) __PYX_ERR(20, 96, __pyx_L1_error)
+  __pyx_vtabptr_8petsc4py_5PETSc_Random = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Random*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_Random->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_Random)) __PYX_ERR(20, 96, __pyx_L1_error)
+  __pyx_ptype_8petsc4py_5PETSc_IS = __Pyx_ImportType("petsc4py.PETSc", "IS", sizeof(struct PyPetscISObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_IS)) __PYX_ERR(20, 102, __pyx_L1_error)
+  __pyx_vtabptr_8petsc4py_5PETSc_IS = (struct __pyx_vtabstruct_8petsc4py_5PETSc_IS*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_IS->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_IS)) __PYX_ERR(20, 102, __pyx_L1_error)
+  __pyx_ptype_8petsc4py_5PETSc_LGMap = __Pyx_ImportType("petsc4py.PETSc", "LGMap", sizeof(struct PyPetscLGMapObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_LGMap)) __PYX_ERR(20, 108, __pyx_L1_error)
+  __pyx_vtabptr_8petsc4py_5PETSc_LGMap = (struct __pyx_vtabstruct_8petsc4py_5PETSc_LGMap*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_LGMap->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_LGMap)) __PYX_ERR(20, 108, __pyx_L1_error)
+  __pyx_ptype_8petsc4py_5PETSc_SF = __Pyx_ImportType("petsc4py.PETSc", "SF", sizeof(struct PyPetscSFObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_SF)) __PYX_ERR(20, 114, __pyx_L1_error)
+  __pyx_vtabptr_8petsc4py_5PETSc_SF = (struct __pyx_vtabstruct_8petsc4py_5PETSc_SF*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_SF->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_SF)) __PYX_ERR(20, 114, __pyx_L1_error)
+  __pyx_ptype_8petsc4py_5PETSc_Vec = __Pyx_ImportType("petsc4py.PETSc", "Vec", sizeof(struct PyPetscVecObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_Vec)) __PYX_ERR(20, 120, __pyx_L1_error)
+  __pyx_vtabptr_8petsc4py_5PETSc_Vec = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Vec*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_Vec->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_Vec)) __PYX_ERR(20, 120, __pyx_L1_error)
+  __pyx_ptype_8petsc4py_5PETSc_Scatter = __Pyx_ImportType("petsc4py.PETSc", "Scatter", sizeof(struct PyPetscScatterObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_Scatter)) __PYX_ERR(20, 126, __pyx_L1_error)
+  __pyx_vtabptr_8petsc4py_5PETSc_Scatter = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Scatter*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_Scatter->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_Scatter)) __PYX_ERR(20, 126, __pyx_L1_error)
+  __pyx_ptype_8petsc4py_5PETSc_Section = __Pyx_ImportType("petsc4py.PETSc", "Section", sizeof(struct PyPetscSectionObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_Section)) __PYX_ERR(20, 132, __pyx_L1_error)
+  __pyx_vtabptr_8petsc4py_5PETSc_Section = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Section*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_Section->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_Section)) __PYX_ERR(20, 132, __pyx_L1_error)
+  __pyx_ptype_8petsc4py_5PETSc_Mat = __Pyx_ImportType("petsc4py.PETSc", "Mat", sizeof(struct PyPetscMatObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_Mat)) __PYX_ERR(20, 138, __pyx_L1_error)
+  __pyx_vtabptr_8petsc4py_5PETSc_Mat = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Mat*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_Mat)) __PYX_ERR(20, 138, __pyx_L1_error)
+  __pyx_ptype_8petsc4py_5PETSc_NullSpace = __Pyx_ImportType("petsc4py.PETSc", "NullSpace", sizeof(struct PyPetscNullSpaceObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_NullSpace)) __PYX_ERR(20, 144, __pyx_L1_error)
+  __pyx_vtabptr_8petsc4py_5PETSc_NullSpace = (struct __pyx_vtabstruct_8petsc4py_5PETSc_NullSpace*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_NullSpace->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_NullSpace)) __PYX_ERR(20, 144, __pyx_L1_error)
+  __pyx_ptype_8petsc4py_5PETSc_PC = __Pyx_ImportType("petsc4py.PETSc", "PC", sizeof(struct PyPetscPCObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_PC)) __PYX_ERR(20, 150, __pyx_L1_error)
+  __pyx_vtabptr_8petsc4py_5PETSc_PC = (struct __pyx_vtabstruct_8petsc4py_5PETSc_PC*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_PC)) __PYX_ERR(20, 150, __pyx_L1_error)
+  __pyx_ptype_8petsc4py_5PETSc_KSP = __Pyx_ImportType("petsc4py.PETSc", "KSP", sizeof(struct PyPetscKSPObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_KSP)) __PYX_ERR(20, 156, __pyx_L1_error)
+  __pyx_vtabptr_8petsc4py_5PETSc_KSP = (struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_KSP->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_KSP)) __PYX_ERR(20, 156, __pyx_L1_error)
+  __pyx_ptype_8petsc4py_5PETSc_SNES = __Pyx_ImportType("petsc4py.PETSc", "SNES", sizeof(struct PyPetscSNESObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_SNES)) __PYX_ERR(20, 162, __pyx_L1_error)
+  __pyx_vtabptr_8petsc4py_5PETSc_SNES = (struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_SNES)) __PYX_ERR(20, 162, __pyx_L1_error)
+  __pyx_ptype_8petsc4py_5PETSc_TS = __Pyx_ImportType("petsc4py.PETSc", "TS", sizeof(struct PyPetscTSObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_TS)) __PYX_ERR(20, 168, __pyx_L1_error)
+  __pyx_vtabptr_8petsc4py_5PETSc_TS = (struct __pyx_vtabstruct_8petsc4py_5PETSc_TS*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_TS->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_TS)) __PYX_ERR(20, 168, __pyx_L1_error)
+  __pyx_ptype_8petsc4py_5PETSc_TAO = __Pyx_ImportType("petsc4py.PETSc", "TAO", sizeof(struct PyPetscTAOObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_TAO)) __PYX_ERR(20, 174, __pyx_L1_error)
+  __pyx_vtabptr_8petsc4py_5PETSc_TAO = (struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_TAO->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_TAO)) __PYX_ERR(20, 174, __pyx_L1_error)
+  __pyx_ptype_8petsc4py_5PETSc_AO = __Pyx_ImportType("petsc4py.PETSc", "AO", sizeof(struct PyPetscAOObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_AO)) __PYX_ERR(20, 180, __pyx_L1_error)
+  __pyx_vtabptr_8petsc4py_5PETSc_AO = (struct __pyx_vtabstruct_8petsc4py_5PETSc_AO*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_AO->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_AO)) __PYX_ERR(20, 180, __pyx_L1_error)
+  __pyx_ptype_8petsc4py_5PETSc_DM = __Pyx_ImportType("petsc4py.PETSc", "DM", sizeof(struct PyPetscDMObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_DM)) __PYX_ERR(20, 186, __pyx_L1_error)
+  __pyx_vtabptr_8petsc4py_5PETSc_DM = (struct __pyx_vtabstruct_8petsc4py_5PETSc_DM*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_DM->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_DM)) __PYX_ERR(20, 186, __pyx_L1_error)
+  __pyx_ptype_8petsc4py_5PETSc_Partitioner = __Pyx_ImportType("petsc4py.PETSc", "Partitioner", sizeof(struct PyPetscPartitionerObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_Partitioner)) __PYX_ERR(20, 192, __pyx_L1_error)
+  __pyx_vtabptr_8petsc4py_5PETSc_Partitioner = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Partitioner*)__Pyx_GetVtable(__pyx_ptype_8petsc4py_5PETSc_Partitioner->tp_dict); if (unlikely(!__pyx_vtabptr_8petsc4py_5PETSc_Partitioner)) __PYX_ERR(20, 192, __pyx_L1_error)
+  /*--- Variable import code ---*/
+  /*--- Function import code ---*/
+  __pyx_t_1 = __Pyx_ImportModule("petsc4py.PETSc"); if (!__pyx_t_1) __PYX_ERR(19, 1, __pyx_L1_error)
+  if (__Pyx_ImportFunction(__pyx_t_1, "GetComm", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_GetComm, "MPI_Comm (PyObject *, MPI_Comm)") < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  if (__Pyx_ImportFunction(__pyx_t_1, "GetCommDefault", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_GetCommDefault, "MPI_Comm (void)") < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  if (__Pyx_ImportFunction(__pyx_t_1, "PyPetscType_Register", (void (**)(void))&__pyx_f_8petsc4py_5PETSc_PyPetscType_Register, "int (int, PyTypeObject *)") < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  Py_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  /*--- Execution code ---*/
+  #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED)
+  if (__Pyx_patch_abc() < 0) __PYX_ERR(19, 1, __pyx_L1_error)
+  #endif
+
+  /* "SLEPc/SLEPc.pyx":3
+ * # -----------------------------------------------------------------------------
+ * 
+ * from petsc4py.PETSc import COMM_NULL             # <<<<<<<<<<<<<<
+ * from petsc4py.PETSc import COMM_SELF
+ * from petsc4py.PETSc import COMM_WORLD
+ */
+  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_n_s_COMM_NULL);
+  __Pyx_GIVEREF(__pyx_n_s_COMM_NULL);
+  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_COMM_NULL);
+  __pyx_t_3 = __Pyx_Import(__pyx_n_s_petsc4py_PETSc, __pyx_t_2, -1); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_COMM_NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMM_NULL, __pyx_t_2) < 0) __PYX_ERR(4, 3, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+  /* "SLEPc/SLEPc.pyx":4
+ * 
+ * from petsc4py.PETSc import COMM_NULL
+ * from petsc4py.PETSc import COMM_SELF             # <<<<<<<<<<<<<<
+ * from petsc4py.PETSc import COMM_WORLD
+ * 
+ */
+  __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_n_s_COMM_SELF);
+  __Pyx_GIVEREF(__pyx_n_s_COMM_SELF);
+  PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_COMM_SELF);
+  __pyx_t_2 = __Pyx_Import(__pyx_n_s_petsc4py_PETSc, __pyx_t_3, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_COMM_SELF); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMM_SELF, __pyx_t_3) < 0) __PYX_ERR(4, 4, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/SLEPc.pyx":5
+ * from petsc4py.PETSc import COMM_NULL
+ * from petsc4py.PETSc import COMM_SELF
+ * from petsc4py.PETSc import COMM_WORLD             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
+ */
+  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_n_s_COMM_WORLD);
+  __Pyx_GIVEREF(__pyx_n_s_COMM_WORLD);
+  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_COMM_WORLD);
+  __pyx_t_3 = __Pyx_Import(__pyx_n_s_petsc4py_PETSc, __pyx_t_2, -1); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMM_WORLD, __pyx_t_2) < 0) __PYX_ERR(4, 5, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+  /* "SLEPc/SLEPc.pyx":62
+ *     void *PyExc_RuntimeError
+ * 
+ * cdef object PetscError = <object>PyExc_RuntimeError             # <<<<<<<<<<<<<<
+ * from petsc4py.PETSc import Error as PetscError
+ * 
+ */
+  __pyx_t_3 = ((PyObject *)PyExc_RuntimeError);
+  __Pyx_INCREF(__pyx_t_3);
+  __Pyx_XGOTREF(__pyx_v_8slepc4py_5SLEPc_PetscError);
+  __Pyx_DECREF_SET(__pyx_v_8slepc4py_5SLEPc_PetscError, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_3);
+  __pyx_t_3 = 0;
+
+  /* "SLEPc/SLEPc.pyx":63
+ * 
+ * cdef object PetscError = <object>PyExc_RuntimeError
+ * from petsc4py.PETSc import Error as PetscError             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline int SETERR(int ierr) with gil:
+ */
+  __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 63, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_n_s_Error);
+  __Pyx_GIVEREF(__pyx_n_s_Error);
+  PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_Error);
+  __pyx_t_2 = __Pyx_Import(__pyx_n_s_petsc4py_PETSc, __pyx_t_3, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 63, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Error); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 63, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_t_3);
+  __Pyx_XGOTREF(__pyx_v_8slepc4py_5SLEPc_PetscError);
+  __Pyx_DECREF_SET(__pyx_v_8slepc4py_5SLEPc_PetscError, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/SLEPc.pyx":136
+ * 
+ * __doc__ = \
+ * """             # <<<<<<<<<<<<<<
+ * Scalable Library for Eigenvalue Problem Computations.
+ * """
+ */
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_doc, __pyx_kp_s_Scalable_Library_for_Eigenvalue) < 0) __PYX_ERR(4, 135, __pyx_L1_error)
+
+  /* "SLEPc/SLEPc.pyx":140
+ * """
+ * 
+ * DECIDE    = PETSC_DECIDE             # <<<<<<<<<<<<<<
+ * DEFAULT   = PETSC_DEFAULT
+ * DETERMINE = PETSC_DETERMINE
+ */
+  __pyx_t_2 = __Pyx_PyInt_From_int(PETSC_DECIDE); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 140, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DECIDE, __pyx_t_2) < 0) __PYX_ERR(4, 140, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/SLEPc.pyx":141
+ * 
+ * DECIDE    = PETSC_DECIDE
+ * DEFAULT   = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ * DETERMINE = PETSC_DETERMINE
+ * 
+ */
+  __pyx_t_2 = __Pyx_PyInt_From_int(PETSC_DEFAULT); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 141, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEFAULT, __pyx_t_2) < 0) __PYX_ERR(4, 141, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/SLEPc.pyx":142
+ * DECIDE    = PETSC_DECIDE
+ * DEFAULT   = PETSC_DEFAULT
+ * DETERMINE = PETSC_DETERMINE             # <<<<<<<<<<<<<<
+ * 
+ * include "Sys.pyx"
+ */
+  __pyx_t_2 = __Pyx_PyInt_From_int(PETSC_DETERMINE); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 142, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DETERMINE, __pyx_t_2) < 0) __PYX_ERR(4, 142, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/Sys.pyx":6
+ * 
+ *     @classmethod
+ *     def getVersion(cls, patch=False, devel=False,             # <<<<<<<<<<<<<<
+ *                    date=False, author=False):
+ *         cdef int cmajor = SLEPC_VERSION_MAJOR
+ */
+  __pyx_t_2 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_Sys, __pyx_n_s_getVersion); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 6, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+
+  /* "SLEPc/Sys.pyx":5
+ * cdef class Sys:
+ * 
+ *     @classmethod             # <<<<<<<<<<<<<<
+ *     def getVersion(cls, patch=False, devel=False,
+ *                    date=False, author=False):
+ */
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_Sys->tp_dict, __pyx_n_s_getVersion, __pyx_t_3) < 0) __PYX_ERR(9, 6, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_Sys);
+
+  /* "SLEPc/Sys.pyx":32
+ * 
+ *     @classmethod
+ *     def getVersionInfo(cls):             # <<<<<<<<<<<<<<
+ *         cdef int cmajor = SLEPC_VERSION_MAJOR
+ *         cdef int cminor = SLEPC_VERSION_MINOR
+ */
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_Sys, __pyx_n_s_getVersionInfo); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 32, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+
+  /* "SLEPc/Sys.pyx":31
+ *         return tuple(out)
+ * 
+ *     @classmethod             # <<<<<<<<<<<<<<
+ *     def getVersionInfo(cls):
+ *         cdef int cmajor = SLEPC_VERSION_MAJOR
+ */
+  __pyx_t_2 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 31, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_Sys->tp_dict, __pyx_n_s_getVersionInfo, __pyx_t_2) < 0) __PYX_ERR(9, 32, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_Sys);
+
+  /* "SLEPc/ST.pyx":3
+ * # -----------------------------------------------------------------------------
+ * 
+ * class STType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     ST types
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_PEPConv, __pyx_n_s_PEPConv, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_PEP_convergence_test_ABS_EIG_NO); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_STType, __pyx_n_s_STType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_ST_types_SHELL_User_defined_SHI); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "SLEPc/PEP.pyx":92
- *     - `USER`:
+  /* "SLEPc/ST.pyx":13
+ *     - `PRECOND`: Preconditioner.
  *     """
- *     ABS  = EPS_CONV_ABS             # <<<<<<<<<<<<<<
- *     EIG  = EPS_CONV_EIG
- *     NORM = EPS_CONV_NORM
+ *     SHELL   = S_(STSHELL)             # <<<<<<<<<<<<<<
+ *     SHIFT   = S_(STSHIFT)
+ *     SINVERT = S_(STSINVERT)
  */
-  __pyx_t_5 = PyInt_FromLong(EPS_CONV_ABS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(STSHELL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ABS, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SHELL, __pyx_t_5) < 0) __PYX_ERR(0, 13, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/PEP.pyx":93
+  /* "SLEPc/ST.pyx":14
  *     """
- *     ABS  = EPS_CONV_ABS
- *     EIG  = EPS_CONV_EIG             # <<<<<<<<<<<<<<
- *     NORM = EPS_CONV_NORM
- *     USER = EPS_CONV_USER
+ *     SHELL   = S_(STSHELL)
+ *     SHIFT   = S_(STSHIFT)             # <<<<<<<<<<<<<<
+ *     SINVERT = S_(STSINVERT)
+ *     CAYLEY  = S_(STCAYLEY)
  */
-  __pyx_t_5 = PyInt_FromLong(EPS_CONV_EIG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(STSHIFT); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_EIG, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SHIFT, __pyx_t_5) < 0) __PYX_ERR(0, 14, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/PEP.pyx":94
- *     ABS  = EPS_CONV_ABS
- *     EIG  = EPS_CONV_EIG
- *     NORM = EPS_CONV_NORM             # <<<<<<<<<<<<<<
- *     USER = EPS_CONV_USER
+  /* "SLEPc/ST.pyx":15
+ *     SHELL   = S_(STSHELL)
+ *     SHIFT   = S_(STSHIFT)
+ *     SINVERT = S_(STSINVERT)             # <<<<<<<<<<<<<<
+ *     CAYLEY  = S_(STCAYLEY)
+ *     PRECOND = S_(STPRECOND)
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(STSINVERT); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SINVERT, __pyx_t_5) < 0) __PYX_ERR(0, 15, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/ST.pyx":16
+ *     SHIFT   = S_(STSHIFT)
+ *     SINVERT = S_(STSINVERT)
+ *     CAYLEY  = S_(STCAYLEY)             # <<<<<<<<<<<<<<
+ *     PRECOND = S_(STPRECOND)
  * 
  */
-  __pyx_t_5 = PyInt_FromLong(EPS_CONV_NORM); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(STCAYLEY); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 16, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CAYLEY, __pyx_t_5) < 0) __PYX_ERR(0, 16, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/PEP.pyx":95
- *     EIG  = EPS_CONV_EIG
- *     NORM = EPS_CONV_NORM
- *     USER = EPS_CONV_USER             # <<<<<<<<<<<<<<
+  /* "SLEPc/ST.pyx":17
+ *     SINVERT = S_(STSINVERT)
+ *     CAYLEY  = S_(STCAYLEY)
+ *     PRECOND = S_(STPRECOND)             # <<<<<<<<<<<<<<
  * 
- * class PEPRefine(object):
+ * class STMatMode(object):
  */
-  __pyx_t_5 = PyInt_FromLong(EPS_CONV_USER); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(STPRECOND); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 17, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_USER, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PRECOND, __pyx_t_5) < 0) __PYX_ERR(0, 17, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/PEP.pyx":83
- *     BOTH     = PEP_SCALE_BOTH
+  /* "SLEPc/ST.pyx":3
+ * # -----------------------------------------------------------------------------
  * 
- * class PEPConv(object):             # <<<<<<<<<<<<<<
+ * class STType(object):             # <<<<<<<<<<<<<<
  *     """
- *     PEP convergence test
+ *     ST types
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_PEPConv, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_STType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PEPConv, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_STType, __pyx_t_5) < 0) __PYX_ERR(0, 3, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "SLEPc/PEP.pyx":97
- *     USER = EPS_CONV_USER
+  /* "SLEPc/ST.pyx":19
+ *     PRECOND = S_(STPRECOND)
  * 
- * class PEPRefine(object):             # <<<<<<<<<<<<<<
+ * class STMatMode(object):             # <<<<<<<<<<<<<<
  *     """
- *     PEP refinement strategy
+ *     ST matrix mode
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_PEPRefine, __pyx_n_s_PEPRefine, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_PEP_refinement_strategy_NONE_SI); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_STMatMode, __pyx_n_s_STMatMode, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_ST_matrix_mode_COPY_A_working_c); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 19, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "SLEPc/PEP.pyx":105
- *     - `MULTIPLE`:
+  /* "SLEPc/ST.pyx":28
+ *       implicit matrix.
  *     """
- *     NONE  = PEP_REFINE_NONE             # <<<<<<<<<<<<<<
- *     SIMPLE  = PEP_REFINE_SIMPLE
- *     MULTIPLE = PEP_REFINE_MULTIPLE
+ *     COPY    = ST_MATMODE_COPY             # <<<<<<<<<<<<<<
+ *     INPLACE = ST_MATMODE_INPLACE
+ *     SHELL   = ST_MATMODE_SHELL
  */
-  __pyx_t_5 = PyInt_FromLong(PEP_REFINE_NONE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_STMatMode(ST_MATMODE_COPY); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 28, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_COPY, __pyx_t_5) < 0) __PYX_ERR(0, 28, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/PEP.pyx":106
+  /* "SLEPc/ST.pyx":29
  *     """
- *     NONE  = PEP_REFINE_NONE
- *     SIMPLE  = PEP_REFINE_SIMPLE             # <<<<<<<<<<<<<<
- *     MULTIPLE = PEP_REFINE_MULTIPLE
+ *     COPY    = ST_MATMODE_COPY
+ *     INPLACE = ST_MATMODE_INPLACE             # <<<<<<<<<<<<<<
+ *     SHELL   = ST_MATMODE_SHELL
  * 
  */
-  __pyx_t_5 = PyInt_FromLong(PEP_REFINE_SIMPLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_STMatMode(ST_MATMODE_INPLACE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 29, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SIMPLE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INPLACE, __pyx_t_5) < 0) __PYX_ERR(0, 29, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/PEP.pyx":107
- *     NONE  = PEP_REFINE_NONE
- *     SIMPLE  = PEP_REFINE_SIMPLE
- *     MULTIPLE = PEP_REFINE_MULTIPLE             # <<<<<<<<<<<<<<
+  /* "SLEPc/ST.pyx":30
+ *     COPY    = ST_MATMODE_COPY
+ *     INPLACE = ST_MATMODE_INPLACE
+ *     SHELL   = ST_MATMODE_SHELL             # <<<<<<<<<<<<<<
  * 
- * class PEPConvergedReason(object):
+ * # -----------------------------------------------------------------------------
  */
-  __pyx_t_5 = PyInt_FromLong(PEP_REFINE_MULTIPLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_STMatMode(ST_MATMODE_SHELL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 30, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MULTIPLE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SHELL, __pyx_t_5) < 0) __PYX_ERR(0, 30, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/PEP.pyx":97
- *     USER = EPS_CONV_USER
+  /* "SLEPc/ST.pyx":19
+ *     PRECOND = S_(STPRECOND)
  * 
- * class PEPRefine(object):             # <<<<<<<<<<<<<<
+ * class STMatMode(object):             # <<<<<<<<<<<<<<
  *     """
- *     PEP refinement strategy
+ *     ST matrix mode
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_PEPRefine, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_STMatMode, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 19, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PEPRefine, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_STMatMode, __pyx_t_5) < 0) __PYX_ERR(0, 19, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "SLEPc/PEP.pyx":109
- *     MULTIPLE = PEP_REFINE_MULTIPLE
+  /* "SLEPc/ST.pyx":40
+ *     """
  * 
- * class PEPConvergedReason(object):             # <<<<<<<<<<<<<<
+ *     Type         = STType             # <<<<<<<<<<<<<<
+ *     MatMode      = STMatMode
+ * 
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_STType); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 40, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_ST->tp_dict, __pyx_n_s_Type, __pyx_t_2) < 0) __PYX_ERR(0, 40, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_ST);
+
+  /* "SLEPc/ST.pyx":41
+ * 
+ *     Type         = STType
+ *     MatMode      = STMatMode             # <<<<<<<<<<<<<<
+ * 
+ *     def __cinit__(self):
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_STMatMode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 41, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_ST->tp_dict, __pyx_n_s_MatMode, __pyx_t_2) < 0) __PYX_ERR(0, 41, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_ST);
+
+  /* "SLEPc/ST.pyx":469
+ * # -----------------------------------------------------------------------------
+ * 
+ * del STType             # <<<<<<<<<<<<<<
+ * del STMatMode
+ * 
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_STType) < 0) __PYX_ERR(0, 469, __pyx_L1_error)
+
+  /* "SLEPc/ST.pyx":470
+ * 
+ * del STType
+ * del STMatMode             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_STMatMode) < 0) __PYX_ERR(0, 470, __pyx_L1_error)
+
+  /* "SLEPc/BV.pyx":3
+ * # -----------------------------------------------------------------------------
+ * 
+ * class BVType(object):             # <<<<<<<<<<<<<<
  *     """
- *     PEP convergence reasons
+ *     BV type
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_PEPConvergedReason, __pyx_n_s_PEPConvergedReason, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_PEP_convergence_reasons_CONVERG); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_BVType, __pyx_n_s_BVType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_BV_type); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "SLEPc/PEP.pyx":118
- *     - `CONVERGED_ITERATING`:
+  /* "SLEPc/BV.pyx":7
+ *     BV type
  *     """
- *     CONVERGED_TOL       = PEP_CONVERGED_TOL             # <<<<<<<<<<<<<<
- *     DIVERGED_ITS        = PEP_DIVERGED_ITS
- *     DIVERGED_BREAKDOWN  = PEP_DIVERGED_BREAKDOWN
+ *     MAT        = S_(BVMAT)             # <<<<<<<<<<<<<<
+ *     SVEC       = S_(BVSVEC)
+ *     VECS       = S_(BVVECS)
  */
-  __pyx_t_5 = PyInt_FromLong(PEP_CONVERGED_TOL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(BVMAT); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 7, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_TOL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MAT, __pyx_t_5) < 0) __PYX_ERR(3, 7, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/PEP.pyx":119
+  /* "SLEPc/BV.pyx":8
  *     """
- *     CONVERGED_TOL       = PEP_CONVERGED_TOL
- *     DIVERGED_ITS        = PEP_DIVERGED_ITS             # <<<<<<<<<<<<<<
- *     DIVERGED_BREAKDOWN  = PEP_DIVERGED_BREAKDOWN
- *     CONVERGED_ITERATING = PEP_CONVERGED_ITERATING
- */
-  __pyx_t_5 = PyInt_FromLong(PEP_DIVERGED_ITS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_ITS, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-
-  /* "SLEPc/PEP.pyx":120
- *     CONVERGED_TOL       = PEP_CONVERGED_TOL
- *     DIVERGED_ITS        = PEP_DIVERGED_ITS
- *     DIVERGED_BREAKDOWN  = PEP_DIVERGED_BREAKDOWN             # <<<<<<<<<<<<<<
- *     CONVERGED_ITERATING = PEP_CONVERGED_ITERATING
- *     ITERATING           = PEP_CONVERGED_ITERATING
+ *     MAT        = S_(BVMAT)
+ *     SVEC       = S_(BVSVEC)             # <<<<<<<<<<<<<<
+ *     VECS       = S_(BVVECS)
+ *     CONTIGUOUS = S_(BVCONTIGUOUS)
  */
-  __pyx_t_5 = PyInt_FromLong(PEP_DIVERGED_BREAKDOWN); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(BVSVEC); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 8, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_BREAKDOWN, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SVEC, __pyx_t_5) < 0) __PYX_ERR(3, 8, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/PEP.pyx":121
- *     DIVERGED_ITS        = PEP_DIVERGED_ITS
- *     DIVERGED_BREAKDOWN  = PEP_DIVERGED_BREAKDOWN
- *     CONVERGED_ITERATING = PEP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
- *     ITERATING           = PEP_CONVERGED_ITERATING
+  /* "SLEPc/BV.pyx":9
+ *     MAT        = S_(BVMAT)
+ *     SVEC       = S_(BVSVEC)
+ *     VECS       = S_(BVVECS)             # <<<<<<<<<<<<<<
+ *     CONTIGUOUS = S_(BVCONTIGUOUS)
  * 
  */
-  __pyx_t_5 = PyInt_FromLong(PEP_CONVERGED_ITERATING); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(BVVECS); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 9, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ITERATING, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_VECS, __pyx_t_5) < 0) __PYX_ERR(3, 9, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/PEP.pyx":122
- *     DIVERGED_BREAKDOWN  = PEP_DIVERGED_BREAKDOWN
- *     CONVERGED_ITERATING = PEP_CONVERGED_ITERATING
- *     ITERATING           = PEP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
+  /* "SLEPc/BV.pyx":10
+ *     SVEC       = S_(BVSVEC)
+ *     VECS       = S_(BVVECS)
+ *     CONTIGUOUS = S_(BVCONTIGUOUS)             # <<<<<<<<<<<<<<
  * 
- * # -----------------------------------------------------------------------------
+ * class BVOrthogType(object):
  */
-  __pyx_t_5 = PyInt_FromLong(PEP_CONVERGED_ITERATING); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(BVCONTIGUOUS); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 10, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ITERATING, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONTIGUOUS, __pyx_t_5) < 0) __PYX_ERR(3, 10, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/PEP.pyx":109
- *     MULTIPLE = PEP_REFINE_MULTIPLE
+  /* "SLEPc/BV.pyx":3
+ * # -----------------------------------------------------------------------------
  * 
- * class PEPConvergedReason(object):             # <<<<<<<<<<<<<<
+ * class BVType(object):             # <<<<<<<<<<<<<<
  *     """
- *     PEP convergence reasons
+ *     BV type
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_PEPConvergedReason, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_BVType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PEPConvergedReason, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BVType, __pyx_t_5) < 0) __PYX_ERR(3, 3, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "SLEPc/PEP.pyx":132
- *     """
+  /* "SLEPc/BV.pyx":12
+ *     CONTIGUOUS = S_(BVCONTIGUOUS)
  * 
- *     Type            = PEPType             # <<<<<<<<<<<<<<
- *     ProblemType     = PEPProblemType
- *     Which           = PEPWhich
+ * class BVOrthogType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     BV orthogonalization types
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_PEPType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 12, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_PEP->tp_dict, __pyx_n_s_Type, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_PEP);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 12, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_BVOrthogType, __pyx_n_s_BVOrthogType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_BV_orthogonalization_types_CGS); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 12, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
 
-  /* "SLEPc/PEP.pyx":133
+  /* "SLEPc/BV.pyx":19
+ *     - `MGS`: Modified Gram-Schmidt.
+ *     """
+ *     CGS = BV_ORTHOG_CGS             # <<<<<<<<<<<<<<
+ *     MGS = BV_ORTHOG_MGS
  * 
- *     Type            = PEPType
- *     ProblemType     = PEPProblemType             # <<<<<<<<<<<<<<
- *     Which           = PEPWhich
- *     Basis           = PEPBasis
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_PEPProblemType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_BVOrthogType(BV_ORTHOG_CGS); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CGS, __pyx_t_5) < 0) __PYX_ERR(3, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/BV.pyx":20
+ *     """
+ *     CGS = BV_ORTHOG_CGS
+ *     MGS = BV_ORTHOG_MGS             # <<<<<<<<<<<<<<
+ * 
+ * class BVOrthogRefineType(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_BVOrthogType(BV_ORTHOG_MGS); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 20, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MGS, __pyx_t_5) < 0) __PYX_ERR(3, 20, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/BV.pyx":12
+ *     CONTIGUOUS = S_(BVCONTIGUOUS)
+ * 
+ * class BVOrthogType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     BV orthogonalization types
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_BVOrthogType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 12, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BVOrthogType, __pyx_t_5) < 0) __PYX_ERR(3, 12, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/BV.pyx":22
+ *     MGS = BV_ORTHOG_MGS
+ * 
+ * class BVOrthogRefineType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     BV orthogonalization refinement types
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 22, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_PEP->tp_dict, __pyx_n_s_ProblemType, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 22, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_BVOrthogRefineType, __pyx_n_s_BVOrthogRefineType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_BV_orthogonalization_refinement); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 22, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/BV.pyx":30
+ *     - `ALWAYS`:   Always reorthogonalize.
+ *     """
+ *     IFNEEDED = BV_ORTHOG_REFINE_IFNEEDED             # <<<<<<<<<<<<<<
+ *     NEVER    = BV_ORTHOG_REFINE_NEVER
+ *     ALWAYS   = BV_ORTHOG_REFINE_ALWAYS
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_BVOrthogRefineType(BV_ORTHOG_REFINE_IFNEEDED); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 30, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_IFNEEDED, __pyx_t_5) < 0) __PYX_ERR(3, 30, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/BV.pyx":31
+ *     """
+ *     IFNEEDED = BV_ORTHOG_REFINE_IFNEEDED
+ *     NEVER    = BV_ORTHOG_REFINE_NEVER             # <<<<<<<<<<<<<<
+ *     ALWAYS   = BV_ORTHOG_REFINE_ALWAYS
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_BVOrthogRefineType(BV_ORTHOG_REFINE_NEVER); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 31, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NEVER, __pyx_t_5) < 0) __PYX_ERR(3, 31, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/BV.pyx":32
+ *     IFNEEDED = BV_ORTHOG_REFINE_IFNEEDED
+ *     NEVER    = BV_ORTHOG_REFINE_NEVER
+ *     ALWAYS   = BV_ORTHOG_REFINE_ALWAYS             # <<<<<<<<<<<<<<
+ * 
+ * class BVOrthogBlockType(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_BVOrthogRefineType(BV_ORTHOG_REFINE_ALWAYS); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 32, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ALWAYS, __pyx_t_5) < 0) __PYX_ERR(3, 32, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/BV.pyx":22
+ *     MGS = BV_ORTHOG_MGS
+ * 
+ * class BVOrthogRefineType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     BV orthogonalization refinement types
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_BVOrthogRefineType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 22, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BVOrthogRefineType, __pyx_t_5) < 0) __PYX_ERR(3, 22, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_PEP);
 
-  /* "SLEPc/PEP.pyx":134
- *     Type            = PEPType
- *     ProblemType     = PEPProblemType
- *     Which           = PEPWhich             # <<<<<<<<<<<<<<
- *     Basis           = PEPBasis
- *     Scale           = PEPScale
+  /* "SLEPc/BV.pyx":34
+ *     ALWAYS   = BV_ORTHOG_REFINE_ALWAYS
+ * 
+ * class BVOrthogBlockType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     BV block-orthogonalization types
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_PEPWhich); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 34, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_PEP->tp_dict, __pyx_n_s_Which, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 34, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_BVOrthogBlockType, __pyx_n_s_BVOrthogBlockType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_BV_block_orthogonalization_type); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 34, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/BV.pyx":41
+ *     - `CHOL`: Cholesky.
+ *     """
+ *     GS   = BV_ORTHOG_BLOCK_GS             # <<<<<<<<<<<<<<
+ *     CHOL = BV_ORTHOG_BLOCK_CHOL
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_BVOrthogBlockType(BV_ORTHOG_BLOCK_GS); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 41, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GS, __pyx_t_5) < 0) __PYX_ERR(3, 41, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/BV.pyx":42
+ *     """
+ *     GS   = BV_ORTHOG_BLOCK_GS
+ *     CHOL = BV_ORTHOG_BLOCK_CHOL             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_BVOrthogBlockType(BV_ORTHOG_BLOCK_CHOL); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 42, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CHOL, __pyx_t_5) < 0) __PYX_ERR(3, 42, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/BV.pyx":34
+ *     ALWAYS   = BV_ORTHOG_REFINE_ALWAYS
+ * 
+ * class BVOrthogBlockType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     BV block-orthogonalization types
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_BVOrthogBlockType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 34, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BVOrthogBlockType, __pyx_t_5) < 0) __PYX_ERR(3, 34, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_PEP);
 
-  /* "SLEPc/PEP.pyx":135
- *     ProblemType     = PEPProblemType
- *     Which           = PEPWhich
- *     Basis           = PEPBasis             # <<<<<<<<<<<<<<
- *     Scale           = PEPScale
- *     Refine          = PEPRefine
+  /* "SLEPc/BV.pyx":52
+ *     """
+ * 
+ *     Type             = BVType             # <<<<<<<<<<<<<<
+ *     OrthogType       = BVOrthogType
+ *     OrthogRefineType = BVOrthogRefineType
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_PEPBasis); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_BVType); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 52, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_PEP->tp_dict, __pyx_n_s_Basis, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_BV->tp_dict, __pyx_n_s_Type, __pyx_t_2) < 0) __PYX_ERR(3, 52, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_PEP);
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_BV);
 
-  /* "SLEPc/PEP.pyx":136
- *     Which           = PEPWhich
- *     Basis           = PEPBasis
- *     Scale           = PEPScale             # <<<<<<<<<<<<<<
- *     Refine          = PEPRefine
- *     ErrorType       = PEPErrorType
+  /* "SLEPc/BV.pyx":53
+ * 
+ *     Type             = BVType
+ *     OrthogType       = BVOrthogType             # <<<<<<<<<<<<<<
+ *     OrthogRefineType = BVOrthogRefineType
+ *     RefineType       = BVOrthogRefineType
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_PEPScale); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_BVOrthogType); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 53, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_PEP->tp_dict, __pyx_n_s_Scale, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_BV->tp_dict, __pyx_n_s_OrthogType, __pyx_t_2) < 0) __PYX_ERR(3, 53, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_PEP);
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_BV);
 
-  /* "SLEPc/PEP.pyx":137
- *     Basis           = PEPBasis
- *     Scale           = PEPScale
- *     Refine          = PEPRefine             # <<<<<<<<<<<<<<
- *     ErrorType       = PEPErrorType
- *     Conv            = PEPConv
+  /* "SLEPc/BV.pyx":54
+ *     Type             = BVType
+ *     OrthogType       = BVOrthogType
+ *     OrthogRefineType = BVOrthogRefineType             # <<<<<<<<<<<<<<
+ *     RefineType       = BVOrthogRefineType
+ *     OrthogBlockType  = BVOrthogBlockType
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_PEPRefine); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_BVOrthogRefineType); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 54, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_PEP->tp_dict, __pyx_n_s_Refine, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_BV->tp_dict, __pyx_n_s_OrthogRefineType, __pyx_t_2) < 0) __PYX_ERR(3, 54, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_PEP);
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_BV);
 
-  /* "SLEPc/PEP.pyx":138
- *     Scale           = PEPScale
- *     Refine          = PEPRefine
- *     ErrorType       = PEPErrorType             # <<<<<<<<<<<<<<
- *     Conv            = PEPConv
- *     ConvergedReason = PEPConvergedReason
+  /* "SLEPc/BV.pyx":55
+ *     OrthogType       = BVOrthogType
+ *     OrthogRefineType = BVOrthogRefineType
+ *     RefineType       = BVOrthogRefineType             # <<<<<<<<<<<<<<
+ *     OrthogBlockType  = BVOrthogBlockType
+ *     BlockType        = BVOrthogBlockType
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_PEPErrorType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_BVOrthogRefineType); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 55, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_PEP->tp_dict, __pyx_n_s_ErrorType, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_BV->tp_dict, __pyx_n_s_RefineType, __pyx_t_2) < 0) __PYX_ERR(3, 55, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_PEP);
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_BV);
 
-  /* "SLEPc/PEP.pyx":139
- *     Refine          = PEPRefine
- *     ErrorType       = PEPErrorType
- *     Conv            = PEPConv             # <<<<<<<<<<<<<<
- *     ConvergedReason = PEPConvergedReason
+  /* "SLEPc/BV.pyx":56
+ *     OrthogRefineType = BVOrthogRefineType
+ *     RefineType       = BVOrthogRefineType
+ *     OrthogBlockType  = BVOrthogBlockType             # <<<<<<<<<<<<<<
+ *     BlockType        = BVOrthogBlockType
  * 
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_PEPConv); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_BVOrthogBlockType); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 56, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_PEP->tp_dict, __pyx_n_s_Conv, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_BV->tp_dict, __pyx_n_s_OrthogBlockType, __pyx_t_2) < 0) __PYX_ERR(3, 56, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_PEP);
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_BV);
 
-  /* "SLEPc/PEP.pyx":140
- *     ErrorType       = PEPErrorType
- *     Conv            = PEPConv
- *     ConvergedReason = PEPConvergedReason             # <<<<<<<<<<<<<<
+  /* "SLEPc/BV.pyx":57
+ *     RefineType       = BVOrthogRefineType
+ *     OrthogBlockType  = BVOrthogBlockType
+ *     BlockType        = BVOrthogBlockType             # <<<<<<<<<<<<<<
  * 
  *     def __cinit__(self):
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_PEPConvergedReason); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_BVOrthogBlockType); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 57, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_PEP->tp_dict, __pyx_n_s_ConvergedReason, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_BV->tp_dict, __pyx_n_s_BlockType, __pyx_t_2) < 0) __PYX_ERR(3, 57, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_PEP);
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_BV);
 
-  /* "SLEPc/PEP.pyx":941
+  /* "SLEPc/BV.pyx":845
  * # -----------------------------------------------------------------------------
  * 
- * del PEPType             # <<<<<<<<<<<<<<
- * del PEPProblemType
- * del PEPWhich
+ * del BVType             # <<<<<<<<<<<<<<
+ * del BVOrthogType
+ * del BVOrthogRefineType
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PEPType) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 941; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_BVType) < 0) __PYX_ERR(3, 845, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":942
+  /* "SLEPc/BV.pyx":846
  * 
- * del PEPType
- * del PEPProblemType             # <<<<<<<<<<<<<<
- * del PEPWhich
- * del PEPBasis
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PEPProblemType) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 942; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/PEP.pyx":943
- * del PEPType
- * del PEPProblemType
- * del PEPWhich             # <<<<<<<<<<<<<<
- * del PEPBasis
- * del PEPScale
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PEPWhich) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 943; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/PEP.pyx":944
- * del PEPProblemType
- * del PEPWhich
- * del PEPBasis             # <<<<<<<<<<<<<<
- * del PEPScale
- * del PEPErrorType
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PEPBasis) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 944; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/PEP.pyx":945
- * del PEPWhich
- * del PEPBasis
- * del PEPScale             # <<<<<<<<<<<<<<
- * del PEPErrorType
- * del PEPConv
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PEPScale) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 945; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/PEP.pyx":946
- * del PEPBasis
- * del PEPScale
- * del PEPErrorType             # <<<<<<<<<<<<<<
- * del PEPConv
- * del PEPConvergedReason
+ * del BVType
+ * del BVOrthogType             # <<<<<<<<<<<<<<
+ * del BVOrthogRefineType
+ * del BVOrthogBlockType
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PEPErrorType) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 946; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_BVOrthogType) < 0) __PYX_ERR(3, 846, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":947
- * del PEPScale
- * del PEPErrorType
- * del PEPConv             # <<<<<<<<<<<<<<
- * del PEPConvergedReason
+  /* "SLEPc/BV.pyx":847
+ * del BVType
+ * del BVOrthogType
+ * del BVOrthogRefineType             # <<<<<<<<<<<<<<
+ * del BVOrthogBlockType
  * 
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PEPConv) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 947; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_BVOrthogRefineType) < 0) __PYX_ERR(3, 847, __pyx_L1_error)
 
-  /* "SLEPc/PEP.pyx":948
- * del PEPErrorType
- * del PEPConv
- * del PEPConvergedReason             # <<<<<<<<<<<<<<
+  /* "SLEPc/BV.pyx":848
+ * del BVOrthogType
+ * del BVOrthogRefineType
+ * del BVOrthogBlockType             # <<<<<<<<<<<<<<
  * 
  * # -----------------------------------------------------------------------------
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PEPConvergedReason) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 948; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_BVOrthogBlockType) < 0) __PYX_ERR(3, 848, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":3
+  /* "SLEPc/DS.pyx":3
  * # -----------------------------------------------------------------------------
  * 
- * class NEPType(object):             # <<<<<<<<<<<<<<
+ * class DSType(object):             # <<<<<<<<<<<<<<
  *     """
- *     NEP type
+ *     DS type
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_NEPType, __pyx_n_s_NEPType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_NEP_type_Nonlinear_eigensolvers); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_DSType, __pyx_n_s_DSType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_DS_type); if (unlikely(!__pyx_t_4)) __PYX_ERR(10, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "SLEPc/NEP.pyx":15
- *     - `INTERPOL`: Polynomial interpolation.
+  /* "SLEPc/DS.pyx":7
+ *     DS type
  *     """
- *     RII      = S_(NEPRII)             # <<<<<<<<<<<<<<
- *     SLP      = S_(NEPSLP)
- *     NARNOLDI = S_(NEPNARNOLDI)
+ *     HEP     = S_(DSHEP)             # <<<<<<<<<<<<<<
+ *     NHEP    = S_(DSNHEP)
+ *     GHEP    = S_(DSGHEP)
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(NEPRII); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(DSHEP); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 7, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RII, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HEP, __pyx_t_5) < 0) __PYX_ERR(10, 7, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/NEP.pyx":16
+  /* "SLEPc/DS.pyx":8
  *     """
- *     RII      = S_(NEPRII)
- *     SLP      = S_(NEPSLP)             # <<<<<<<<<<<<<<
- *     NARNOLDI = S_(NEPNARNOLDI)
- *     CISS     = S_(NEPCISS)
+ *     HEP     = S_(DSHEP)
+ *     NHEP    = S_(DSNHEP)             # <<<<<<<<<<<<<<
+ *     GHEP    = S_(DSGHEP)
+ *     GHIEP   = S_(DSGHIEP)
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(NEPSLP); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(DSNHEP); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 8, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SLP, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NHEP, __pyx_t_5) < 0) __PYX_ERR(10, 8, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/NEP.pyx":17
- *     RII      = S_(NEPRII)
- *     SLP      = S_(NEPSLP)
- *     NARNOLDI = S_(NEPNARNOLDI)             # <<<<<<<<<<<<<<
- *     CISS     = S_(NEPCISS)
- *     INTERPOL = S_(NEPINTERPOL)
+  /* "SLEPc/DS.pyx":9
+ *     HEP     = S_(DSHEP)
+ *     NHEP    = S_(DSNHEP)
+ *     GHEP    = S_(DSGHEP)             # <<<<<<<<<<<<<<
+ *     GHIEP   = S_(DSGHIEP)
+ *     GNHEP   = S_(DSGNHEP)
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(NEPNARNOLDI); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(DSGHEP); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 9, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NARNOLDI, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GHEP, __pyx_t_5) < 0) __PYX_ERR(10, 9, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/NEP.pyx":18
- *     SLP      = S_(NEPSLP)
- *     NARNOLDI = S_(NEPNARNOLDI)
- *     CISS     = S_(NEPCISS)             # <<<<<<<<<<<<<<
- *     INTERPOL = S_(NEPINTERPOL)
+  /* "SLEPc/DS.pyx":10
+ *     NHEP    = S_(DSNHEP)
+ *     GHEP    = S_(DSGHEP)
+ *     GHIEP   = S_(DSGHIEP)             # <<<<<<<<<<<<<<
+ *     GNHEP   = S_(DSGNHEP)
+ *     SVD     = S_(DSSVD)
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(DSGHIEP); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 10, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GHIEP, __pyx_t_5) < 0) __PYX_ERR(10, 10, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/DS.pyx":11
+ *     GHEP    = S_(DSGHEP)
+ *     GHIEP   = S_(DSGHIEP)
+ *     GNHEP   = S_(DSGNHEP)             # <<<<<<<<<<<<<<
+ *     SVD     = S_(DSSVD)
+ *     PEP     = S_(DSPEP)
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(DSGNHEP); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GNHEP, __pyx_t_5) < 0) __PYX_ERR(10, 11, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/DS.pyx":12
+ *     GHIEP   = S_(DSGHIEP)
+ *     GNHEP   = S_(DSGNHEP)
+ *     SVD     = S_(DSSVD)             # <<<<<<<<<<<<<<
+ *     PEP     = S_(DSPEP)
+ *     NEP     = S_(DSNEP)
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(DSSVD); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 12, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SVD, __pyx_t_5) < 0) __PYX_ERR(10, 12, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/DS.pyx":13
+ *     GNHEP   = S_(DSGNHEP)
+ *     SVD     = S_(DSSVD)
+ *     PEP     = S_(DSPEP)             # <<<<<<<<<<<<<<
+ *     NEP     = S_(DSNEP)
  * 
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(NEPCISS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(DSPEP); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 13, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CISS, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PEP, __pyx_t_5) < 0) __PYX_ERR(10, 13, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/NEP.pyx":19
- *     NARNOLDI = S_(NEPNARNOLDI)
- *     CISS     = S_(NEPCISS)
- *     INTERPOL = S_(NEPINTERPOL)             # <<<<<<<<<<<<<<
+  /* "SLEPc/DS.pyx":14
+ *     SVD     = S_(DSSVD)
+ *     PEP     = S_(DSPEP)
+ *     NEP     = S_(DSNEP)             # <<<<<<<<<<<<<<
  * 
- * class NEPErrorType(object):
+ * class DSStateType(object):
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(NEPINTERPOL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(DSNEP); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 14, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INTERPOL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NEP, __pyx_t_5) < 0) __PYX_ERR(10, 14, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/NEP.pyx":3
+  /* "SLEPc/DS.pyx":3
  * # -----------------------------------------------------------------------------
  * 
- * class NEPType(object):             # <<<<<<<<<<<<<<
+ * class DSType(object):             # <<<<<<<<<<<<<<
  *     """
- *     NEP type
+ *     DS type
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_NEPType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_DSType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_NEPType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DSType, __pyx_t_5) < 0) __PYX_ERR(10, 3, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "SLEPc/NEP.pyx":21
- *     INTERPOL = S_(NEPINTERPOL)
+  /* "SLEPc/DS.pyx":16
+ *     NEP     = S_(DSNEP)
  * 
- * class NEPErrorType(object):             # <<<<<<<<<<<<<<
+ * class DSStateType(object):             # <<<<<<<<<<<<<<
  *     """
- *     NEP error type to assess accuracy of computed solutions
+ *     DS state types
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 16, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 16, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_NEPErrorType, __pyx_n_s_NEPErrorType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_NEP_error_type_to_assess_accura); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_DSStateType, __pyx_n_s_DSStateType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_DS_state_types_RAW_Not_processe); if (unlikely(!__pyx_t_4)) __PYX_ERR(10, 16, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "SLEPc/NEP.pyx":28
- *     - `RELATIVE`:  Relative error.
+  /* "SLEPc/DS.pyx":25
+ *     - `TRUNCATED`: Condensed form truncated to a smaller size.
  *     """
- *     ABSOLUTE = NEP_ERROR_ABSOLUTE             # <<<<<<<<<<<<<<
- *     RELATIVE = NEP_ERROR_RELATIVE
- * 
+ *     RAW          = DS_STATE_RAW             # <<<<<<<<<<<<<<
+ *     INTERMEDIATE = DS_STATE_INTERMEDIATE
+ *     CONDENSED    = DS_STATE_CONDENSED
  */
-  __pyx_t_5 = PyInt_FromLong(NEP_ERROR_ABSOLUTE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_DSStateType(DS_STATE_RAW); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 25, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ABSOLUTE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RAW, __pyx_t_5) < 0) __PYX_ERR(10, 25, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/NEP.pyx":29
+  /* "SLEPc/DS.pyx":26
  *     """
- *     ABSOLUTE = NEP_ERROR_ABSOLUTE
- *     RELATIVE = NEP_ERROR_RELATIVE             # <<<<<<<<<<<<<<
+ *     RAW          = DS_STATE_RAW
+ *     INTERMEDIATE = DS_STATE_INTERMEDIATE             # <<<<<<<<<<<<<<
+ *     CONDENSED    = DS_STATE_CONDENSED
+ *     TRUNCATED    = DS_STATE_TRUNCATED
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_DSStateType(DS_STATE_INTERMEDIATE); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 26, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INTERMEDIATE, __pyx_t_5) < 0) __PYX_ERR(10, 26, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/DS.pyx":27
+ *     RAW          = DS_STATE_RAW
+ *     INTERMEDIATE = DS_STATE_INTERMEDIATE
+ *     CONDENSED    = DS_STATE_CONDENSED             # <<<<<<<<<<<<<<
+ *     TRUNCATED    = DS_STATE_TRUNCATED
  * 
- * class NEPWhich(object):
  */
-  __pyx_t_5 = PyInt_FromLong(NEP_ERROR_RELATIVE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_DSStateType(DS_STATE_CONDENSED); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 27, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RELATIVE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONDENSED, __pyx_t_5) < 0) __PYX_ERR(10, 27, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/NEP.pyx":21
- *     INTERPOL = S_(NEPINTERPOL)
+  /* "SLEPc/DS.pyx":28
+ *     INTERMEDIATE = DS_STATE_INTERMEDIATE
+ *     CONDENSED    = DS_STATE_CONDENSED
+ *     TRUNCATED    = DS_STATE_TRUNCATED             # <<<<<<<<<<<<<<
  * 
- * class NEPErrorType(object):             # <<<<<<<<<<<<<<
+ * class DSMatType(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_DSStateType(DS_STATE_TRUNCATED); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 28, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TRUNCATED, __pyx_t_5) < 0) __PYX_ERR(10, 28, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/DS.pyx":16
+ *     NEP     = S_(DSNEP)
+ * 
+ * class DSStateType(object):             # <<<<<<<<<<<<<<
  *     """
- *     NEP error type to assess accuracy of computed solutions
+ *     DS state types
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_NEPErrorType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_DSStateType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 16, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_NEPErrorType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DSStateType, __pyx_t_5) < 0) __PYX_ERR(10, 16, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "SLEPc/NEP.pyx":31
- *     RELATIVE = NEP_ERROR_RELATIVE
+  /* "SLEPc/DS.pyx":30
+ *     TRUNCATED    = DS_STATE_TRUNCATED
  * 
- * class NEPWhich(object):             # <<<<<<<<<<<<<<
- *     LARGEST_MAGNITUDE  = NEP_LARGEST_MAGNITUDE
- *     SMALLEST_MAGNITUDE = NEP_SMALLEST_MAGNITUDE
+ * class DSMatType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     To refer to one of the matrices stored internally in DS
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 30, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 30, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_NEPWhich, __pyx_n_s_NEPWhich, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_DSMatType, __pyx_n_s_DSMatType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_To_refer_to_one_of_the_matrices); if (unlikely(!__pyx_t_4)) __PYX_ERR(10, 30, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "SLEPc/NEP.pyx":32
- * 
- * class NEPWhich(object):
- *     LARGEST_MAGNITUDE  = NEP_LARGEST_MAGNITUDE             # <<<<<<<<<<<<<<
- *     SMALLEST_MAGNITUDE = NEP_SMALLEST_MAGNITUDE
- *     LARGEST_REAL       = NEP_LARGEST_REAL
+  /* "SLEPc/DS.pyx":47
+ *     - `W`:  workspace matrix.
+ *     """
+ *     A  = DS_MAT_A             # <<<<<<<<<<<<<<
+ *     B  = DS_MAT_B
+ *     C  = DS_MAT_C
  */
-  __pyx_t_5 = PyInt_FromLong(NEP_LARGEST_MAGNITUDE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_DSMatType(DS_MAT_A); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 47, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LARGEST_MAGNITUDE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_A, __pyx_t_5) < 0) __PYX_ERR(10, 47, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/NEP.pyx":33
- * class NEPWhich(object):
- *     LARGEST_MAGNITUDE  = NEP_LARGEST_MAGNITUDE
- *     SMALLEST_MAGNITUDE = NEP_SMALLEST_MAGNITUDE             # <<<<<<<<<<<<<<
- *     LARGEST_REAL       = NEP_LARGEST_REAL
- *     SMALLEST_REAL      = NEP_SMALLEST_REAL
+  /* "SLEPc/DS.pyx":48
+ *     """
+ *     A  = DS_MAT_A
+ *     B  = DS_MAT_B             # <<<<<<<<<<<<<<
+ *     C  = DS_MAT_C
+ *     T  = DS_MAT_T
  */
-  __pyx_t_5 = PyInt_FromLong(NEP_SMALLEST_MAGNITUDE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_DSMatType(DS_MAT_B); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 48, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SMALLEST_MAGNITUDE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_B, __pyx_t_5) < 0) __PYX_ERR(10, 48, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/NEP.pyx":34
- *     LARGEST_MAGNITUDE  = NEP_LARGEST_MAGNITUDE
- *     SMALLEST_MAGNITUDE = NEP_SMALLEST_MAGNITUDE
- *     LARGEST_REAL       = NEP_LARGEST_REAL             # <<<<<<<<<<<<<<
- *     SMALLEST_REAL      = NEP_SMALLEST_REAL
- *     LARGEST_IMAGINARY  = NEP_LARGEST_IMAGINARY
+  /* "SLEPc/DS.pyx":49
+ *     A  = DS_MAT_A
+ *     B  = DS_MAT_B
+ *     C  = DS_MAT_C             # <<<<<<<<<<<<<<
+ *     T  = DS_MAT_T
+ *     D  = DS_MAT_D
  */
-  __pyx_t_5 = PyInt_FromLong(NEP_LARGEST_REAL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_DSMatType(DS_MAT_C); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 49, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LARGEST_REAL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_C, __pyx_t_5) < 0) __PYX_ERR(10, 49, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/NEP.pyx":35
- *     SMALLEST_MAGNITUDE = NEP_SMALLEST_MAGNITUDE
- *     LARGEST_REAL       = NEP_LARGEST_REAL
- *     SMALLEST_REAL      = NEP_SMALLEST_REAL             # <<<<<<<<<<<<<<
- *     LARGEST_IMAGINARY  = NEP_LARGEST_IMAGINARY
- *     SMALLEST_IMAGINARY = NEP_SMALLEST_IMAGINARY
+  /* "SLEPc/DS.pyx":50
+ *     B  = DS_MAT_B
+ *     C  = DS_MAT_C
+ *     T  = DS_MAT_T             # <<<<<<<<<<<<<<
+ *     D  = DS_MAT_D
+ *     Q  = DS_MAT_Q
  */
-  __pyx_t_5 = PyInt_FromLong(NEP_SMALLEST_REAL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_DSMatType(DS_MAT_T); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 50, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SMALLEST_REAL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_T, __pyx_t_5) < 0) __PYX_ERR(10, 50, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/NEP.pyx":36
- *     LARGEST_REAL       = NEP_LARGEST_REAL
- *     SMALLEST_REAL      = NEP_SMALLEST_REAL
- *     LARGEST_IMAGINARY  = NEP_LARGEST_IMAGINARY             # <<<<<<<<<<<<<<
- *     SMALLEST_IMAGINARY = NEP_SMALLEST_IMAGINARY
- *     TARGET_MAGNITUDE   = NEP_TARGET_MAGNITUDE
+  /* "SLEPc/DS.pyx":51
+ *     C  = DS_MAT_C
+ *     T  = DS_MAT_T
+ *     D  = DS_MAT_D             # <<<<<<<<<<<<<<
+ *     Q  = DS_MAT_Q
+ *     Z  = DS_MAT_Z
  */
-  __pyx_t_5 = PyInt_FromLong(NEP_LARGEST_IMAGINARY); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_DSMatType(DS_MAT_D); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 51, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LARGEST_IMAGINARY, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_D, __pyx_t_5) < 0) __PYX_ERR(10, 51, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/NEP.pyx":37
- *     SMALLEST_REAL      = NEP_SMALLEST_REAL
- *     LARGEST_IMAGINARY  = NEP_LARGEST_IMAGINARY
- *     SMALLEST_IMAGINARY = NEP_SMALLEST_IMAGINARY             # <<<<<<<<<<<<<<
- *     TARGET_MAGNITUDE   = NEP_TARGET_MAGNITUDE
- *     TARGET_REAL        = NEP_TARGET_REAL
+  /* "SLEPc/DS.pyx":52
+ *     T  = DS_MAT_T
+ *     D  = DS_MAT_D
+ *     Q  = DS_MAT_Q             # <<<<<<<<<<<<<<
+ *     Z  = DS_MAT_Z
+ *     X  = DS_MAT_X
  */
-  __pyx_t_5 = PyInt_FromLong(NEP_SMALLEST_IMAGINARY); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_DSMatType(DS_MAT_Q); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 52, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SMALLEST_IMAGINARY, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_Q, __pyx_t_5) < 0) __PYX_ERR(10, 52, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/NEP.pyx":38
- *     LARGEST_IMAGINARY  = NEP_LARGEST_IMAGINARY
- *     SMALLEST_IMAGINARY = NEP_SMALLEST_IMAGINARY
- *     TARGET_MAGNITUDE   = NEP_TARGET_MAGNITUDE             # <<<<<<<<<<<<<<
- *     TARGET_REAL        = NEP_TARGET_REAL
- *     TARGET_IMAGINARY   = NEP_TARGET_IMAGINARY
+  /* "SLEPc/DS.pyx":53
+ *     D  = DS_MAT_D
+ *     Q  = DS_MAT_Q
+ *     Z  = DS_MAT_Z             # <<<<<<<<<<<<<<
+ *     X  = DS_MAT_X
+ *     Y  = DS_MAT_Y
  */
-  __pyx_t_5 = PyInt_FromLong(NEP_TARGET_MAGNITUDE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_DSMatType(DS_MAT_Z); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 53, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TARGET_MAGNITUDE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_Z, __pyx_t_5) < 0) __PYX_ERR(10, 53, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/NEP.pyx":39
- *     SMALLEST_IMAGINARY = NEP_SMALLEST_IMAGINARY
- *     TARGET_MAGNITUDE   = NEP_TARGET_MAGNITUDE
- *     TARGET_REAL        = NEP_TARGET_REAL             # <<<<<<<<<<<<<<
- *     TARGET_IMAGINARY   = NEP_TARGET_IMAGINARY
- * 
+  /* "SLEPc/DS.pyx":54
+ *     Q  = DS_MAT_Q
+ *     Z  = DS_MAT_Z
+ *     X  = DS_MAT_X             # <<<<<<<<<<<<<<
+ *     Y  = DS_MAT_Y
+ *     U  = DS_MAT_U
  */
-  __pyx_t_5 = PyInt_FromLong(NEP_TARGET_REAL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_DSMatType(DS_MAT_X); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 54, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TARGET_REAL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_X, __pyx_t_5) < 0) __PYX_ERR(10, 54, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/NEP.pyx":40
- *     TARGET_MAGNITUDE   = NEP_TARGET_MAGNITUDE
- *     TARGET_REAL        = NEP_TARGET_REAL
- *     TARGET_IMAGINARY   = NEP_TARGET_IMAGINARY             # <<<<<<<<<<<<<<
- * 
- * class NEPConvergedReason(object):
- */
-  __pyx_t_5 = PyInt_FromLong(NEP_TARGET_IMAGINARY); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /* "SLEPc/DS.pyx":55
+ *     Z  = DS_MAT_Z
+ *     X  = DS_MAT_X
+ *     Y  = DS_MAT_Y             # <<<<<<<<<<<<<<
+ *     U  = DS_MAT_U
+ *     VT = DS_MAT_VT
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_DSMatType(DS_MAT_Y); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 55, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TARGET_IMAGINARY, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_Y, __pyx_t_5) < 0) __PYX_ERR(10, 55, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/NEP.pyx":31
- *     RELATIVE = NEP_ERROR_RELATIVE
+  /* "SLEPc/DS.pyx":56
+ *     X  = DS_MAT_X
+ *     Y  = DS_MAT_Y
+ *     U  = DS_MAT_U             # <<<<<<<<<<<<<<
+ *     VT = DS_MAT_VT
+ *     W  = DS_MAT_W
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_DSMatType(DS_MAT_U); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 56, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_U, __pyx_t_5) < 0) __PYX_ERR(10, 56, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/DS.pyx":57
+ *     Y  = DS_MAT_Y
+ *     U  = DS_MAT_U
+ *     VT = DS_MAT_VT             # <<<<<<<<<<<<<<
+ *     W  = DS_MAT_W
  * 
- * class NEPWhich(object):             # <<<<<<<<<<<<<<
- *     LARGEST_MAGNITUDE  = NEP_LARGEST_MAGNITUDE
- *     SMALLEST_MAGNITUDE = NEP_SMALLEST_MAGNITUDE
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_NEPWhich, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_DSMatType(DS_MAT_VT); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 57, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_VT, __pyx_t_5) < 0) __PYX_ERR(10, 57, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/DS.pyx":58
+ *     U  = DS_MAT_U
+ *     VT = DS_MAT_VT
+ *     W  = DS_MAT_W             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_DSMatType(DS_MAT_W); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 58, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_W, __pyx_t_5) < 0) __PYX_ERR(10, 58, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/DS.pyx":30
+ *     TRUNCATED    = DS_STATE_TRUNCATED
+ * 
+ * class DSMatType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     To refer to one of the matrices stored internally in DS
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_DSMatType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 30, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_NEPWhich, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DSMatType, __pyx_t_5) < 0) __PYX_ERR(10, 30, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "SLEPc/NEP.pyx":42
- *     TARGET_IMAGINARY   = NEP_TARGET_IMAGINARY
+  /* "SLEPc/DS.pyx":68
+ *     """
+ * 
+ *     Type      = DSType             # <<<<<<<<<<<<<<
+ *     StateType = DSStateType
+ *     MatType   = DSMatType
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DSType); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 68, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_DS->tp_dict, __pyx_n_s_Type, __pyx_t_2) < 0) __PYX_ERR(10, 68, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_DS);
+
+  /* "SLEPc/DS.pyx":69
+ * 
+ *     Type      = DSType
+ *     StateType = DSStateType             # <<<<<<<<<<<<<<
+ *     MatType   = DSMatType
+ * 
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DSStateType); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 69, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_DS->tp_dict, __pyx_n_s_StateType, __pyx_t_2) < 0) __PYX_ERR(10, 69, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_DS);
+
+  /* "SLEPc/DS.pyx":70
+ *     Type      = DSType
+ *     StateType = DSStateType
+ *     MatType   = DSMatType             # <<<<<<<<<<<<<<
+ * 
+ *     def __cinit__(self):
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DSMatType); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 70, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_DS->tp_dict, __pyx_n_s_MatType, __pyx_t_2) < 0) __PYX_ERR(10, 70, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_DS);
+
+  /* "SLEPc/DS.pyx":468
+ * # -----------------------------------------------------------------------------
+ * 
+ * del DSType             # <<<<<<<<<<<<<<
+ * del DSStateType
+ * del DSMatType
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_DSType) < 0) __PYX_ERR(10, 468, __pyx_L1_error)
+
+  /* "SLEPc/DS.pyx":469
+ * 
+ * del DSType
+ * del DSStateType             # <<<<<<<<<<<<<<
+ * del DSMatType
  * 
- * class NEPConvergedReason(object):             # <<<<<<<<<<<<<<
- *     CONVERGED_FNORM_ABS      = NEP_CONVERGED_FNORM_ABS
- *     CONVERGED_FNORM_RELATIVE = NEP_CONVERGED_FNORM_RELATIVE
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_DSStateType) < 0) __PYX_ERR(10, 469, __pyx_L1_error)
+
+  /* "SLEPc/DS.pyx":470
+ * del DSType
+ * del DSStateType
+ * del DSMatType             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_DSMatType) < 0) __PYX_ERR(10, 470, __pyx_L1_error)
+
+  /* "SLEPc/FN.pyx":3
+ * # -----------------------------------------------------------------------------
+ * 
+ * class FNType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     FN type
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_NEPConvergedReason, __pyx_n_s_NEPConvergedReason, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_FNType, __pyx_n_s_FNType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_FN_type); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "SLEPc/NEP.pyx":43
- * 
- * class NEPConvergedReason(object):
- *     CONVERGED_FNORM_ABS      = NEP_CONVERGED_FNORM_ABS             # <<<<<<<<<<<<<<
- *     CONVERGED_FNORM_RELATIVE = NEP_CONVERGED_FNORM_RELATIVE
- *     CONVERGED_SNORM_RELATIVE = NEP_CONVERGED_SNORM_RELATIVE
+  /* "SLEPc/FN.pyx":7
+ *     FN type
+ *     """
+ *     COMBINE  = S_(FNCOMBINE)             # <<<<<<<<<<<<<<
+ *     RATIONAL = S_(FNRATIONAL)
+ *     EXP      = S_(FNEXP)
  */
-  __pyx_t_5 = PyInt_FromLong(NEP_CONVERGED_FNORM_ABS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(FNCOMBINE); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 7, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_FNORM_ABS, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_COMBINE, __pyx_t_5) < 0) __PYX_ERR(11, 7, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/NEP.pyx":44
- * class NEPConvergedReason(object):
- *     CONVERGED_FNORM_ABS      = NEP_CONVERGED_FNORM_ABS
- *     CONVERGED_FNORM_RELATIVE = NEP_CONVERGED_FNORM_RELATIVE             # <<<<<<<<<<<<<<
- *     CONVERGED_SNORM_RELATIVE = NEP_CONVERGED_SNORM_RELATIVE
- *     DIVERGED_LINEAR_SOLVE    = NEP_DIVERGED_LINEAR_SOLVE
+  /* "SLEPc/FN.pyx":8
+ *     """
+ *     COMBINE  = S_(FNCOMBINE)
+ *     RATIONAL = S_(FNRATIONAL)             # <<<<<<<<<<<<<<
+ *     EXP      = S_(FNEXP)
+ *     LOG      = S_(FNLOG)
  */
-  __pyx_t_5 = PyInt_FromLong(NEP_CONVERGED_FNORM_RELATIVE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(FNRATIONAL); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 8, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_FNORM_RELATIVE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RATIONAL, __pyx_t_5) < 0) __PYX_ERR(11, 8, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/NEP.pyx":45
- *     CONVERGED_FNORM_ABS      = NEP_CONVERGED_FNORM_ABS
- *     CONVERGED_FNORM_RELATIVE = NEP_CONVERGED_FNORM_RELATIVE
- *     CONVERGED_SNORM_RELATIVE = NEP_CONVERGED_SNORM_RELATIVE             # <<<<<<<<<<<<<<
- *     DIVERGED_LINEAR_SOLVE    = NEP_DIVERGED_LINEAR_SOLVE
- *     DIVERGED_FUNCTION_COUNT  = NEP_DIVERGED_FUNCTION_COUNT
+  /* "SLEPc/FN.pyx":9
+ *     COMBINE  = S_(FNCOMBINE)
+ *     RATIONAL = S_(FNRATIONAL)
+ *     EXP      = S_(FNEXP)             # <<<<<<<<<<<<<<
+ *     LOG      = S_(FNLOG)
+ *     PHI      = S_(FNPHI)
  */
-  __pyx_t_5 = PyInt_FromLong(NEP_CONVERGED_SNORM_RELATIVE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(FNEXP); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 9, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_SNORM_RELATIVE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_EXP, __pyx_t_5) < 0) __PYX_ERR(11, 9, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/NEP.pyx":46
- *     CONVERGED_FNORM_RELATIVE = NEP_CONVERGED_FNORM_RELATIVE
- *     CONVERGED_SNORM_RELATIVE = NEP_CONVERGED_SNORM_RELATIVE
- *     DIVERGED_LINEAR_SOLVE    = NEP_DIVERGED_LINEAR_SOLVE             # <<<<<<<<<<<<<<
- *     DIVERGED_FUNCTION_COUNT  = NEP_DIVERGED_FUNCTION_COUNT
- *     DIVERGED_MAX_IT          = NEP_DIVERGED_MAX_IT
+  /* "SLEPc/FN.pyx":10
+ *     RATIONAL = S_(FNRATIONAL)
+ *     EXP      = S_(FNEXP)
+ *     LOG      = S_(FNLOG)             # <<<<<<<<<<<<<<
+ *     PHI      = S_(FNPHI)
+ *     SQRT     = S_(FNSQRT)
  */
-  __pyx_t_5 = PyInt_FromLong(NEP_DIVERGED_LINEAR_SOLVE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(FNLOG); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 10, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_LINEAR_SOLVE, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LOG, __pyx_t_5) < 0) __PYX_ERR(11, 10, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/NEP.pyx":47
- *     CONVERGED_SNORM_RELATIVE = NEP_CONVERGED_SNORM_RELATIVE
- *     DIVERGED_LINEAR_SOLVE    = NEP_DIVERGED_LINEAR_SOLVE
- *     DIVERGED_FUNCTION_COUNT  = NEP_DIVERGED_FUNCTION_COUNT             # <<<<<<<<<<<<<<
- *     DIVERGED_MAX_IT          = NEP_DIVERGED_MAX_IT
- *     DIVERGED_BREAKDOWN       = NEP_DIVERGED_BREAKDOWN
+  /* "SLEPc/FN.pyx":11
+ *     EXP      = S_(FNEXP)
+ *     LOG      = S_(FNLOG)
+ *     PHI      = S_(FNPHI)             # <<<<<<<<<<<<<<
+ *     SQRT     = S_(FNSQRT)
+ *     INVSQRT  = S_(FNINVSQRT)
  */
-  __pyx_t_5 = PyInt_FromLong(NEP_DIVERGED_FUNCTION_COUNT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(FNPHI); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 11, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_FUNCTION_COUNT, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PHI, __pyx_t_5) < 0) __PYX_ERR(11, 11, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/NEP.pyx":48
- *     DIVERGED_LINEAR_SOLVE    = NEP_DIVERGED_LINEAR_SOLVE
- *     DIVERGED_FUNCTION_COUNT  = NEP_DIVERGED_FUNCTION_COUNT
- *     DIVERGED_MAX_IT          = NEP_DIVERGED_MAX_IT             # <<<<<<<<<<<<<<
- *     DIVERGED_BREAKDOWN       = NEP_DIVERGED_BREAKDOWN
- *     DIVERGED_FNORM_NAN       = NEP_DIVERGED_FNORM_NAN
+  /* "SLEPc/FN.pyx":12
+ *     LOG      = S_(FNLOG)
+ *     PHI      = S_(FNPHI)
+ *     SQRT     = S_(FNSQRT)             # <<<<<<<<<<<<<<
+ *     INVSQRT  = S_(FNINVSQRT)
+ * 
  */
-  __pyx_t_5 = PyInt_FromLong(NEP_DIVERGED_MAX_IT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(FNSQRT); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 12, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_MAX_IT, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SQRT, __pyx_t_5) < 0) __PYX_ERR(11, 12, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/NEP.pyx":49
- *     DIVERGED_FUNCTION_COUNT  = NEP_DIVERGED_FUNCTION_COUNT
- *     DIVERGED_MAX_IT          = NEP_DIVERGED_MAX_IT
- *     DIVERGED_BREAKDOWN       = NEP_DIVERGED_BREAKDOWN             # <<<<<<<<<<<<<<
- *     DIVERGED_FNORM_NAN       = NEP_DIVERGED_FNORM_NAN
- *     CONVERGED_ITERATING      = NEP_CONVERGED_ITERATING
+  /* "SLEPc/FN.pyx":13
+ *     PHI      = S_(FNPHI)
+ *     SQRT     = S_(FNSQRT)
+ *     INVSQRT  = S_(FNINVSQRT)             # <<<<<<<<<<<<<<
+ * 
+ * class FNCombineType(object):
  */
-  __pyx_t_5 = PyInt_FromLong(NEP_DIVERGED_BREAKDOWN); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(FNINVSQRT); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 13, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_BREAKDOWN, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INVSQRT, __pyx_t_5) < 0) __PYX_ERR(11, 13, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/NEP.pyx":50
- *     DIVERGED_MAX_IT          = NEP_DIVERGED_MAX_IT
- *     DIVERGED_BREAKDOWN       = NEP_DIVERGED_BREAKDOWN
- *     DIVERGED_FNORM_NAN       = NEP_DIVERGED_FNORM_NAN             # <<<<<<<<<<<<<<
- *     CONVERGED_ITERATING      = NEP_CONVERGED_ITERATING
- *     ITERATING                = NEP_CONVERGED_ITERATING
+  /* "SLEPc/FN.pyx":3
+ * # -----------------------------------------------------------------------------
+ * 
+ * class FNType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     FN type
  */
-  __pyx_t_5 = PyInt_FromLong(NEP_DIVERGED_FNORM_NAN); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_FNType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_FNORM_NAN, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_FNType, __pyx_t_5) < 0) __PYX_ERR(11, 3, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "SLEPc/NEP.pyx":51
- *     DIVERGED_BREAKDOWN       = NEP_DIVERGED_BREAKDOWN
- *     DIVERGED_FNORM_NAN       = NEP_DIVERGED_FNORM_NAN
- *     CONVERGED_ITERATING      = NEP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
- *     ITERATING                = NEP_CONVERGED_ITERATING
+  /* "SLEPc/FN.pyx":15
+ *     INVSQRT  = S_(FNINVSQRT)
  * 
+ * class FNCombineType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     FN type of combination of child functions
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_FNCombineType, __pyx_n_s_FNCombineType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_FN_type_of_combination_of_child); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/FN.pyx":24
+ *     - `COMPOSE`:   Composition      f(x) = f2(f1(x))
+ *     """
+ *     ADD      = FN_COMBINE_ADD             # <<<<<<<<<<<<<<
+ *     MULTIPLY = FN_COMBINE_MULTIPLY
+ *     DIVIDE   = FN_COMBINE_DIVIDE
  */
-  __pyx_t_5 = PyInt_FromLong(NEP_CONVERGED_ITERATING); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_FNCombineType(FN_COMBINE_ADD); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 24, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ITERATING, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ADD, __pyx_t_5) < 0) __PYX_ERR(11, 24, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/NEP.pyx":52
- *     DIVERGED_FNORM_NAN       = NEP_DIVERGED_FNORM_NAN
- *     CONVERGED_ITERATING      = NEP_CONVERGED_ITERATING
- *     ITERATING                = NEP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
+  /* "SLEPc/FN.pyx":25
+ *     """
+ *     ADD      = FN_COMBINE_ADD
+ *     MULTIPLY = FN_COMBINE_MULTIPLY             # <<<<<<<<<<<<<<
+ *     DIVIDE   = FN_COMBINE_DIVIDE
+ *     COMPOSE  = FN_COMBINE_COMPOSE
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_FNCombineType(FN_COMBINE_MULTIPLY); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 25, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MULTIPLY, __pyx_t_5) < 0) __PYX_ERR(11, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/FN.pyx":26
+ *     ADD      = FN_COMBINE_ADD
+ *     MULTIPLY = FN_COMBINE_MULTIPLY
+ *     DIVIDE   = FN_COMBINE_DIVIDE             # <<<<<<<<<<<<<<
+ *     COMPOSE  = FN_COMBINE_COMPOSE
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_FNCombineType(FN_COMBINE_DIVIDE); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 26, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVIDE, __pyx_t_5) < 0) __PYX_ERR(11, 26, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/FN.pyx":27
+ *     MULTIPLY = FN_COMBINE_MULTIPLY
+ *     DIVIDE   = FN_COMBINE_DIVIDE
+ *     COMPOSE  = FN_COMBINE_COMPOSE             # <<<<<<<<<<<<<<
  * 
  * # -----------------------------------------------------------------------------
  */
-  __pyx_t_5 = PyInt_FromLong(NEP_CONVERGED_ITERATING); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_FNCombineType(FN_COMBINE_COMPOSE); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 27, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ITERATING, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_COMPOSE, __pyx_t_5) < 0) __PYX_ERR(11, 27, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/NEP.pyx":42
- *     TARGET_IMAGINARY   = NEP_TARGET_IMAGINARY
+  /* "SLEPc/FN.pyx":15
+ *     INVSQRT  = S_(FNINVSQRT)
  * 
- * class NEPConvergedReason(object):             # <<<<<<<<<<<<<<
- *     CONVERGED_FNORM_ABS      = NEP_CONVERGED_FNORM_ABS
- *     CONVERGED_FNORM_RELATIVE = NEP_CONVERGED_FNORM_RELATIVE
+ * class FNCombineType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     FN type of combination of child functions
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_NEPConvergedReason, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_FNCombineType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 15, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_NEPConvergedReason, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_FNCombineType, __pyx_t_5) < 0) __PYX_ERR(11, 15, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "SLEPc/NEP.pyx":62
+  /* "SLEPc/FN.pyx":37
  *     """
  * 
- *     Type            = NEPType             # <<<<<<<<<<<<<<
- *     ErrorType       = NEPErrorType
- *     Which           = NEPWhich
- */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_NEPType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_NEP->tp_dict, __pyx_n_s_Type, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_NEP);
-
-  /* "SLEPc/NEP.pyx":63
+ *     Type        = FNType             # <<<<<<<<<<<<<<
+ *     CombineType = FNCombineType
  * 
- *     Type            = NEPType
- *     ErrorType       = NEPErrorType             # <<<<<<<<<<<<<<
- *     Which           = NEPWhich
- *     ConvergedReason = NEPConvergedReason
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_NEPErrorType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_FNType); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 37, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_NEP->tp_dict, __pyx_n_s_ErrorType, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_FN->tp_dict, __pyx_n_s_Type, __pyx_t_2) < 0) __PYX_ERR(11, 37, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_NEP);
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_FN);
 
-  /* "SLEPc/NEP.pyx":64
- *     Type            = NEPType
- *     ErrorType       = NEPErrorType
- *     Which           = NEPWhich             # <<<<<<<<<<<<<<
- *     ConvergedReason = NEPConvergedReason
+  /* "SLEPc/FN.pyx":38
  * 
- */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_NEPWhich); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_NEP->tp_dict, __pyx_n_s_Which, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_NEP);
-
-  /* "SLEPc/NEP.pyx":65
- *     ErrorType       = NEPErrorType
- *     Which           = NEPWhich
- *     ConvergedReason = NEPConvergedReason             # <<<<<<<<<<<<<<
+ *     Type        = FNType
+ *     CombineType = FNCombineType             # <<<<<<<<<<<<<<
  * 
  *     def __cinit__(self):
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_NEPConvergedReason); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_FNCombineType); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 38, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_NEP->tp_dict, __pyx_n_s_ConvergedReason, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_FN->tp_dict, __pyx_n_s_CombineType, __pyx_t_2) < 0) __PYX_ERR(11, 38, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_NEP);
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_FN);
 
-  /* "SLEPc/NEP.pyx":626
+  /* "SLEPc/FN.pyx":256
  * # -----------------------------------------------------------------------------
  * 
- * del NEPType             # <<<<<<<<<<<<<<
- * del NEPWhich
- * del NEPErrorType
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_NEPType) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/NEP.pyx":627
+ * del FNType             # <<<<<<<<<<<<<<
+ * del FNCombineType
  * 
- * del NEPType
- * del NEPWhich             # <<<<<<<<<<<<<<
- * del NEPErrorType
- * del NEPConvergedReason
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_NEPWhich) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_FNType) < 0) __PYX_ERR(11, 256, __pyx_L1_error)
 
-  /* "SLEPc/NEP.pyx":628
- * del NEPType
- * del NEPWhich
- * del NEPErrorType             # <<<<<<<<<<<<<<
- * del NEPConvergedReason
+  /* "SLEPc/FN.pyx":257
  * 
- */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_NEPErrorType) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "SLEPc/NEP.pyx":629
- * del NEPWhich
- * del NEPErrorType
- * del NEPConvergedReason             # <<<<<<<<<<<<<<
+ * del FNType
+ * del FNCombineType             # <<<<<<<<<<<<<<
  * 
  * # -----------------------------------------------------------------------------
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_NEPConvergedReason) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_FNCombineType) < 0) __PYX_ERR(11, 257, __pyx_L1_error)
 
-  /* "SLEPc/MFN.pyx":3
+  /* "SLEPc/RG.pyx":3
  * # -----------------------------------------------------------------------------
  * 
- * class MFNType(object):             # <<<<<<<<<<<<<<
- *     KRYLOV   = S_(MFNKRYLOV)
- * 
+ * class RGType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     RG type
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(12, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_MFNType, __pyx_n_s_MFNType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_RGType, __pyx_n_s_RGType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_RG_type); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "SLEPc/MFN.pyx":4
+  /* "SLEPc/RG.pyx":7
+ *     RG type
+ *     """
+ *     INTERVAL   = S_(RGINTERVAL)             # <<<<<<<<<<<<<<
+ *     POLYGON    = S_(RGPOLYGON)
+ *     ELLIPSE    = S_(RGELLIPSE)
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(RGINTERVAL); if (unlikely(!__pyx_t_5)) __PYX_ERR(12, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INTERVAL, __pyx_t_5) < 0) __PYX_ERR(12, 7, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/RG.pyx":8
+ *     """
+ *     INTERVAL   = S_(RGINTERVAL)
+ *     POLYGON    = S_(RGPOLYGON)             # <<<<<<<<<<<<<<
+ *     ELLIPSE    = S_(RGELLIPSE)
+ *     RING       = S_(RGRING)
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(RGPOLYGON); if (unlikely(!__pyx_t_5)) __PYX_ERR(12, 8, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_POLYGON, __pyx_t_5) < 0) __PYX_ERR(12, 8, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/RG.pyx":9
+ *     INTERVAL   = S_(RGINTERVAL)
+ *     POLYGON    = S_(RGPOLYGON)
+ *     ELLIPSE    = S_(RGELLIPSE)             # <<<<<<<<<<<<<<
+ *     RING       = S_(RGRING)
  * 
- * class MFNType(object):
- *     KRYLOV   = S_(MFNKRYLOV)             # <<<<<<<<<<<<<<
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(RGELLIPSE); if (unlikely(!__pyx_t_5)) __PYX_ERR(12, 9, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ELLIPSE, __pyx_t_5) < 0) __PYX_ERR(12, 9, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/RG.pyx":10
+ *     POLYGON    = S_(RGPOLYGON)
+ *     ELLIPSE    = S_(RGELLIPSE)
+ *     RING       = S_(RGRING)             # <<<<<<<<<<<<<<
  * 
- * class MFNConvergedReason(object):
+ * # -----------------------------------------------------------------------------
  */
-  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(MFNKRYLOV); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(RGRING); if (unlikely(!__pyx_t_5)) __PYX_ERR(12, 10, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_KRYLOV, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RING, __pyx_t_5) < 0) __PYX_ERR(12, 10, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/MFN.pyx":3
+  /* "SLEPc/RG.pyx":3
  * # -----------------------------------------------------------------------------
  * 
- * class MFNType(object):             # <<<<<<<<<<<<<<
- *     KRYLOV   = S_(MFNKRYLOV)
- * 
+ * class RGType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     RG type
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_MFNType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_RGType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(12, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MFNType, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_RGType, __pyx_t_5) < 0) __PYX_ERR(12, 3, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "SLEPc/MFN.pyx":6
- *     KRYLOV   = S_(MFNKRYLOV)
+  /* "SLEPc/RG.pyx":20
+ *     """
  * 
- * class MFNConvergedReason(object):             # <<<<<<<<<<<<<<
- *     CONVERGED_TOL       = MFN_CONVERGED_TOL
- *     DIVERGED_ITS        = MFN_DIVERGED_ITS
+ *     Type             = RGType             # <<<<<<<<<<<<<<
+ * 
+ *     def __cinit__(self):
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_RGType); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 20, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_RG->tp_dict, __pyx_n_s_Type, __pyx_t_2) < 0) __PYX_ERR(12, 20, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_RG);
+
+  /* "SLEPc/RG.pyx":263
+ * # -----------------------------------------------------------------------------
+ * 
+ * del RGType             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_RGType) < 0) __PYX_ERR(12, 263, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":3
+ * # -----------------------------------------------------------------------------
+ * 
+ * class EPSType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     EPS type
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_MFNConvergedReason, __pyx_n_s_MFNConvergedReason, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_EPSType, __pyx_n_s_EPSType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_EPS_type_Native_sparse_eigensol); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 3, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "SLEPc/MFN.pyx":7
- * 
- * class MFNConvergedReason(object):
- *     CONVERGED_TOL       = MFN_CONVERGED_TOL             # <<<<<<<<<<<<<<
- *     DIVERGED_ITS        = MFN_DIVERGED_ITS
- *     DIVERGED_BREAKDOWN  = MFN_DIVERGED_BREAKDOWN
+  /* "SLEPc/EPS.pyx":32
+ *     """
+ *     # provided implementations
+ *     POWER        = S_(EPSPOWER)             # <<<<<<<<<<<<<<
+ *     SUBSPACE     = S_(EPSSUBSPACE)
+ *     ARNOLDI      = S_(EPSARNOLDI)
  */
-  __pyx_t_5 = PyInt_FromLong(MFN_CONVERGED_TOL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSPOWER); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 32, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_TOL, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_POWER, __pyx_t_5) < 0) __PYX_ERR(13, 32, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/MFN.pyx":8
- * class MFNConvergedReason(object):
- *     CONVERGED_TOL       = MFN_CONVERGED_TOL
- *     DIVERGED_ITS        = MFN_DIVERGED_ITS             # <<<<<<<<<<<<<<
- *     DIVERGED_BREAKDOWN  = MFN_DIVERGED_BREAKDOWN
- *     CONVERGED_ITERATING = MFN_CONVERGED_ITERATING
+  /* "SLEPc/EPS.pyx":33
+ *     # provided implementations
+ *     POWER        = S_(EPSPOWER)
+ *     SUBSPACE     = S_(EPSSUBSPACE)             # <<<<<<<<<<<<<<
+ *     ARNOLDI      = S_(EPSARNOLDI)
+ *     LANCZOS      = S_(EPSLANCZOS)
  */
-  __pyx_t_5 = PyInt_FromLong(MFN_DIVERGED_ITS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSSUBSPACE); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 33, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_ITS, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SUBSPACE, __pyx_t_5) < 0) __PYX_ERR(13, 33, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/MFN.pyx":9
- *     CONVERGED_TOL       = MFN_CONVERGED_TOL
- *     DIVERGED_ITS        = MFN_DIVERGED_ITS
- *     DIVERGED_BREAKDOWN  = MFN_DIVERGED_BREAKDOWN             # <<<<<<<<<<<<<<
- *     CONVERGED_ITERATING = MFN_CONVERGED_ITERATING
- * 
+  /* "SLEPc/EPS.pyx":34
+ *     POWER        = S_(EPSPOWER)
+ *     SUBSPACE     = S_(EPSSUBSPACE)
+ *     ARNOLDI      = S_(EPSARNOLDI)             # <<<<<<<<<<<<<<
+ *     LANCZOS      = S_(EPSLANCZOS)
+ *     KRYLOVSCHUR  = S_(EPSKRYLOVSCHUR)
  */
-  __pyx_t_5 = PyInt_FromLong(MFN_DIVERGED_BREAKDOWN); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSARNOLDI); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 34, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_BREAKDOWN, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ARNOLDI, __pyx_t_5) < 0) __PYX_ERR(13, 34, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/MFN.pyx":10
- *     DIVERGED_ITS        = MFN_DIVERGED_ITS
- *     DIVERGED_BREAKDOWN  = MFN_DIVERGED_BREAKDOWN
- *     CONVERGED_ITERATING = MFN_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
- * 
- * # -----------------------------------------------------------------------------
+  /* "SLEPc/EPS.pyx":35
+ *     SUBSPACE     = S_(EPSSUBSPACE)
+ *     ARNOLDI      = S_(EPSARNOLDI)
+ *     LANCZOS      = S_(EPSLANCZOS)             # <<<<<<<<<<<<<<
+ *     KRYLOVSCHUR  = S_(EPSKRYLOVSCHUR)
+ *     GD           = S_(EPSGD)
  */
-  __pyx_t_5 = PyInt_FromLong(MFN_CONVERGED_ITERATING); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSLANCZOS); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 35, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ITERATING, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LANCZOS, __pyx_t_5) < 0) __PYX_ERR(13, 35, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/MFN.pyx":6
- *     KRYLOV   = S_(MFNKRYLOV)
- * 
- * class MFNConvergedReason(object):             # <<<<<<<<<<<<<<
- *     CONVERGED_TOL       = MFN_CONVERGED_TOL
- *     DIVERGED_ITS        = MFN_DIVERGED_ITS
+  /* "SLEPc/EPS.pyx":36
+ *     ARNOLDI      = S_(EPSARNOLDI)
+ *     LANCZOS      = S_(EPSLANCZOS)
+ *     KRYLOVSCHUR  = S_(EPSKRYLOVSCHUR)             # <<<<<<<<<<<<<<
+ *     GD           = S_(EPSGD)
+ *     JD           = S_(EPSJD)
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_MFNConvergedReason, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSKRYLOVSCHUR); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 36, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MFNConvergedReason, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_KRYLOVSCHUR, __pyx_t_5) < 0) __PYX_ERR(13, 36, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "SLEPc/MFN.pyx":20
- *     """
- * 
- *     Type            = MFNType             # <<<<<<<<<<<<<<
- *     ConvergedReason = MFNConvergedReason
- * 
+  /* "SLEPc/EPS.pyx":37
+ *     LANCZOS      = S_(EPSLANCZOS)
+ *     KRYLOVSCHUR  = S_(EPSKRYLOVSCHUR)
+ *     GD           = S_(EPSGD)             # <<<<<<<<<<<<<<
+ *     JD           = S_(EPSJD)
+ *     RQCG         = S_(EPSRQCG)
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_MFNType); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_MFN->tp_dict, __pyx_n_s_Type, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_MFN);
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSGD); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 37, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GD, __pyx_t_5) < 0) __PYX_ERR(13, 37, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/MFN.pyx":21
- * 
- *     Type            = MFNType
- *     ConvergedReason = MFNConvergedReason             # <<<<<<<<<<<<<<
- * 
- *     def __cinit__(self):
+  /* "SLEPc/EPS.pyx":38
+ *     KRYLOVSCHUR  = S_(EPSKRYLOVSCHUR)
+ *     GD           = S_(EPSGD)
+ *     JD           = S_(EPSJD)             # <<<<<<<<<<<<<<
+ *     RQCG         = S_(EPSRQCG)
+ *     LOBPCG       = S_(EPSLOBPCG)
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_MFNConvergedReason); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_MFN->tp_dict, __pyx_n_s_ConvergedReason, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_MFN);
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSJD); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 38, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_JD, __pyx_t_5) < 0) __PYX_ERR(13, 38, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/MFN.pyx":346
- * # -----------------------------------------------------------------------------
- * 
- * del MFNType             # <<<<<<<<<<<<<<
- * del MFNConvergedReason
- * 
+  /* "SLEPc/EPS.pyx":39
+ *     GD           = S_(EPSGD)
+ *     JD           = S_(EPSJD)
+ *     RQCG         = S_(EPSRQCG)             # <<<<<<<<<<<<<<
+ *     LOBPCG       = S_(EPSLOBPCG)
+ *     CISS         = S_(EPSCISS)
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MFNType) < 0) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSRQCG); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 39, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RQCG, __pyx_t_5) < 0) __PYX_ERR(13, 39, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/MFN.pyx":347
- * 
- * del MFNType
- * del MFNConvergedReason             # <<<<<<<<<<<<<<
- * 
- * # -----------------------------------------------------------------------------
+  /* "SLEPc/EPS.pyx":40
+ *     JD           = S_(EPSJD)
+ *     RQCG         = S_(EPSRQCG)
+ *     LOBPCG       = S_(EPSLOBPCG)             # <<<<<<<<<<<<<<
+ *     CISS         = S_(EPSCISS)
+ *     LAPACK       = S_(EPSLAPACK)
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MFNConvergedReason) < 0) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSLOBPCG); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 40, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LOBPCG, __pyx_t_5) < 0) __PYX_ERR(13, 40, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/SLEPc.pyx":222
- * # -----------------------------------------------------------------------------
- * 
- * def _initialize(args=None):             # <<<<<<<<<<<<<<
- *     cdef int ready = initialize(args)
- *     if ready: register(NULL)
+  /* "SLEPc/EPS.pyx":41
+ *     RQCG         = S_(EPSRQCG)
+ *     LOBPCG       = S_(EPSLOBPCG)
+ *     CISS         = S_(EPSCISS)             # <<<<<<<<<<<<<<
+ *     LAPACK       = S_(EPSLAPACK)
+ *     # with external libraries
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_8slepc4py_5SLEPc_1_initialize, NULL, __pyx_n_s_slepc4py_SLEPc); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_initialize, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSCISS); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 41, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CISS, __pyx_t_5) < 0) __PYX_ERR(13, 41, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "SLEPc/SLEPc.pyx":226
- *     if ready: register(NULL)
- * 
- * def _finalize():             # <<<<<<<<<<<<<<
- *     finalize()
- * 
+  /* "SLEPc/EPS.pyx":42
+ *     LOBPCG       = S_(EPSLOBPCG)
+ *     CISS         = S_(EPSCISS)
+ *     LAPACK       = S_(EPSLAPACK)             # <<<<<<<<<<<<<<
+ *     # with external libraries
+ *     ARPACK       = S_(EPSARPACK)
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_8slepc4py_5SLEPc_3_finalize, NULL, __pyx_n_s_slepc4py_SLEPc); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_finalize, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSLAPACK); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 42, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LAPACK, __pyx_t_5) < 0) __PYX_ERR(13, 42, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /*--- Wrapped vars code ---*/
+  /* "SLEPc/EPS.pyx":44
+ *     LAPACK       = S_(EPSLAPACK)
+ *     # with external libraries
+ *     ARPACK       = S_(EPSARPACK)             # <<<<<<<<<<<<<<
+ *     BLZPACK      = S_(EPSBLZPACK)
+ *     TRLAN        = S_(EPSTRLAN)
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSARPACK); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ARPACK, __pyx_t_5) < 0) __PYX_ERR(13, 44, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  if (__Pyx_RegisterCleanup()) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  /* "SLEPc/EPS.pyx":45
+ *     # with external libraries
+ *     ARPACK       = S_(EPSARPACK)
+ *     BLZPACK      = S_(EPSBLZPACK)             # <<<<<<<<<<<<<<
+ *     TRLAN        = S_(EPSTRLAN)
+ *     BLOPEX       = S_(EPSBLOPEX)
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSBLZPACK); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 45, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BLZPACK, __pyx_t_5) < 0) __PYX_ERR(13, 45, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":46
+ *     ARPACK       = S_(EPSARPACK)
+ *     BLZPACK      = S_(EPSBLZPACK)
+ *     TRLAN        = S_(EPSTRLAN)             # <<<<<<<<<<<<<<
+ *     BLOPEX       = S_(EPSBLOPEX)
+ *     PRIMME       = S_(EPSPRIMME)
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSTRLAN); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 46, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TRLAN, __pyx_t_5) < 0) __PYX_ERR(13, 46, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":47
+ *     BLZPACK      = S_(EPSBLZPACK)
+ *     TRLAN        = S_(EPSTRLAN)
+ *     BLOPEX       = S_(EPSBLOPEX)             # <<<<<<<<<<<<<<
+ *     PRIMME       = S_(EPSPRIMME)
+ *     FEAST        = S_(EPSFEAST)
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSBLOPEX); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 47, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BLOPEX, __pyx_t_5) < 0) __PYX_ERR(13, 47, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":48
+ *     TRLAN        = S_(EPSTRLAN)
+ *     BLOPEX       = S_(EPSBLOPEX)
+ *     PRIMME       = S_(EPSPRIMME)             # <<<<<<<<<<<<<<
+ *     FEAST        = S_(EPSFEAST)
+ * 
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSPRIMME); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 48, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PRIMME, __pyx_t_5) < 0) __PYX_ERR(13, 48, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":49
+ *     BLOPEX       = S_(EPSBLOPEX)
+ *     PRIMME       = S_(EPSPRIMME)
+ *     FEAST        = S_(EPSFEAST)             # <<<<<<<<<<<<<<
+ * 
+ * class EPSProblemType(object):
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(EPSFEAST); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 49, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FEAST, __pyx_t_5) < 0) __PYX_ERR(13, 49, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":3
+ * # -----------------------------------------------------------------------------
+ * 
+ * class EPSType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     EPS type
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_EPSType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_EPSType, __pyx_t_5) < 0) __PYX_ERR(13, 3, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/EPS.pyx":51
+ *     FEAST        = S_(EPSFEAST)
+ * 
+ * class EPSProblemType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     EPS problem type
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_EPSProblemType, __pyx_n_s_EPSProblemType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_EPS_problem_type_HEP_Hermitian); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/EPS.pyx":63
+ *     - `GHIEP`:  Generalized Hermitian-indefinite eigenproblem.
+ *     """
+ *     HEP    = EPS_HEP             # <<<<<<<<<<<<<<
+ *     NHEP   = EPS_NHEP
+ *     GHEP   = EPS_GHEP
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSProblemType(EPS_HEP); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 63, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HEP, __pyx_t_5) < 0) __PYX_ERR(13, 63, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":64
+ *     """
+ *     HEP    = EPS_HEP
+ *     NHEP   = EPS_NHEP             # <<<<<<<<<<<<<<
+ *     GHEP   = EPS_GHEP
+ *     GNHEP  = EPS_GNHEP
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSProblemType(EPS_NHEP); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 64, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NHEP, __pyx_t_5) < 0) __PYX_ERR(13, 64, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":65
+ *     HEP    = EPS_HEP
+ *     NHEP   = EPS_NHEP
+ *     GHEP   = EPS_GHEP             # <<<<<<<<<<<<<<
+ *     GNHEP  = EPS_GNHEP
+ *     PGNHEP = EPS_PGNHEP
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSProblemType(EPS_GHEP); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 65, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GHEP, __pyx_t_5) < 0) __PYX_ERR(13, 65, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":66
+ *     NHEP   = EPS_NHEP
+ *     GHEP   = EPS_GHEP
+ *     GNHEP  = EPS_GNHEP             # <<<<<<<<<<<<<<
+ *     PGNHEP = EPS_PGNHEP
+ *     GHIEP  = EPS_GHIEP
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSProblemType(EPS_GNHEP); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 66, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GNHEP, __pyx_t_5) < 0) __PYX_ERR(13, 66, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":67
+ *     GHEP   = EPS_GHEP
+ *     GNHEP  = EPS_GNHEP
+ *     PGNHEP = EPS_PGNHEP             # <<<<<<<<<<<<<<
+ *     GHIEP  = EPS_GHIEP
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSProblemType(EPS_PGNHEP); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 67, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PGNHEP, __pyx_t_5) < 0) __PYX_ERR(13, 67, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":68
+ *     GNHEP  = EPS_GNHEP
+ *     PGNHEP = EPS_PGNHEP
+ *     GHIEP  = EPS_GHIEP             # <<<<<<<<<<<<<<
+ * 
+ * class EPSExtraction(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSProblemType(EPS_GHIEP); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 68, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GHIEP, __pyx_t_5) < 0) __PYX_ERR(13, 68, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":51
+ *     FEAST        = S_(EPSFEAST)
+ * 
+ * class EPSProblemType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     EPS problem type
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_EPSProblemType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_EPSProblemType, __pyx_t_5) < 0) __PYX_ERR(13, 51, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/EPS.pyx":70
+ *     GHIEP  = EPS_GHIEP
+ * 
+ * class EPSExtraction(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     EPS extraction technique
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 70, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 70, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_EPSExtraction, __pyx_n_s_EPSExtraction, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_EPS_extraction_technique_RITZ_S); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 70, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/EPS.pyx":82
+ *     - `REFINED_HARMONIC`:  Refined harmonic extraction.
+ *     """
+ *     RITZ              = EPS_RITZ             # <<<<<<<<<<<<<<
+ *     HARMONIC          = EPS_HARMONIC
+ *     HARMONIC_RELATIVE = EPS_HARMONIC_RELATIVE
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSExtraction(EPS_RITZ); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 82, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RITZ, __pyx_t_5) < 0) __PYX_ERR(13, 82, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":83
+ *     """
+ *     RITZ              = EPS_RITZ
+ *     HARMONIC          = EPS_HARMONIC             # <<<<<<<<<<<<<<
+ *     HARMONIC_RELATIVE = EPS_HARMONIC_RELATIVE
+ *     HARMONIC_RIGHT    = EPS_HARMONIC_RIGHT
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSExtraction(EPS_HARMONIC); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 83, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HARMONIC, __pyx_t_5) < 0) __PYX_ERR(13, 83, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":84
+ *     RITZ              = EPS_RITZ
+ *     HARMONIC          = EPS_HARMONIC
+ *     HARMONIC_RELATIVE = EPS_HARMONIC_RELATIVE             # <<<<<<<<<<<<<<
+ *     HARMONIC_RIGHT    = EPS_HARMONIC_RIGHT
+ *     HARMONIC_LARGEST  = EPS_HARMONIC_LARGEST
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSExtraction(EPS_HARMONIC_RELATIVE); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 84, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HARMONIC_RELATIVE, __pyx_t_5) < 0) __PYX_ERR(13, 84, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":85
+ *     HARMONIC          = EPS_HARMONIC
+ *     HARMONIC_RELATIVE = EPS_HARMONIC_RELATIVE
+ *     HARMONIC_RIGHT    = EPS_HARMONIC_RIGHT             # <<<<<<<<<<<<<<
+ *     HARMONIC_LARGEST  = EPS_HARMONIC_LARGEST
+ *     REFINED           = EPS_REFINED
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSExtraction(EPS_HARMONIC_RIGHT); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 85, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HARMONIC_RIGHT, __pyx_t_5) < 0) __PYX_ERR(13, 85, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":86
+ *     HARMONIC_RELATIVE = EPS_HARMONIC_RELATIVE
+ *     HARMONIC_RIGHT    = EPS_HARMONIC_RIGHT
+ *     HARMONIC_LARGEST  = EPS_HARMONIC_LARGEST             # <<<<<<<<<<<<<<
+ *     REFINED           = EPS_REFINED
+ *     REFINED_HARMONIC  = EPS_REFINED_HARMONIC
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSExtraction(EPS_HARMONIC_LARGEST); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 86, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HARMONIC_LARGEST, __pyx_t_5) < 0) __PYX_ERR(13, 86, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":87
+ *     HARMONIC_RIGHT    = EPS_HARMONIC_RIGHT
+ *     HARMONIC_LARGEST  = EPS_HARMONIC_LARGEST
+ *     REFINED           = EPS_REFINED             # <<<<<<<<<<<<<<
+ *     REFINED_HARMONIC  = EPS_REFINED_HARMONIC
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSExtraction(EPS_REFINED); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 87, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_REFINED, __pyx_t_5) < 0) __PYX_ERR(13, 87, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":88
+ *     HARMONIC_LARGEST  = EPS_HARMONIC_LARGEST
+ *     REFINED           = EPS_REFINED
+ *     REFINED_HARMONIC  = EPS_REFINED_HARMONIC             # <<<<<<<<<<<<<<
+ * 
+ * class EPSBalance(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSExtraction(EPS_REFINED_HARMONIC); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 88, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_REFINED_HARMONIC, __pyx_t_5) < 0) __PYX_ERR(13, 88, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":70
+ *     GHIEP  = EPS_GHIEP
+ * 
+ * class EPSExtraction(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     EPS extraction technique
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_EPSExtraction, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 70, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_EPSExtraction, __pyx_t_5) < 0) __PYX_ERR(13, 70, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/EPS.pyx":90
+ *     REFINED_HARMONIC  = EPS_REFINED_HARMONIC
+ * 
+ * class EPSBalance(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     EPS type of balancing used for non-Hermitian problems
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 90, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 90, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_EPSBalance, __pyx_n_s_EPSBalance, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_EPS_type_of_balancing_used_for); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 90, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/EPS.pyx":99
+ *     - `USER`:     User-defined.
+ *     """
+ *     NONE    = EPS_BALANCE_NONE             # <<<<<<<<<<<<<<
+ *     ONESIDE = EPS_BALANCE_ONESIDE
+ *     TWOSIDE = EPS_BALANCE_TWOSIDE
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSBalance(EPS_BALANCE_NONE); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 99, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONE, __pyx_t_5) < 0) __PYX_ERR(13, 99, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":100
+ *     """
+ *     NONE    = EPS_BALANCE_NONE
+ *     ONESIDE = EPS_BALANCE_ONESIDE             # <<<<<<<<<<<<<<
+ *     TWOSIDE = EPS_BALANCE_TWOSIDE
+ *     USER    = EPS_BALANCE_USER
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSBalance(EPS_BALANCE_ONESIDE); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 100, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ONESIDE, __pyx_t_5) < 0) __PYX_ERR(13, 100, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":101
+ *     NONE    = EPS_BALANCE_NONE
+ *     ONESIDE = EPS_BALANCE_ONESIDE
+ *     TWOSIDE = EPS_BALANCE_TWOSIDE             # <<<<<<<<<<<<<<
+ *     USER    = EPS_BALANCE_USER
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSBalance(EPS_BALANCE_TWOSIDE); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 101, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TWOSIDE, __pyx_t_5) < 0) __PYX_ERR(13, 101, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":102
+ *     ONESIDE = EPS_BALANCE_ONESIDE
+ *     TWOSIDE = EPS_BALANCE_TWOSIDE
+ *     USER    = EPS_BALANCE_USER             # <<<<<<<<<<<<<<
+ * 
+ * class EPSErrorType(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSBalance(EPS_BALANCE_USER); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 102, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_USER, __pyx_t_5) < 0) __PYX_ERR(13, 102, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":90
+ *     REFINED_HARMONIC  = EPS_REFINED_HARMONIC
+ * 
+ * class EPSBalance(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     EPS type of balancing used for non-Hermitian problems
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_EPSBalance, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 90, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_EPSBalance, __pyx_t_5) < 0) __PYX_ERR(13, 90, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/EPS.pyx":104
+ *     USER    = EPS_BALANCE_USER
+ * 
+ * class EPSErrorType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     EPS error type to assess accuracy of computed solutions
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 104, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 104, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_EPSErrorType, __pyx_n_s_EPSErrorType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_EPS_error_type_to_assess_accura); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 104, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/EPS.pyx":112
+ *     - `BACKWARD`:  Backward error.
+ *     """
+ *     ABSOLUTE = EPS_ERROR_ABSOLUTE             # <<<<<<<<<<<<<<
+ *     RELATIVE = EPS_ERROR_RELATIVE
+ *     BACKWARD = EPS_ERROR_BACKWARD
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSErrorType(EPS_ERROR_ABSOLUTE); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 112, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ABSOLUTE, __pyx_t_5) < 0) __PYX_ERR(13, 112, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":113
+ *     """
+ *     ABSOLUTE = EPS_ERROR_ABSOLUTE
+ *     RELATIVE = EPS_ERROR_RELATIVE             # <<<<<<<<<<<<<<
+ *     BACKWARD = EPS_ERROR_BACKWARD
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSErrorType(EPS_ERROR_RELATIVE); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 113, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RELATIVE, __pyx_t_5) < 0) __PYX_ERR(13, 113, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":114
+ *     ABSOLUTE = EPS_ERROR_ABSOLUTE
+ *     RELATIVE = EPS_ERROR_RELATIVE
+ *     BACKWARD = EPS_ERROR_BACKWARD             # <<<<<<<<<<<<<<
+ * 
+ * class EPSWhich(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSErrorType(EPS_ERROR_BACKWARD); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 114, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BACKWARD, __pyx_t_5) < 0) __PYX_ERR(13, 114, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":104
+ *     USER    = EPS_BALANCE_USER
+ * 
+ * class EPSErrorType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     EPS error type to assess accuracy of computed solutions
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_EPSErrorType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 104, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_EPSErrorType, __pyx_t_5) < 0) __PYX_ERR(13, 104, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/EPS.pyx":116
+ *     BACKWARD = EPS_ERROR_BACKWARD
+ * 
+ * class EPSWhich(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     EPS desired piece of spectrum
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 116, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 116, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_EPSWhich, __pyx_n_s_EPSWhich, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_EPS_desired_piece_of_spectrum_L); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 116, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/EPS.pyx":132
+ *     - `USER`:               User defined ordering.
+ *     """
+ *     LARGEST_MAGNITUDE  = EPS_LARGEST_MAGNITUDE             # <<<<<<<<<<<<<<
+ *     LARGEST_REAL       = EPS_LARGEST_REAL
+ *     LARGEST_IMAGINARY  = EPS_LARGEST_IMAGINARY
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSWhich(EPS_LARGEST_MAGNITUDE); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 132, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LARGEST_MAGNITUDE, __pyx_t_5) < 0) __PYX_ERR(13, 132, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":133
+ *     """
+ *     LARGEST_MAGNITUDE  = EPS_LARGEST_MAGNITUDE
+ *     LARGEST_REAL       = EPS_LARGEST_REAL             # <<<<<<<<<<<<<<
+ *     LARGEST_IMAGINARY  = EPS_LARGEST_IMAGINARY
+ *     SMALLEST_MAGNITUDE = EPS_SMALLEST_MAGNITUDE
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSWhich(EPS_LARGEST_REAL); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 133, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LARGEST_REAL, __pyx_t_5) < 0) __PYX_ERR(13, 133, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":134
+ *     LARGEST_MAGNITUDE  = EPS_LARGEST_MAGNITUDE
+ *     LARGEST_REAL       = EPS_LARGEST_REAL
+ *     LARGEST_IMAGINARY  = EPS_LARGEST_IMAGINARY             # <<<<<<<<<<<<<<
+ *     SMALLEST_MAGNITUDE = EPS_SMALLEST_MAGNITUDE
+ *     SMALLEST_REAL      = EPS_SMALLEST_REAL
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSWhich(EPS_LARGEST_IMAGINARY); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 134, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LARGEST_IMAGINARY, __pyx_t_5) < 0) __PYX_ERR(13, 134, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":135
+ *     LARGEST_REAL       = EPS_LARGEST_REAL
+ *     LARGEST_IMAGINARY  = EPS_LARGEST_IMAGINARY
+ *     SMALLEST_MAGNITUDE = EPS_SMALLEST_MAGNITUDE             # <<<<<<<<<<<<<<
+ *     SMALLEST_REAL      = EPS_SMALLEST_REAL
+ *     SMALLEST_IMAGINARY = EPS_SMALLEST_IMAGINARY
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSWhich(EPS_SMALLEST_MAGNITUDE); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 135, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SMALLEST_MAGNITUDE, __pyx_t_5) < 0) __PYX_ERR(13, 135, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":136
+ *     LARGEST_IMAGINARY  = EPS_LARGEST_IMAGINARY
+ *     SMALLEST_MAGNITUDE = EPS_SMALLEST_MAGNITUDE
+ *     SMALLEST_REAL      = EPS_SMALLEST_REAL             # <<<<<<<<<<<<<<
+ *     SMALLEST_IMAGINARY = EPS_SMALLEST_IMAGINARY
+ *     TARGET_MAGNITUDE   = EPS_TARGET_MAGNITUDE
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSWhich(EPS_SMALLEST_REAL); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 136, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SMALLEST_REAL, __pyx_t_5) < 0) __PYX_ERR(13, 136, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":137
+ *     SMALLEST_MAGNITUDE = EPS_SMALLEST_MAGNITUDE
+ *     SMALLEST_REAL      = EPS_SMALLEST_REAL
+ *     SMALLEST_IMAGINARY = EPS_SMALLEST_IMAGINARY             # <<<<<<<<<<<<<<
+ *     TARGET_MAGNITUDE   = EPS_TARGET_MAGNITUDE
+ *     TARGET_REAL        = EPS_TARGET_REAL
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSWhich(EPS_SMALLEST_IMAGINARY); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 137, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SMALLEST_IMAGINARY, __pyx_t_5) < 0) __PYX_ERR(13, 137, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":138
+ *     SMALLEST_REAL      = EPS_SMALLEST_REAL
+ *     SMALLEST_IMAGINARY = EPS_SMALLEST_IMAGINARY
+ *     TARGET_MAGNITUDE   = EPS_TARGET_MAGNITUDE             # <<<<<<<<<<<<<<
+ *     TARGET_REAL        = EPS_TARGET_REAL
+ *     TARGET_IMAGINARY   = EPS_TARGET_IMAGINARY
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSWhich(EPS_TARGET_MAGNITUDE); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 138, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TARGET_MAGNITUDE, __pyx_t_5) < 0) __PYX_ERR(13, 138, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":139
+ *     SMALLEST_IMAGINARY = EPS_SMALLEST_IMAGINARY
+ *     TARGET_MAGNITUDE   = EPS_TARGET_MAGNITUDE
+ *     TARGET_REAL        = EPS_TARGET_REAL             # <<<<<<<<<<<<<<
+ *     TARGET_IMAGINARY   = EPS_TARGET_IMAGINARY
+ *     ALL                = EPS_ALL
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSWhich(EPS_TARGET_REAL); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 139, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TARGET_REAL, __pyx_t_5) < 0) __PYX_ERR(13, 139, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":140
+ *     TARGET_MAGNITUDE   = EPS_TARGET_MAGNITUDE
+ *     TARGET_REAL        = EPS_TARGET_REAL
+ *     TARGET_IMAGINARY   = EPS_TARGET_IMAGINARY             # <<<<<<<<<<<<<<
+ *     ALL                = EPS_ALL
+ *     USER               = EPS_WHICH_USER
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSWhich(EPS_TARGET_IMAGINARY); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 140, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TARGET_IMAGINARY, __pyx_t_5) < 0) __PYX_ERR(13, 140, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":141
+ *     TARGET_REAL        = EPS_TARGET_REAL
+ *     TARGET_IMAGINARY   = EPS_TARGET_IMAGINARY
+ *     ALL                = EPS_ALL             # <<<<<<<<<<<<<<
+ *     USER               = EPS_WHICH_USER
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSWhich(EPS_ALL); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 141, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ALL, __pyx_t_5) < 0) __PYX_ERR(13, 141, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":142
+ *     TARGET_IMAGINARY   = EPS_TARGET_IMAGINARY
+ *     ALL                = EPS_ALL
+ *     USER               = EPS_WHICH_USER             # <<<<<<<<<<<<<<
+ * 
+ * class EPSConv(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSWhich(EPS_WHICH_USER); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 142, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_USER, __pyx_t_5) < 0) __PYX_ERR(13, 142, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":116
+ *     BACKWARD = EPS_ERROR_BACKWARD
+ * 
+ * class EPSWhich(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     EPS desired piece of spectrum
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_EPSWhich, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 116, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_EPSWhich, __pyx_t_5) < 0) __PYX_ERR(13, 116, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/EPS.pyx":144
+ *     USER               = EPS_WHICH_USER
+ * 
+ * class EPSConv(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     EPS convergence test
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 144, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 144, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_EPSConv, __pyx_n_s_EPSConv, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_EPS_convergence_test_ABS_REL_NO); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 144, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/EPS.pyx":153
+ *     - `USER`:
+ *     """
+ *     ABS  = EPS_CONV_ABS             # <<<<<<<<<<<<<<
+ *     REL  = EPS_CONV_REL
+ *     NORM = EPS_CONV_NORM
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSConv(EPS_CONV_ABS); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 153, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ABS, __pyx_t_5) < 0) __PYX_ERR(13, 153, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":154
+ *     """
+ *     ABS  = EPS_CONV_ABS
+ *     REL  = EPS_CONV_REL             # <<<<<<<<<<<<<<
+ *     NORM = EPS_CONV_NORM
+ *     USER = EPS_CONV_USER
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSConv(EPS_CONV_REL); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 154, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_REL, __pyx_t_5) < 0) __PYX_ERR(13, 154, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":155
+ *     ABS  = EPS_CONV_ABS
+ *     REL  = EPS_CONV_REL
+ *     NORM = EPS_CONV_NORM             # <<<<<<<<<<<<<<
+ *     USER = EPS_CONV_USER
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSConv(EPS_CONV_NORM); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 155, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM, __pyx_t_5) < 0) __PYX_ERR(13, 155, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":156
+ *     REL  = EPS_CONV_REL
+ *     NORM = EPS_CONV_NORM
+ *     USER = EPS_CONV_USER             # <<<<<<<<<<<<<<
+ * 
+ * class EPSConvergedReason(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSConv(EPS_CONV_USER); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 156, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_USER, __pyx_t_5) < 0) __PYX_ERR(13, 156, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":144
+ *     USER               = EPS_WHICH_USER
+ * 
+ * class EPSConv(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     EPS convergence test
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_EPSConv, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 144, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_EPSConv, __pyx_t_5) < 0) __PYX_ERR(13, 144, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/EPS.pyx":158
+ *     USER = EPS_CONV_USER
+ * 
+ * class EPSConvergedReason(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     EPS convergence reasons
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 158, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 158, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_EPSConvergedReason, __pyx_n_s_EPSConvergedReason, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_EPS_convergence_reasons_CONVERG); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 158, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/EPS.pyx":169
+ *     - `CONVERGED_ITERATING`:
+ *     """
+ *     CONVERGED_TOL          = EPS_CONVERGED_TOL             # <<<<<<<<<<<<<<
+ *     CONVERGED_USER         = EPS_CONVERGED_USER
+ *     DIVERGED_ITS           = EPS_DIVERGED_ITS
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSConvergedReason(EPS_CONVERGED_TOL); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 169, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_TOL, __pyx_t_5) < 0) __PYX_ERR(13, 169, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":170
+ *     """
+ *     CONVERGED_TOL          = EPS_CONVERGED_TOL
+ *     CONVERGED_USER         = EPS_CONVERGED_USER             # <<<<<<<<<<<<<<
+ *     DIVERGED_ITS           = EPS_DIVERGED_ITS
+ *     DIVERGED_BREAKDOWN     = EPS_DIVERGED_BREAKDOWN
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSConvergedReason(EPS_CONVERGED_USER); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 170, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_USER, __pyx_t_5) < 0) __PYX_ERR(13, 170, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":171
+ *     CONVERGED_TOL          = EPS_CONVERGED_TOL
+ *     CONVERGED_USER         = EPS_CONVERGED_USER
+ *     DIVERGED_ITS           = EPS_DIVERGED_ITS             # <<<<<<<<<<<<<<
+ *     DIVERGED_BREAKDOWN     = EPS_DIVERGED_BREAKDOWN
+ *     DIVERGED_SYMMETRY_LOST = EPS_DIVERGED_SYMMETRY_LOST
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSConvergedReason(EPS_DIVERGED_ITS); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 171, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_ITS, __pyx_t_5) < 0) __PYX_ERR(13, 171, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":172
+ *     CONVERGED_USER         = EPS_CONVERGED_USER
+ *     DIVERGED_ITS           = EPS_DIVERGED_ITS
+ *     DIVERGED_BREAKDOWN     = EPS_DIVERGED_BREAKDOWN             # <<<<<<<<<<<<<<
+ *     DIVERGED_SYMMETRY_LOST = EPS_DIVERGED_SYMMETRY_LOST
+ *     CONVERGED_ITERATING    = EPS_CONVERGED_ITERATING
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSConvergedReason(EPS_DIVERGED_BREAKDOWN); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 172, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_BREAKDOWN, __pyx_t_5) < 0) __PYX_ERR(13, 172, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":173
+ *     DIVERGED_ITS           = EPS_DIVERGED_ITS
+ *     DIVERGED_BREAKDOWN     = EPS_DIVERGED_BREAKDOWN
+ *     DIVERGED_SYMMETRY_LOST = EPS_DIVERGED_SYMMETRY_LOST             # <<<<<<<<<<<<<<
+ *     CONVERGED_ITERATING    = EPS_CONVERGED_ITERATING
+ *     ITERATING              = EPS_CONVERGED_ITERATING
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSConvergedReason(EPS_DIVERGED_SYMMETRY_LOST); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 173, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_SYMMETRY_LOST, __pyx_t_5) < 0) __PYX_ERR(13, 173, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":174
+ *     DIVERGED_BREAKDOWN     = EPS_DIVERGED_BREAKDOWN
+ *     DIVERGED_SYMMETRY_LOST = EPS_DIVERGED_SYMMETRY_LOST
+ *     CONVERGED_ITERATING    = EPS_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
+ *     ITERATING              = EPS_CONVERGED_ITERATING
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSConvergedReason(EPS_CONVERGED_ITERATING); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 174, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ITERATING, __pyx_t_5) < 0) __PYX_ERR(13, 174, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":175
+ *     DIVERGED_SYMMETRY_LOST = EPS_DIVERGED_SYMMETRY_LOST
+ *     CONVERGED_ITERATING    = EPS_CONVERGED_ITERATING
+ *     ITERATING              = EPS_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
+ * 
+ * class EPSPowerShiftType(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSConvergedReason(EPS_CONVERGED_ITERATING); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 175, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ITERATING, __pyx_t_5) < 0) __PYX_ERR(13, 175, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":158
+ *     USER = EPS_CONV_USER
+ * 
+ * class EPSConvergedReason(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     EPS convergence reasons
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_EPSConvergedReason, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 158, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_EPSConvergedReason, __pyx_t_5) < 0) __PYX_ERR(13, 158, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/EPS.pyx":177
+ *     ITERATING              = EPS_CONVERGED_ITERATING
+ * 
+ * class EPSPowerShiftType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     EPS Power shift type.
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 177, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 177, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_EPSPowerShiftType, __pyx_n_s_EPSPowerShiftType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_EPS_Power_shift_type_CONSTANT_R); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 177, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/EPS.pyx":185
+ *     - `WILKINSON`:
+ *     """
+ *     CONSTANT  = EPS_POWER_SHIFT_CONSTANT             # <<<<<<<<<<<<<<
+ *     RAYLEIGH  = EPS_POWER_SHIFT_RAYLEIGH
+ *     WILKINSON = EPS_POWER_SHIFT_WILKINSON
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSPowerShiftType(EPS_POWER_SHIFT_CONSTANT); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 185, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONSTANT, __pyx_t_5) < 0) __PYX_ERR(13, 185, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":186
+ *     """
+ *     CONSTANT  = EPS_POWER_SHIFT_CONSTANT
+ *     RAYLEIGH  = EPS_POWER_SHIFT_RAYLEIGH             # <<<<<<<<<<<<<<
+ *     WILKINSON = EPS_POWER_SHIFT_WILKINSON
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSPowerShiftType(EPS_POWER_SHIFT_RAYLEIGH); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 186, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RAYLEIGH, __pyx_t_5) < 0) __PYX_ERR(13, 186, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":187
+ *     CONSTANT  = EPS_POWER_SHIFT_CONSTANT
+ *     RAYLEIGH  = EPS_POWER_SHIFT_RAYLEIGH
+ *     WILKINSON = EPS_POWER_SHIFT_WILKINSON             # <<<<<<<<<<<<<<
+ * 
+ * class EPSLanczosReorthogType(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSPowerShiftType(EPS_POWER_SHIFT_WILKINSON); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 187, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_WILKINSON, __pyx_t_5) < 0) __PYX_ERR(13, 187, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":177
+ *     ITERATING              = EPS_CONVERGED_ITERATING
+ * 
+ * class EPSPowerShiftType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     EPS Power shift type.
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_EPSPowerShiftType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 177, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_EPSPowerShiftType, __pyx_t_5) < 0) __PYX_ERR(13, 177, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/EPS.pyx":189
+ *     WILKINSON = EPS_POWER_SHIFT_WILKINSON
+ * 
+ * class EPSLanczosReorthogType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     EPS Lanczos reorthogonalization type
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 189, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 189, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_EPSLanczosReorthogType, __pyx_n_s_EPSLanczosReorthogType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_EPS_Lanczos_reorthogonalization); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 189, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/EPS.pyx":200
+ *     - `DELAYED`:
+ *     """
+ *     LOCAL     =  EPS_LANCZOS_REORTHOG_LOCAL             # <<<<<<<<<<<<<<
+ *     FULL      =  EPS_LANCZOS_REORTHOG_FULL
+ *     SELECTIVE =  EPS_LANCZOS_REORTHOG_SELECTIVE
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSLanczosReorthogType(EPS_LANCZOS_REORTHOG_LOCAL); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 200, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LOCAL, __pyx_t_5) < 0) __PYX_ERR(13, 200, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":201
+ *     """
+ *     LOCAL     =  EPS_LANCZOS_REORTHOG_LOCAL
+ *     FULL      =  EPS_LANCZOS_REORTHOG_FULL             # <<<<<<<<<<<<<<
+ *     SELECTIVE =  EPS_LANCZOS_REORTHOG_SELECTIVE
+ *     PERIODIC  =  EPS_LANCZOS_REORTHOG_PERIODIC
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSLanczosReorthogType(EPS_LANCZOS_REORTHOG_FULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 201, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_FULL, __pyx_t_5) < 0) __PYX_ERR(13, 201, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":202
+ *     LOCAL     =  EPS_LANCZOS_REORTHOG_LOCAL
+ *     FULL      =  EPS_LANCZOS_REORTHOG_FULL
+ *     SELECTIVE =  EPS_LANCZOS_REORTHOG_SELECTIVE             # <<<<<<<<<<<<<<
+ *     PERIODIC  =  EPS_LANCZOS_REORTHOG_PERIODIC
+ *     PARTIAL   =  EPS_LANCZOS_REORTHOG_PARTIAL
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSLanczosReorthogType(EPS_LANCZOS_REORTHOG_SELECTIVE); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 202, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SELECTIVE, __pyx_t_5) < 0) __PYX_ERR(13, 202, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":203
+ *     FULL      =  EPS_LANCZOS_REORTHOG_FULL
+ *     SELECTIVE =  EPS_LANCZOS_REORTHOG_SELECTIVE
+ *     PERIODIC  =  EPS_LANCZOS_REORTHOG_PERIODIC             # <<<<<<<<<<<<<<
+ *     PARTIAL   =  EPS_LANCZOS_REORTHOG_PARTIAL
+ *     DELAYED   =  EPS_LANCZOS_REORTHOG_DELAYED
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSLanczosReorthogType(EPS_LANCZOS_REORTHOG_PERIODIC); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 203, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PERIODIC, __pyx_t_5) < 0) __PYX_ERR(13, 203, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":204
+ *     SELECTIVE =  EPS_LANCZOS_REORTHOG_SELECTIVE
+ *     PERIODIC  =  EPS_LANCZOS_REORTHOG_PERIODIC
+ *     PARTIAL   =  EPS_LANCZOS_REORTHOG_PARTIAL             # <<<<<<<<<<<<<<
+ *     DELAYED   =  EPS_LANCZOS_REORTHOG_DELAYED
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSLanczosReorthogType(EPS_LANCZOS_REORTHOG_PARTIAL); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 204, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_PARTIAL, __pyx_t_5) < 0) __PYX_ERR(13, 204, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":205
+ *     PERIODIC  =  EPS_LANCZOS_REORTHOG_PERIODIC
+ *     PARTIAL   =  EPS_LANCZOS_REORTHOG_PARTIAL
+ *     DELAYED   =  EPS_LANCZOS_REORTHOG_DELAYED             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_EPSLanczosReorthogType(EPS_LANCZOS_REORTHOG_DELAYED); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 205, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DELAYED, __pyx_t_5) < 0) __PYX_ERR(13, 205, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/EPS.pyx":189
+ *     WILKINSON = EPS_POWER_SHIFT_WILKINSON
+ * 
+ * class EPSLanczosReorthogType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     EPS Lanczos reorthogonalization type
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_EPSLanczosReorthogType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 189, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_EPSLanczosReorthogType, __pyx_t_5) < 0) __PYX_ERR(13, 189, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/EPS.pyx":215
+ *     """
+ * 
+ *     Type            = EPSType             # <<<<<<<<<<<<<<
+ *     ProblemType     = EPSProblemType
+ *     Extraction      = EPSExtraction
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_EPSType); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 215, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_EPS->tp_dict, __pyx_n_s_Type, __pyx_t_2) < 0) __PYX_ERR(13, 215, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_EPS);
+
+  /* "SLEPc/EPS.pyx":216
+ * 
+ *     Type            = EPSType
+ *     ProblemType     = EPSProblemType             # <<<<<<<<<<<<<<
+ *     Extraction      = EPSExtraction
+ *     Balance         = EPSBalance
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_EPSProblemType); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 216, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_EPS->tp_dict, __pyx_n_s_ProblemType, __pyx_t_2) < 0) __PYX_ERR(13, 216, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_EPS);
+
+  /* "SLEPc/EPS.pyx":217
+ *     Type            = EPSType
+ *     ProblemType     = EPSProblemType
+ *     Extraction      = EPSExtraction             # <<<<<<<<<<<<<<
+ *     Balance         = EPSBalance
+ *     ErrorType       = EPSErrorType
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_EPSExtraction); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 217, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_EPS->tp_dict, __pyx_n_s_Extraction, __pyx_t_2) < 0) __PYX_ERR(13, 217, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_EPS);
+
+  /* "SLEPc/EPS.pyx":218
+ *     ProblemType     = EPSProblemType
+ *     Extraction      = EPSExtraction
+ *     Balance         = EPSBalance             # <<<<<<<<<<<<<<
+ *     ErrorType       = EPSErrorType
+ *     Which           = EPSWhich
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_EPSBalance); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 218, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_EPS->tp_dict, __pyx_n_s_Balance, __pyx_t_2) < 0) __PYX_ERR(13, 218, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_EPS);
+
+  /* "SLEPc/EPS.pyx":219
+ *     Extraction      = EPSExtraction
+ *     Balance         = EPSBalance
+ *     ErrorType       = EPSErrorType             # <<<<<<<<<<<<<<
+ *     Which           = EPSWhich
+ *     Conv            = EPSConv
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_EPSErrorType); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 219, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_EPS->tp_dict, __pyx_n_s_ErrorType, __pyx_t_2) < 0) __PYX_ERR(13, 219, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_EPS);
+
+  /* "SLEPc/EPS.pyx":220
+ *     Balance         = EPSBalance
+ *     ErrorType       = EPSErrorType
+ *     Which           = EPSWhich             # <<<<<<<<<<<<<<
+ *     Conv            = EPSConv
+ *     ConvergedReason = EPSConvergedReason
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_EPSWhich); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 220, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_EPS->tp_dict, __pyx_n_s_Which, __pyx_t_2) < 0) __PYX_ERR(13, 220, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_EPS);
+
+  /* "SLEPc/EPS.pyx":221
+ *     ErrorType       = EPSErrorType
+ *     Which           = EPSWhich
+ *     Conv            = EPSConv             # <<<<<<<<<<<<<<
+ *     ConvergedReason = EPSConvergedReason
+ * 
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_EPSConv); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 221, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_EPS->tp_dict, __pyx_n_s_Conv, __pyx_t_2) < 0) __PYX_ERR(13, 221, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_EPS);
+
+  /* "SLEPc/EPS.pyx":222
+ *     Which           = EPSWhich
+ *     Conv            = EPSConv
+ *     ConvergedReason = EPSConvergedReason             # <<<<<<<<<<<<<<
+ * 
+ *     PowerShiftType      = EPSPowerShiftType
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_EPSConvergedReason); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 222, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_EPS->tp_dict, __pyx_n_s_ConvergedReason, __pyx_t_2) < 0) __PYX_ERR(13, 222, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_EPS);
+
+  /* "SLEPc/EPS.pyx":224
+ *     ConvergedReason = EPSConvergedReason
+ * 
+ *     PowerShiftType      = EPSPowerShiftType             # <<<<<<<<<<<<<<
+ *     LanczosReorthogType = EPSLanczosReorthogType
+ * 
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_EPSPowerShiftType); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 224, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_EPS->tp_dict, __pyx_n_s_PowerShiftType, __pyx_t_2) < 0) __PYX_ERR(13, 224, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_EPS);
+
+  /* "SLEPc/EPS.pyx":225
+ * 
+ *     PowerShiftType      = EPSPowerShiftType
+ *     LanczosReorthogType = EPSLanczosReorthogType             # <<<<<<<<<<<<<<
+ * 
+ *     def __cinit__(self):
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_EPSLanczosReorthogType); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 225, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_EPS->tp_dict, __pyx_n_s_LanczosReorthogType, __pyx_t_2) < 0) __PYX_ERR(13, 225, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_EPS);
+
+  /* "SLEPc/EPS.pyx":1860
+ * # -----------------------------------------------------------------------------
+ * 
+ * del EPSType             # <<<<<<<<<<<<<<
+ * del EPSProblemType
+ * del EPSExtraction
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_EPSType) < 0) __PYX_ERR(13, 1860, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":1861
+ * 
+ * del EPSType
+ * del EPSProblemType             # <<<<<<<<<<<<<<
+ * del EPSExtraction
+ * del EPSBalance
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_EPSProblemType) < 0) __PYX_ERR(13, 1861, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":1862
+ * del EPSType
+ * del EPSProblemType
+ * del EPSExtraction             # <<<<<<<<<<<<<<
+ * del EPSBalance
+ * del EPSErrorType
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_EPSExtraction) < 0) __PYX_ERR(13, 1862, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":1863
+ * del EPSProblemType
+ * del EPSExtraction
+ * del EPSBalance             # <<<<<<<<<<<<<<
+ * del EPSErrorType
+ * del EPSWhich
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_EPSBalance) < 0) __PYX_ERR(13, 1863, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":1864
+ * del EPSExtraction
+ * del EPSBalance
+ * del EPSErrorType             # <<<<<<<<<<<<<<
+ * del EPSWhich
+ * del EPSConv
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_EPSErrorType) < 0) __PYX_ERR(13, 1864, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":1865
+ * del EPSBalance
+ * del EPSErrorType
+ * del EPSWhich             # <<<<<<<<<<<<<<
+ * del EPSConv
+ * del EPSConvergedReason
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_EPSWhich) < 0) __PYX_ERR(13, 1865, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":1866
+ * del EPSErrorType
+ * del EPSWhich
+ * del EPSConv             # <<<<<<<<<<<<<<
+ * del EPSConvergedReason
+ * del EPSPowerShiftType
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_EPSConv) < 0) __PYX_ERR(13, 1866, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":1867
+ * del EPSWhich
+ * del EPSConv
+ * del EPSConvergedReason             # <<<<<<<<<<<<<<
+ * del EPSPowerShiftType
+ * del EPSLanczosReorthogType
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_EPSConvergedReason) < 0) __PYX_ERR(13, 1867, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":1868
+ * del EPSConv
+ * del EPSConvergedReason
+ * del EPSPowerShiftType             # <<<<<<<<<<<<<<
+ * del EPSLanczosReorthogType
+ * 
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_EPSPowerShiftType) < 0) __PYX_ERR(13, 1868, __pyx_L1_error)
+
+  /* "SLEPc/EPS.pyx":1869
+ * del EPSConvergedReason
+ * del EPSPowerShiftType
+ * del EPSLanczosReorthogType             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_EPSLanczosReorthogType) < 0) __PYX_ERR(13, 1869, __pyx_L1_error)
+
+  /* "SLEPc/SVD.pyx":3
+ * # -----------------------------------------------------------------------------
+ * 
+ * class SVDType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     SVD types
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(14, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_SVDType, __pyx_n_s_SVDType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_SVD_types_CROSS_Eigenproblem_wi); if (unlikely(!__pyx_t_4)) __PYX_ERR(14, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/SVD.pyx":13
+ *     - `TRLANCZOS`: Thick-restart Lanczos.
+ *     """
+ *     CROSS     = S_(SVDCROSS)             # <<<<<<<<<<<<<<
+ *     CYCLIC    = S_(SVDCYCLIC)
+ *     LAPACK    = S_(SVDLAPACK)
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(SVDCROSS); if (unlikely(!__pyx_t_5)) __PYX_ERR(14, 13, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CROSS, __pyx_t_5) < 0) __PYX_ERR(14, 13, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/SVD.pyx":14
+ *     """
+ *     CROSS     = S_(SVDCROSS)
+ *     CYCLIC    = S_(SVDCYCLIC)             # <<<<<<<<<<<<<<
+ *     LAPACK    = S_(SVDLAPACK)
+ *     LANCZOS   = S_(SVDLANCZOS)
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(SVDCYCLIC); if (unlikely(!__pyx_t_5)) __PYX_ERR(14, 14, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CYCLIC, __pyx_t_5) < 0) __PYX_ERR(14, 14, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/SVD.pyx":15
+ *     CROSS     = S_(SVDCROSS)
+ *     CYCLIC    = S_(SVDCYCLIC)
+ *     LAPACK    = S_(SVDLAPACK)             # <<<<<<<<<<<<<<
+ *     LANCZOS   = S_(SVDLANCZOS)
+ *     TRLANCZOS = S_(SVDTRLANCZOS)
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(SVDLAPACK); if (unlikely(!__pyx_t_5)) __PYX_ERR(14, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LAPACK, __pyx_t_5) < 0) __PYX_ERR(14, 15, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/SVD.pyx":16
+ *     CYCLIC    = S_(SVDCYCLIC)
+ *     LAPACK    = S_(SVDLAPACK)
+ *     LANCZOS   = S_(SVDLANCZOS)             # <<<<<<<<<<<<<<
+ *     TRLANCZOS = S_(SVDTRLANCZOS)
+ * 
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(SVDLANCZOS); if (unlikely(!__pyx_t_5)) __PYX_ERR(14, 16, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LANCZOS, __pyx_t_5) < 0) __PYX_ERR(14, 16, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/SVD.pyx":17
+ *     LAPACK    = S_(SVDLAPACK)
+ *     LANCZOS   = S_(SVDLANCZOS)
+ *     TRLANCZOS = S_(SVDTRLANCZOS)             # <<<<<<<<<<<<<<
+ * 
+ * class SVDErrorType(object):
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(SVDTRLANCZOS); if (unlikely(!__pyx_t_5)) __PYX_ERR(14, 17, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TRLANCZOS, __pyx_t_5) < 0) __PYX_ERR(14, 17, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/SVD.pyx":3
+ * # -----------------------------------------------------------------------------
+ * 
+ * class SVDType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     SVD types
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_SVDType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(14, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SVDType, __pyx_t_5) < 0) __PYX_ERR(14, 3, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/SVD.pyx":19
+ *     TRLANCZOS = S_(SVDTRLANCZOS)
+ * 
+ * class SVDErrorType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     SVD error type to assess accuracy of computed solutions
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(14, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_SVDErrorType, __pyx_n_s_SVDErrorType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_SVD_error_type_to_assess_accura); if (unlikely(!__pyx_t_4)) __PYX_ERR(14, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/SVD.pyx":26
+ *     - `RELATIVE`:  Relative error.
+ *     """
+ *     ABSOLUTE = SVD_ERROR_ABSOLUTE             # <<<<<<<<<<<<<<
+ *     RELATIVE = SVD_ERROR_RELATIVE
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_SVDErrorType(SVD_ERROR_ABSOLUTE); if (unlikely(!__pyx_t_5)) __PYX_ERR(14, 26, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ABSOLUTE, __pyx_t_5) < 0) __PYX_ERR(14, 26, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/SVD.pyx":27
+ *     """
+ *     ABSOLUTE = SVD_ERROR_ABSOLUTE
+ *     RELATIVE = SVD_ERROR_RELATIVE             # <<<<<<<<<<<<<<
+ * 
+ * class SVDWhich(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_SVDErrorType(SVD_ERROR_RELATIVE); if (unlikely(!__pyx_t_5)) __PYX_ERR(14, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RELATIVE, __pyx_t_5) < 0) __PYX_ERR(14, 27, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/SVD.pyx":19
+ *     TRLANCZOS = S_(SVDTRLANCZOS)
+ * 
+ * class SVDErrorType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     SVD error type to assess accuracy of computed solutions
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_SVDErrorType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(14, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SVDErrorType, __pyx_t_5) < 0) __PYX_ERR(14, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/SVD.pyx":29
+ *     RELATIVE = SVD_ERROR_RELATIVE
+ * 
+ * class SVDWhich(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     SVD desired piece of spectrum
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 29, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(14, 29, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_SVDWhich, __pyx_n_s_SVDWhich, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_SVD_desired_piece_of_spectrum_L); if (unlikely(!__pyx_t_4)) __PYX_ERR(14, 29, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/SVD.pyx":36
+ *     - `SMALLEST`: smallest singular values.
+ *     """
+ *     LARGEST  = SVD_LARGEST             # <<<<<<<<<<<<<<
+ *     SMALLEST = SVD_SMALLEST
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_SVDWhich(SVD_LARGEST); if (unlikely(!__pyx_t_5)) __PYX_ERR(14, 36, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LARGEST, __pyx_t_5) < 0) __PYX_ERR(14, 36, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/SVD.pyx":37
+ *     """
+ *     LARGEST  = SVD_LARGEST
+ *     SMALLEST = SVD_SMALLEST             # <<<<<<<<<<<<<<
+ * 
+ * class SVDConvergedReason(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_SVDWhich(SVD_SMALLEST); if (unlikely(!__pyx_t_5)) __PYX_ERR(14, 37, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SMALLEST, __pyx_t_5) < 0) __PYX_ERR(14, 37, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/SVD.pyx":29
+ *     RELATIVE = SVD_ERROR_RELATIVE
+ * 
+ * class SVDWhich(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     SVD desired piece of spectrum
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_SVDWhich, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(14, 29, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SVDWhich, __pyx_t_5) < 0) __PYX_ERR(14, 29, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/SVD.pyx":39
+ *     SMALLEST = SVD_SMALLEST
+ * 
+ * class SVDConvergedReason(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     SVD convergence reasons
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 39, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(14, 39, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_SVDConvergedReason, __pyx_n_s_SVDConvergedReason, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_SVD_convergence_reasons_CONVERG); if (unlikely(!__pyx_t_4)) __PYX_ERR(14, 39, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/SVD.pyx":49
+ *     - `CONVERGED_ITERATING`:
+ *     """
+ *     CONVERGED_TOL       = SVD_CONVERGED_TOL             # <<<<<<<<<<<<<<
+ *     CONVERGED_USER      = SVD_CONVERGED_USER
+ *     DIVERGED_ITS        = SVD_DIVERGED_ITS
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_SVDConvergedReason(SVD_CONVERGED_TOL); if (unlikely(!__pyx_t_5)) __PYX_ERR(14, 49, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_TOL, __pyx_t_5) < 0) __PYX_ERR(14, 49, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/SVD.pyx":50
+ *     """
+ *     CONVERGED_TOL       = SVD_CONVERGED_TOL
+ *     CONVERGED_USER      = SVD_CONVERGED_USER             # <<<<<<<<<<<<<<
+ *     DIVERGED_ITS        = SVD_DIVERGED_ITS
+ *     DIVERGED_BREAKDOWN  = SVD_DIVERGED_BREAKDOWN
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_SVDConvergedReason(SVD_CONVERGED_USER); if (unlikely(!__pyx_t_5)) __PYX_ERR(14, 50, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_USER, __pyx_t_5) < 0) __PYX_ERR(14, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/SVD.pyx":51
+ *     CONVERGED_TOL       = SVD_CONVERGED_TOL
+ *     CONVERGED_USER      = SVD_CONVERGED_USER
+ *     DIVERGED_ITS        = SVD_DIVERGED_ITS             # <<<<<<<<<<<<<<
+ *     DIVERGED_BREAKDOWN  = SVD_DIVERGED_BREAKDOWN
+ *     CONVERGED_ITERATING = SVD_CONVERGED_ITERATING
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_SVDConvergedReason(SVD_DIVERGED_ITS); if (unlikely(!__pyx_t_5)) __PYX_ERR(14, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_ITS, __pyx_t_5) < 0) __PYX_ERR(14, 51, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/SVD.pyx":52
+ *     CONVERGED_USER      = SVD_CONVERGED_USER
+ *     DIVERGED_ITS        = SVD_DIVERGED_ITS
+ *     DIVERGED_BREAKDOWN  = SVD_DIVERGED_BREAKDOWN             # <<<<<<<<<<<<<<
+ *     CONVERGED_ITERATING = SVD_CONVERGED_ITERATING
+ *     ITERATING           = SVD_CONVERGED_ITERATING
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_SVDConvergedReason(SVD_DIVERGED_BREAKDOWN); if (unlikely(!__pyx_t_5)) __PYX_ERR(14, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_BREAKDOWN, __pyx_t_5) < 0) __PYX_ERR(14, 52, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/SVD.pyx":53
+ *     DIVERGED_ITS        = SVD_DIVERGED_ITS
+ *     DIVERGED_BREAKDOWN  = SVD_DIVERGED_BREAKDOWN
+ *     CONVERGED_ITERATING = SVD_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
+ *     ITERATING           = SVD_CONVERGED_ITERATING
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_SVDConvergedReason(SVD_CONVERGED_ITERATING); if (unlikely(!__pyx_t_5)) __PYX_ERR(14, 53, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ITERATING, __pyx_t_5) < 0) __PYX_ERR(14, 53, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/SVD.pyx":54
+ *     DIVERGED_BREAKDOWN  = SVD_DIVERGED_BREAKDOWN
+ *     CONVERGED_ITERATING = SVD_CONVERGED_ITERATING
+ *     ITERATING           = SVD_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_SVDConvergedReason(SVD_CONVERGED_ITERATING); if (unlikely(!__pyx_t_5)) __PYX_ERR(14, 54, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ITERATING, __pyx_t_5) < 0) __PYX_ERR(14, 54, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/SVD.pyx":39
+ *     SMALLEST = SVD_SMALLEST
+ * 
+ * class SVDConvergedReason(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     SVD convergence reasons
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_SVDConvergedReason, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(14, 39, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SVDConvergedReason, __pyx_t_5) < 0) __PYX_ERR(14, 39, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/SVD.pyx":64
+ *     """
+ * 
+ *     Type            = SVDType             # <<<<<<<<<<<<<<
+ *     ErrorType       = SVDErrorType
+ *     Which           = SVDWhich
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_SVDType); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 64, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_SVD->tp_dict, __pyx_n_s_Type, __pyx_t_2) < 0) __PYX_ERR(14, 64, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_SVD);
+
+  /* "SLEPc/SVD.pyx":65
+ * 
+ *     Type            = SVDType
+ *     ErrorType       = SVDErrorType             # <<<<<<<<<<<<<<
+ *     Which           = SVDWhich
+ *     ConvergedReason = SVDConvergedReason
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_SVDErrorType); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 65, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_SVD->tp_dict, __pyx_n_s_ErrorType, __pyx_t_2) < 0) __PYX_ERR(14, 65, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_SVD);
+
+  /* "SLEPc/SVD.pyx":66
+ *     Type            = SVDType
+ *     ErrorType       = SVDErrorType
+ *     Which           = SVDWhich             # <<<<<<<<<<<<<<
+ *     ConvergedReason = SVDConvergedReason
+ * 
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_SVDWhich); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 66, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_SVD->tp_dict, __pyx_n_s_Which, __pyx_t_2) < 0) __PYX_ERR(14, 66, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_SVD);
+
+  /* "SLEPc/SVD.pyx":67
+ *     ErrorType       = SVDErrorType
+ *     Which           = SVDWhich
+ *     ConvergedReason = SVDConvergedReason             # <<<<<<<<<<<<<<
+ * 
+ *     def __cinit__(self):
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_SVDConvergedReason); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 67, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_SVD->tp_dict, __pyx_n_s_ConvergedReason, __pyx_t_2) < 0) __PYX_ERR(14, 67, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_SVD);
+
+  /* "SLEPc/SVD.pyx":846
+ * # -----------------------------------------------------------------------------
+ * 
+ * del SVDType             # <<<<<<<<<<<<<<
+ * del SVDErrorType
+ * del SVDWhich
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_SVDType) < 0) __PYX_ERR(14, 846, __pyx_L1_error)
+
+  /* "SLEPc/SVD.pyx":847
+ * 
+ * del SVDType
+ * del SVDErrorType             # <<<<<<<<<<<<<<
+ * del SVDWhich
+ * del SVDConvergedReason
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_SVDErrorType) < 0) __PYX_ERR(14, 847, __pyx_L1_error)
+
+  /* "SLEPc/SVD.pyx":848
+ * del SVDType
+ * del SVDErrorType
+ * del SVDWhich             # <<<<<<<<<<<<<<
+ * del SVDConvergedReason
+ * 
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_SVDWhich) < 0) __PYX_ERR(14, 848, __pyx_L1_error)
+
+  /* "SLEPc/SVD.pyx":849
+ * del SVDErrorType
+ * del SVDWhich
+ * del SVDConvergedReason             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_SVDConvergedReason) < 0) __PYX_ERR(14, 849, __pyx_L1_error)
+
+  /* "SLEPc/PEP.pyx":3
+ * # -----------------------------------------------------------------------------
+ * 
+ * class PEPType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     PEP type
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(15, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_PEPType, __pyx_n_s_PEPType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_PEP_type_Polynomial_eigensolver); if (unlikely(!__pyx_t_4)) __PYX_ERR(15, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/PEP.pyx":15
+ *     - `JD`:           Polynomial Jacobi-Davidson.
+ *     """
+ *     LINEAR   = S_(PEPLINEAR)             # <<<<<<<<<<<<<<
+ *     QARNOLDI = S_(PEPQARNOLDI)
+ *     TOAR     = S_(PEPTOAR)
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(PEPLINEAR); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LINEAR, __pyx_t_5) < 0) __PYX_ERR(15, 15, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":16
+ *     """
+ *     LINEAR   = S_(PEPLINEAR)
+ *     QARNOLDI = S_(PEPQARNOLDI)             # <<<<<<<<<<<<<<
+ *     TOAR     = S_(PEPTOAR)
+ *     STOAR    = S_(PEPSTOAR)
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(PEPQARNOLDI); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 16, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_QARNOLDI, __pyx_t_5) < 0) __PYX_ERR(15, 16, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":17
+ *     LINEAR   = S_(PEPLINEAR)
+ *     QARNOLDI = S_(PEPQARNOLDI)
+ *     TOAR     = S_(PEPTOAR)             # <<<<<<<<<<<<<<
+ *     STOAR    = S_(PEPSTOAR)
+ *     JD       = S_(PEPJD)
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(PEPTOAR); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 17, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TOAR, __pyx_t_5) < 0) __PYX_ERR(15, 17, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":18
+ *     QARNOLDI = S_(PEPQARNOLDI)
+ *     TOAR     = S_(PEPTOAR)
+ *     STOAR    = S_(PEPSTOAR)             # <<<<<<<<<<<<<<
+ *     JD       = S_(PEPJD)
+ * 
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(PEPSTOAR); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 18, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_STOAR, __pyx_t_5) < 0) __PYX_ERR(15, 18, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":19
+ *     TOAR     = S_(PEPTOAR)
+ *     STOAR    = S_(PEPSTOAR)
+ *     JD       = S_(PEPJD)             # <<<<<<<<<<<<<<
+ * 
+ * class PEPProblemType(object):
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(PEPJD); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_JD, __pyx_t_5) < 0) __PYX_ERR(15, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":3
+ * # -----------------------------------------------------------------------------
+ * 
+ * class PEPType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     PEP type
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_PEPType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PEPType, __pyx_t_5) < 0) __PYX_ERR(15, 3, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/PEP.pyx":21
+ *     JD       = S_(PEPJD)
+ * 
+ * class PEPProblemType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     PEP problem type
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 21, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(15, 21, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_PEPProblemType, __pyx_n_s_PEPProblemType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_PEP_problem_type_GENERAL_No_str); if (unlikely(!__pyx_t_4)) __PYX_ERR(15, 21, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/PEP.pyx":29
+ *     - `GYROSCOPIC`:   Hamiltonian structure.
+ *     """
+ *     GENERAL    = PEP_GENERAL             # <<<<<<<<<<<<<<
+ *     HERMITIAN  = PEP_HERMITIAN
+ *     GYROSCOPIC = PEP_GYROSCOPIC
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPProblemType(PEP_GENERAL); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 29, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GENERAL, __pyx_t_5) < 0) __PYX_ERR(15, 29, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":30
+ *     """
+ *     GENERAL    = PEP_GENERAL
+ *     HERMITIAN  = PEP_HERMITIAN             # <<<<<<<<<<<<<<
+ *     GYROSCOPIC = PEP_GYROSCOPIC
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPProblemType(PEP_HERMITIAN); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 30, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HERMITIAN, __pyx_t_5) < 0) __PYX_ERR(15, 30, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":31
+ *     GENERAL    = PEP_GENERAL
+ *     HERMITIAN  = PEP_HERMITIAN
+ *     GYROSCOPIC = PEP_GYROSCOPIC             # <<<<<<<<<<<<<<
+ * 
+ * class PEPWhich(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPProblemType(PEP_GYROSCOPIC); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 31, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_GYROSCOPIC, __pyx_t_5) < 0) __PYX_ERR(15, 31, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":21
+ *     JD       = S_(PEPJD)
+ * 
+ * class PEPProblemType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     PEP problem type
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_PEPProblemType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 21, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PEPProblemType, __pyx_t_5) < 0) __PYX_ERR(15, 21, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/PEP.pyx":33
+ *     GYROSCOPIC = PEP_GYROSCOPIC
+ * 
+ * class PEPWhich(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     PEP desired part of spectrum
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 33, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(15, 33, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_PEPWhich, __pyx_n_s_PEPWhich, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_PEP_desired_part_of_spectrum_LA); if (unlikely(!__pyx_t_4)) __PYX_ERR(15, 33, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/PEP.pyx":48
+ *     - `USER`:               User-defined criterion.
+ *     """
+ *     LARGEST_MAGNITUDE  = PEP_LARGEST_MAGNITUDE             # <<<<<<<<<<<<<<
+ *     SMALLEST_MAGNITUDE = PEP_SMALLEST_MAGNITUDE
+ *     LARGEST_REAL       = PEP_LARGEST_REAL
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPWhich(PEP_LARGEST_MAGNITUDE); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 48, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LARGEST_MAGNITUDE, __pyx_t_5) < 0) __PYX_ERR(15, 48, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":49
+ *     """
+ *     LARGEST_MAGNITUDE  = PEP_LARGEST_MAGNITUDE
+ *     SMALLEST_MAGNITUDE = PEP_SMALLEST_MAGNITUDE             # <<<<<<<<<<<<<<
+ *     LARGEST_REAL       = PEP_LARGEST_REAL
+ *     SMALLEST_REAL      = PEP_SMALLEST_REAL
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPWhich(PEP_SMALLEST_MAGNITUDE); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 49, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SMALLEST_MAGNITUDE, __pyx_t_5) < 0) __PYX_ERR(15, 49, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":50
+ *     LARGEST_MAGNITUDE  = PEP_LARGEST_MAGNITUDE
+ *     SMALLEST_MAGNITUDE = PEP_SMALLEST_MAGNITUDE
+ *     LARGEST_REAL       = PEP_LARGEST_REAL             # <<<<<<<<<<<<<<
+ *     SMALLEST_REAL      = PEP_SMALLEST_REAL
+ *     LARGEST_IMAGINARY  = PEP_LARGEST_IMAGINARY
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPWhich(PEP_LARGEST_REAL); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 50, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LARGEST_REAL, __pyx_t_5) < 0) __PYX_ERR(15, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":51
+ *     SMALLEST_MAGNITUDE = PEP_SMALLEST_MAGNITUDE
+ *     LARGEST_REAL       = PEP_LARGEST_REAL
+ *     SMALLEST_REAL      = PEP_SMALLEST_REAL             # <<<<<<<<<<<<<<
+ *     LARGEST_IMAGINARY  = PEP_LARGEST_IMAGINARY
+ *     SMALLEST_IMAGINARY = PEP_SMALLEST_IMAGINARY
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPWhich(PEP_SMALLEST_REAL); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SMALLEST_REAL, __pyx_t_5) < 0) __PYX_ERR(15, 51, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":52
+ *     LARGEST_REAL       = PEP_LARGEST_REAL
+ *     SMALLEST_REAL      = PEP_SMALLEST_REAL
+ *     LARGEST_IMAGINARY  = PEP_LARGEST_IMAGINARY             # <<<<<<<<<<<<<<
+ *     SMALLEST_IMAGINARY = PEP_SMALLEST_IMAGINARY
+ *     TARGET_MAGNITUDE   = PEP_TARGET_MAGNITUDE
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPWhich(PEP_LARGEST_IMAGINARY); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LARGEST_IMAGINARY, __pyx_t_5) < 0) __PYX_ERR(15, 52, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":53
+ *     SMALLEST_REAL      = PEP_SMALLEST_REAL
+ *     LARGEST_IMAGINARY  = PEP_LARGEST_IMAGINARY
+ *     SMALLEST_IMAGINARY = PEP_SMALLEST_IMAGINARY             # <<<<<<<<<<<<<<
+ *     TARGET_MAGNITUDE   = PEP_TARGET_MAGNITUDE
+ *     TARGET_REAL        = PEP_TARGET_REAL
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPWhich(PEP_SMALLEST_IMAGINARY); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 53, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SMALLEST_IMAGINARY, __pyx_t_5) < 0) __PYX_ERR(15, 53, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":54
+ *     LARGEST_IMAGINARY  = PEP_LARGEST_IMAGINARY
+ *     SMALLEST_IMAGINARY = PEP_SMALLEST_IMAGINARY
+ *     TARGET_MAGNITUDE   = PEP_TARGET_MAGNITUDE             # <<<<<<<<<<<<<<
+ *     TARGET_REAL        = PEP_TARGET_REAL
+ *     TARGET_IMAGINARY   = PEP_TARGET_IMAGINARY
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPWhich(PEP_TARGET_MAGNITUDE); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 54, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TARGET_MAGNITUDE, __pyx_t_5) < 0) __PYX_ERR(15, 54, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":55
+ *     SMALLEST_IMAGINARY = PEP_SMALLEST_IMAGINARY
+ *     TARGET_MAGNITUDE   = PEP_TARGET_MAGNITUDE
+ *     TARGET_REAL        = PEP_TARGET_REAL             # <<<<<<<<<<<<<<
+ *     TARGET_IMAGINARY   = PEP_TARGET_IMAGINARY
+ *     USER               = PEP_WHICH_USER
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPWhich(PEP_TARGET_REAL); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 55, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TARGET_REAL, __pyx_t_5) < 0) __PYX_ERR(15, 55, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":56
+ *     TARGET_MAGNITUDE   = PEP_TARGET_MAGNITUDE
+ *     TARGET_REAL        = PEP_TARGET_REAL
+ *     TARGET_IMAGINARY   = PEP_TARGET_IMAGINARY             # <<<<<<<<<<<<<<
+ *     USER               = PEP_WHICH_USER
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPWhich(PEP_TARGET_IMAGINARY); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 56, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TARGET_IMAGINARY, __pyx_t_5) < 0) __PYX_ERR(15, 56, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":57
+ *     TARGET_REAL        = PEP_TARGET_REAL
+ *     TARGET_IMAGINARY   = PEP_TARGET_IMAGINARY
+ *     USER               = PEP_WHICH_USER             # <<<<<<<<<<<<<<
+ * 
+ * class PEPBasis(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPWhich(PEP_WHICH_USER); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 57, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_USER, __pyx_t_5) < 0) __PYX_ERR(15, 57, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":33
+ *     GYROSCOPIC = PEP_GYROSCOPIC
+ * 
+ * class PEPWhich(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     PEP desired part of spectrum
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_PEPWhich, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 33, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PEPWhich, __pyx_t_5) < 0) __PYX_ERR(15, 33, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/PEP.pyx":59
+ *     USER               = PEP_WHICH_USER
+ * 
+ * class PEPBasis(object):             # <<<<<<<<<<<<<<
+ *     MONOMIAL   = PEP_BASIS_MONOMIAL
+ *     CHEBYSHEV1 = PEP_BASIS_CHEBYSHEV1
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 59, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(15, 59, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_PEPBasis, __pyx_n_s_PEPBasis, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(15, 59, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/PEP.pyx":60
+ * 
+ * class PEPBasis(object):
+ *     MONOMIAL   = PEP_BASIS_MONOMIAL             # <<<<<<<<<<<<<<
+ *     CHEBYSHEV1 = PEP_BASIS_CHEBYSHEV1
+ *     CHEBYSHEV2 = PEP_BASIS_CHEBYSHEV2
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPBasis(PEP_BASIS_MONOMIAL); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 60, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MONOMIAL, __pyx_t_5) < 0) __PYX_ERR(15, 60, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":61
+ * class PEPBasis(object):
+ *     MONOMIAL   = PEP_BASIS_MONOMIAL
+ *     CHEBYSHEV1 = PEP_BASIS_CHEBYSHEV1             # <<<<<<<<<<<<<<
+ *     CHEBYSHEV2 = PEP_BASIS_CHEBYSHEV2
+ *     LEGENDRE   = PEP_BASIS_LEGENDRE
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPBasis(PEP_BASIS_CHEBYSHEV1); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 61, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CHEBYSHEV1, __pyx_t_5) < 0) __PYX_ERR(15, 61, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":62
+ *     MONOMIAL   = PEP_BASIS_MONOMIAL
+ *     CHEBYSHEV1 = PEP_BASIS_CHEBYSHEV1
+ *     CHEBYSHEV2 = PEP_BASIS_CHEBYSHEV2             # <<<<<<<<<<<<<<
+ *     LEGENDRE   = PEP_BASIS_LEGENDRE
+ *     LAGUERRE   = PEP_BASIS_LAGUERRE
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPBasis(PEP_BASIS_CHEBYSHEV2); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 62, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CHEBYSHEV2, __pyx_t_5) < 0) __PYX_ERR(15, 62, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":63
+ *     CHEBYSHEV1 = PEP_BASIS_CHEBYSHEV1
+ *     CHEBYSHEV2 = PEP_BASIS_CHEBYSHEV2
+ *     LEGENDRE   = PEP_BASIS_LEGENDRE             # <<<<<<<<<<<<<<
+ *     LAGUERRE   = PEP_BASIS_LAGUERRE
+ *     HERMITE    = PEP_BASIS_HERMITE
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPBasis(PEP_BASIS_LEGENDRE); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 63, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LEGENDRE, __pyx_t_5) < 0) __PYX_ERR(15, 63, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":64
+ *     CHEBYSHEV2 = PEP_BASIS_CHEBYSHEV2
+ *     LEGENDRE   = PEP_BASIS_LEGENDRE
+ *     LAGUERRE   = PEP_BASIS_LAGUERRE             # <<<<<<<<<<<<<<
+ *     HERMITE    = PEP_BASIS_HERMITE
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPBasis(PEP_BASIS_LAGUERRE); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 64, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LAGUERRE, __pyx_t_5) < 0) __PYX_ERR(15, 64, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":65
+ *     LEGENDRE   = PEP_BASIS_LEGENDRE
+ *     LAGUERRE   = PEP_BASIS_LAGUERRE
+ *     HERMITE    = PEP_BASIS_HERMITE             # <<<<<<<<<<<<<<
+ * 
+ * class PEPScale(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPBasis(PEP_BASIS_HERMITE); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 65, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_HERMITE, __pyx_t_5) < 0) __PYX_ERR(15, 65, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":59
+ *     USER               = PEP_WHICH_USER
+ * 
+ * class PEPBasis(object):             # <<<<<<<<<<<<<<
+ *     MONOMIAL   = PEP_BASIS_MONOMIAL
+ *     CHEBYSHEV1 = PEP_BASIS_CHEBYSHEV1
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_PEPBasis, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 59, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PEPBasis, __pyx_t_5) < 0) __PYX_ERR(15, 59, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/PEP.pyx":67
+ *     HERMITE    = PEP_BASIS_HERMITE
+ * 
+ * class PEPScale(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     PEP scaling strategy
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 67, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(15, 67, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_PEPScale, __pyx_n_s_PEPScale, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_PEP_scaling_strategy_NONE_No_sc); if (unlikely(!__pyx_t_4)) __PYX_ERR(15, 67, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/PEP.pyx":76
+ *     - `BOTH`:     Both parameter and diagonal scaling.
+ *     """
+ *     NONE     = PEP_SCALE_NONE             # <<<<<<<<<<<<<<
+ *     SCALAR   = PEP_SCALE_SCALAR
+ *     DIAGONAL = PEP_SCALE_DIAGONAL
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPScale(PEP_SCALE_NONE); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 76, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONE, __pyx_t_5) < 0) __PYX_ERR(15, 76, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":77
+ *     """
+ *     NONE     = PEP_SCALE_NONE
+ *     SCALAR   = PEP_SCALE_SCALAR             # <<<<<<<<<<<<<<
+ *     DIAGONAL = PEP_SCALE_DIAGONAL
+ *     BOTH     = PEP_SCALE_BOTH
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPScale(PEP_SCALE_SCALAR); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 77, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SCALAR, __pyx_t_5) < 0) __PYX_ERR(15, 77, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":78
+ *     NONE     = PEP_SCALE_NONE
+ *     SCALAR   = PEP_SCALE_SCALAR
+ *     DIAGONAL = PEP_SCALE_DIAGONAL             # <<<<<<<<<<<<<<
+ *     BOTH     = PEP_SCALE_BOTH
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPScale(PEP_SCALE_DIAGONAL); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 78, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIAGONAL, __pyx_t_5) < 0) __PYX_ERR(15, 78, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":79
+ *     SCALAR   = PEP_SCALE_SCALAR
+ *     DIAGONAL = PEP_SCALE_DIAGONAL
+ *     BOTH     = PEP_SCALE_BOTH             # <<<<<<<<<<<<<<
+ * 
+ * class PEPRefine(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPScale(PEP_SCALE_BOTH); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 79, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BOTH, __pyx_t_5) < 0) __PYX_ERR(15, 79, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":67
+ *     HERMITE    = PEP_BASIS_HERMITE
+ * 
+ * class PEPScale(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     PEP scaling strategy
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_PEPScale, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 67, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PEPScale, __pyx_t_5) < 0) __PYX_ERR(15, 67, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/PEP.pyx":81
+ *     BOTH     = PEP_SCALE_BOTH
+ * 
+ * class PEPRefine(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     PEP refinement strategy
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 81, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(15, 81, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_PEPRefine, __pyx_n_s_PEPRefine, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_PEP_refinement_strategy_NONE_No); if (unlikely(!__pyx_t_4)) __PYX_ERR(15, 81, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/PEP.pyx":89
+ *     - `MULTIPLE`: Refine all eigenpairs simultaneously (invariant pair).
+ *     """
+ *     NONE     = PEP_REFINE_NONE             # <<<<<<<<<<<<<<
+ *     SIMPLE   = PEP_REFINE_SIMPLE
+ *     MULTIPLE = PEP_REFINE_MULTIPLE
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPRefine(PEP_REFINE_NONE); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 89, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONE, __pyx_t_5) < 0) __PYX_ERR(15, 89, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":90
+ *     """
+ *     NONE     = PEP_REFINE_NONE
+ *     SIMPLE   = PEP_REFINE_SIMPLE             # <<<<<<<<<<<<<<
+ *     MULTIPLE = PEP_REFINE_MULTIPLE
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPRefine(PEP_REFINE_SIMPLE); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 90, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SIMPLE, __pyx_t_5) < 0) __PYX_ERR(15, 90, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":91
+ *     NONE     = PEP_REFINE_NONE
+ *     SIMPLE   = PEP_REFINE_SIMPLE
+ *     MULTIPLE = PEP_REFINE_MULTIPLE             # <<<<<<<<<<<<<<
+ * 
+ * class PEPRefineScheme(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPRefine(PEP_REFINE_MULTIPLE); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 91, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MULTIPLE, __pyx_t_5) < 0) __PYX_ERR(15, 91, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":81
+ *     BOTH     = PEP_SCALE_BOTH
+ * 
+ * class PEPRefine(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     PEP refinement strategy
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_PEPRefine, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 81, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PEPRefine, __pyx_t_5) < 0) __PYX_ERR(15, 81, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/PEP.pyx":93
+ *     MULTIPLE = PEP_REFINE_MULTIPLE
+ * 
+ * class PEPRefineScheme(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     Scheme for solving linear systems during iterative refinement
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 93, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(15, 93, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_PEPRefineScheme, __pyx_n_s_PEPRefineScheme, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_Scheme_for_solving_linear_syste); if (unlikely(!__pyx_t_4)) __PYX_ERR(15, 93, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/PEP.pyx":101
+ *     - `EXPLICIT`: Build the explicit matrix.
+ *     """
+ *     SCHUR    = PEP_REFINE_SCHEME_SCHUR             # <<<<<<<<<<<<<<
+ *     MBE      = PEP_REFINE_SCHEME_MBE
+ *     EXPLICIT = PEP_REFINE_SCHEME_EXPLICIT
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPRefineScheme(PEP_REFINE_SCHEME_SCHUR); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 101, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SCHUR, __pyx_t_5) < 0) __PYX_ERR(15, 101, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":102
+ *     """
+ *     SCHUR    = PEP_REFINE_SCHEME_SCHUR
+ *     MBE      = PEP_REFINE_SCHEME_MBE             # <<<<<<<<<<<<<<
+ *     EXPLICIT = PEP_REFINE_SCHEME_EXPLICIT
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPRefineScheme(PEP_REFINE_SCHEME_MBE); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 102, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MBE, __pyx_t_5) < 0) __PYX_ERR(15, 102, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":103
+ *     SCHUR    = PEP_REFINE_SCHEME_SCHUR
+ *     MBE      = PEP_REFINE_SCHEME_MBE
+ *     EXPLICIT = PEP_REFINE_SCHEME_EXPLICIT             # <<<<<<<<<<<<<<
+ * 
+ * class PEPExtract(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPRefineScheme(PEP_REFINE_SCHEME_EXPLICIT); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 103, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_EXPLICIT, __pyx_t_5) < 0) __PYX_ERR(15, 103, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":93
+ *     MULTIPLE = PEP_REFINE_MULTIPLE
+ * 
+ * class PEPRefineScheme(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     Scheme for solving linear systems during iterative refinement
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_PEPRefineScheme, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 93, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PEPRefineScheme, __pyx_t_5) < 0) __PYX_ERR(15, 93, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/PEP.pyx":105
+ *     EXPLICIT = PEP_REFINE_SCHEME_EXPLICIT
+ * 
+ * class PEPExtract(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     Extraction strategy used to obtain eigenvectors of the PEP from the
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 105, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(15, 105, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_PEPExtract, __pyx_n_s_PEPExtract, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_Extraction_strategy_used_to_obt); if (unlikely(!__pyx_t_4)) __PYX_ERR(15, 105, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/PEP.pyx":115
+ *     - `STRUCTURED`: Combine all blocks in a certain way.
+ *     """
+ *     NONE       = PEP_EXTRACT_NONE             # <<<<<<<<<<<<<<
+ *     NORM       = PEP_EXTRACT_NORM
+ *     RESIDUAL   = PEP_EXTRACT_RESIDUAL
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPExtract(PEP_EXTRACT_NONE); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 115, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONE, __pyx_t_5) < 0) __PYX_ERR(15, 115, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":116
+ *     """
+ *     NONE       = PEP_EXTRACT_NONE
+ *     NORM       = PEP_EXTRACT_NORM             # <<<<<<<<<<<<<<
+ *     RESIDUAL   = PEP_EXTRACT_RESIDUAL
+ *     STRUCTURED = PEP_EXTRACT_STRUCTURED
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPExtract(PEP_EXTRACT_NORM); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 116, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM, __pyx_t_5) < 0) __PYX_ERR(15, 116, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":117
+ *     NONE       = PEP_EXTRACT_NONE
+ *     NORM       = PEP_EXTRACT_NORM
+ *     RESIDUAL   = PEP_EXTRACT_RESIDUAL             # <<<<<<<<<<<<<<
+ *     STRUCTURED = PEP_EXTRACT_STRUCTURED
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPExtract(PEP_EXTRACT_RESIDUAL); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 117, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RESIDUAL, __pyx_t_5) < 0) __PYX_ERR(15, 117, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":118
+ *     NORM       = PEP_EXTRACT_NORM
+ *     RESIDUAL   = PEP_EXTRACT_RESIDUAL
+ *     STRUCTURED = PEP_EXTRACT_STRUCTURED             # <<<<<<<<<<<<<<
+ * 
+ * class PEPErrorType(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPExtract(PEP_EXTRACT_STRUCTURED); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 118, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_STRUCTURED, __pyx_t_5) < 0) __PYX_ERR(15, 118, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":105
+ *     EXPLICIT = PEP_REFINE_SCHEME_EXPLICIT
+ * 
+ * class PEPExtract(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     Extraction strategy used to obtain eigenvectors of the PEP from the
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_PEPExtract, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 105, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PEPExtract, __pyx_t_5) < 0) __PYX_ERR(15, 105, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/PEP.pyx":120
+ *     STRUCTURED = PEP_EXTRACT_STRUCTURED
+ * 
+ * class PEPErrorType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     PEP error type to assess accuracy of computed solutions
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 120, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(15, 120, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_PEPErrorType, __pyx_n_s_PEPErrorType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_PEP_error_type_to_assess_accura); if (unlikely(!__pyx_t_4)) __PYX_ERR(15, 120, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/PEP.pyx":128
+ *     - `BACKWARD`:  Backward error.
+ *     """
+ *     ABSOLUTE = PEP_ERROR_ABSOLUTE             # <<<<<<<<<<<<<<
+ *     RELATIVE = PEP_ERROR_RELATIVE
+ *     BACKWARD = PEP_ERROR_BACKWARD
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPErrorType(PEP_ERROR_ABSOLUTE); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 128, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ABSOLUTE, __pyx_t_5) < 0) __PYX_ERR(15, 128, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":129
+ *     """
+ *     ABSOLUTE = PEP_ERROR_ABSOLUTE
+ *     RELATIVE = PEP_ERROR_RELATIVE             # <<<<<<<<<<<<<<
+ *     BACKWARD = PEP_ERROR_BACKWARD
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPErrorType(PEP_ERROR_RELATIVE); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 129, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RELATIVE, __pyx_t_5) < 0) __PYX_ERR(15, 129, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":130
+ *     ABSOLUTE = PEP_ERROR_ABSOLUTE
+ *     RELATIVE = PEP_ERROR_RELATIVE
+ *     BACKWARD = PEP_ERROR_BACKWARD             # <<<<<<<<<<<<<<
+ * 
+ * class PEPConv(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPErrorType(PEP_ERROR_BACKWARD); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 130, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BACKWARD, __pyx_t_5) < 0) __PYX_ERR(15, 130, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":120
+ *     STRUCTURED = PEP_EXTRACT_STRUCTURED
+ * 
+ * class PEPErrorType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     PEP error type to assess accuracy of computed solutions
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_PEPErrorType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 120, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PEPErrorType, __pyx_t_5) < 0) __PYX_ERR(15, 120, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/PEP.pyx":132
+ *     BACKWARD = PEP_ERROR_BACKWARD
+ * 
+ * class PEPConv(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     PEP convergence test
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 132, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(15, 132, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_PEPConv, __pyx_n_s_PEPConv, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_PEP_convergence_test_ABS_REL_NO); if (unlikely(!__pyx_t_4)) __PYX_ERR(15, 132, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/PEP.pyx":141
+ *     - `USER`:
+ *     """
+ *     ABS  = PEP_CONV_ABS             # <<<<<<<<<<<<<<
+ *     REL  = PEP_CONV_REL
+ *     NORM = PEP_CONV_NORM
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPConv(PEP_CONV_ABS); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 141, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ABS, __pyx_t_5) < 0) __PYX_ERR(15, 141, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":142
+ *     """
+ *     ABS  = PEP_CONV_ABS
+ *     REL  = PEP_CONV_REL             # <<<<<<<<<<<<<<
+ *     NORM = PEP_CONV_NORM
+ *     USER = PEP_CONV_USER
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPConv(PEP_CONV_REL); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 142, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_REL, __pyx_t_5) < 0) __PYX_ERR(15, 142, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":143
+ *     ABS  = PEP_CONV_ABS
+ *     REL  = PEP_CONV_REL
+ *     NORM = PEP_CONV_NORM             # <<<<<<<<<<<<<<
+ *     USER = PEP_CONV_USER
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPConv(PEP_CONV_NORM); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 143, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NORM, __pyx_t_5) < 0) __PYX_ERR(15, 143, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":144
+ *     REL  = PEP_CONV_REL
+ *     NORM = PEP_CONV_NORM
+ *     USER = PEP_CONV_USER             # <<<<<<<<<<<<<<
+ * 
+ * class PEPConvergedReason(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPConv(PEP_CONV_USER); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 144, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_USER, __pyx_t_5) < 0) __PYX_ERR(15, 144, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":132
+ *     BACKWARD = PEP_ERROR_BACKWARD
+ * 
+ * class PEPConv(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     PEP convergence test
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_PEPConv, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 132, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PEPConv, __pyx_t_5) < 0) __PYX_ERR(15, 132, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/PEP.pyx":146
+ *     USER = PEP_CONV_USER
+ * 
+ * class PEPConvergedReason(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     PEP convergence reasons
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 146, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(15, 146, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_PEPConvergedReason, __pyx_n_s_PEPConvergedReason, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_PEP_convergence_reasons_CONVERG); if (unlikely(!__pyx_t_4)) __PYX_ERR(15, 146, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/PEP.pyx":157
+ *     - `CONVERGED_ITERATING`:
+ *     """
+ *     CONVERGED_TOL          = PEP_CONVERGED_TOL             # <<<<<<<<<<<<<<
+ *     CONVERGED_USER         = PEP_CONVERGED_USER
+ *     DIVERGED_ITS           = PEP_DIVERGED_ITS
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPConvergedReason(PEP_CONVERGED_TOL); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 157, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_TOL, __pyx_t_5) < 0) __PYX_ERR(15, 157, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":158
+ *     """
+ *     CONVERGED_TOL          = PEP_CONVERGED_TOL
+ *     CONVERGED_USER         = PEP_CONVERGED_USER             # <<<<<<<<<<<<<<
+ *     DIVERGED_ITS           = PEP_DIVERGED_ITS
+ *     DIVERGED_BREAKDOWN     = PEP_DIVERGED_BREAKDOWN
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPConvergedReason(PEP_CONVERGED_USER); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 158, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_USER, __pyx_t_5) < 0) __PYX_ERR(15, 158, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":159
+ *     CONVERGED_TOL          = PEP_CONVERGED_TOL
+ *     CONVERGED_USER         = PEP_CONVERGED_USER
+ *     DIVERGED_ITS           = PEP_DIVERGED_ITS             # <<<<<<<<<<<<<<
+ *     DIVERGED_BREAKDOWN     = PEP_DIVERGED_BREAKDOWN
+ *     DIVERGED_SYMMETRY_LOST = PEP_DIVERGED_SYMMETRY_LOST
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPConvergedReason(PEP_DIVERGED_ITS); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 159, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_ITS, __pyx_t_5) < 0) __PYX_ERR(15, 159, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":160
+ *     CONVERGED_USER         = PEP_CONVERGED_USER
+ *     DIVERGED_ITS           = PEP_DIVERGED_ITS
+ *     DIVERGED_BREAKDOWN     = PEP_DIVERGED_BREAKDOWN             # <<<<<<<<<<<<<<
+ *     DIVERGED_SYMMETRY_LOST = PEP_DIVERGED_SYMMETRY_LOST
+ *     CONVERGED_ITERATING    = PEP_CONVERGED_ITERATING
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPConvergedReason(PEP_DIVERGED_BREAKDOWN); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 160, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_BREAKDOWN, __pyx_t_5) < 0) __PYX_ERR(15, 160, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":161
+ *     DIVERGED_ITS           = PEP_DIVERGED_ITS
+ *     DIVERGED_BREAKDOWN     = PEP_DIVERGED_BREAKDOWN
+ *     DIVERGED_SYMMETRY_LOST = PEP_DIVERGED_SYMMETRY_LOST             # <<<<<<<<<<<<<<
+ *     CONVERGED_ITERATING    = PEP_CONVERGED_ITERATING
+ *     ITERATING              = PEP_CONVERGED_ITERATING
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPConvergedReason(PEP_DIVERGED_SYMMETRY_LOST); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 161, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_SYMMETRY_LOST, __pyx_t_5) < 0) __PYX_ERR(15, 161, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":162
+ *     DIVERGED_BREAKDOWN     = PEP_DIVERGED_BREAKDOWN
+ *     DIVERGED_SYMMETRY_LOST = PEP_DIVERGED_SYMMETRY_LOST
+ *     CONVERGED_ITERATING    = PEP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
+ *     ITERATING              = PEP_CONVERGED_ITERATING
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPConvergedReason(PEP_CONVERGED_ITERATING); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 162, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ITERATING, __pyx_t_5) < 0) __PYX_ERR(15, 162, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":163
+ *     DIVERGED_SYMMETRY_LOST = PEP_DIVERGED_SYMMETRY_LOST
+ *     CONVERGED_ITERATING    = PEP_CONVERGED_ITERATING
+ *     ITERATING              = PEP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_PEPConvergedReason(PEP_CONVERGED_ITERATING); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 163, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ITERATING, __pyx_t_5) < 0) __PYX_ERR(15, 163, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/PEP.pyx":146
+ *     USER = PEP_CONV_USER
+ * 
+ * class PEPConvergedReason(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     PEP convergence reasons
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_PEPConvergedReason, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(15, 146, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PEPConvergedReason, __pyx_t_5) < 0) __PYX_ERR(15, 146, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/PEP.pyx":173
+ *     """
+ * 
+ *     Type            = PEPType             # <<<<<<<<<<<<<<
+ *     ProblemType     = PEPProblemType
+ *     Which           = PEPWhich
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_PEPType); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 173, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_PEP->tp_dict, __pyx_n_s_Type, __pyx_t_2) < 0) __PYX_ERR(15, 173, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_PEP);
+
+  /* "SLEPc/PEP.pyx":174
+ * 
+ *     Type            = PEPType
+ *     ProblemType     = PEPProblemType             # <<<<<<<<<<<<<<
+ *     Which           = PEPWhich
+ *     Basis           = PEPBasis
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_PEPProblemType); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 174, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_PEP->tp_dict, __pyx_n_s_ProblemType, __pyx_t_2) < 0) __PYX_ERR(15, 174, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_PEP);
+
+  /* "SLEPc/PEP.pyx":175
+ *     Type            = PEPType
+ *     ProblemType     = PEPProblemType
+ *     Which           = PEPWhich             # <<<<<<<<<<<<<<
+ *     Basis           = PEPBasis
+ *     Scale           = PEPScale
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_PEPWhich); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 175, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_PEP->tp_dict, __pyx_n_s_Which, __pyx_t_2) < 0) __PYX_ERR(15, 175, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_PEP);
+
+  /* "SLEPc/PEP.pyx":176
+ *     ProblemType     = PEPProblemType
+ *     Which           = PEPWhich
+ *     Basis           = PEPBasis             # <<<<<<<<<<<<<<
+ *     Scale           = PEPScale
+ *     Refine          = PEPRefine
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_PEPBasis); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 176, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_PEP->tp_dict, __pyx_n_s_Basis, __pyx_t_2) < 0) __PYX_ERR(15, 176, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_PEP);
+
+  /* "SLEPc/PEP.pyx":177
+ *     Which           = PEPWhich
+ *     Basis           = PEPBasis
+ *     Scale           = PEPScale             # <<<<<<<<<<<<<<
+ *     Refine          = PEPRefine
+ *     RefineScheme    = PEPRefineScheme
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_PEPScale); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 177, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_PEP->tp_dict, __pyx_n_s_Scale, __pyx_t_2) < 0) __PYX_ERR(15, 177, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_PEP);
+
+  /* "SLEPc/PEP.pyx":178
+ *     Basis           = PEPBasis
+ *     Scale           = PEPScale
+ *     Refine          = PEPRefine             # <<<<<<<<<<<<<<
+ *     RefineScheme    = PEPRefineScheme
+ *     Extract         = PEPExtract
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_PEPRefine); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 178, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_PEP->tp_dict, __pyx_n_s_Refine, __pyx_t_2) < 0) __PYX_ERR(15, 178, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_PEP);
+
+  /* "SLEPc/PEP.pyx":179
+ *     Scale           = PEPScale
+ *     Refine          = PEPRefine
+ *     RefineScheme    = PEPRefineScheme             # <<<<<<<<<<<<<<
+ *     Extract         = PEPExtract
+ *     ErrorType       = PEPErrorType
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_PEPRefineScheme); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 179, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_PEP->tp_dict, __pyx_n_s_RefineScheme, __pyx_t_2) < 0) __PYX_ERR(15, 179, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_PEP);
+
+  /* "SLEPc/PEP.pyx":180
+ *     Refine          = PEPRefine
+ *     RefineScheme    = PEPRefineScheme
+ *     Extract         = PEPExtract             # <<<<<<<<<<<<<<
+ *     ErrorType       = PEPErrorType
+ *     Conv            = PEPConv
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_PEPExtract); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 180, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_PEP->tp_dict, __pyx_n_s_Extract, __pyx_t_2) < 0) __PYX_ERR(15, 180, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_PEP);
+
+  /* "SLEPc/PEP.pyx":181
+ *     RefineScheme    = PEPRefineScheme
+ *     Extract         = PEPExtract
+ *     ErrorType       = PEPErrorType             # <<<<<<<<<<<<<<
+ *     Conv            = PEPConv
+ *     ConvergedReason = PEPConvergedReason
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_PEPErrorType); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 181, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_PEP->tp_dict, __pyx_n_s_ErrorType, __pyx_t_2) < 0) __PYX_ERR(15, 181, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_PEP);
+
+  /* "SLEPc/PEP.pyx":182
+ *     Extract         = PEPExtract
+ *     ErrorType       = PEPErrorType
+ *     Conv            = PEPConv             # <<<<<<<<<<<<<<
+ *     ConvergedReason = PEPConvergedReason
+ * 
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_PEPConv); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 182, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_PEP->tp_dict, __pyx_n_s_Conv, __pyx_t_2) < 0) __PYX_ERR(15, 182, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_PEP);
+
+  /* "SLEPc/PEP.pyx":183
+ *     ErrorType       = PEPErrorType
+ *     Conv            = PEPConv
+ *     ConvergedReason = PEPConvergedReason             # <<<<<<<<<<<<<<
+ * 
+ *     def __cinit__(self):
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_PEPConvergedReason); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 183, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_PEP->tp_dict, __pyx_n_s_ConvergedReason, __pyx_t_2) < 0) __PYX_ERR(15, 183, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_PEP);
+
+  /* "SLEPc/PEP.pyx":1036
+ * # -----------------------------------------------------------------------------
+ * 
+ * del PEPType             # <<<<<<<<<<<<<<
+ * del PEPProblemType
+ * del PEPWhich
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PEPType) < 0) __PYX_ERR(15, 1036, __pyx_L1_error)
+
+  /* "SLEPc/PEP.pyx":1037
+ * 
+ * del PEPType
+ * del PEPProblemType             # <<<<<<<<<<<<<<
+ * del PEPWhich
+ * del PEPBasis
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PEPProblemType) < 0) __PYX_ERR(15, 1037, __pyx_L1_error)
+
+  /* "SLEPc/PEP.pyx":1038
+ * del PEPType
+ * del PEPProblemType
+ * del PEPWhich             # <<<<<<<<<<<<<<
+ * del PEPBasis
+ * del PEPScale
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PEPWhich) < 0) __PYX_ERR(15, 1038, __pyx_L1_error)
+
+  /* "SLEPc/PEP.pyx":1039
+ * del PEPProblemType
+ * del PEPWhich
+ * del PEPBasis             # <<<<<<<<<<<<<<
+ * del PEPScale
+ * del PEPRefine
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PEPBasis) < 0) __PYX_ERR(15, 1039, __pyx_L1_error)
+
+  /* "SLEPc/PEP.pyx":1040
+ * del PEPWhich
+ * del PEPBasis
+ * del PEPScale             # <<<<<<<<<<<<<<
+ * del PEPRefine
+ * del PEPRefineScheme
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PEPScale) < 0) __PYX_ERR(15, 1040, __pyx_L1_error)
+
+  /* "SLEPc/PEP.pyx":1041
+ * del PEPBasis
+ * del PEPScale
+ * del PEPRefine             # <<<<<<<<<<<<<<
+ * del PEPRefineScheme
+ * del PEPExtract
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PEPRefine) < 0) __PYX_ERR(15, 1041, __pyx_L1_error)
+
+  /* "SLEPc/PEP.pyx":1042
+ * del PEPScale
+ * del PEPRefine
+ * del PEPRefineScheme             # <<<<<<<<<<<<<<
+ * del PEPExtract
+ * del PEPErrorType
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PEPRefineScheme) < 0) __PYX_ERR(15, 1042, __pyx_L1_error)
+
+  /* "SLEPc/PEP.pyx":1043
+ * del PEPRefine
+ * del PEPRefineScheme
+ * del PEPExtract             # <<<<<<<<<<<<<<
+ * del PEPErrorType
+ * del PEPConv
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PEPExtract) < 0) __PYX_ERR(15, 1043, __pyx_L1_error)
+
+  /* "SLEPc/PEP.pyx":1044
+ * del PEPRefineScheme
+ * del PEPExtract
+ * del PEPErrorType             # <<<<<<<<<<<<<<
+ * del PEPConv
+ * del PEPConvergedReason
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PEPErrorType) < 0) __PYX_ERR(15, 1044, __pyx_L1_error)
+
+  /* "SLEPc/PEP.pyx":1045
+ * del PEPExtract
+ * del PEPErrorType
+ * del PEPConv             # <<<<<<<<<<<<<<
+ * del PEPConvergedReason
+ * 
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PEPConv) < 0) __PYX_ERR(15, 1045, __pyx_L1_error)
+
+  /* "SLEPc/PEP.pyx":1046
+ * del PEPErrorType
+ * del PEPConv
+ * del PEPConvergedReason             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PEPConvergedReason) < 0) __PYX_ERR(15, 1046, __pyx_L1_error)
+
+  /* "SLEPc/NEP.pyx":3
+ * # -----------------------------------------------------------------------------
+ * 
+ * class NEPType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     NEP type
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_NEPType, __pyx_n_s_NEPType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_NEP_type_Nonlinear_eigensolvers); if (unlikely(!__pyx_t_4)) __PYX_ERR(16, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/NEP.pyx":16
+ *     - `NLEIGS`:   Fully rational Krylov method for nonlinear eigenproblems.
+ *     """
+ *     RII      = S_(NEPRII)             # <<<<<<<<<<<<<<
+ *     SLP      = S_(NEPSLP)
+ *     NARNOLDI = S_(NEPNARNOLDI)
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(NEPRII); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 16, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RII, __pyx_t_5) < 0) __PYX_ERR(16, 16, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":17
+ *     """
+ *     RII      = S_(NEPRII)
+ *     SLP      = S_(NEPSLP)             # <<<<<<<<<<<<<<
+ *     NARNOLDI = S_(NEPNARNOLDI)
+ *     CISS     = S_(NEPCISS)
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(NEPSLP); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 17, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SLP, __pyx_t_5) < 0) __PYX_ERR(16, 17, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":18
+ *     RII      = S_(NEPRII)
+ *     SLP      = S_(NEPSLP)
+ *     NARNOLDI = S_(NEPNARNOLDI)             # <<<<<<<<<<<<<<
+ *     CISS     = S_(NEPCISS)
+ *     INTERPOL = S_(NEPINTERPOL)
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(NEPNARNOLDI); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 18, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NARNOLDI, __pyx_t_5) < 0) __PYX_ERR(16, 18, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":19
+ *     SLP      = S_(NEPSLP)
+ *     NARNOLDI = S_(NEPNARNOLDI)
+ *     CISS     = S_(NEPCISS)             # <<<<<<<<<<<<<<
+ *     INTERPOL = S_(NEPINTERPOL)
+ *     NLEIGS   = S_(NEPNLEIGS)
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(NEPCISS); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CISS, __pyx_t_5) < 0) __PYX_ERR(16, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":20
+ *     NARNOLDI = S_(NEPNARNOLDI)
+ *     CISS     = S_(NEPCISS)
+ *     INTERPOL = S_(NEPINTERPOL)             # <<<<<<<<<<<<<<
+ *     NLEIGS   = S_(NEPNLEIGS)
+ * 
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(NEPINTERPOL); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 20, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_INTERPOL, __pyx_t_5) < 0) __PYX_ERR(16, 20, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":21
+ *     CISS     = S_(NEPCISS)
+ *     INTERPOL = S_(NEPINTERPOL)
+ *     NLEIGS   = S_(NEPNLEIGS)             # <<<<<<<<<<<<<<
+ * 
+ * class NEPErrorType(object):
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(NEPNLEIGS); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 21, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NLEIGS, __pyx_t_5) < 0) __PYX_ERR(16, 21, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":3
+ * # -----------------------------------------------------------------------------
+ * 
+ * class NEPType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     NEP type
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_NEPType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_NEPType, __pyx_t_5) < 0) __PYX_ERR(16, 3, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/NEP.pyx":23
+ *     NLEIGS   = S_(NEPNLEIGS)
+ * 
+ * class NEPErrorType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     NEP error type to assess accuracy of computed solutions
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 23, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 23, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_NEPErrorType, __pyx_n_s_NEPErrorType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_NEP_error_type_to_assess_accura); if (unlikely(!__pyx_t_4)) __PYX_ERR(16, 23, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/NEP.pyx":31
+ *     - `BACKWARD`:  Backward error.
+ *     """
+ *     ABSOLUTE = NEP_ERROR_ABSOLUTE             # <<<<<<<<<<<<<<
+ *     RELATIVE = NEP_ERROR_RELATIVE
+ *     BACKWARD = NEP_ERROR_BACKWARD
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPErrorType(NEP_ERROR_ABSOLUTE); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 31, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ABSOLUTE, __pyx_t_5) < 0) __PYX_ERR(16, 31, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":32
+ *     """
+ *     ABSOLUTE = NEP_ERROR_ABSOLUTE
+ *     RELATIVE = NEP_ERROR_RELATIVE             # <<<<<<<<<<<<<<
+ *     BACKWARD = NEP_ERROR_BACKWARD
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPErrorType(NEP_ERROR_RELATIVE); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 32, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_RELATIVE, __pyx_t_5) < 0) __PYX_ERR(16, 32, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":33
+ *     ABSOLUTE = NEP_ERROR_ABSOLUTE
+ *     RELATIVE = NEP_ERROR_RELATIVE
+ *     BACKWARD = NEP_ERROR_BACKWARD             # <<<<<<<<<<<<<<
+ * 
+ * class NEPWhich(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPErrorType(NEP_ERROR_BACKWARD); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 33, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_BACKWARD, __pyx_t_5) < 0) __PYX_ERR(16, 33, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":23
+ *     NLEIGS   = S_(NEPNLEIGS)
+ * 
+ * class NEPErrorType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     NEP error type to assess accuracy of computed solutions
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_NEPErrorType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 23, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_NEPErrorType, __pyx_t_5) < 0) __PYX_ERR(16, 23, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/NEP.pyx":35
+ *     BACKWARD = NEP_ERROR_BACKWARD
+ * 
+ * class NEPWhich(object):             # <<<<<<<<<<<<<<
+ *     LARGEST_MAGNITUDE  = NEP_LARGEST_MAGNITUDE
+ *     SMALLEST_MAGNITUDE = NEP_SMALLEST_MAGNITUDE
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 35, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 35, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_NEPWhich, __pyx_n_s_NEPWhich, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(16, 35, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/NEP.pyx":36
+ * 
+ * class NEPWhich(object):
+ *     LARGEST_MAGNITUDE  = NEP_LARGEST_MAGNITUDE             # <<<<<<<<<<<<<<
+ *     SMALLEST_MAGNITUDE = NEP_SMALLEST_MAGNITUDE
+ *     LARGEST_REAL       = NEP_LARGEST_REAL
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPWhich(NEP_LARGEST_MAGNITUDE); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 36, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LARGEST_MAGNITUDE, __pyx_t_5) < 0) __PYX_ERR(16, 36, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":37
+ * class NEPWhich(object):
+ *     LARGEST_MAGNITUDE  = NEP_LARGEST_MAGNITUDE
+ *     SMALLEST_MAGNITUDE = NEP_SMALLEST_MAGNITUDE             # <<<<<<<<<<<<<<
+ *     LARGEST_REAL       = NEP_LARGEST_REAL
+ *     SMALLEST_REAL      = NEP_SMALLEST_REAL
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPWhich(NEP_SMALLEST_MAGNITUDE); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 37, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SMALLEST_MAGNITUDE, __pyx_t_5) < 0) __PYX_ERR(16, 37, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":38
+ *     LARGEST_MAGNITUDE  = NEP_LARGEST_MAGNITUDE
+ *     SMALLEST_MAGNITUDE = NEP_SMALLEST_MAGNITUDE
+ *     LARGEST_REAL       = NEP_LARGEST_REAL             # <<<<<<<<<<<<<<
+ *     SMALLEST_REAL      = NEP_SMALLEST_REAL
+ *     LARGEST_IMAGINARY  = NEP_LARGEST_IMAGINARY
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPWhich(NEP_LARGEST_REAL); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 38, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LARGEST_REAL, __pyx_t_5) < 0) __PYX_ERR(16, 38, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":39
+ *     SMALLEST_MAGNITUDE = NEP_SMALLEST_MAGNITUDE
+ *     LARGEST_REAL       = NEP_LARGEST_REAL
+ *     SMALLEST_REAL      = NEP_SMALLEST_REAL             # <<<<<<<<<<<<<<
+ *     LARGEST_IMAGINARY  = NEP_LARGEST_IMAGINARY
+ *     SMALLEST_IMAGINARY = NEP_SMALLEST_IMAGINARY
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPWhich(NEP_SMALLEST_REAL); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 39, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SMALLEST_REAL, __pyx_t_5) < 0) __PYX_ERR(16, 39, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":40
+ *     LARGEST_REAL       = NEP_LARGEST_REAL
+ *     SMALLEST_REAL      = NEP_SMALLEST_REAL
+ *     LARGEST_IMAGINARY  = NEP_LARGEST_IMAGINARY             # <<<<<<<<<<<<<<
+ *     SMALLEST_IMAGINARY = NEP_SMALLEST_IMAGINARY
+ *     TARGET_MAGNITUDE   = NEP_TARGET_MAGNITUDE
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPWhich(NEP_LARGEST_IMAGINARY); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 40, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_LARGEST_IMAGINARY, __pyx_t_5) < 0) __PYX_ERR(16, 40, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":41
+ *     SMALLEST_REAL      = NEP_SMALLEST_REAL
+ *     LARGEST_IMAGINARY  = NEP_LARGEST_IMAGINARY
+ *     SMALLEST_IMAGINARY = NEP_SMALLEST_IMAGINARY             # <<<<<<<<<<<<<<
+ *     TARGET_MAGNITUDE   = NEP_TARGET_MAGNITUDE
+ *     TARGET_REAL        = NEP_TARGET_REAL
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPWhich(NEP_SMALLEST_IMAGINARY); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 41, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SMALLEST_IMAGINARY, __pyx_t_5) < 0) __PYX_ERR(16, 41, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":42
+ *     LARGEST_IMAGINARY  = NEP_LARGEST_IMAGINARY
+ *     SMALLEST_IMAGINARY = NEP_SMALLEST_IMAGINARY
+ *     TARGET_MAGNITUDE   = NEP_TARGET_MAGNITUDE             # <<<<<<<<<<<<<<
+ *     TARGET_REAL        = NEP_TARGET_REAL
+ *     TARGET_IMAGINARY   = NEP_TARGET_IMAGINARY
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPWhich(NEP_TARGET_MAGNITUDE); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 42, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TARGET_MAGNITUDE, __pyx_t_5) < 0) __PYX_ERR(16, 42, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":43
+ *     SMALLEST_IMAGINARY = NEP_SMALLEST_IMAGINARY
+ *     TARGET_MAGNITUDE   = NEP_TARGET_MAGNITUDE
+ *     TARGET_REAL        = NEP_TARGET_REAL             # <<<<<<<<<<<<<<
+ *     TARGET_IMAGINARY   = NEP_TARGET_IMAGINARY
+ *     ALL                = NEP_ALL
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPWhich(NEP_TARGET_REAL); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 43, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TARGET_REAL, __pyx_t_5) < 0) __PYX_ERR(16, 43, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":44
+ *     TARGET_MAGNITUDE   = NEP_TARGET_MAGNITUDE
+ *     TARGET_REAL        = NEP_TARGET_REAL
+ *     TARGET_IMAGINARY   = NEP_TARGET_IMAGINARY             # <<<<<<<<<<<<<<
+ *     ALL                = NEP_ALL
+ *     USER               = NEP_WHICH_USER
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPWhich(NEP_TARGET_IMAGINARY); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_TARGET_IMAGINARY, __pyx_t_5) < 0) __PYX_ERR(16, 44, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":45
+ *     TARGET_REAL        = NEP_TARGET_REAL
+ *     TARGET_IMAGINARY   = NEP_TARGET_IMAGINARY
+ *     ALL                = NEP_ALL             # <<<<<<<<<<<<<<
+ *     USER               = NEP_WHICH_USER
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPWhich(NEP_ALL); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 45, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ALL, __pyx_t_5) < 0) __PYX_ERR(16, 45, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":46
+ *     TARGET_IMAGINARY   = NEP_TARGET_IMAGINARY
+ *     ALL                = NEP_ALL
+ *     USER               = NEP_WHICH_USER             # <<<<<<<<<<<<<<
+ * 
+ * class NEPConvergedReason(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPWhich(NEP_WHICH_USER); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 46, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_USER, __pyx_t_5) < 0) __PYX_ERR(16, 46, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":35
+ *     BACKWARD = NEP_ERROR_BACKWARD
+ * 
+ * class NEPWhich(object):             # <<<<<<<<<<<<<<
+ *     LARGEST_MAGNITUDE  = NEP_LARGEST_MAGNITUDE
+ *     SMALLEST_MAGNITUDE = NEP_SMALLEST_MAGNITUDE
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_NEPWhich, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 35, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_NEPWhich, __pyx_t_5) < 0) __PYX_ERR(16, 35, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/NEP.pyx":48
+ *     USER               = NEP_WHICH_USER
+ * 
+ * class NEPConvergedReason(object):             # <<<<<<<<<<<<<<
+ *     CONVERGED_TOL          = NEP_CONVERGED_TOL
+ *     CONVERGED_USER         = NEP_CONVERGED_USER
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 48, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 48, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_NEPConvergedReason, __pyx_n_s_NEPConvergedReason, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(16, 48, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/NEP.pyx":49
+ * 
+ * class NEPConvergedReason(object):
+ *     CONVERGED_TOL          = NEP_CONVERGED_TOL             # <<<<<<<<<<<<<<
+ *     CONVERGED_USER         = NEP_CONVERGED_USER
+ *     DIVERGED_ITS           = NEP_DIVERGED_ITS
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPConvergedReason(NEP_CONVERGED_TOL); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 49, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_TOL, __pyx_t_5) < 0) __PYX_ERR(16, 49, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":50
+ * class NEPConvergedReason(object):
+ *     CONVERGED_TOL          = NEP_CONVERGED_TOL
+ *     CONVERGED_USER         = NEP_CONVERGED_USER             # <<<<<<<<<<<<<<
+ *     DIVERGED_ITS           = NEP_DIVERGED_ITS
+ *     DIVERGED_BREAKDOWN     = NEP_DIVERGED_BREAKDOWN
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPConvergedReason(NEP_CONVERGED_USER); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 50, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_USER, __pyx_t_5) < 0) __PYX_ERR(16, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":51
+ *     CONVERGED_TOL          = NEP_CONVERGED_TOL
+ *     CONVERGED_USER         = NEP_CONVERGED_USER
+ *     DIVERGED_ITS           = NEP_DIVERGED_ITS             # <<<<<<<<<<<<<<
+ *     DIVERGED_BREAKDOWN     = NEP_DIVERGED_BREAKDOWN
+ *     DIVERGED_LINEAR_SOLVE  = NEP_DIVERGED_LINEAR_SOLVE
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPConvergedReason(NEP_DIVERGED_ITS); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_ITS, __pyx_t_5) < 0) __PYX_ERR(16, 51, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":52
+ *     CONVERGED_USER         = NEP_CONVERGED_USER
+ *     DIVERGED_ITS           = NEP_DIVERGED_ITS
+ *     DIVERGED_BREAKDOWN     = NEP_DIVERGED_BREAKDOWN             # <<<<<<<<<<<<<<
+ *     DIVERGED_LINEAR_SOLVE  = NEP_DIVERGED_LINEAR_SOLVE
+ *     CONVERGED_ITERATING    = NEP_CONVERGED_ITERATING
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPConvergedReason(NEP_DIVERGED_BREAKDOWN); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_BREAKDOWN, __pyx_t_5) < 0) __PYX_ERR(16, 52, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":53
+ *     DIVERGED_ITS           = NEP_DIVERGED_ITS
+ *     DIVERGED_BREAKDOWN     = NEP_DIVERGED_BREAKDOWN
+ *     DIVERGED_LINEAR_SOLVE  = NEP_DIVERGED_LINEAR_SOLVE             # <<<<<<<<<<<<<<
+ *     CONVERGED_ITERATING    = NEP_CONVERGED_ITERATING
+ *     ITERATING              = NEP_CONVERGED_ITERATING
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPConvergedReason(NEP_DIVERGED_LINEAR_SOLVE); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 53, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_LINEAR_SOLVE, __pyx_t_5) < 0) __PYX_ERR(16, 53, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":54
+ *     DIVERGED_BREAKDOWN     = NEP_DIVERGED_BREAKDOWN
+ *     DIVERGED_LINEAR_SOLVE  = NEP_DIVERGED_LINEAR_SOLVE
+ *     CONVERGED_ITERATING    = NEP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
+ *     ITERATING              = NEP_CONVERGED_ITERATING
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPConvergedReason(NEP_CONVERGED_ITERATING); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 54, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ITERATING, __pyx_t_5) < 0) __PYX_ERR(16, 54, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":55
+ *     DIVERGED_LINEAR_SOLVE  = NEP_DIVERGED_LINEAR_SOLVE
+ *     CONVERGED_ITERATING    = NEP_CONVERGED_ITERATING
+ *     ITERATING              = NEP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
+ * 
+ * class NEPRefine(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPConvergedReason(NEP_CONVERGED_ITERATING); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 55, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ITERATING, __pyx_t_5) < 0) __PYX_ERR(16, 55, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":48
+ *     USER               = NEP_WHICH_USER
+ * 
+ * class NEPConvergedReason(object):             # <<<<<<<<<<<<<<
+ *     CONVERGED_TOL          = NEP_CONVERGED_TOL
+ *     CONVERGED_USER         = NEP_CONVERGED_USER
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_NEPConvergedReason, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 48, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_NEPConvergedReason, __pyx_t_5) < 0) __PYX_ERR(16, 48, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/NEP.pyx":57
+ *     ITERATING              = NEP_CONVERGED_ITERATING
+ * 
+ * class NEPRefine(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     NEP refinement strategy
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 57, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 57, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_NEPRefine, __pyx_n_s_NEPRefine, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_NEP_refinement_strategy_NONE_No); if (unlikely(!__pyx_t_4)) __PYX_ERR(16, 57, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/NEP.pyx":65
+ *     - `MULTIPLE`: Refine all eigenpairs simultaneously (invariant pair).
+ *     """
+ *     NONE     = NEP_REFINE_NONE             # <<<<<<<<<<<<<<
+ *     SIMPLE   = NEP_REFINE_SIMPLE
+ *     MULTIPLE = NEP_REFINE_MULTIPLE
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPRefine(NEP_REFINE_NONE); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 65, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_NONE, __pyx_t_5) < 0) __PYX_ERR(16, 65, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":66
+ *     """
+ *     NONE     = NEP_REFINE_NONE
+ *     SIMPLE   = NEP_REFINE_SIMPLE             # <<<<<<<<<<<<<<
+ *     MULTIPLE = NEP_REFINE_MULTIPLE
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPRefine(NEP_REFINE_SIMPLE); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 66, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SIMPLE, __pyx_t_5) < 0) __PYX_ERR(16, 66, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":67
+ *     NONE     = NEP_REFINE_NONE
+ *     SIMPLE   = NEP_REFINE_SIMPLE
+ *     MULTIPLE = NEP_REFINE_MULTIPLE             # <<<<<<<<<<<<<<
+ * 
+ * class NEPRefineScheme(object):
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPRefine(NEP_REFINE_MULTIPLE); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 67, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MULTIPLE, __pyx_t_5) < 0) __PYX_ERR(16, 67, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":57
+ *     ITERATING              = NEP_CONVERGED_ITERATING
+ * 
+ * class NEPRefine(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     NEP refinement strategy
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_NEPRefine, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 57, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_NEPRefine, __pyx_t_5) < 0) __PYX_ERR(16, 57, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/NEP.pyx":69
+ *     MULTIPLE = NEP_REFINE_MULTIPLE
+ * 
+ * class NEPRefineScheme(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     Scheme for solving linear systems during iterative refinement
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 69, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 69, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_NEPRefineScheme, __pyx_n_s_NEPRefineScheme, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_Scheme_for_solving_linear_syste); if (unlikely(!__pyx_t_4)) __PYX_ERR(16, 69, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/NEP.pyx":77
+ *     - `EXPLICIT`: Build the explicit matrix.
+ *     """
+ *     SCHUR    = NEP_REFINE_SCHEME_SCHUR             # <<<<<<<<<<<<<<
+ *     MBE      = NEP_REFINE_SCHEME_MBE
+ *     EXPLICIT = NEP_REFINE_SCHEME_EXPLICIT
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPRefineScheme(NEP_REFINE_SCHEME_SCHUR); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 77, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_SCHUR, __pyx_t_5) < 0) __PYX_ERR(16, 77, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":78
+ *     """
+ *     SCHUR    = NEP_REFINE_SCHEME_SCHUR
+ *     MBE      = NEP_REFINE_SCHEME_MBE             # <<<<<<<<<<<<<<
+ *     EXPLICIT = NEP_REFINE_SCHEME_EXPLICIT
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPRefineScheme(NEP_REFINE_SCHEME_MBE); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 78, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_MBE, __pyx_t_5) < 0) __PYX_ERR(16, 78, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":79
+ *     SCHUR    = NEP_REFINE_SCHEME_SCHUR
+ *     MBE      = NEP_REFINE_SCHEME_MBE
+ *     EXPLICIT = NEP_REFINE_SCHEME_EXPLICIT             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_NEPRefineScheme(NEP_REFINE_SCHEME_EXPLICIT); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 79, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_EXPLICIT, __pyx_t_5) < 0) __PYX_ERR(16, 79, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/NEP.pyx":69
+ *     MULTIPLE = NEP_REFINE_MULTIPLE
+ * 
+ * class NEPRefineScheme(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     Scheme for solving linear systems during iterative refinement
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_NEPRefineScheme, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(16, 69, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_NEPRefineScheme, __pyx_t_5) < 0) __PYX_ERR(16, 69, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/NEP.pyx":89
+ *     """
+ * 
+ *     Type            = NEPType             # <<<<<<<<<<<<<<
+ *     ErrorType       = NEPErrorType
+ *     Which           = NEPWhich
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_NEPType); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 89, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_NEP->tp_dict, __pyx_n_s_Type, __pyx_t_2) < 0) __PYX_ERR(16, 89, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_NEP);
+
+  /* "SLEPc/NEP.pyx":90
+ * 
+ *     Type            = NEPType
+ *     ErrorType       = NEPErrorType             # <<<<<<<<<<<<<<
+ *     Which           = NEPWhich
+ *     ConvergedReason = NEPConvergedReason
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_NEPErrorType); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 90, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_NEP->tp_dict, __pyx_n_s_ErrorType, __pyx_t_2) < 0) __PYX_ERR(16, 90, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_NEP);
+
+  /* "SLEPc/NEP.pyx":91
+ *     Type            = NEPType
+ *     ErrorType       = NEPErrorType
+ *     Which           = NEPWhich             # <<<<<<<<<<<<<<
+ *     ConvergedReason = NEPConvergedReason
+ *     Refine          = NEPRefine
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_NEPWhich); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 91, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_NEP->tp_dict, __pyx_n_s_Which, __pyx_t_2) < 0) __PYX_ERR(16, 91, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_NEP);
+
+  /* "SLEPc/NEP.pyx":92
+ *     ErrorType       = NEPErrorType
+ *     Which           = NEPWhich
+ *     ConvergedReason = NEPConvergedReason             # <<<<<<<<<<<<<<
+ *     Refine          = NEPRefine
+ *     RefineScheme    = NEPRefineScheme
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_NEPConvergedReason); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 92, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_NEP->tp_dict, __pyx_n_s_ConvergedReason, __pyx_t_2) < 0) __PYX_ERR(16, 92, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_NEP);
+
+  /* "SLEPc/NEP.pyx":93
+ *     Which           = NEPWhich
+ *     ConvergedReason = NEPConvergedReason
+ *     Refine          = NEPRefine             # <<<<<<<<<<<<<<
+ *     RefineScheme    = NEPRefineScheme
+ * 
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_NEPRefine); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 93, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_NEP->tp_dict, __pyx_n_s_Refine, __pyx_t_2) < 0) __PYX_ERR(16, 93, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_NEP);
+
+  /* "SLEPc/NEP.pyx":94
+ *     ConvergedReason = NEPConvergedReason
+ *     Refine          = NEPRefine
+ *     RefineScheme    = NEPRefineScheme             # <<<<<<<<<<<<<<
+ * 
+ *     def __cinit__(self):
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_NEPRefineScheme); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 94, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_NEP->tp_dict, __pyx_n_s_RefineScheme, __pyx_t_2) < 0) __PYX_ERR(16, 94, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_NEP);
+
+  /* "SLEPc/NEP.pyx":684
+ * # -----------------------------------------------------------------------------
+ * 
+ * del NEPType             # <<<<<<<<<<<<<<
+ * del NEPErrorType
+ * del NEPWhich
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_NEPType) < 0) __PYX_ERR(16, 684, __pyx_L1_error)
+
+  /* "SLEPc/NEP.pyx":685
+ * 
+ * del NEPType
+ * del NEPErrorType             # <<<<<<<<<<<<<<
+ * del NEPWhich
+ * del NEPConvergedReason
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_NEPErrorType) < 0) __PYX_ERR(16, 685, __pyx_L1_error)
+
+  /* "SLEPc/NEP.pyx":686
+ * del NEPType
+ * del NEPErrorType
+ * del NEPWhich             # <<<<<<<<<<<<<<
+ * del NEPConvergedReason
+ * del NEPRefine
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_NEPWhich) < 0) __PYX_ERR(16, 686, __pyx_L1_error)
+
+  /* "SLEPc/NEP.pyx":687
+ * del NEPErrorType
+ * del NEPWhich
+ * del NEPConvergedReason             # <<<<<<<<<<<<<<
+ * del NEPRefine
+ * del NEPRefineScheme
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_NEPConvergedReason) < 0) __PYX_ERR(16, 687, __pyx_L1_error)
+
+  /* "SLEPc/NEP.pyx":688
+ * del NEPWhich
+ * del NEPConvergedReason
+ * del NEPRefine             # <<<<<<<<<<<<<<
+ * del NEPRefineScheme
+ * 
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_NEPRefine) < 0) __PYX_ERR(16, 688, __pyx_L1_error)
+
+  /* "SLEPc/NEP.pyx":689
+ * del NEPConvergedReason
+ * del NEPRefine
+ * del NEPRefineScheme             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_NEPRefineScheme) < 0) __PYX_ERR(16, 689, __pyx_L1_error)
+
+  /* "SLEPc/MFN.pyx":3
+ * # -----------------------------------------------------------------------------
+ * 
+ * class MFNType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     MFN type
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(17, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(17, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_MFNType, __pyx_n_s_MFNType, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, __pyx_kp_s_MFN_type_Action_of_a_matrix_fun); if (unlikely(!__pyx_t_4)) __PYX_ERR(17, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/MFN.pyx":12
+ *     - `EXPOKIT`: Implementation of the method in Expokit.
+ *     """
+ *     KRYLOV   = S_(MFNKRYLOV)             # <<<<<<<<<<<<<<
+ *     EXPOKIT  = S_(MFNEXPOKIT)
+ * 
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(MFNKRYLOV); if (unlikely(!__pyx_t_5)) __PYX_ERR(17, 12, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_KRYLOV, __pyx_t_5) < 0) __PYX_ERR(17, 12, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/MFN.pyx":13
+ *     """
+ *     KRYLOV   = S_(MFNKRYLOV)
+ *     EXPOKIT  = S_(MFNEXPOKIT)             # <<<<<<<<<<<<<<
+ * 
+ * class MFNConvergedReason(object):
+ */
+  __pyx_t_5 = __pyx_f_8slepc4py_5SLEPc_S_(MFNEXPOKIT); if (unlikely(!__pyx_t_5)) __PYX_ERR(17, 13, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_EXPOKIT, __pyx_t_5) < 0) __PYX_ERR(17, 13, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/MFN.pyx":3
+ * # -----------------------------------------------------------------------------
+ * 
+ * class MFNType(object):             # <<<<<<<<<<<<<<
+ *     """
+ *     MFN type
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_MFNType, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(17, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MFNType, __pyx_t_5) < 0) __PYX_ERR(17, 3, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/MFN.pyx":15
+ *     EXPOKIT  = S_(MFNEXPOKIT)
+ * 
+ * class MFNConvergedReason(object):             # <<<<<<<<<<<<<<
+ *     CONVERGED_TOL       = MFN_CONVERGED_TOL
+ *     CONVERGED_ITS       = MFN_CONVERGED_ITS
+ */
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(17, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(__pyx_builtin_object);
+  __Pyx_GIVEREF(__pyx_builtin_object);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(17, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_MFNConvergedReason, __pyx_n_s_MFNConvergedReason, (PyObject *) NULL, __pyx_n_s_slepc4py_SLEPc, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(17, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+
+  /* "SLEPc/MFN.pyx":16
+ * 
+ * class MFNConvergedReason(object):
+ *     CONVERGED_TOL       = MFN_CONVERGED_TOL             # <<<<<<<<<<<<<<
+ *     CONVERGED_ITS       = MFN_CONVERGED_ITS
+ *     DIVERGED_ITS        = MFN_DIVERGED_ITS
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_MFNConvergedReason(MFN_CONVERGED_TOL); if (unlikely(!__pyx_t_5)) __PYX_ERR(17, 16, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_TOL, __pyx_t_5) < 0) __PYX_ERR(17, 16, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/MFN.pyx":17
+ * class MFNConvergedReason(object):
+ *     CONVERGED_TOL       = MFN_CONVERGED_TOL
+ *     CONVERGED_ITS       = MFN_CONVERGED_ITS             # <<<<<<<<<<<<<<
+ *     DIVERGED_ITS        = MFN_DIVERGED_ITS
+ *     DIVERGED_BREAKDOWN  = MFN_DIVERGED_BREAKDOWN
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_MFNConvergedReason(MFN_CONVERGED_ITS); if (unlikely(!__pyx_t_5)) __PYX_ERR(17, 17, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ITS, __pyx_t_5) < 0) __PYX_ERR(17, 17, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/MFN.pyx":18
+ *     CONVERGED_TOL       = MFN_CONVERGED_TOL
+ *     CONVERGED_ITS       = MFN_CONVERGED_ITS
+ *     DIVERGED_ITS        = MFN_DIVERGED_ITS             # <<<<<<<<<<<<<<
+ *     DIVERGED_BREAKDOWN  = MFN_DIVERGED_BREAKDOWN
+ *     CONVERGED_ITERATING = MFN_CONVERGED_ITERATING
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_MFNConvergedReason(MFN_DIVERGED_ITS); if (unlikely(!__pyx_t_5)) __PYX_ERR(17, 18, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_ITS, __pyx_t_5) < 0) __PYX_ERR(17, 18, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/MFN.pyx":19
+ *     CONVERGED_ITS       = MFN_CONVERGED_ITS
+ *     DIVERGED_ITS        = MFN_DIVERGED_ITS
+ *     DIVERGED_BREAKDOWN  = MFN_DIVERGED_BREAKDOWN             # <<<<<<<<<<<<<<
+ *     CONVERGED_ITERATING = MFN_CONVERGED_ITERATING
+ *     ITERATING           = MFN_CONVERGED_ITERATING
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_MFNConvergedReason(MFN_DIVERGED_BREAKDOWN); if (unlikely(!__pyx_t_5)) __PYX_ERR(17, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_DIVERGED_BREAKDOWN, __pyx_t_5) < 0) __PYX_ERR(17, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/MFN.pyx":20
+ *     DIVERGED_ITS        = MFN_DIVERGED_ITS
+ *     DIVERGED_BREAKDOWN  = MFN_DIVERGED_BREAKDOWN
+ *     CONVERGED_ITERATING = MFN_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
+ *     ITERATING           = MFN_CONVERGED_ITERATING
+ * 
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_MFNConvergedReason(MFN_CONVERGED_ITERATING); if (unlikely(!__pyx_t_5)) __PYX_ERR(17, 20, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_CONVERGED_ITERATING, __pyx_t_5) < 0) __PYX_ERR(17, 20, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/MFN.pyx":21
+ *     DIVERGED_BREAKDOWN  = MFN_DIVERGED_BREAKDOWN
+ *     CONVERGED_ITERATING = MFN_CONVERGED_ITERATING
+ *     ITERATING           = MFN_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
+ */
+  __pyx_t_5 = __Pyx_PyInt_From_MFNConvergedReason(MFN_CONVERGED_ITERATING); if (unlikely(!__pyx_t_5)) __PYX_ERR(17, 21, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyObject_SetItem(__pyx_t_4, __pyx_n_s_ITERATING, __pyx_t_5) < 0) __PYX_ERR(17, 21, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "SLEPc/MFN.pyx":15
+ *     EXPOKIT  = S_(MFNEXPOKIT)
+ * 
+ * class MFNConvergedReason(object):             # <<<<<<<<<<<<<<
+ *     CONVERGED_TOL       = MFN_CONVERGED_TOL
+ *     CONVERGED_ITS       = MFN_CONVERGED_ITS
+ */
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_MFNConvergedReason, __pyx_t_2, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(17, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MFNConvergedReason, __pyx_t_5) < 0) __PYX_ERR(17, 15, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/MFN.pyx":31
+ *     """
+ * 
+ *     Type            = MFNType             # <<<<<<<<<<<<<<
+ *     ConvergedReason = MFNConvergedReason
+ * 
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_MFNType); if (unlikely(!__pyx_t_2)) __PYX_ERR(17, 31, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_MFN->tp_dict, __pyx_n_s_Type, __pyx_t_2) < 0) __PYX_ERR(17, 31, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_MFN);
+
+  /* "SLEPc/MFN.pyx":32
+ * 
+ *     Type            = MFNType
+ *     ConvergedReason = MFNConvergedReason             # <<<<<<<<<<<<<<
+ * 
+ *     def __cinit__(self):
+ */
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_MFNConvergedReason); if (unlikely(!__pyx_t_2)) __PYX_ERR(17, 32, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8slepc4py_5SLEPc_MFN->tp_dict, __pyx_n_s_ConvergedReason, __pyx_t_2) < 0) __PYX_ERR(17, 32, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  PyType_Modified(__pyx_ptype_8slepc4py_5SLEPc_MFN);
+
+  /* "SLEPc/MFN.pyx":357
+ * # -----------------------------------------------------------------------------
+ * 
+ * del MFNType             # <<<<<<<<<<<<<<
+ * del MFNConvergedReason
+ * 
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MFNType) < 0) __PYX_ERR(17, 357, __pyx_L1_error)
+
+  /* "SLEPc/MFN.pyx":358
+ * 
+ * del MFNType
+ * del MFNConvergedReason             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MFNConvergedReason) < 0) __PYX_ERR(17, 358, __pyx_L1_error)
+
+  /* "SLEPc/SLEPc.pyx":224
+ * # -----------------------------------------------------------------------------
+ * 
+ * def _initialize(args=None):             # <<<<<<<<<<<<<<
+ *     cdef int ready = initialize(args)
+ *     if ready: register(NULL)
+ */
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_8slepc4py_5SLEPc_1_initialize, NULL, __pyx_n_s_slepc4py_SLEPc); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 224, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_initialize, __pyx_t_2) < 0) __PYX_ERR(4, 224, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "SLEPc/SLEPc.pyx":228
+ *     if ready: register(NULL)
+ * 
+ * def _finalize():             # <<<<<<<<<<<<<<
+ *     finalize()
+ * 
+ */
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_8slepc4py_5SLEPc_3_finalize, NULL, __pyx_n_s_slepc4py_SLEPc); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 228, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_finalize, __pyx_t_2) < 0) __PYX_ERR(4, 228, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /*--- Wrapped vars code ---*/
+
+  if (__Pyx_RegisterCleanup()) __PYX_ERR(19, 1, __pyx_L1_error);
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
@@ -56461,1273 +61638,7664 @@ PyMODINIT_FUNC PyInit_SLEPc(void)
     if (__pyx_d) {
       __Pyx_AddTraceback("init slepc4py.SLEPc", __pyx_clineno, __pyx_lineno, __pyx_filename);
     }
-    Py_DECREF(__pyx_m); __pyx_m = 0;
-  } else if (!PyErr_Occurred()) {
-    PyErr_SetString(PyExc_ImportError, "init slepc4py.SLEPc");
-  }
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  #if PY_MAJOR_VERSION < 3
-  return;
-  #else
-  return __pyx_m;
-  #endif
+    Py_DECREF(__pyx_m); __pyx_m = 0;
+  } else if (!PyErr_Occurred()) {
+    PyErr_SetString(PyExc_ImportError, "init slepc4py.SLEPc");
+  }
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  #if PY_MAJOR_VERSION < 3
+  return;
+  #else
+  return __pyx_m;
+  #endif
+}
+
+static void __Pyx_CleanupGlobals(void) {
+  Py_CLEAR(__pyx_tuple_);
+  Py_CLEAR(__pyx_tuple__3);
+  Py_CLEAR(__pyx_tuple__4);
+  Py_CLEAR(__pyx_tuple__5);
+  Py_CLEAR(__pyx_tuple__6);
+  Py_CLEAR(__pyx_codeobj__7);
+  Py_CLEAR(__pyx_codeobj__8);
+  /* CodeObjectCache.cleanup */
+  if (__pyx_code_cache.entries) {
+      __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
+      int i, count = __pyx_code_cache.count;
+      __pyx_code_cache.count = 0;
+      __pyx_code_cache.max_count = 0;
+      __pyx_code_cache.entries = NULL;
+      for (i=0; i<count; i++) {
+          Py_DECREF(entries[i].code_object);
+      }
+      PyMem_Free(entries);
+  }
+
+}
+static void __pyx_module_cleanup(CYTHON_UNUSED PyObject *self) {
+  /*--- Global cleanup code ---*/
+  Py_CLEAR(__pyx_v_8slepc4py_5SLEPc_PetscError);
+  __Pyx_CleanupGlobals();
+  /*--- Type import cleanup code ---*/
+  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_AO);
+  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_Comm);
+  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_DM);
+  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_IS);
+  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_KSP);
+  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_LGMap);
+  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_Mat);
+  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_NullSpace);
+  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_Object);
+  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_PC);
+  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_Partitioner);
+  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_Random);
+  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_SF);
+  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_SNES);
+  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_Scatter);
+  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_Section);
+  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_TAO);
+  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_TS);
+  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_Vec);
+  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_Viewer);
+  /*--- Builtin cleanup code ---*/
+  Py_CLEAR(__pyx_builtin_object);
+  Py_CLEAR(__pyx_builtin_MemoryError);
+  Py_CLEAR(__pyx_builtin_TypeError);
+  Py_CLEAR(__pyx_builtin_ValueError);
+  Py_CLEAR(__pyx_builtin_range);
+  /*--- Intern cleanup code ---*/
+  Py_CLEAR(__pyx_empty_tuple);
+  #if CYTHON_COMPILING_IN_PYPY
+  Py_CLEAR(__pyx_b);
+  #endif
+  Py_CLEAR(__pyx_d);
+}
+
+/* --- Runtime support code --- */
+/* Refnanny */
+#if CYTHON_REFNANNY
+static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
+    PyObject *m = NULL, *p = NULL;
+    void *r = NULL;
+    m = PyImport_ImportModule((char *)modname);
+    if (!m) goto end;
+    p = PyObject_GetAttrString(m, (char *)"RefNannyAPI");
+    if (!p) goto end;
+    r = PyLong_AsVoidPtr(p);
+end:
+    Py_XDECREF(p);
+    Py_XDECREF(m);
+    return (__Pyx_RefNannyAPIStruct *)r;
+}
+#endif
+
+/* GetBuiltinName */
+static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
+    PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name);
+    if (unlikely(!result)) {
+        PyErr_Format(PyExc_NameError,
+#if PY_MAJOR_VERSION >= 3
+            "name '%U' is not defined", name);
+#else
+            "name '%.200s' is not defined", PyString_AS_STRING(name));
+#endif
+    }
+    return result;
+}
+
+/* decode_c_bytes */
+static CYTHON_INLINE PyObject* __Pyx_decode_c_bytes(
+         const char* cstring, Py_ssize_t length, Py_ssize_t start, Py_ssize_t stop,
+         const char* encoding, const char* errors,
+         PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) {
+    if (unlikely((start < 0) | (stop < 0))) {
+        if (start < 0) {
+            start += length;
+            if (start < 0)
+                start = 0;
+        }
+        if (stop < 0)
+            stop += length;
+    }
+    if (stop > length)
+        stop = length;
+    length = stop - start;
+    if (unlikely(length <= 0))
+        return PyUnicode_FromUnicode(NULL, 0);
+    cstring += start;
+    if (decode_func) {
+        return decode_func(cstring, length, errors);
+    } else {
+        return PyUnicode_Decode(cstring, length, encoding, errors);
+    }
+}
+
+/* PyObjectCall */
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
+    PyObject *result;
+    ternaryfunc call = func->ob_type->tp_call;
+    if (unlikely(!call))
+        return PyObject_Call(func, arg, kw);
+    if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
+        return NULL;
+    result = (*call)(func, arg, kw);
+    Py_LeaveRecursiveCall();
+    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
+        PyErr_SetString(
+            PyExc_SystemError,
+            "NULL result without error in PyObject_Call");
+    }
+    return result;
+}
+#endif
+
+/* PyObjectCallMethO */
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) {
+    PyObject *self, *result;
+    PyCFunction cfunc;
+    cfunc = PyCFunction_GET_FUNCTION(func);
+    self = PyCFunction_GET_SELF(func);
+    if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
+        return NULL;
+    result = cfunc(self, arg);
+    Py_LeaveRecursiveCall();
+    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
+        PyErr_SetString(
+            PyExc_SystemError,
+            "NULL result without error in PyObject_Call");
+    }
+    return result;
+}
+#endif
+
+/* PyObjectCallOneArg */
+#if CYTHON_COMPILING_IN_CPYTHON
+static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) {
+    PyObject *result;
+    PyObject *args = PyTuple_New(1);
+    if (unlikely(!args)) return NULL;
+    Py_INCREF(arg);
+    PyTuple_SET_ITEM(args, 0, arg);
+    result = __Pyx_PyObject_Call(func, args, NULL);
+    Py_DECREF(args);
+    return result;
+}
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
+#ifdef __Pyx_CyFunction_USED
+    if (likely(PyCFunction_Check(func) || PyObject_TypeCheck(func, __pyx_CyFunctionType))) {
+#else
+    if (likely(PyCFunction_Check(func))) {
+#endif
+        if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) {
+            return __Pyx_PyObject_CallMethO(func, arg);
+        }
+    }
+    return __Pyx__PyObject_CallOneArg(func, arg);
+}
+#else
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
+    PyObject *result;
+    PyObject *args = PyTuple_Pack(1, arg);
+    if (unlikely(!args)) return NULL;
+    result = __Pyx_PyObject_Call(func, args, NULL);
+    Py_DECREF(args);
+    return result;
+}
+#endif
+
+/* PyObjectCallNoArg */
+  #if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
+#ifdef __Pyx_CyFunction_USED
+    if (likely(PyCFunction_Check(func) || PyObject_TypeCheck(func, __pyx_CyFunctionType))) {
+#else
+    if (likely(PyCFunction_Check(func))) {
+#endif
+        if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) {
+            return __Pyx_PyObject_CallMethO(func, NULL);
+        }
+    }
+    return __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL);
+}
+#endif
+
+/* RaiseArgTupleInvalid */
+    static void __Pyx_RaiseArgtupleInvalid(
+    const char* func_name,
+    int exact,
+    Py_ssize_t num_min,
+    Py_ssize_t num_max,
+    Py_ssize_t num_found)
+{
+    Py_ssize_t num_expected;
+    const char *more_or_less;
+    if (num_found < num_min) {
+        num_expected = num_min;
+        more_or_less = "at least";
+    } else {
+        num_expected = num_max;
+        more_or_less = "at most";
+    }
+    if (exact) {
+        more_or_less = "exactly";
+    }
+    PyErr_Format(PyExc_TypeError,
+                 "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)",
+                 func_name, more_or_less, num_expected,
+                 (num_expected == 1) ? "" : "s", num_found);
+}
+
+/* KeywordStringCheck */
+    static CYTHON_INLINE int __Pyx_CheckKeywordStrings(
+    PyObject *kwdict,
+    const char* function_name,
+    int kw_allowed)
+{
+    PyObject* key = 0;
+    Py_ssize_t pos = 0;
+#if CYTHON_COMPILING_IN_PYPY
+    if (!kw_allowed && PyDict_Next(kwdict, &pos, &key, 0))
+        goto invalid_keyword;
+    return 1;
+#else
+    while (PyDict_Next(kwdict, &pos, &key, 0)) {
+        #if PY_MAJOR_VERSION < 3
+        if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key)))
+        #endif
+            if (unlikely(!PyUnicode_Check(key)))
+                goto invalid_keyword_type;
+    }
+    if ((!kw_allowed) && unlikely(key))
+        goto invalid_keyword;
+    return 1;
+invalid_keyword_type:
+    PyErr_Format(PyExc_TypeError,
+        "%.200s() keywords must be strings", function_name);
+    return 0;
+#endif
+invalid_keyword:
+    PyErr_Format(PyExc_TypeError,
+    #if PY_MAJOR_VERSION < 3
+        "%.200s() got an unexpected keyword argument '%.200s'",
+        function_name, PyString_AsString(key));
+    #else
+        "%s() got an unexpected keyword argument '%U'",
+        function_name, key);
+    #endif
+    return 0;
+}
+
+/* PyErrFetchRestore */
+    #if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    tmp_type = tstate->curexc_type;
+    tmp_value = tstate->curexc_value;
+    tmp_tb = tstate->curexc_traceback;
+    tstate->curexc_type = type;
+    tstate->curexc_value = value;
+    tstate->curexc_traceback = tb;
+    Py_XDECREF(tmp_type);
+    Py_XDECREF(tmp_value);
+    Py_XDECREF(tmp_tb);
+}
+static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
+    *type = tstate->curexc_type;
+    *value = tstate->curexc_value;
+    *tb = tstate->curexc_traceback;
+    tstate->curexc_type = 0;
+    tstate->curexc_value = 0;
+    tstate->curexc_traceback = 0;
+}
+#endif
+
+/* WriteUnraisableException */
+    static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
+                                  CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename,
+                                  int full_traceback, CYTHON_UNUSED int nogil) {
+    PyObject *old_exc, *old_val, *old_tb;
+    PyObject *ctx;
+    __Pyx_PyThreadState_declare
+#ifdef WITH_THREAD
+    PyGILState_STATE state;
+    if (nogil)
+        state = PyGILState_Ensure();
+#ifdef _MSC_VER
+    else state = (PyGILState_STATE)-1;
+#endif
+#endif
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
+    if (full_traceback) {
+        Py_XINCREF(old_exc);
+        Py_XINCREF(old_val);
+        Py_XINCREF(old_tb);
+        __Pyx_ErrRestore(old_exc, old_val, old_tb);
+        PyErr_PrintEx(1);
+    }
+    #if PY_MAJOR_VERSION < 3
+    ctx = PyString_FromString(name);
+    #else
+    ctx = PyUnicode_FromString(name);
+    #endif
+    __Pyx_ErrRestore(old_exc, old_val, old_tb);
+    if (!ctx) {
+        PyErr_WriteUnraisable(Py_None);
+    } else {
+        PyErr_WriteUnraisable(ctx);
+        Py_DECREF(ctx);
+    }
+#ifdef WITH_THREAD
+    if (nogil)
+        PyGILState_Release(state);
+#endif
+}
+
+/* RaiseTooManyValuesToUnpack */
+    static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
+    PyErr_Format(PyExc_ValueError,
+                 "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
+}
+
+/* RaiseNeedMoreValuesToUnpack */
+    static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
+    PyErr_Format(PyExc_ValueError,
+                 "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack",
+                 index, (index == 1) ? "" : "s");
+}
+
+/* IterFinish */
+    static CYTHON_INLINE int __Pyx_IterFinish(void) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    PyThreadState *tstate = PyThreadState_GET();
+    PyObject* exc_type = tstate->curexc_type;
+    if (unlikely(exc_type)) {
+        if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) {
+            PyObject *exc_value, *exc_tb;
+            exc_value = tstate->curexc_value;
+            exc_tb = tstate->curexc_traceback;
+            tstate->curexc_type = 0;
+            tstate->curexc_value = 0;
+            tstate->curexc_traceback = 0;
+            Py_DECREF(exc_type);
+            Py_XDECREF(exc_value);
+            Py_XDECREF(exc_tb);
+            return 0;
+        } else {
+            return -1;
+        }
+    }
+    return 0;
+#else
+    if (unlikely(PyErr_Occurred())) {
+        if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) {
+            PyErr_Clear();
+            return 0;
+        } else {
+            return -1;
+        }
+    }
+    return 0;
+#endif
+}
+
+/* UnpackItemEndCheck */
+    static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
+    if (unlikely(retval)) {
+        Py_DECREF(retval);
+        __Pyx_RaiseTooManyValuesError(expected);
+        return -1;
+    } else {
+        return __Pyx_IterFinish();
+    }
+    return 0;
+}
+
+/* SaveResetException */
+    #if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
+    *type = tstate->exc_type;
+    *value = tstate->exc_value;
+    *tb = tstate->exc_traceback;
+    Py_XINCREF(*type);
+    Py_XINCREF(*value);
+    Py_XINCREF(*tb);
+}
+static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    tmp_type = tstate->exc_type;
+    tmp_value = tstate->exc_value;
+    tmp_tb = tstate->exc_traceback;
+    tstate->exc_type = type;
+    tstate->exc_value = value;
+    tstate->exc_traceback = tb;
+    Py_XDECREF(tmp_type);
+    Py_XDECREF(tmp_value);
+    Py_XDECREF(tmp_tb);
+}
+#endif
+
+/* PyErrExceptionMatches */
+    #if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err) {
+    PyObject *exc_type = tstate->curexc_type;
+    if (exc_type == err) return 1;
+    if (unlikely(!exc_type)) return 0;
+    return PyErr_GivenExceptionMatches(exc_type, err);
+}
+#endif
+
+/* GetException */
+    #if CYTHON_COMPILING_IN_CPYTHON
+static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
+#else
+static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) {
+#endif
+    PyObject *local_type, *local_value, *local_tb;
+#if CYTHON_COMPILING_IN_CPYTHON
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    local_type = tstate->curexc_type;
+    local_value = tstate->curexc_value;
+    local_tb = tstate->curexc_traceback;
+    tstate->curexc_type = 0;
+    tstate->curexc_value = 0;
+    tstate->curexc_traceback = 0;
+#else
+    PyErr_Fetch(&local_type, &local_value, &local_tb);
+#endif
+    PyErr_NormalizeException(&local_type, &local_value, &local_tb);
+#if CYTHON_COMPILING_IN_CPYTHON
+    if (unlikely(tstate->curexc_type))
+#else
+    if (unlikely(PyErr_Occurred()))
+#endif
+        goto bad;
+    #if PY_MAJOR_VERSION >= 3
+    if (local_tb) {
+        if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0))
+            goto bad;
+    }
+    #endif
+    Py_XINCREF(local_tb);
+    Py_XINCREF(local_type);
+    Py_XINCREF(local_value);
+    *type = local_type;
+    *value = local_value;
+    *tb = local_tb;
+#if CYTHON_COMPILING_IN_CPYTHON
+    tmp_type = tstate->exc_type;
+    tmp_value = tstate->exc_value;
+    tmp_tb = tstate->exc_traceback;
+    tstate->exc_type = local_type;
+    tstate->exc_value = local_value;
+    tstate->exc_traceback = local_tb;
+    Py_XDECREF(tmp_type);
+    Py_XDECREF(tmp_value);
+    Py_XDECREF(tmp_tb);
+#else
+    PyErr_SetExcInfo(local_type, local_value, local_tb);
+#endif
+    return 0;
+bad:
+    *type = 0;
+    *value = 0;
+    *tb = 0;
+    Py_XDECREF(local_type);
+    Py_XDECREF(local_value);
+    Py_XDECREF(local_tb);
+    return -1;
+}
+
+/* RaiseException */
+      #if PY_MAJOR_VERSION < 3
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
+                        CYTHON_UNUSED PyObject *cause) {
+    __Pyx_PyThreadState_declare
+    Py_XINCREF(type);
+    if (!value || value == Py_None)
+        value = NULL;
+    else
+        Py_INCREF(value);
+    if (!tb || tb == Py_None)
+        tb = NULL;
+    else {
+        Py_INCREF(tb);
+        if (!PyTraceBack_Check(tb)) {
+            PyErr_SetString(PyExc_TypeError,
+                "raise: arg 3 must be a traceback or None");
+            goto raise_error;
+        }
+    }
+    if (PyType_Check(type)) {
+#if CYTHON_COMPILING_IN_PYPY
+        if (!value) {
+            Py_INCREF(Py_None);
+            value = Py_None;
+        }
+#endif
+        PyErr_NormalizeException(&type, &value, &tb);
+    } else {
+        if (value) {
+            PyErr_SetString(PyExc_TypeError,
+                "instance exception may not have a separate value");
+            goto raise_error;
+        }
+        value = type;
+        type = (PyObject*) Py_TYPE(type);
+        Py_INCREF(type);
+        if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
+            PyErr_SetString(PyExc_TypeError,
+                "raise: exception class must be a subclass of BaseException");
+            goto raise_error;
+        }
+    }
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrRestore(type, value, tb);
+    return;
+raise_error:
+    Py_XDECREF(value);
+    Py_XDECREF(type);
+    Py_XDECREF(tb);
+    return;
+}
+#else
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
+    PyObject* owned_instance = NULL;
+    if (tb == Py_None) {
+        tb = 0;
+    } else if (tb && !PyTraceBack_Check(tb)) {
+        PyErr_SetString(PyExc_TypeError,
+            "raise: arg 3 must be a traceback or None");
+        goto bad;
+    }
+    if (value == Py_None)
+        value = 0;
+    if (PyExceptionInstance_Check(type)) {
+        if (value) {
+            PyErr_SetString(PyExc_TypeError,
+                "instance exception may not have a separate value");
+            goto bad;
+        }
+        value = type;
+        type = (PyObject*) Py_TYPE(value);
+    } else if (PyExceptionClass_Check(type)) {
+        PyObject *instance_class = NULL;
+        if (value && PyExceptionInstance_Check(value)) {
+            instance_class = (PyObject*) Py_TYPE(value);
+            if (instance_class != type) {
+                int is_subclass = PyObject_IsSubclass(instance_class, type);
+                if (!is_subclass) {
+                    instance_class = NULL;
+                } else if (unlikely(is_subclass == -1)) {
+                    goto bad;
+                } else {
+                    type = instance_class;
+                }
+            }
+        }
+        if (!instance_class) {
+            PyObject *args;
+            if (!value)
+                args = PyTuple_New(0);
+            else if (PyTuple_Check(value)) {
+                Py_INCREF(value);
+                args = value;
+            } else
+                args = PyTuple_Pack(1, value);
+            if (!args)
+                goto bad;
+            owned_instance = PyObject_Call(type, args, NULL);
+            Py_DECREF(args);
+            if (!owned_instance)
+                goto bad;
+            value = owned_instance;
+            if (!PyExceptionInstance_Check(value)) {
+                PyErr_Format(PyExc_TypeError,
+                             "calling %R should have returned an instance of "
+                             "BaseException, not %R",
+                             type, Py_TYPE(value));
+                goto bad;
+            }
+        }
+    } else {
+        PyErr_SetString(PyExc_TypeError,
+            "raise: exception class must be a subclass of BaseException");
+        goto bad;
+    }
+#if PY_VERSION_HEX >= 0x03030000
+    if (cause) {
+#else
+    if (cause && cause != Py_None) {
+#endif
+        PyObject *fixed_cause;
+        if (cause == Py_None) {
+            fixed_cause = NULL;
+        } else if (PyExceptionClass_Check(cause)) {
+            fixed_cause = PyObject_CallObject(cause, NULL);
+            if (fixed_cause == NULL)
+                goto bad;
+        } else if (PyExceptionInstance_Check(cause)) {
+            fixed_cause = cause;
+            Py_INCREF(fixed_cause);
+        } else {
+            PyErr_SetString(PyExc_TypeError,
+                            "exception causes must derive from "
+                            "BaseException");
+            goto bad;
+        }
+        PyException_SetCause(value, fixed_cause);
+    }
+    PyErr_SetObject(type, value);
+    if (tb) {
+#if CYTHON_COMPILING_IN_PYPY
+        PyObject *tmp_type, *tmp_value, *tmp_tb;
+        PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);
+        Py_INCREF(tb);
+        PyErr_Restore(tmp_type, tmp_value, tb);
+        Py_XDECREF(tmp_tb);
+#else
+        PyThreadState *tstate = PyThreadState_GET();
+        PyObject* tmp_tb = tstate->curexc_traceback;
+        if (tb != tmp_tb) {
+            Py_INCREF(tb);
+            tstate->curexc_traceback = tb;
+            Py_XDECREF(tmp_tb);
+        }
+#endif
+    }
+bad:
+    Py_XDECREF(owned_instance);
+    return;
+}
+#endif
+
+/* GetItemInt */
+        static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
+    PyObject *r;
+    if (!j) return NULL;
+    r = PyObject_GetItem(o, j);
+    Py_DECREF(j);
+    return r;
+}
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
+                                                              CYTHON_NCP_UNUSED int wraparound,
+                                                              CYTHON_NCP_UNUSED int boundscheck) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    if (wraparound & unlikely(i < 0)) i += PyList_GET_SIZE(o);
+    if ((!boundscheck) || likely((0 <= i) & (i < PyList_GET_SIZE(o)))) {
+        PyObject *r = PyList_GET_ITEM(o, i);
+        Py_INCREF(r);
+        return r;
+    }
+    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+#else
+    return PySequence_GetItem(o, i);
+#endif
+}
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
+                                                              CYTHON_NCP_UNUSED int wraparound,
+                                                              CYTHON_NCP_UNUSED int boundscheck) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    if (wraparound & unlikely(i < 0)) i += PyTuple_GET_SIZE(o);
+    if ((!boundscheck) || likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
+        PyObject *r = PyTuple_GET_ITEM(o, i);
+        Py_INCREF(r);
+        return r;
+    }
+    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+#else
+    return PySequence_GetItem(o, i);
+#endif
+}
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list,
+                                                     CYTHON_NCP_UNUSED int wraparound,
+                                                     CYTHON_NCP_UNUSED int boundscheck) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    if (is_list || PyList_CheckExact(o)) {
+        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
+        if ((!boundscheck) || (likely((n >= 0) & (n < PyList_GET_SIZE(o))))) {
+            PyObject *r = PyList_GET_ITEM(o, n);
+            Py_INCREF(r);
+            return r;
+        }
+    }
+    else if (PyTuple_CheckExact(o)) {
+        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o);
+        if ((!boundscheck) || likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) {
+            PyObject *r = PyTuple_GET_ITEM(o, n);
+            Py_INCREF(r);
+            return r;
+        }
+    } else {
+        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
+        if (likely(m && m->sq_item)) {
+            if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
+                Py_ssize_t l = m->sq_length(o);
+                if (likely(l >= 0)) {
+                    i += l;
+                } else {
+                    if (!PyErr_ExceptionMatches(PyExc_OverflowError))
+                        return NULL;
+                    PyErr_Clear();
+                }
+            }
+            return m->sq_item(o, i);
+        }
+    }
+#else
+    if (is_list || PySequence_Check(o)) {
+        return PySequence_GetItem(o, i);
+    }
+#endif
+    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+}
+
+/* RaiseDoubleKeywords */
+        static void __Pyx_RaiseDoubleKeywordsError(
+    const char* func_name,
+    PyObject* kw_name)
+{
+    PyErr_Format(PyExc_TypeError,
+        #if PY_MAJOR_VERSION >= 3
+        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
+        #else
+        "%s() got multiple values for keyword argument '%s'", func_name,
+        PyString_AsString(kw_name));
+        #endif
+}
+
+/* ParseKeywords */
+        static int __Pyx_ParseOptionalKeywords(
+    PyObject *kwds,
+    PyObject **argnames[],
+    PyObject *kwds2,
+    PyObject *values[],
+    Py_ssize_t num_pos_args,
+    const char* function_name)
+{
+    PyObject *key = 0, *value = 0;
+    Py_ssize_t pos = 0;
+    PyObject*** name;
+    PyObject*** first_kw_arg = argnames + num_pos_args;
+    while (PyDict_Next(kwds, &pos, &key, &value)) {
+        name = first_kw_arg;
+        while (*name && (**name != key)) name++;
+        if (*name) {
+            values[name-argnames] = value;
+            continue;
+        }
+        name = first_kw_arg;
+        #if PY_MAJOR_VERSION < 3
+        if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) {
+            while (*name) {
+                if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
+                        && _PyString_Eq(**name, key)) {
+                    values[name-argnames] = value;
+                    break;
+                }
+                name++;
+            }
+            if (*name) continue;
+            else {
+                PyObject*** argname = argnames;
+                while (argname != first_kw_arg) {
+                    if ((**argname == key) || (
+                            (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
+                             && _PyString_Eq(**argname, key))) {
+                        goto arg_passed_twice;
+                    }
+                    argname++;
+                }
+            }
+        } else
+        #endif
+        if (likely(PyUnicode_Check(key))) {
+            while (*name) {
+                int cmp = (**name == key) ? 0 :
+                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
+                    (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :
+                #endif
+                    PyUnicode_Compare(**name, key);
+                if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
+                if (cmp == 0) {
+                    values[name-argnames] = value;
+                    break;
+                }
+                name++;
+            }
+            if (*name) continue;
+            else {
+                PyObject*** argname = argnames;
+                while (argname != first_kw_arg) {
+                    int cmp = (**argname == key) ? 0 :
+                    #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
+                        (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :
+                    #endif
+                        PyUnicode_Compare(**argname, key);
+                    if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
+                    if (cmp == 0) goto arg_passed_twice;
+                    argname++;
+                }
+            }
+        } else
+            goto invalid_keyword_type;
+        if (kwds2) {
+            if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
+        } else {
+            goto invalid_keyword;
+        }
+    }
+    return 0;
+arg_passed_twice:
+    __Pyx_RaiseDoubleKeywordsError(function_name, key);
+    goto bad;
+invalid_keyword_type:
+    PyErr_Format(PyExc_TypeError,
+        "%.200s() keywords must be strings", function_name);
+    goto bad;
+invalid_keyword:
+    PyErr_Format(PyExc_TypeError,
+    #if PY_MAJOR_VERSION < 3
+        "%.200s() got an unexpected keyword argument '%.200s'",
+        function_name, PyString_AsString(key));
+    #else
+        "%s() got an unexpected keyword argument '%U'",
+        function_name, key);
+    #endif
+bad:
+    return -1;
+}
+
+/* PyObjectCallMethod1 */
+        static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) {
+    PyObject *method, *result = NULL;
+    method = __Pyx_PyObject_GetAttrStr(obj, method_name);
+    if (unlikely(!method)) goto bad;
+#if CYTHON_COMPILING_IN_CPYTHON
+    if (likely(PyMethod_Check(method))) {
+        PyObject *self = PyMethod_GET_SELF(method);
+        if (likely(self)) {
+            PyObject *args;
+            PyObject *function = PyMethod_GET_FUNCTION(method);
+            args = PyTuple_New(2);
+            if (unlikely(!args)) goto bad;
+            Py_INCREF(self);
+            PyTuple_SET_ITEM(args, 0, self);
+            Py_INCREF(arg);
+            PyTuple_SET_ITEM(args, 1, arg);
+            Py_INCREF(function);
+            Py_DECREF(method); method = NULL;
+            result = __Pyx_PyObject_Call(function, args, NULL);
+            Py_DECREF(args);
+            Py_DECREF(function);
+            return result;
+        }
+    }
+#endif
+    result = __Pyx_PyObject_CallOneArg(method, arg);
+bad:
+    Py_XDECREF(method);
+    return result;
+}
+
+/* append */
+        static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x) {
+    if (likely(PyList_CheckExact(L))) {
+        if (unlikely(__Pyx_PyList_Append(L, x) < 0)) return -1;
+    } else {
+        PyObject* retval = __Pyx_PyObject_CallMethod1(L, __pyx_n_s_append, x);
+        if (unlikely(!retval))
+            return -1;
+        Py_DECREF(retval);
+    }
+    return 0;
+}
+
+/* ArgTypeTest */
+        static void __Pyx_RaiseArgumentTypeInvalid(const char* name, PyObject *obj, PyTypeObject *type) {
+    PyErr_Format(PyExc_TypeError,
+        "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)",
+        name, type->tp_name, Py_TYPE(obj)->tp_name);
+}
+static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
+    const char *name, int exact)
+{
+    if (unlikely(!type)) {
+        PyErr_SetString(PyExc_SystemError, "Missing type object");
+        return 0;
+    }
+    if (none_allowed && obj == Py_None) return 1;
+    else if (exact) {
+        if (likely(Py_TYPE(obj) == type)) return 1;
+        #if PY_MAJOR_VERSION == 2
+        else if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1;
+        #endif
+    }
+    else {
+        if (likely(PyObject_TypeCheck(obj, type))) return 1;
+    }
+    __Pyx_RaiseArgumentTypeInvalid(name, obj, type);
+    return 0;
+}
+
+/* ExtTypeTest */
+        static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
+    if (unlikely(!type)) {
+        PyErr_SetString(PyExc_SystemError, "Missing type object");
+        return 0;
+    }
+    if (likely(PyObject_TypeCheck(obj, type)))
+        return 1;
+    PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
+                 Py_TYPE(obj)->tp_name, type->tp_name);
+    return 0;
+}
+
+/* GetModuleGlobalName */
+        static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) {
+    PyObject *result;
+#if CYTHON_COMPILING_IN_CPYTHON
+    result = PyDict_GetItem(__pyx_d, name);
+    if (likely(result)) {
+        Py_INCREF(result);
+    } else {
+#else
+    result = PyObject_GetItem(__pyx_d, name);
+    if (!result) {
+        PyErr_Clear();
+#endif
+        result = __Pyx_GetBuiltinName(name);
+    }
+    return result;
+}
+
+/* CallNextTpDealloc */
+          static void __Pyx_call_next_tp_dealloc(PyObject* obj, destructor current_tp_dealloc) {
+    PyTypeObject* type = Py_TYPE(obj);
+    while (type && type->tp_dealloc != current_tp_dealloc)
+        type = type->tp_base;
+    while (type && type->tp_dealloc == current_tp_dealloc)
+        type = type->tp_base;
+    if (type)
+        type->tp_dealloc(obj);
+}
+
+/* CallNextTpTraverse */
+          static int __Pyx_call_next_tp_traverse(PyObject* obj, visitproc v, void *a, traverseproc current_tp_traverse) {
+    PyTypeObject* type = Py_TYPE(obj);
+    while (type && type->tp_traverse != current_tp_traverse)
+        type = type->tp_base;
+    while (type && type->tp_traverse == current_tp_traverse)
+        type = type->tp_base;
+    if (type && type->tp_traverse)
+        return type->tp_traverse(obj, v, a);
+    return 0;
+}
+
+/* CallNextTpClear */
+          static void __Pyx_call_next_tp_clear(PyObject* obj, inquiry current_tp_clear) {
+    PyTypeObject* type = Py_TYPE(obj);
+    while (type && type->tp_clear != current_tp_clear)
+        type = type->tp_base;
+    while (type && type->tp_clear == current_tp_clear)
+        type = type->tp_base;
+    if (type && type->tp_clear)
+        type->tp_clear(obj);
+}
+
+/* GetVTable */
+          static void* __Pyx_GetVtable(PyObject *dict) {
+    void* ptr;
+    PyObject *ob = PyObject_GetItem(dict, __pyx_n_s_pyx_vtable);
+    if (!ob)
+        goto bad;
+#if PY_VERSION_HEX >= 0x02070000
+    ptr = PyCapsule_GetPointer(ob, 0);
+#else
+    ptr = PyCObject_AsVoidPtr(ob);
+#endif
+    if (!ptr && !PyErr_Occurred())
+        PyErr_SetString(PyExc_RuntimeError, "invalid vtable found for imported type");
+    Py_DECREF(ob);
+    return ptr;
+bad:
+    Py_XDECREF(ob);
+    return NULL;
+}
+
+/* SetVTable */
+          static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
+#if PY_VERSION_HEX >= 0x02070000
+    PyObject *ob = PyCapsule_New(vtable, 0, 0);
+#else
+    PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
+#endif
+    if (!ob)
+        goto bad;
+    if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0)
+        goto bad;
+    Py_DECREF(ob);
+    return 0;
+bad:
+    Py_XDECREF(ob);
+    return -1;
+}
+
+/* Import */
+          static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
+    PyObject *empty_list = 0;
+    PyObject *module = 0;
+    PyObject *global_dict = 0;
+    PyObject *empty_dict = 0;
+    PyObject *list;
+    #if PY_VERSION_HEX < 0x03030000
+    PyObject *py_import;
+    py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import);
+    if (!py_import)
+        goto bad;
+    #endif
+    if (from_list)
+        list = from_list;
+    else {
+        empty_list = PyList_New(0);
+        if (!empty_list)
+            goto bad;
+        list = empty_list;
+    }
+    global_dict = PyModule_GetDict(__pyx_m);
+    if (!global_dict)
+        goto bad;
+    empty_dict = PyDict_New();
+    if (!empty_dict)
+        goto bad;
+    {
+        #if PY_MAJOR_VERSION >= 3
+        if (level == -1) {
+            if (strchr(__Pyx_MODULE_NAME, '.')) {
+                #if PY_VERSION_HEX < 0x03030000
+                PyObject *py_level = PyInt_FromLong(1);
+                if (!py_level)
+                    goto bad;
+                module = PyObject_CallFunctionObjArgs(py_import,
+                    name, global_dict, empty_dict, list, py_level, NULL);
+                Py_DECREF(py_level);
+                #else
+                module = PyImport_ImportModuleLevelObject(
+                    name, global_dict, empty_dict, list, 1);
+                #endif
+                if (!module) {
+                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
+                        goto bad;
+                    PyErr_Clear();
+                }
+            }
+            level = 0;
+        }
+        #endif
+        if (!module) {
+            #if PY_VERSION_HEX < 0x03030000
+            PyObject *py_level = PyInt_FromLong(level);
+            if (!py_level)
+                goto bad;
+            module = PyObject_CallFunctionObjArgs(py_import,
+                name, global_dict, empty_dict, list, py_level, NULL);
+            Py_DECREF(py_level);
+            #else
+            module = PyImport_ImportModuleLevelObject(
+                name, global_dict, empty_dict, list, level);
+            #endif
+        }
+    }
+bad:
+    #if PY_VERSION_HEX < 0x03030000
+    Py_XDECREF(py_import);
+    #endif
+    Py_XDECREF(empty_list);
+    Py_XDECREF(empty_dict);
+    return module;
+}
+
+/* ImportFrom */
+          static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
+    PyObject* value = __Pyx_PyObject_GetAttrStr(module, name);
+    if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) {
+        PyErr_Format(PyExc_ImportError,
+        #if PY_MAJOR_VERSION < 3
+            "cannot import name %.230s", PyString_AS_STRING(name));
+        #else
+            "cannot import name %S", name);
+        #endif
+    }
+    return value;
+}
+
+/* GetNameInClass */
+          static PyObject *__Pyx_GetNameInClass(PyObject *nmspace, PyObject *name) {
+    PyObject *result;
+    result = __Pyx_PyObject_GetAttrStr(nmspace, name);
+    if (!result)
+        result = __Pyx_GetModuleGlobalName(name);
+    return result;
+}
+
+/* CalculateMetaclass */
+          static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) {
+    Py_ssize_t i, nbases = PyTuple_GET_SIZE(bases);
+    for (i=0; i < nbases; i++) {
+        PyTypeObject *tmptype;
+        PyObject *tmp = PyTuple_GET_ITEM(bases, i);
+        tmptype = Py_TYPE(tmp);
+#if PY_MAJOR_VERSION < 3
+        if (tmptype == &PyClass_Type)
+            continue;
+#endif
+        if (!metaclass) {
+            metaclass = tmptype;
+            continue;
+        }
+        if (PyType_IsSubtype(metaclass, tmptype))
+            continue;
+        if (PyType_IsSubtype(tmptype, metaclass)) {
+            metaclass = tmptype;
+            continue;
+        }
+        PyErr_SetString(PyExc_TypeError,
+                        "metaclass conflict: "
+                        "the metaclass of a derived class "
+                        "must be a (non-strict) subclass "
+                        "of the metaclasses of all its bases");
+        return NULL;
+    }
+    if (!metaclass) {
+#if PY_MAJOR_VERSION < 3
+        metaclass = &PyClass_Type;
+#else
+        metaclass = &PyType_Type;
+#endif
+    }
+    Py_INCREF((PyObject*) metaclass);
+    return (PyObject*) metaclass;
+}
+
+/* Py3ClassCreate */
+          static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name,
+                                           PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) {
+    PyObject *ns;
+    if (metaclass) {
+        PyObject *prep = __Pyx_PyObject_GetAttrStr(metaclass, __pyx_n_s_prepare);
+        if (prep) {
+            PyObject *pargs = PyTuple_Pack(2, name, bases);
+            if (unlikely(!pargs)) {
+                Py_DECREF(prep);
+                return NULL;
+            }
+            ns = PyObject_Call(prep, pargs, mkw);
+            Py_DECREF(prep);
+            Py_DECREF(pargs);
+        } else {
+            if (unlikely(!PyErr_ExceptionMatches(PyExc_AttributeError)))
+                return NULL;
+            PyErr_Clear();
+            ns = PyDict_New();
+        }
+    } else {
+        ns = PyDict_New();
+    }
+    if (unlikely(!ns))
+        return NULL;
+    if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad;
+    if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad;
+    if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad;
+    return ns;
+bad:
+    Py_DECREF(ns);
+    return NULL;
+}
+static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases,
+                                      PyObject *dict, PyObject *mkw,
+                                      int calculate_metaclass, int allow_py2_metaclass) {
+    PyObject *result, *margs;
+    PyObject *owned_metaclass = NULL;
+    if (allow_py2_metaclass) {
+        owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass);
+        if (owned_metaclass) {
+            metaclass = owned_metaclass;
+        } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) {
+            PyErr_Clear();
+        } else {
+            return NULL;
+        }
+    }
+    if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) {
+        metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases);
+        Py_XDECREF(owned_metaclass);
+        if (unlikely(!metaclass))
+            return NULL;
+        owned_metaclass = metaclass;
+    }
+    margs = PyTuple_Pack(3, name, bases, dict);
+    if (unlikely(!margs)) {
+        result = NULL;
+    } else {
+        result = PyObject_Call(metaclass, margs, mkw);
+        Py_DECREF(margs);
+    }
+    Py_XDECREF(owned_metaclass);
+    return result;
+}
+
+/* ModuleImport */
+          #ifndef __PYX_HAVE_RT_ImportModule
+#define __PYX_HAVE_RT_ImportModule
+static PyObject *__Pyx_ImportModule(const char *name) {
+    PyObject *py_name = 0;
+    PyObject *py_module = 0;
+    py_name = __Pyx_PyIdentifier_FromString(name);
+    if (!py_name)
+        goto bad;
+    py_module = PyImport_Import(py_name);
+    Py_DECREF(py_name);
+    return py_module;
+bad:
+    Py_XDECREF(py_name);
+    return 0;
+}
+#endif
+
+/* RegisterModuleCleanup */
+          #if PY_MAJOR_VERSION < 3
+static PyObject* __pyx_module_cleanup_atexit(PyObject *module, CYTHON_UNUSED PyObject *unused) {
+    __pyx_module_cleanup(module);
+    Py_INCREF(Py_None); return Py_None;
+}
+static int __Pyx_RegisterCleanup(void) {
+    static PyMethodDef cleanup_def = {
+        "__cleanup", (PyCFunction)__pyx_module_cleanup_atexit, METH_NOARGS, 0};
+    PyObject *cleanup_func = 0;
+    PyObject *atexit = 0;
+    PyObject *reg = 0;
+    PyObject *args = 0;
+    PyObject *res = 0;
+    int ret = -1;
+    cleanup_func = PyCFunction_New(&cleanup_def, 0);
+    if (!cleanup_func)
+        goto bad;
+    atexit = __Pyx_ImportModule("atexit");
+    if (!atexit)
+        goto bad;
+    reg = PyObject_GetAttrString(atexit, "_exithandlers");
+    if (reg && PyList_Check(reg)) {
+        PyObject *a, *kw;
+        a = PyTuple_New(0);
+        kw = PyDict_New();
+        if (!a || !kw) {
+            Py_XDECREF(a);
+            Py_XDECREF(kw);
+            goto bad;
+        }
+        args = PyTuple_Pack(3, cleanup_func, a, kw);
+        Py_DECREF(a);
+        Py_DECREF(kw);
+        if (!args)
+            goto bad;
+        ret = PyList_Insert(reg, 0, args);
+    } else {
+        if (!reg)
+            PyErr_Clear();
+        Py_XDECREF(reg);
+        reg = PyObject_GetAttrString(atexit, "register");
+        if (!reg)
+            goto bad;
+        args = PyTuple_Pack(1, cleanup_func);
+        if (!args)
+            goto bad;
+        res = PyObject_CallObject(reg, args);
+        if (!res)
+            goto bad;
+        ret = 0;
+    }
+bad:
+    Py_XDECREF(cleanup_func);
+    Py_XDECREF(atexit);
+    Py_XDECREF(reg);
+    Py_XDECREF(args);
+    Py_XDECREF(res);
+    return ret;
+}
+#else
+static int __Pyx_RegisterCleanup(void) {
+    if (0) __Pyx_ImportModule(NULL);
+    return 0;
+}
+#endif
+
+/* CodeObjectCache */
+          static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
+    int start = 0, mid = 0, end = count - 1;
+    if (end >= 0 && code_line > entries[end].code_line) {
+        return count;
+    }
+    while (start < end) {
+        mid = start + (end - start) / 2;
+        if (code_line < entries[mid].code_line) {
+            end = mid;
+        } else if (code_line > entries[mid].code_line) {
+             start = mid + 1;
+        } else {
+            return mid;
+        }
+    }
+    if (code_line <= entries[mid].code_line) {
+        return mid;
+    } else {
+        return mid + 1;
+    }
+}
+static PyCodeObject *__pyx_find_code_object(int code_line) {
+    PyCodeObject* code_object;
+    int pos;
+    if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) {
+        return NULL;
+    }
+    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
+    if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) {
+        return NULL;
+    }
+    code_object = __pyx_code_cache.entries[pos].code_object;
+    Py_INCREF(code_object);
+    return code_object;
+}
+static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
+    int pos, i;
+    __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
+    if (unlikely(!code_line)) {
+        return;
+    }
+    if (unlikely(!entries)) {
+        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
+        if (likely(entries)) {
+            __pyx_code_cache.entries = entries;
+            __pyx_code_cache.max_count = 64;
+            __pyx_code_cache.count = 1;
+            entries[0].code_line = code_line;
+            entries[0].code_object = code_object;
+            Py_INCREF(code_object);
+        }
+        return;
+    }
+    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
+    if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) {
+        PyCodeObject* tmp = entries[pos].code_object;
+        entries[pos].code_object = code_object;
+        Py_DECREF(tmp);
+        return;
+    }
+    if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
+        int new_max = __pyx_code_cache.max_count + 64;
+        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
+            __pyx_code_cache.entries, (size_t)new_max*sizeof(__Pyx_CodeObjectCacheEntry));
+        if (unlikely(!entries)) {
+            return;
+        }
+        __pyx_code_cache.entries = entries;
+        __pyx_code_cache.max_count = new_max;
+    }
+    for (i=__pyx_code_cache.count; i>pos; i--) {
+        entries[i] = entries[i-1];
+    }
+    entries[pos].code_line = code_line;
+    entries[pos].code_object = code_object;
+    __pyx_code_cache.count++;
+    Py_INCREF(code_object);
+}
+
+/* AddTraceback */
+          #include "compile.h"
+#include "frameobject.h"
+#include "traceback.h"
+static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
+            const char *funcname, int c_line,
+            int py_line, const char *filename) {
+    PyCodeObject *py_code = 0;
+    PyObject *py_srcfile = 0;
+    PyObject *py_funcname = 0;
+    #if PY_MAJOR_VERSION < 3
+    py_srcfile = PyString_FromString(filename);
+    #else
+    py_srcfile = PyUnicode_FromString(filename);
+    #endif
+    if (!py_srcfile) goto bad;
+    if (c_line) {
+        #if PY_MAJOR_VERSION < 3
+        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
+        #else
+        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
+        #endif
+    }
+    else {
+        #if PY_MAJOR_VERSION < 3
+        py_funcname = PyString_FromString(funcname);
+        #else
+        py_funcname = PyUnicode_FromString(funcname);
+        #endif
+    }
+    if (!py_funcname) goto bad;
+    py_code = __Pyx_PyCode_New(
+        0,
+        0,
+        0,
+        0,
+        0,
+        __pyx_empty_bytes, /*PyObject *code,*/
+        __pyx_empty_tuple, /*PyObject *consts,*/
+        __pyx_empty_tuple, /*PyObject *names,*/
+        __pyx_empty_tuple, /*PyObject *varnames,*/
+        __pyx_empty_tuple, /*PyObject *freevars,*/
+        __pyx_empty_tuple, /*PyObject *cellvars,*/
+        py_srcfile,   /*PyObject *filename,*/
+        py_funcname,  /*PyObject *name,*/
+        py_line,
+        __pyx_empty_bytes  /*PyObject *lnotab*/
+    );
+    Py_DECREF(py_srcfile);
+    Py_DECREF(py_funcname);
+    return py_code;
+bad:
+    Py_XDECREF(py_srcfile);
+    Py_XDECREF(py_funcname);
+    return NULL;
+}
+static void __Pyx_AddTraceback(const char *funcname, int c_line,
+                               int py_line, const char *filename) {
+    PyCodeObject *py_code = 0;
+    PyFrameObject *py_frame = 0;
+    py_code = __pyx_find_code_object(c_line ? c_line : py_line);
+    if (!py_code) {
+        py_code = __Pyx_CreateCodeObjectForTraceback(
+            funcname, c_line, py_line, filename);
+        if (!py_code) goto bad;
+        __pyx_insert_code_object(c_line ? c_line : py_line, py_code);
+    }
+    py_frame = PyFrame_New(
+        PyThreadState_GET(), /*PyThreadState *tstate,*/
+        py_code,             /*PyCodeObject *code,*/
+        __pyx_d,      /*PyObject *globals,*/
+        0                    /*PyObject *locals*/
+    );
+    if (!py_frame) goto bad;
+    py_frame->f_lineno = py_line;
+    PyTraceBack_Here(py_frame);
+bad:
+    Py_XDECREF(py_code);
+    Py_XDECREF(py_frame);
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
+    const int neg_one = (int) -1, const_zero = (int) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(int) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(int) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(int) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(int),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_STMatMode(STMatMode value) {
+    const STMatMode neg_one = (STMatMode) -1, const_zero = (STMatMode) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(STMatMode) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(STMatMode) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(STMatMode) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(STMatMode) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(STMatMode) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(STMatMode),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_BVOrthogType(BVOrthogType value) {
+    const BVOrthogType neg_one = (BVOrthogType) -1, const_zero = (BVOrthogType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(BVOrthogType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(BVOrthogType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(BVOrthogType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(BVOrthogType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(BVOrthogType) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(BVOrthogType),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_BVOrthogRefineType(BVOrthogRefineType value) {
+    const BVOrthogRefineType neg_one = (BVOrthogRefineType) -1, const_zero = (BVOrthogRefineType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(BVOrthogRefineType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(BVOrthogRefineType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(BVOrthogRefineType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(BVOrthogRefineType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(BVOrthogRefineType) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(BVOrthogRefineType),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_BVOrthogBlockType(BVOrthogBlockType value) {
+    const BVOrthogBlockType neg_one = (BVOrthogBlockType) -1, const_zero = (BVOrthogBlockType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(BVOrthogBlockType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(BVOrthogBlockType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(BVOrthogBlockType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(BVOrthogBlockType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(BVOrthogBlockType) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(BVOrthogBlockType),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntFromPyVerify */
+          #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
+    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0)
+#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\
+    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1)
+#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\
+    {\
+        func_type value = func_value;\
+        if (sizeof(target_type) < sizeof(func_type)) {\
+            if (unlikely(value != (func_type) (target_type) value)) {\
+                func_type zero = 0;\
+                if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\
+                    return (target_type) -1;\
+                if (is_unsigned && unlikely(value < zero))\
+                    goto raise_neg_overflow;\
+                else\
+                    goto raise_overflow;\
+            }\
+        }\
+        return (target_type) value;\
+    }
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_DSStateType(DSStateType value) {
+    const DSStateType neg_one = (DSStateType) -1, const_zero = (DSStateType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(DSStateType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(DSStateType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(DSStateType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(DSStateType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(DSStateType) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(DSStateType),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_DSMatType(DSMatType value) {
+    const DSMatType neg_one = (DSMatType) -1, const_zero = (DSMatType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(DSMatType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(DSMatType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(DSMatType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(DSMatType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(DSMatType) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(DSMatType),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_FNCombineType(FNCombineType value) {
+    const FNCombineType neg_one = (FNCombineType) -1, const_zero = (FNCombineType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(FNCombineType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(FNCombineType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(FNCombineType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(FNCombineType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(FNCombineType) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(FNCombineType),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_EPSProblemType(EPSProblemType value) {
+    const EPSProblemType neg_one = (EPSProblemType) -1, const_zero = (EPSProblemType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(EPSProblemType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(EPSProblemType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(EPSProblemType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(EPSProblemType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(EPSProblemType) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(EPSProblemType),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_EPSExtraction(EPSExtraction value) {
+    const EPSExtraction neg_one = (EPSExtraction) -1, const_zero = (EPSExtraction) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(EPSExtraction) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(EPSExtraction) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(EPSExtraction) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(EPSExtraction) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(EPSExtraction) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(EPSExtraction),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_EPSBalance(EPSBalance value) {
+    const EPSBalance neg_one = (EPSBalance) -1, const_zero = (EPSBalance) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(EPSBalance) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(EPSBalance) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(EPSBalance) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(EPSBalance) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(EPSBalance) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(EPSBalance),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_EPSErrorType(EPSErrorType value) {
+    const EPSErrorType neg_one = (EPSErrorType) -1, const_zero = (EPSErrorType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(EPSErrorType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(EPSErrorType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(EPSErrorType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(EPSErrorType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(EPSErrorType) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(EPSErrorType),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_EPSWhich(EPSWhich value) {
+    const EPSWhich neg_one = (EPSWhich) -1, const_zero = (EPSWhich) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(EPSWhich) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(EPSWhich) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(EPSWhich) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(EPSWhich) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(EPSWhich) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(EPSWhich),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_EPSConv(EPSConv value) {
+    const EPSConv neg_one = (EPSConv) -1, const_zero = (EPSConv) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(EPSConv) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(EPSConv) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(EPSConv) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(EPSConv) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(EPSConv) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(EPSConv),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_EPSConvergedReason(EPSConvergedReason value) {
+    const EPSConvergedReason neg_one = (EPSConvergedReason) -1, const_zero = (EPSConvergedReason) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(EPSConvergedReason) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(EPSConvergedReason) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(EPSConvergedReason) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(EPSConvergedReason) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(EPSConvergedReason) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(EPSConvergedReason),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_EPSPowerShiftType(EPSPowerShiftType value) {
+    const EPSPowerShiftType neg_one = (EPSPowerShiftType) -1, const_zero = (EPSPowerShiftType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(EPSPowerShiftType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(EPSPowerShiftType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(EPSPowerShiftType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(EPSPowerShiftType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(EPSPowerShiftType) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(EPSPowerShiftType),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_EPSLanczosReorthogType(EPSLanczosReorthogType value) {
+    const EPSLanczosReorthogType neg_one = (EPSLanczosReorthogType) -1, const_zero = (EPSLanczosReorthogType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(EPSLanczosReorthogType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(EPSLanczosReorthogType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(EPSLanczosReorthogType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(EPSLanczosReorthogType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(EPSLanczosReorthogType) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(EPSLanczosReorthogType),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_SVDErrorType(SVDErrorType value) {
+    const SVDErrorType neg_one = (SVDErrorType) -1, const_zero = (SVDErrorType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(SVDErrorType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(SVDErrorType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(SVDErrorType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(SVDErrorType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(SVDErrorType) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(SVDErrorType),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_SVDWhich(SVDWhich value) {
+    const SVDWhich neg_one = (SVDWhich) -1, const_zero = (SVDWhich) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(SVDWhich) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(SVDWhich) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(SVDWhich) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(SVDWhich) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(SVDWhich) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(SVDWhich),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_SVDConvergedReason(SVDConvergedReason value) {
+    const SVDConvergedReason neg_one = (SVDConvergedReason) -1, const_zero = (SVDConvergedReason) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(SVDConvergedReason) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(SVDConvergedReason) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(SVDConvergedReason) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(SVDConvergedReason) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(SVDConvergedReason) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(SVDConvergedReason),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PEPProblemType(PEPProblemType value) {
+    const PEPProblemType neg_one = (PEPProblemType) -1, const_zero = (PEPProblemType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PEPProblemType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PEPProblemType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(PEPProblemType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(PEPProblemType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PEPProblemType) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(PEPProblemType),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PEPWhich(PEPWhich value) {
+    const PEPWhich neg_one = (PEPWhich) -1, const_zero = (PEPWhich) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PEPWhich) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PEPWhich) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(PEPWhich) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(PEPWhich) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PEPWhich) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(PEPWhich),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PEPBasis(PEPBasis value) {
+    const PEPBasis neg_one = (PEPBasis) -1, const_zero = (PEPBasis) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PEPBasis) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PEPBasis) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(PEPBasis) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(PEPBasis) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PEPBasis) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(PEPBasis),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PEPScale(PEPScale value) {
+    const PEPScale neg_one = (PEPScale) -1, const_zero = (PEPScale) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PEPScale) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PEPScale) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(PEPScale) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(PEPScale) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PEPScale) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(PEPScale),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PEPRefine(PEPRefine value) {
+    const PEPRefine neg_one = (PEPRefine) -1, const_zero = (PEPRefine) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PEPRefine) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PEPRefine) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(PEPRefine) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(PEPRefine) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PEPRefine) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(PEPRefine),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PEPRefineScheme(PEPRefineScheme value) {
+    const PEPRefineScheme neg_one = (PEPRefineScheme) -1, const_zero = (PEPRefineScheme) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PEPRefineScheme) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PEPRefineScheme) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(PEPRefineScheme) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(PEPRefineScheme) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PEPRefineScheme) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(PEPRefineScheme),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PEPExtract(PEPExtract value) {
+    const PEPExtract neg_one = (PEPExtract) -1, const_zero = (PEPExtract) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PEPExtract) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PEPExtract) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(PEPExtract) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(PEPExtract) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PEPExtract) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(PEPExtract),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PEPErrorType(PEPErrorType value) {
+    const PEPErrorType neg_one = (PEPErrorType) -1, const_zero = (PEPErrorType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PEPErrorType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PEPErrorType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(PEPErrorType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(PEPErrorType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PEPErrorType) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(PEPErrorType),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PEPConv(PEPConv value) {
+    const PEPConv neg_one = (PEPConv) -1, const_zero = (PEPConv) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PEPConv) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PEPConv) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(PEPConv) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(PEPConv) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PEPConv) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(PEPConv),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PEPConvergedReason(PEPConvergedReason value) {
+    const PEPConvergedReason neg_one = (PEPConvergedReason) -1, const_zero = (PEPConvergedReason) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PEPConvergedReason) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PEPConvergedReason) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(PEPConvergedReason) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(PEPConvergedReason) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PEPConvergedReason) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(PEPConvergedReason),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_NEPErrorType(NEPErrorType value) {
+    const NEPErrorType neg_one = (NEPErrorType) -1, const_zero = (NEPErrorType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(NEPErrorType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(NEPErrorType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(NEPErrorType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(NEPErrorType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(NEPErrorType) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(NEPErrorType),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_NEPWhich(NEPWhich value) {
+    const NEPWhich neg_one = (NEPWhich) -1, const_zero = (NEPWhich) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(NEPWhich) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(NEPWhich) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(NEPWhich) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(NEPWhich) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(NEPWhich) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(NEPWhich),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_NEPConvergedReason(NEPConvergedReason value) {
+    const NEPConvergedReason neg_one = (NEPConvergedReason) -1, const_zero = (NEPConvergedReason) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(NEPConvergedReason) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(NEPConvergedReason) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(NEPConvergedReason) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(NEPConvergedReason) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(NEPConvergedReason) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(NEPConvergedReason),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_NEPRefine(NEPRefine value) {
+    const NEPRefine neg_one = (NEPRefine) -1, const_zero = (NEPRefine) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(NEPRefine) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(NEPRefine) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(NEPRefine) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(NEPRefine) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(NEPRefine) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(NEPRefine),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_NEPRefineScheme(NEPRefineScheme value) {
+    const NEPRefineScheme neg_one = (NEPRefineScheme) -1, const_zero = (NEPRefineScheme) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(NEPRefineScheme) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(NEPRefineScheme) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(NEPRefineScheme) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(NEPRefineScheme) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(NEPRefineScheme) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(NEPRefineScheme),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MFNConvergedReason(MFNConvergedReason value) {
+    const MFNConvergedReason neg_one = (MFNConvergedReason) -1, const_zero = (MFNConvergedReason) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(MFNConvergedReason) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(MFNConvergedReason) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(MFNConvergedReason) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(MFNConvergedReason) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(MFNConvergedReason) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(MFNConvergedReason),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
+    const long neg_one = (long) -1, const_zero = (long) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(long) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(long) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(long) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(long),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscInt(PetscInt value) {
+    const PetscInt neg_one = (PetscInt) -1, const_zero = (PetscInt) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PetscInt) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PetscInt) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(PetscInt) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(PetscInt) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PetscInt) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(PetscInt),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscBool(PetscBool value) {
+    const PetscBool neg_one = (PetscBool) -1, const_zero = (PetscBool) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PetscBool) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PetscBool) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(PetscBool) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(PetscBool) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PetscBool) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(PetscBool),
+                                     little, !is_unsigned);
+    }
+}
+
+/* ClassMethod */
+          static PyObject* __Pyx_Method_ClassMethod(PyObject *method) {
+#if CYTHON_COMPILING_IN_PYPY
+    if (PyObject_TypeCheck(method, &PyWrapperDescr_Type)) {
+        return PyClassMethod_New(method);
+    }
+#else
+    static PyTypeObject *methoddescr_type = NULL;
+    if (methoddescr_type == NULL) {
+       PyObject *meth = PyObject_GetAttrString((PyObject*)&PyList_Type, "append");
+       if (!meth) return NULL;
+       methoddescr_type = Py_TYPE(meth);
+       Py_DECREF(meth);
+    }
+    if (PyObject_TypeCheck(method, methoddescr_type)) {
+        PyMethodDescrObject *descr = (PyMethodDescrObject *)method;
+        #if PY_VERSION_HEX < 0x03020000
+        PyTypeObject *d_type = descr->d_type;
+        #else
+        PyTypeObject *d_type = descr->d_common.d_type;
+        #endif
+        return PyDescr_NewClassMethod(d_type, descr->d_method);
+    }
+#endif
+    else if (PyMethod_Check(method)) {
+        return PyClassMethod_New(PyMethod_GET_FUNCTION(method));
+    }
+    else if (PyCFunction_Check(method)) {
+        return PyClassMethod_New(method);
+    }
+#ifdef __Pyx_CyFunction_USED
+    else if (PyObject_TypeCheck(method, __pyx_CyFunctionType)) {
+        return PyClassMethod_New(method);
+    }
+#endif
+    PyErr_SetString(PyExc_TypeError,
+                   "Class-level classmethod() can only be called on "
+                   "a method_descriptor or instance method.");
+    return NULL;
+}
+
+/* CIntFromPy */
+          static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
+    const int neg_one = (int) -1, const_zero = (int) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(int) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (int) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (int) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(int) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) {
+                            return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(int) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) {
+                            return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(int) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) {
+                            return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (int) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(int) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (int) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(int,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {
+                            return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(int) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {
+                            return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {
+                            return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(int) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {
+                            return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) {
+                            return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(int) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) {
+                            return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(int) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x))
+            } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            int val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (int) -1;
+        }
+    } else {
+        int val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (int) -1;
+        val = __Pyx_PyInt_As_int(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to int");
+    return (int) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to int");
+    return (int) -1;
+}
+
+/* CIntFromPy */
+          static CYTHON_INLINE PetscInt __Pyx_PyInt_As_PetscInt(PyObject *x) {
+    const PetscInt neg_one = (PetscInt) -1, const_zero = (PetscInt) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(PetscInt) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(PetscInt, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (PetscInt) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PetscInt) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(PetscInt, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(PetscInt) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscInt, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscInt) >= 2 * PyLong_SHIFT) {
+                            return (PetscInt) (((((PetscInt)digits[1]) << PyLong_SHIFT) | (PetscInt)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PetscInt) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscInt, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscInt) >= 3 * PyLong_SHIFT) {
+                            return (PetscInt) (((((((PetscInt)digits[2]) << PyLong_SHIFT) | (PetscInt)digits[1]) << PyLong_SHIFT) | (PetscInt)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PetscInt) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscInt, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscInt) >= 4 * PyLong_SHIFT) {
+                            return (PetscInt) (((((((((PetscInt)digits[3]) << PyLong_SHIFT) | (PetscInt)digits[2]) << PyLong_SHIFT) | (PetscInt)digits[1]) << PyLong_SHIFT) | (PetscInt)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (PetscInt) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(PetscInt) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PetscInt, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(PetscInt) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PetscInt, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PetscInt) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(PetscInt, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(PetscInt,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(PetscInt) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscInt, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscInt) - 1 > 2 * PyLong_SHIFT) {
+                            return (PetscInt) (((PetscInt)-1)*(((((PetscInt)digits[1]) << PyLong_SHIFT) | (PetscInt)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(PetscInt) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscInt, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscInt) - 1 > 2 * PyLong_SHIFT) {
+                            return (PetscInt) ((((((PetscInt)digits[1]) << PyLong_SHIFT) | (PetscInt)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(PetscInt) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscInt, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscInt) - 1 > 3 * PyLong_SHIFT) {
+                            return (PetscInt) (((PetscInt)-1)*(((((((PetscInt)digits[2]) << PyLong_SHIFT) | (PetscInt)digits[1]) << PyLong_SHIFT) | (PetscInt)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PetscInt) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscInt, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscInt) - 1 > 3 * PyLong_SHIFT) {
+                            return (PetscInt) ((((((((PetscInt)digits[2]) << PyLong_SHIFT) | (PetscInt)digits[1]) << PyLong_SHIFT) | (PetscInt)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(PetscInt) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscInt, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscInt) - 1 > 4 * PyLong_SHIFT) {
+                            return (PetscInt) (((PetscInt)-1)*(((((((((PetscInt)digits[3]) << PyLong_SHIFT) | (PetscInt)digits[2]) << PyLong_SHIFT) | (PetscInt)digits[1]) << PyLong_SHIFT) | (PetscInt)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PetscInt) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscInt, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscInt) - 1 > 4 * PyLong_SHIFT) {
+                            return (PetscInt) ((((((((((PetscInt)digits[3]) << PyLong_SHIFT) | (PetscInt)digits[2]) << PyLong_SHIFT) | (PetscInt)digits[1]) << PyLong_SHIFT) | (PetscInt)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(PetscInt) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PetscInt, long, PyLong_AsLong(x))
+            } else if (sizeof(PetscInt) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PetscInt, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            PetscInt val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (PetscInt) -1;
+        }
+    } else {
+        PetscInt val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (PetscInt) -1;
+        val = __Pyx_PyInt_As_PetscInt(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to PetscInt");
+    return (PetscInt) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to PetscInt");
+    return (PetscInt) -1;
+}
+
+/* CIntFromPy */
+          static CYTHON_INLINE MatStructure __Pyx_PyInt_As_MatStructure(PyObject *x) {
+    const MatStructure neg_one = (MatStructure) -1, const_zero = (MatStructure) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(MatStructure) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(MatStructure, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (MatStructure) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (MatStructure) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(MatStructure, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(MatStructure) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatStructure, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatStructure) >= 2 * PyLong_SHIFT) {
+                            return (MatStructure) (((((MatStructure)digits[1]) << PyLong_SHIFT) | (MatStructure)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(MatStructure) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatStructure, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatStructure) >= 3 * PyLong_SHIFT) {
+                            return (MatStructure) (((((((MatStructure)digits[2]) << PyLong_SHIFT) | (MatStructure)digits[1]) << PyLong_SHIFT) | (MatStructure)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(MatStructure) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatStructure, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatStructure) >= 4 * PyLong_SHIFT) {
+                            return (MatStructure) (((((((((MatStructure)digits[3]) << PyLong_SHIFT) | (MatStructure)digits[2]) << PyLong_SHIFT) | (MatStructure)digits[1]) << PyLong_SHIFT) | (MatStructure)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (MatStructure) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(MatStructure) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(MatStructure, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(MatStructure) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(MatStructure, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (MatStructure) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(MatStructure, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(MatStructure,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(MatStructure) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatStructure, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatStructure) - 1 > 2 * PyLong_SHIFT) {
+                            return (MatStructure) (((MatStructure)-1)*(((((MatStructure)digits[1]) << PyLong_SHIFT) | (MatStructure)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(MatStructure) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatStructure, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatStructure) - 1 > 2 * PyLong_SHIFT) {
+                            return (MatStructure) ((((((MatStructure)digits[1]) << PyLong_SHIFT) | (MatStructure)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(MatStructure) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatStructure, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatStructure) - 1 > 3 * PyLong_SHIFT) {
+                            return (MatStructure) (((MatStructure)-1)*(((((((MatStructure)digits[2]) << PyLong_SHIFT) | (MatStructure)digits[1]) << PyLong_SHIFT) | (MatStructure)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(MatStructure) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatStructure, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatStructure) - 1 > 3 * PyLong_SHIFT) {
+                            return (MatStructure) ((((((((MatStructure)digits[2]) << PyLong_SHIFT) | (MatStructure)digits[1]) << PyLong_SHIFT) | (MatStructure)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(MatStructure) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatStructure, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatStructure) - 1 > 4 * PyLong_SHIFT) {
+                            return (MatStructure) (((MatStructure)-1)*(((((((((MatStructure)digits[3]) << PyLong_SHIFT) | (MatStructure)digits[2]) << PyLong_SHIFT) | (MatStructure)digits[1]) << PyLong_SHIFT) | (MatStructure)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(MatStructure) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(MatStructure, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(MatStructure) - 1 > 4 * PyLong_SHIFT) {
+                            return (MatStructure) ((((((((((MatStructure)digits[3]) << PyLong_SHIFT) | (MatStructure)digits[2]) << PyLong_SHIFT) | (MatStructure)digits[1]) << PyLong_SHIFT) | (MatStructure)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(MatStructure) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(MatStructure, long, PyLong_AsLong(x))
+            } else if (sizeof(MatStructure) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(MatStructure, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            MatStructure val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (MatStructure) -1;
+        }
+    } else {
+        MatStructure val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (MatStructure) -1;
+        val = __Pyx_PyInt_As_MatStructure(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to MatStructure");
+    return (MatStructure) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to MatStructure");
+    return (MatStructure) -1;
+}
+
+/* CIntFromPy */
+          static CYTHON_INLINE PetscBool __Pyx_PyInt_As_PetscBool(PyObject *x) {
+    const PetscBool neg_one = (PetscBool) -1, const_zero = (PetscBool) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(PetscBool) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(PetscBool, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (PetscBool) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PetscBool) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(PetscBool, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(PetscBool) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscBool, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscBool) >= 2 * PyLong_SHIFT) {
+                            return (PetscBool) (((((PetscBool)digits[1]) << PyLong_SHIFT) | (PetscBool)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PetscBool) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscBool, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscBool) >= 3 * PyLong_SHIFT) {
+                            return (PetscBool) (((((((PetscBool)digits[2]) << PyLong_SHIFT) | (PetscBool)digits[1]) << PyLong_SHIFT) | (PetscBool)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PetscBool) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscBool, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscBool) >= 4 * PyLong_SHIFT) {
+                            return (PetscBool) (((((((((PetscBool)digits[3]) << PyLong_SHIFT) | (PetscBool)digits[2]) << PyLong_SHIFT) | (PetscBool)digits[1]) << PyLong_SHIFT) | (PetscBool)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (PetscBool) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(PetscBool) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PetscBool, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(PetscBool) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PetscBool, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PetscBool) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(PetscBool, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(PetscBool,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(PetscBool) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscBool, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscBool) - 1 > 2 * PyLong_SHIFT) {
+                            return (PetscBool) (((PetscBool)-1)*(((((PetscBool)digits[1]) << PyLong_SHIFT) | (PetscBool)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(PetscBool) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscBool, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscBool) - 1 > 2 * PyLong_SHIFT) {
+                            return (PetscBool) ((((((PetscBool)digits[1]) << PyLong_SHIFT) | (PetscBool)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(PetscBool) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscBool, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscBool) - 1 > 3 * PyLong_SHIFT) {
+                            return (PetscBool) (((PetscBool)-1)*(((((((PetscBool)digits[2]) << PyLong_SHIFT) | (PetscBool)digits[1]) << PyLong_SHIFT) | (PetscBool)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PetscBool) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscBool, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscBool) - 1 > 3 * PyLong_SHIFT) {
+                            return (PetscBool) ((((((((PetscBool)digits[2]) << PyLong_SHIFT) | (PetscBool)digits[1]) << PyLong_SHIFT) | (PetscBool)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(PetscBool) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscBool, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscBool) - 1 > 4 * PyLong_SHIFT) {
+                            return (PetscBool) (((PetscBool)-1)*(((((((((PetscBool)digits[3]) << PyLong_SHIFT) | (PetscBool)digits[2]) << PyLong_SHIFT) | (PetscBool)digits[1]) << PyLong_SHIFT) | (PetscBool)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PetscBool) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscBool, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscBool) - 1 > 4 * PyLong_SHIFT) {
+                            return (PetscBool) ((((((((((PetscBool)digits[3]) << PyLong_SHIFT) | (PetscBool)digits[2]) << PyLong_SHIFT) | (PetscBool)digits[1]) << PyLong_SHIFT) | (PetscBool)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(PetscBool) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PetscBool, long, PyLong_AsLong(x))
+            } else if (sizeof(PetscBool) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PetscBool, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            PetscBool val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (PetscBool) -1;
+        }
+    } else {
+        PetscBool val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (PetscBool) -1;
+        val = __Pyx_PyInt_As_PetscBool(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to PetscBool");
+    return (PetscBool) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to PetscBool");
+    return (PetscBool) -1;
+}
+
+/* CIntFromPy */
+          static CYTHON_INLINE STMatMode __Pyx_PyInt_As_STMatMode(PyObject *x) {
+    const STMatMode neg_one = (STMatMode) -1, const_zero = (STMatMode) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(STMatMode) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(STMatMode, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (STMatMode) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (STMatMode) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(STMatMode, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(STMatMode) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(STMatMode, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(STMatMode) >= 2 * PyLong_SHIFT) {
+                            return (STMatMode) (((((STMatMode)digits[1]) << PyLong_SHIFT) | (STMatMode)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(STMatMode) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(STMatMode, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(STMatMode) >= 3 * PyLong_SHIFT) {
+                            return (STMatMode) (((((((STMatMode)digits[2]) << PyLong_SHIFT) | (STMatMode)digits[1]) << PyLong_SHIFT) | (STMatMode)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(STMatMode) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(STMatMode, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(STMatMode) >= 4 * PyLong_SHIFT) {
+                            return (STMatMode) (((((((((STMatMode)digits[3]) << PyLong_SHIFT) | (STMatMode)digits[2]) << PyLong_SHIFT) | (STMatMode)digits[1]) << PyLong_SHIFT) | (STMatMode)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (STMatMode) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(STMatMode) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(STMatMode, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(STMatMode) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(STMatMode, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (STMatMode) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(STMatMode, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(STMatMode,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(STMatMode) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(STMatMode, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(STMatMode) - 1 > 2 * PyLong_SHIFT) {
+                            return (STMatMode) (((STMatMode)-1)*(((((STMatMode)digits[1]) << PyLong_SHIFT) | (STMatMode)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(STMatMode) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(STMatMode, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(STMatMode) - 1 > 2 * PyLong_SHIFT) {
+                            return (STMatMode) ((((((STMatMode)digits[1]) << PyLong_SHIFT) | (STMatMode)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(STMatMode) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(STMatMode, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(STMatMode) - 1 > 3 * PyLong_SHIFT) {
+                            return (STMatMode) (((STMatMode)-1)*(((((((STMatMode)digits[2]) << PyLong_SHIFT) | (STMatMode)digits[1]) << PyLong_SHIFT) | (STMatMode)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(STMatMode) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(STMatMode, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(STMatMode) - 1 > 3 * PyLong_SHIFT) {
+                            return (STMatMode) ((((((((STMatMode)digits[2]) << PyLong_SHIFT) | (STMatMode)digits[1]) << PyLong_SHIFT) | (STMatMode)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(STMatMode) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(STMatMode, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(STMatMode) - 1 > 4 * PyLong_SHIFT) {
+                            return (STMatMode) (((STMatMode)-1)*(((((((((STMatMode)digits[3]) << PyLong_SHIFT) | (STMatMode)digits[2]) << PyLong_SHIFT) | (STMatMode)digits[1]) << PyLong_SHIFT) | (STMatMode)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(STMatMode) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(STMatMode, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(STMatMode) - 1 > 4 * PyLong_SHIFT) {
+                            return (STMatMode) ((((((((((STMatMode)digits[3]) << PyLong_SHIFT) | (STMatMode)digits[2]) << PyLong_SHIFT) | (STMatMode)digits[1]) << PyLong_SHIFT) | (STMatMode)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(STMatMode) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(STMatMode, long, PyLong_AsLong(x))
+            } else if (sizeof(STMatMode) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(STMatMode, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            STMatMode val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (STMatMode) -1;
+        }
+    } else {
+        STMatMode val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (STMatMode) -1;
+        val = __Pyx_PyInt_As_STMatMode(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to STMatMode");
+    return (STMatMode) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to STMatMode");
+    return (STMatMode) -1;
+}
+
+/* CIntFromPy */
+          static CYTHON_INLINE BVOrthogType __Pyx_PyInt_As_BVOrthogType(PyObject *x) {
+    const BVOrthogType neg_one = (BVOrthogType) -1, const_zero = (BVOrthogType) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(BVOrthogType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(BVOrthogType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (BVOrthogType) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (BVOrthogType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(BVOrthogType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(BVOrthogType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogType) >= 2 * PyLong_SHIFT) {
+                            return (BVOrthogType) (((((BVOrthogType)digits[1]) << PyLong_SHIFT) | (BVOrthogType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(BVOrthogType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogType) >= 3 * PyLong_SHIFT) {
+                            return (BVOrthogType) (((((((BVOrthogType)digits[2]) << PyLong_SHIFT) | (BVOrthogType)digits[1]) << PyLong_SHIFT) | (BVOrthogType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(BVOrthogType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogType) >= 4 * PyLong_SHIFT) {
+                            return (BVOrthogType) (((((((((BVOrthogType)digits[3]) << PyLong_SHIFT) | (BVOrthogType)digits[2]) << PyLong_SHIFT) | (BVOrthogType)digits[1]) << PyLong_SHIFT) | (BVOrthogType)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (BVOrthogType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(BVOrthogType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(BVOrthogType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(BVOrthogType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(BVOrthogType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (BVOrthogType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(BVOrthogType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(BVOrthogType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(BVOrthogType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogType) - 1 > 2 * PyLong_SHIFT) {
+                            return (BVOrthogType) (((BVOrthogType)-1)*(((((BVOrthogType)digits[1]) << PyLong_SHIFT) | (BVOrthogType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(BVOrthogType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogType) - 1 > 2 * PyLong_SHIFT) {
+                            return (BVOrthogType) ((((((BVOrthogType)digits[1]) << PyLong_SHIFT) | (BVOrthogType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(BVOrthogType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogType) - 1 > 3 * PyLong_SHIFT) {
+                            return (BVOrthogType) (((BVOrthogType)-1)*(((((((BVOrthogType)digits[2]) << PyLong_SHIFT) | (BVOrthogType)digits[1]) << PyLong_SHIFT) | (BVOrthogType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(BVOrthogType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogType) - 1 > 3 * PyLong_SHIFT) {
+                            return (BVOrthogType) ((((((((BVOrthogType)digits[2]) << PyLong_SHIFT) | (BVOrthogType)digits[1]) << PyLong_SHIFT) | (BVOrthogType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(BVOrthogType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogType, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogType) - 1 > 4 * PyLong_SHIFT) {
+                            return (BVOrthogType) (((BVOrthogType)-1)*(((((((((BVOrthogType)digits[3]) << PyLong_SHIFT) | (BVOrthogType)digits[2]) << PyLong_SHIFT) | (BVOrthogType)digits[1]) << PyLong_SHIFT) | (BVOrthogType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(BVOrthogType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogType) - 1 > 4 * PyLong_SHIFT) {
+                            return (BVOrthogType) ((((((((((BVOrthogType)digits[3]) << PyLong_SHIFT) | (BVOrthogType)digits[2]) << PyLong_SHIFT) | (BVOrthogType)digits[1]) << PyLong_SHIFT) | (BVOrthogType)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(BVOrthogType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(BVOrthogType, long, PyLong_AsLong(x))
+            } else if (sizeof(BVOrthogType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(BVOrthogType, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            BVOrthogType val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (BVOrthogType) -1;
+        }
+    } else {
+        BVOrthogType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (BVOrthogType) -1;
+        val = __Pyx_PyInt_As_BVOrthogType(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to BVOrthogType");
+    return (BVOrthogType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to BVOrthogType");
+    return (BVOrthogType) -1;
+}
+
+/* CIntFromPy */
+          static CYTHON_INLINE BVOrthogRefineType __Pyx_PyInt_As_BVOrthogRefineType(PyObject *x) {
+    const BVOrthogRefineType neg_one = (BVOrthogRefineType) -1, const_zero = (BVOrthogRefineType) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(BVOrthogRefineType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(BVOrthogRefineType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (BVOrthogRefineType) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (BVOrthogRefineType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(BVOrthogRefineType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(BVOrthogRefineType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogRefineType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogRefineType) >= 2 * PyLong_SHIFT) {
+                            return (BVOrthogRefineType) (((((BVOrthogRefineType)digits[1]) << PyLong_SHIFT) | (BVOrthogRefineType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(BVOrthogRefineType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogRefineType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogRefineType) >= 3 * PyLong_SHIFT) {
+                            return (BVOrthogRefineType) (((((((BVOrthogRefineType)digits[2]) << PyLong_SHIFT) | (BVOrthogRefineType)digits[1]) << PyLong_SHIFT) | (BVOrthogRefineType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(BVOrthogRefineType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogRefineType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogRefineType) >= 4 * PyLong_SHIFT) {
+                            return (BVOrthogRefineType) (((((((((BVOrthogRefineType)digits[3]) << PyLong_SHIFT) | (BVOrthogRefineType)digits[2]) << PyLong_SHIFT) | (BVOrthogRefineType)digits[1]) << PyLong_SHIFT) | (BVOrthogRefineType)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (BVOrthogRefineType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(BVOrthogRefineType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(BVOrthogRefineType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(BVOrthogRefineType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(BVOrthogRefineType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (BVOrthogRefineType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(BVOrthogRefineType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(BVOrthogRefineType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(BVOrthogRefineType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogRefineType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogRefineType) - 1 > 2 * PyLong_SHIFT) {
+                            return (BVOrthogRefineType) (((BVOrthogRefineType)-1)*(((((BVOrthogRefineType)digits[1]) << PyLong_SHIFT) | (BVOrthogRefineType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(BVOrthogRefineType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogRefineType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogRefineType) - 1 > 2 * PyLong_SHIFT) {
+                            return (BVOrthogRefineType) ((((((BVOrthogRefineType)digits[1]) << PyLong_SHIFT) | (BVOrthogRefineType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(BVOrthogRefineType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogRefineType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogRefineType) - 1 > 3 * PyLong_SHIFT) {
+                            return (BVOrthogRefineType) (((BVOrthogRefineType)-1)*(((((((BVOrthogRefineType)digits[2]) << PyLong_SHIFT) | (BVOrthogRefineType)digits[1]) << PyLong_SHIFT) | (BVOrthogRefineType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(BVOrthogRefineType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogRefineType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogRefineType) - 1 > 3 * PyLong_SHIFT) {
+                            return (BVOrthogRefineType) ((((((((BVOrthogRefineType)digits[2]) << PyLong_SHIFT) | (BVOrthogRefineType)digits[1]) << PyLong_SHIFT) | (BVOrthogRefineType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(BVOrthogRefineType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogRefineType, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogRefineType) - 1 > 4 * PyLong_SHIFT) {
+                            return (BVOrthogRefineType) (((BVOrthogRefineType)-1)*(((((((((BVOrthogRefineType)digits[3]) << PyLong_SHIFT) | (BVOrthogRefineType)digits[2]) << PyLong_SHIFT) | (BVOrthogRefineType)digits[1]) << PyLong_SHIFT) | (BVOrthogRefineType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(BVOrthogRefineType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogRefineType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogRefineType) - 1 > 4 * PyLong_SHIFT) {
+                            return (BVOrthogRefineType) ((((((((((BVOrthogRefineType)digits[3]) << PyLong_SHIFT) | (BVOrthogRefineType)digits[2]) << PyLong_SHIFT) | (BVOrthogRefineType)digits[1]) << PyLong_SHIFT) | (BVOrthogRefineType)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(BVOrthogRefineType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(BVOrthogRefineType, long, PyLong_AsLong(x))
+            } else if (sizeof(BVOrthogRefineType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(BVOrthogRefineType, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            BVOrthogRefineType val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (BVOrthogRefineType) -1;
+        }
+    } else {
+        BVOrthogRefineType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (BVOrthogRefineType) -1;
+        val = __Pyx_PyInt_As_BVOrthogRefineType(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to BVOrthogRefineType");
+    return (BVOrthogRefineType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to BVOrthogRefineType");
+    return (BVOrthogRefineType) -1;
 }
 
-static void __Pyx_CleanupGlobals(void) {
-  Py_CLEAR(__pyx_tuple__2);
-  Py_CLEAR(__pyx_tuple__3);
-  Py_CLEAR(__pyx_tuple__4);
-  Py_CLEAR(__pyx_codeobj__5);
-  Py_CLEAR(__pyx_codeobj__6);
-  if (__pyx_code_cache.entries) {
-      __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
-      int i, count = __pyx_code_cache.count;
-      __pyx_code_cache.count = 0;
-      __pyx_code_cache.max_count = 0;
-      __pyx_code_cache.entries = NULL;
-      for (i=0; i<count; i++) {
-          Py_DECREF(entries[i].code_object);
-      }
-      PyMem_Free(entries);
-  }
+/* CIntFromPy */
+          static CYTHON_INLINE BVOrthogBlockType __Pyx_PyInt_As_BVOrthogBlockType(PyObject *x) {
+    const BVOrthogBlockType neg_one = (BVOrthogBlockType) -1, const_zero = (BVOrthogBlockType) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(BVOrthogBlockType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(BVOrthogBlockType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (BVOrthogBlockType) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (BVOrthogBlockType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(BVOrthogBlockType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(BVOrthogBlockType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogBlockType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogBlockType) >= 2 * PyLong_SHIFT) {
+                            return (BVOrthogBlockType) (((((BVOrthogBlockType)digits[1]) << PyLong_SHIFT) | (BVOrthogBlockType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(BVOrthogBlockType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogBlockType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogBlockType) >= 3 * PyLong_SHIFT) {
+                            return (BVOrthogBlockType) (((((((BVOrthogBlockType)digits[2]) << PyLong_SHIFT) | (BVOrthogBlockType)digits[1]) << PyLong_SHIFT) | (BVOrthogBlockType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(BVOrthogBlockType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogBlockType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogBlockType) >= 4 * PyLong_SHIFT) {
+                            return (BVOrthogBlockType) (((((((((BVOrthogBlockType)digits[3]) << PyLong_SHIFT) | (BVOrthogBlockType)digits[2]) << PyLong_SHIFT) | (BVOrthogBlockType)digits[1]) << PyLong_SHIFT) | (BVOrthogBlockType)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (BVOrthogBlockType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(BVOrthogBlockType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(BVOrthogBlockType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(BVOrthogBlockType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(BVOrthogBlockType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (BVOrthogBlockType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(BVOrthogBlockType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(BVOrthogBlockType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(BVOrthogBlockType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogBlockType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogBlockType) - 1 > 2 * PyLong_SHIFT) {
+                            return (BVOrthogBlockType) (((BVOrthogBlockType)-1)*(((((BVOrthogBlockType)digits[1]) << PyLong_SHIFT) | (BVOrthogBlockType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(BVOrthogBlockType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogBlockType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogBlockType) - 1 > 2 * PyLong_SHIFT) {
+                            return (BVOrthogBlockType) ((((((BVOrthogBlockType)digits[1]) << PyLong_SHIFT) | (BVOrthogBlockType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(BVOrthogBlockType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogBlockType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogBlockType) - 1 > 3 * PyLong_SHIFT) {
+                            return (BVOrthogBlockType) (((BVOrthogBlockType)-1)*(((((((BVOrthogBlockType)digits[2]) << PyLong_SHIFT) | (BVOrthogBlockType)digits[1]) << PyLong_SHIFT) | (BVOrthogBlockType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(BVOrthogBlockType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogBlockType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogBlockType) - 1 > 3 * PyLong_SHIFT) {
+                            return (BVOrthogBlockType) ((((((((BVOrthogBlockType)digits[2]) << PyLong_SHIFT) | (BVOrthogBlockType)digits[1]) << PyLong_SHIFT) | (BVOrthogBlockType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(BVOrthogBlockType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogBlockType, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogBlockType) - 1 > 4 * PyLong_SHIFT) {
+                            return (BVOrthogBlockType) (((BVOrthogBlockType)-1)*(((((((((BVOrthogBlockType)digits[3]) << PyLong_SHIFT) | (BVOrthogBlockType)digits[2]) << PyLong_SHIFT) | (BVOrthogBlockType)digits[1]) << PyLong_SHIFT) | (BVOrthogBlockType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(BVOrthogBlockType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(BVOrthogBlockType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(BVOrthogBlockType) - 1 > 4 * PyLong_SHIFT) {
+                            return (BVOrthogBlockType) ((((((((((BVOrthogBlockType)digits[3]) << PyLong_SHIFT) | (BVOrthogBlockType)digits[2]) << PyLong_SHIFT) | (BVOrthogBlockType)digits[1]) << PyLong_SHIFT) | (BVOrthogBlockType)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(BVOrthogBlockType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(BVOrthogBlockType, long, PyLong_AsLong(x))
+            } else if (sizeof(BVOrthogBlockType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(BVOrthogBlockType, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            BVOrthogBlockType val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (BVOrthogBlockType) -1;
+        }
+    } else {
+        BVOrthogBlockType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (BVOrthogBlockType) -1;
+        val = __Pyx_PyInt_As_BVOrthogBlockType(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to BVOrthogBlockType");
+    return (BVOrthogBlockType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to BVOrthogBlockType");
+    return (BVOrthogBlockType) -1;
+}
+
+/* CIntFromPy */
+          static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *x) {
+    const size_t neg_one = (size_t) -1, const_zero = (size_t) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(size_t) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(size_t, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (size_t) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (size_t) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(size_t, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(size_t) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(size_t) >= 2 * PyLong_SHIFT) {
+                            return (size_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(size_t) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(size_t) >= 3 * PyLong_SHIFT) {
+                            return (size_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(size_t) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(size_t) >= 4 * PyLong_SHIFT) {
+                            return (size_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (size_t) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(size_t) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(size_t, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(size_t) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(size_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (size_t) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(size_t, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(size_t,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(size_t) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(size_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(size_t) - 1 > 2 * PyLong_SHIFT) {
+                            return (size_t) (((size_t)-1)*(((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(size_t) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(size_t) - 1 > 2 * PyLong_SHIFT) {
+                            return (size_t) ((((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(size_t) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(size_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(size_t) - 1 > 3 * PyLong_SHIFT) {
+                            return (size_t) (((size_t)-1)*(((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(size_t) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(size_t) - 1 > 3 * PyLong_SHIFT) {
+                            return (size_t) ((((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(size_t) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(size_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(size_t) - 1 > 4 * PyLong_SHIFT) {
+                            return (size_t) (((size_t)-1)*(((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(size_t) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(size_t) - 1 > 4 * PyLong_SHIFT) {
+                            return (size_t) ((((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(size_t) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(size_t, long, PyLong_AsLong(x))
+            } else if (sizeof(size_t) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(size_t, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            size_t val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (size_t) -1;
+        }
+    } else {
+        size_t val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (size_t) -1;
+        val = __Pyx_PyInt_As_size_t(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to size_t");
+    return (size_t) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to size_t");
+    return (size_t) -1;
+}
 
+/* CIntFromPy */
+          static CYTHON_INLINE NormType __Pyx_PyInt_As_NormType(PyObject *x) {
+    const NormType neg_one = (NormType) -1, const_zero = (NormType) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(NormType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(NormType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (NormType) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (NormType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(NormType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(NormType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NormType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NormType) >= 2 * PyLong_SHIFT) {
+                            return (NormType) (((((NormType)digits[1]) << PyLong_SHIFT) | (NormType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(NormType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NormType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NormType) >= 3 * PyLong_SHIFT) {
+                            return (NormType) (((((((NormType)digits[2]) << PyLong_SHIFT) | (NormType)digits[1]) << PyLong_SHIFT) | (NormType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(NormType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NormType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NormType) >= 4 * PyLong_SHIFT) {
+                            return (NormType) (((((((((NormType)digits[3]) << PyLong_SHIFT) | (NormType)digits[2]) << PyLong_SHIFT) | (NormType)digits[1]) << PyLong_SHIFT) | (NormType)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (NormType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(NormType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(NormType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(NormType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(NormType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (NormType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(NormType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(NormType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(NormType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NormType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NormType) - 1 > 2 * PyLong_SHIFT) {
+                            return (NormType) (((NormType)-1)*(((((NormType)digits[1]) << PyLong_SHIFT) | (NormType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(NormType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NormType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NormType) - 1 > 2 * PyLong_SHIFT) {
+                            return (NormType) ((((((NormType)digits[1]) << PyLong_SHIFT) | (NormType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(NormType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NormType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NormType) - 1 > 3 * PyLong_SHIFT) {
+                            return (NormType) (((NormType)-1)*(((((((NormType)digits[2]) << PyLong_SHIFT) | (NormType)digits[1]) << PyLong_SHIFT) | (NormType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(NormType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NormType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NormType) - 1 > 3 * PyLong_SHIFT) {
+                            return (NormType) ((((((((NormType)digits[2]) << PyLong_SHIFT) | (NormType)digits[1]) << PyLong_SHIFT) | (NormType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(NormType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NormType, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NormType) - 1 > 4 * PyLong_SHIFT) {
+                            return (NormType) (((NormType)-1)*(((((((((NormType)digits[3]) << PyLong_SHIFT) | (NormType)digits[2]) << PyLong_SHIFT) | (NormType)digits[1]) << PyLong_SHIFT) | (NormType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(NormType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NormType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NormType) - 1 > 4 * PyLong_SHIFT) {
+                            return (NormType) ((((((((((NormType)digits[3]) << PyLong_SHIFT) | (NormType)digits[2]) << PyLong_SHIFT) | (NormType)digits[1]) << PyLong_SHIFT) | (NormType)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(NormType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(NormType, long, PyLong_AsLong(x))
+            } else if (sizeof(NormType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(NormType, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            NormType val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (NormType) -1;
+        }
+    } else {
+        NormType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (NormType) -1;
+        val = __Pyx_PyInt_As_NormType(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to NormType");
+    return (NormType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to NormType");
+    return (NormType) -1;
 }
-static void __pyx_module_cleanup(CYTHON_UNUSED PyObject *self) {
-  /*--- Global cleanup code ---*/
-  Py_CLEAR(__pyx_v_8slepc4py_5SLEPc_PetscError);
-  __Pyx_CleanupGlobals();
-  /*--- Type import cleanup code ---*/
-  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_AO);
-  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_Comm);
-  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_DM);
-  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_IS);
-  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_KSP);
-  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_LGMap);
-  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_Mat);
-  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_NullSpace);
-  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_Object);
-  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_PC);
-  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_Partitioner);
-  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_Random);
-  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_SF);
-  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_SNES);
-  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_Scatter);
-  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_Section);
-  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_TAO);
-  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_TS);
-  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_Vec);
-  Py_CLEAR(__pyx_ptype_8petsc4py_5PETSc_Viewer);
-  /*--- Builtin cleanup code ---*/
-  Py_CLEAR(__pyx_builtin_object);
-  Py_CLEAR(__pyx_builtin_MemoryError);
-  Py_CLEAR(__pyx_builtin_range);
-  /*--- Intern cleanup code ---*/
-  Py_CLEAR(__pyx_empty_tuple);
-  #if CYTHON_COMPILING_IN_PYPY
-  Py_CLEAR(__pyx_b);
-  #endif
-  Py_CLEAR(__pyx_d);
+
+/* CIntFromPy */
+          static CYTHON_INLINE DSStateType __Pyx_PyInt_As_DSStateType(PyObject *x) {
+    const DSStateType neg_one = (DSStateType) -1, const_zero = (DSStateType) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(DSStateType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(DSStateType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (DSStateType) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (DSStateType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(DSStateType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(DSStateType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DSStateType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DSStateType) >= 2 * PyLong_SHIFT) {
+                            return (DSStateType) (((((DSStateType)digits[1]) << PyLong_SHIFT) | (DSStateType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(DSStateType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DSStateType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DSStateType) >= 3 * PyLong_SHIFT) {
+                            return (DSStateType) (((((((DSStateType)digits[2]) << PyLong_SHIFT) | (DSStateType)digits[1]) << PyLong_SHIFT) | (DSStateType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(DSStateType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DSStateType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DSStateType) >= 4 * PyLong_SHIFT) {
+                            return (DSStateType) (((((((((DSStateType)digits[3]) << PyLong_SHIFT) | (DSStateType)digits[2]) << PyLong_SHIFT) | (DSStateType)digits[1]) << PyLong_SHIFT) | (DSStateType)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (DSStateType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(DSStateType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(DSStateType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(DSStateType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(DSStateType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (DSStateType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(DSStateType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(DSStateType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(DSStateType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DSStateType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DSStateType) - 1 > 2 * PyLong_SHIFT) {
+                            return (DSStateType) (((DSStateType)-1)*(((((DSStateType)digits[1]) << PyLong_SHIFT) | (DSStateType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(DSStateType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DSStateType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DSStateType) - 1 > 2 * PyLong_SHIFT) {
+                            return (DSStateType) ((((((DSStateType)digits[1]) << PyLong_SHIFT) | (DSStateType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(DSStateType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DSStateType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DSStateType) - 1 > 3 * PyLong_SHIFT) {
+                            return (DSStateType) (((DSStateType)-1)*(((((((DSStateType)digits[2]) << PyLong_SHIFT) | (DSStateType)digits[1]) << PyLong_SHIFT) | (DSStateType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(DSStateType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DSStateType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DSStateType) - 1 > 3 * PyLong_SHIFT) {
+                            return (DSStateType) ((((((((DSStateType)digits[2]) << PyLong_SHIFT) | (DSStateType)digits[1]) << PyLong_SHIFT) | (DSStateType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(DSStateType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DSStateType, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DSStateType) - 1 > 4 * PyLong_SHIFT) {
+                            return (DSStateType) (((DSStateType)-1)*(((((((((DSStateType)digits[3]) << PyLong_SHIFT) | (DSStateType)digits[2]) << PyLong_SHIFT) | (DSStateType)digits[1]) << PyLong_SHIFT) | (DSStateType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(DSStateType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(DSStateType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(DSStateType) - 1 > 4 * PyLong_SHIFT) {
+                            return (DSStateType) ((((((((((DSStateType)digits[3]) << PyLong_SHIFT) | (DSStateType)digits[2]) << PyLong_SHIFT) | (DSStateType)digits[1]) << PyLong_SHIFT) | (DSStateType)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(DSStateType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(DSStateType, long, PyLong_AsLong(x))
+            } else if (sizeof(DSStateType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(DSStateType, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            DSStateType val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (DSStateType) -1;
+        }
+    } else {
+        DSStateType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (DSStateType) -1;
+        val = __Pyx_PyInt_As_DSStateType(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to DSStateType");
+    return (DSStateType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to DSStateType");
+    return (DSStateType) -1;
+}
+
+/* CIntFromPy */
+          static CYTHON_INLINE EPSProblemType __Pyx_PyInt_As_EPSProblemType(PyObject *x) {
+    const EPSProblemType neg_one = (EPSProblemType) -1, const_zero = (EPSProblemType) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(EPSProblemType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(EPSProblemType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (EPSProblemType) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (EPSProblemType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(EPSProblemType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(EPSProblemType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSProblemType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSProblemType) >= 2 * PyLong_SHIFT) {
+                            return (EPSProblemType) (((((EPSProblemType)digits[1]) << PyLong_SHIFT) | (EPSProblemType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(EPSProblemType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSProblemType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSProblemType) >= 3 * PyLong_SHIFT) {
+                            return (EPSProblemType) (((((((EPSProblemType)digits[2]) << PyLong_SHIFT) | (EPSProblemType)digits[1]) << PyLong_SHIFT) | (EPSProblemType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(EPSProblemType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSProblemType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSProblemType) >= 4 * PyLong_SHIFT) {
+                            return (EPSProblemType) (((((((((EPSProblemType)digits[3]) << PyLong_SHIFT) | (EPSProblemType)digits[2]) << PyLong_SHIFT) | (EPSProblemType)digits[1]) << PyLong_SHIFT) | (EPSProblemType)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (EPSProblemType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(EPSProblemType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSProblemType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(EPSProblemType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSProblemType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (EPSProblemType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(EPSProblemType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(EPSProblemType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(EPSProblemType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSProblemType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSProblemType) - 1 > 2 * PyLong_SHIFT) {
+                            return (EPSProblemType) (((EPSProblemType)-1)*(((((EPSProblemType)digits[1]) << PyLong_SHIFT) | (EPSProblemType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(EPSProblemType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSProblemType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSProblemType) - 1 > 2 * PyLong_SHIFT) {
+                            return (EPSProblemType) ((((((EPSProblemType)digits[1]) << PyLong_SHIFT) | (EPSProblemType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(EPSProblemType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSProblemType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSProblemType) - 1 > 3 * PyLong_SHIFT) {
+                            return (EPSProblemType) (((EPSProblemType)-1)*(((((((EPSProblemType)digits[2]) << PyLong_SHIFT) | (EPSProblemType)digits[1]) << PyLong_SHIFT) | (EPSProblemType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(EPSProblemType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSProblemType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSProblemType) - 1 > 3 * PyLong_SHIFT) {
+                            return (EPSProblemType) ((((((((EPSProblemType)digits[2]) << PyLong_SHIFT) | (EPSProblemType)digits[1]) << PyLong_SHIFT) | (EPSProblemType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(EPSProblemType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSProblemType, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSProblemType) - 1 > 4 * PyLong_SHIFT) {
+                            return (EPSProblemType) (((EPSProblemType)-1)*(((((((((EPSProblemType)digits[3]) << PyLong_SHIFT) | (EPSProblemType)digits[2]) << PyLong_SHIFT) | (EPSProblemType)digits[1]) << PyLong_SHIFT) | (EPSProblemType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(EPSProblemType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSProblemType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSProblemType) - 1 > 4 * PyLong_SHIFT) {
+                            return (EPSProblemType) ((((((((((EPSProblemType)digits[3]) << PyLong_SHIFT) | (EPSProblemType)digits[2]) << PyLong_SHIFT) | (EPSProblemType)digits[1]) << PyLong_SHIFT) | (EPSProblemType)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(EPSProblemType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSProblemType, long, PyLong_AsLong(x))
+            } else if (sizeof(EPSProblemType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSProblemType, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            EPSProblemType val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (EPSProblemType) -1;
+        }
+    } else {
+        EPSProblemType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (EPSProblemType) -1;
+        val = __Pyx_PyInt_As_EPSProblemType(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to EPSProblemType");
+    return (EPSProblemType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to EPSProblemType");
+    return (EPSProblemType) -1;
 }
 
-/* --- Runtime support code --- */
-#if CYTHON_REFNANNY
-static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
-    PyObject *m = NULL, *p = NULL;
-    void *r = NULL;
-    m = PyImport_ImportModule((char *)modname);
-    if (!m) goto end;
-    p = PyObject_GetAttrString(m, (char *)"RefNannyAPI");
-    if (!p) goto end;
-    r = PyLong_AsVoidPtr(p);
-end:
-    Py_XDECREF(p);
-    Py_XDECREF(m);
-    return (__Pyx_RefNannyAPIStruct *)r;
-}
+/* CIntFromPy */
+          static CYTHON_INLINE EPSBalance __Pyx_PyInt_As_EPSBalance(PyObject *x) {
+    const EPSBalance neg_one = (EPSBalance) -1, const_zero = (EPSBalance) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(EPSBalance) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(EPSBalance, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (EPSBalance) val;
+        }
+    } else
 #endif
-
-static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
-    PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name);
-    if (unlikely(!result)) {
-        PyErr_Format(PyExc_NameError,
-#if PY_MAJOR_VERSION >= 3
-            "name '%U' is not defined", name);
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (EPSBalance) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(EPSBalance, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(EPSBalance) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSBalance, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSBalance) >= 2 * PyLong_SHIFT) {
+                            return (EPSBalance) (((((EPSBalance)digits[1]) << PyLong_SHIFT) | (EPSBalance)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(EPSBalance) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSBalance, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSBalance) >= 3 * PyLong_SHIFT) {
+                            return (EPSBalance) (((((((EPSBalance)digits[2]) << PyLong_SHIFT) | (EPSBalance)digits[1]) << PyLong_SHIFT) | (EPSBalance)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(EPSBalance) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSBalance, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSBalance) >= 4 * PyLong_SHIFT) {
+                            return (EPSBalance) (((((((((EPSBalance)digits[3]) << PyLong_SHIFT) | (EPSBalance)digits[2]) << PyLong_SHIFT) | (EPSBalance)digits[1]) << PyLong_SHIFT) | (EPSBalance)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
 #else
-            "name '%.200s' is not defined", PyString_AS_STRING(name));
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (EPSBalance) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(EPSBalance) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSBalance, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(EPSBalance) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSBalance, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (EPSBalance) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(EPSBalance, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(EPSBalance,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(EPSBalance) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSBalance, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSBalance) - 1 > 2 * PyLong_SHIFT) {
+                            return (EPSBalance) (((EPSBalance)-1)*(((((EPSBalance)digits[1]) << PyLong_SHIFT) | (EPSBalance)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(EPSBalance) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSBalance, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSBalance) - 1 > 2 * PyLong_SHIFT) {
+                            return (EPSBalance) ((((((EPSBalance)digits[1]) << PyLong_SHIFT) | (EPSBalance)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(EPSBalance) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSBalance, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSBalance) - 1 > 3 * PyLong_SHIFT) {
+                            return (EPSBalance) (((EPSBalance)-1)*(((((((EPSBalance)digits[2]) << PyLong_SHIFT) | (EPSBalance)digits[1]) << PyLong_SHIFT) | (EPSBalance)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(EPSBalance) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSBalance, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSBalance) - 1 > 3 * PyLong_SHIFT) {
+                            return (EPSBalance) ((((((((EPSBalance)digits[2]) << PyLong_SHIFT) | (EPSBalance)digits[1]) << PyLong_SHIFT) | (EPSBalance)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(EPSBalance) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSBalance, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSBalance) - 1 > 4 * PyLong_SHIFT) {
+                            return (EPSBalance) (((EPSBalance)-1)*(((((((((EPSBalance)digits[3]) << PyLong_SHIFT) | (EPSBalance)digits[2]) << PyLong_SHIFT) | (EPSBalance)digits[1]) << PyLong_SHIFT) | (EPSBalance)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(EPSBalance) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSBalance, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSBalance) - 1 > 4 * PyLong_SHIFT) {
+                            return (EPSBalance) ((((((((((EPSBalance)digits[3]) << PyLong_SHIFT) | (EPSBalance)digits[2]) << PyLong_SHIFT) | (EPSBalance)digits[1]) << PyLong_SHIFT) | (EPSBalance)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(EPSBalance) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSBalance, long, PyLong_AsLong(x))
+            } else if (sizeof(EPSBalance) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSBalance, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            EPSBalance val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
 #endif
+            return (EPSBalance) -1;
+        }
+    } else {
+        EPSBalance val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (EPSBalance) -1;
+        val = __Pyx_PyInt_As_EPSBalance(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-    return result;
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to EPSBalance");
+    return (EPSBalance) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to EPSBalance");
+    return (EPSBalance) -1;
 }
 
-static CYTHON_INLINE PyObject* __Pyx_decode_c_bytes(
-         const char* cstring, Py_ssize_t length, Py_ssize_t start, Py_ssize_t stop,
-         const char* encoding, const char* errors,
-         PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) {
-    if (unlikely((start < 0) | (stop < 0))) {
-        if (start < 0) {
-            start += length;
-            if (start < 0)
-                start = 0;
+/* CIntFromPy */
+          static CYTHON_INLINE EPSExtraction __Pyx_PyInt_As_EPSExtraction(PyObject *x) {
+    const EPSExtraction neg_one = (EPSExtraction) -1, const_zero = (EPSExtraction) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(EPSExtraction) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(EPSExtraction, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (EPSExtraction) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (EPSExtraction) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(EPSExtraction, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(EPSExtraction) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSExtraction, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSExtraction) >= 2 * PyLong_SHIFT) {
+                            return (EPSExtraction) (((((EPSExtraction)digits[1]) << PyLong_SHIFT) | (EPSExtraction)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(EPSExtraction) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSExtraction, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSExtraction) >= 3 * PyLong_SHIFT) {
+                            return (EPSExtraction) (((((((EPSExtraction)digits[2]) << PyLong_SHIFT) | (EPSExtraction)digits[1]) << PyLong_SHIFT) | (EPSExtraction)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(EPSExtraction) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSExtraction, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSExtraction) >= 4 * PyLong_SHIFT) {
+                            return (EPSExtraction) (((((((((EPSExtraction)digits[3]) << PyLong_SHIFT) | (EPSExtraction)digits[2]) << PyLong_SHIFT) | (EPSExtraction)digits[1]) << PyLong_SHIFT) | (EPSExtraction)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (EPSExtraction) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(EPSExtraction) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSExtraction, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(EPSExtraction) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSExtraction, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (EPSExtraction) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(EPSExtraction, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(EPSExtraction,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(EPSExtraction) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSExtraction, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSExtraction) - 1 > 2 * PyLong_SHIFT) {
+                            return (EPSExtraction) (((EPSExtraction)-1)*(((((EPSExtraction)digits[1]) << PyLong_SHIFT) | (EPSExtraction)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(EPSExtraction) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSExtraction, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSExtraction) - 1 > 2 * PyLong_SHIFT) {
+                            return (EPSExtraction) ((((((EPSExtraction)digits[1]) << PyLong_SHIFT) | (EPSExtraction)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(EPSExtraction) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSExtraction, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSExtraction) - 1 > 3 * PyLong_SHIFT) {
+                            return (EPSExtraction) (((EPSExtraction)-1)*(((((((EPSExtraction)digits[2]) << PyLong_SHIFT) | (EPSExtraction)digits[1]) << PyLong_SHIFT) | (EPSExtraction)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(EPSExtraction) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSExtraction, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSExtraction) - 1 > 3 * PyLong_SHIFT) {
+                            return (EPSExtraction) ((((((((EPSExtraction)digits[2]) << PyLong_SHIFT) | (EPSExtraction)digits[1]) << PyLong_SHIFT) | (EPSExtraction)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(EPSExtraction) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSExtraction, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSExtraction) - 1 > 4 * PyLong_SHIFT) {
+                            return (EPSExtraction) (((EPSExtraction)-1)*(((((((((EPSExtraction)digits[3]) << PyLong_SHIFT) | (EPSExtraction)digits[2]) << PyLong_SHIFT) | (EPSExtraction)digits[1]) << PyLong_SHIFT) | (EPSExtraction)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(EPSExtraction) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSExtraction, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSExtraction) - 1 > 4 * PyLong_SHIFT) {
+                            return (EPSExtraction) ((((((((((EPSExtraction)digits[3]) << PyLong_SHIFT) | (EPSExtraction)digits[2]) << PyLong_SHIFT) | (EPSExtraction)digits[1]) << PyLong_SHIFT) | (EPSExtraction)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(EPSExtraction) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSExtraction, long, PyLong_AsLong(x))
+            } else if (sizeof(EPSExtraction) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSExtraction, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            EPSExtraction val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (EPSExtraction) -1;
         }
-        if (stop < 0)
-            stop += length;
-    }
-    if (stop > length)
-        stop = length;
-    length = stop - start;
-    if (unlikely(length <= 0))
-        return PyUnicode_FromUnicode(NULL, 0);
-    cstring += start;
-    if (decode_func) {
-        return decode_func(cstring, length, errors);
     } else {
-        return PyUnicode_Decode(cstring, length, encoding, errors);
+        EPSExtraction val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (EPSExtraction) -1;
+        val = __Pyx_PyInt_As_EPSExtraction(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to EPSExtraction");
+    return (EPSExtraction) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to EPSExtraction");
+    return (EPSExtraction) -1;
 }
 
+/* CIntFromPy */
+          static CYTHON_INLINE EPSWhich __Pyx_PyInt_As_EPSWhich(PyObject *x) {
+    const EPSWhich neg_one = (EPSWhich) -1, const_zero = (EPSWhich) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(EPSWhich) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(EPSWhich, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (EPSWhich) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (EPSWhich) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(EPSWhich, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(EPSWhich) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSWhich, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSWhich) >= 2 * PyLong_SHIFT) {
+                            return (EPSWhich) (((((EPSWhich)digits[1]) << PyLong_SHIFT) | (EPSWhich)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(EPSWhich) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSWhich, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSWhich) >= 3 * PyLong_SHIFT) {
+                            return (EPSWhich) (((((((EPSWhich)digits[2]) << PyLong_SHIFT) | (EPSWhich)digits[1]) << PyLong_SHIFT) | (EPSWhich)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(EPSWhich) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSWhich, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSWhich) >= 4 * PyLong_SHIFT) {
+                            return (EPSWhich) (((((((((EPSWhich)digits[3]) << PyLong_SHIFT) | (EPSWhich)digits[2]) << PyLong_SHIFT) | (EPSWhich)digits[1]) << PyLong_SHIFT) | (EPSWhich)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
 #if CYTHON_COMPILING_IN_CPYTHON
-static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
-    PyObject *result;
-    ternaryfunc call = func->ob_type->tp_call;
-    if (unlikely(!call))
-        return PyObject_Call(func, arg, kw);
-    if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
-        return NULL;
-    result = (*call)(func, arg, kw);
-    Py_LeaveRecursiveCall();
-    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
-        PyErr_SetString(
-            PyExc_SystemError,
-            "NULL result without error in PyObject_Call");
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (EPSWhich) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(EPSWhich) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSWhich, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(EPSWhich) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSWhich, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (EPSWhich) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(EPSWhich, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(EPSWhich,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(EPSWhich) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSWhich, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSWhich) - 1 > 2 * PyLong_SHIFT) {
+                            return (EPSWhich) (((EPSWhich)-1)*(((((EPSWhich)digits[1]) << PyLong_SHIFT) | (EPSWhich)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(EPSWhich) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSWhich, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSWhich) - 1 > 2 * PyLong_SHIFT) {
+                            return (EPSWhich) ((((((EPSWhich)digits[1]) << PyLong_SHIFT) | (EPSWhich)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(EPSWhich) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSWhich, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSWhich) - 1 > 3 * PyLong_SHIFT) {
+                            return (EPSWhich) (((EPSWhich)-1)*(((((((EPSWhich)digits[2]) << PyLong_SHIFT) | (EPSWhich)digits[1]) << PyLong_SHIFT) | (EPSWhich)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(EPSWhich) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSWhich, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSWhich) - 1 > 3 * PyLong_SHIFT) {
+                            return (EPSWhich) ((((((((EPSWhich)digits[2]) << PyLong_SHIFT) | (EPSWhich)digits[1]) << PyLong_SHIFT) | (EPSWhich)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(EPSWhich) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSWhich, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSWhich) - 1 > 4 * PyLong_SHIFT) {
+                            return (EPSWhich) (((EPSWhich)-1)*(((((((((EPSWhich)digits[3]) << PyLong_SHIFT) | (EPSWhich)digits[2]) << PyLong_SHIFT) | (EPSWhich)digits[1]) << PyLong_SHIFT) | (EPSWhich)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(EPSWhich) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSWhich, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSWhich) - 1 > 4 * PyLong_SHIFT) {
+                            return (EPSWhich) ((((((((((EPSWhich)digits[3]) << PyLong_SHIFT) | (EPSWhich)digits[2]) << PyLong_SHIFT) | (EPSWhich)digits[1]) << PyLong_SHIFT) | (EPSWhich)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(EPSWhich) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSWhich, long, PyLong_AsLong(x))
+            } else if (sizeof(EPSWhich) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSWhich, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            EPSWhich val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (EPSWhich) -1;
+        }
+    } else {
+        EPSWhich val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (EPSWhich) -1;
+        val = __Pyx_PyInt_As_EPSWhich(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-    return result;
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to EPSWhich");
+    return (EPSWhich) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to EPSWhich");
+    return (EPSWhich) -1;
 }
-#endif
 
+/* CIntFromPy */
+          static CYTHON_INLINE EPSConv __Pyx_PyInt_As_EPSConv(PyObject *x) {
+    const EPSConv neg_one = (EPSConv) -1, const_zero = (EPSConv) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(EPSConv) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(EPSConv, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (EPSConv) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (EPSConv) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(EPSConv, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(EPSConv) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSConv, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSConv) >= 2 * PyLong_SHIFT) {
+                            return (EPSConv) (((((EPSConv)digits[1]) << PyLong_SHIFT) | (EPSConv)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(EPSConv) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSConv, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSConv) >= 3 * PyLong_SHIFT) {
+                            return (EPSConv) (((((((EPSConv)digits[2]) << PyLong_SHIFT) | (EPSConv)digits[1]) << PyLong_SHIFT) | (EPSConv)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(EPSConv) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSConv, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSConv) >= 4 * PyLong_SHIFT) {
+                            return (EPSConv) (((((((((EPSConv)digits[3]) << PyLong_SHIFT) | (EPSConv)digits[2]) << PyLong_SHIFT) | (EPSConv)digits[1]) << PyLong_SHIFT) | (EPSConv)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
 #if CYTHON_COMPILING_IN_CPYTHON
-static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) {
-    PyObject *self, *result;
-    PyCFunction cfunc;
-    cfunc = PyCFunction_GET_FUNCTION(func);
-    self = PyCFunction_GET_SELF(func);
-    if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
-        return NULL;
-    result = cfunc(self, arg);
-    Py_LeaveRecursiveCall();
-    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
-        PyErr_SetString(
-            PyExc_SystemError,
-            "NULL result without error in PyObject_Call");
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (EPSConv) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(EPSConv) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSConv, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(EPSConv) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSConv, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (EPSConv) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(EPSConv, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(EPSConv,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(EPSConv) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSConv, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSConv) - 1 > 2 * PyLong_SHIFT) {
+                            return (EPSConv) (((EPSConv)-1)*(((((EPSConv)digits[1]) << PyLong_SHIFT) | (EPSConv)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(EPSConv) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSConv, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSConv) - 1 > 2 * PyLong_SHIFT) {
+                            return (EPSConv) ((((((EPSConv)digits[1]) << PyLong_SHIFT) | (EPSConv)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(EPSConv) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSConv, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSConv) - 1 > 3 * PyLong_SHIFT) {
+                            return (EPSConv) (((EPSConv)-1)*(((((((EPSConv)digits[2]) << PyLong_SHIFT) | (EPSConv)digits[1]) << PyLong_SHIFT) | (EPSConv)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(EPSConv) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSConv, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSConv) - 1 > 3 * PyLong_SHIFT) {
+                            return (EPSConv) ((((((((EPSConv)digits[2]) << PyLong_SHIFT) | (EPSConv)digits[1]) << PyLong_SHIFT) | (EPSConv)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(EPSConv) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSConv, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSConv) - 1 > 4 * PyLong_SHIFT) {
+                            return (EPSConv) (((EPSConv)-1)*(((((((((EPSConv)digits[3]) << PyLong_SHIFT) | (EPSConv)digits[2]) << PyLong_SHIFT) | (EPSConv)digits[1]) << PyLong_SHIFT) | (EPSConv)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(EPSConv) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSConv, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSConv) - 1 > 4 * PyLong_SHIFT) {
+                            return (EPSConv) ((((((((((EPSConv)digits[3]) << PyLong_SHIFT) | (EPSConv)digits[2]) << PyLong_SHIFT) | (EPSConv)digits[1]) << PyLong_SHIFT) | (EPSConv)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(EPSConv) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSConv, long, PyLong_AsLong(x))
+            } else if (sizeof(EPSConv) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSConv, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            EPSConv val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (EPSConv) -1;
+        }
+    } else {
+        EPSConv val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (EPSConv) -1;
+        val = __Pyx_PyInt_As_EPSConv(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-    return result;
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to EPSConv");
+    return (EPSConv) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to EPSConv");
+    return (EPSConv) -1;
 }
-#endif
 
+/* CIntFromPy */
+          static CYTHON_INLINE EPSErrorType __Pyx_PyInt_As_EPSErrorType(PyObject *x) {
+    const EPSErrorType neg_one = (EPSErrorType) -1, const_zero = (EPSErrorType) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(EPSErrorType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(EPSErrorType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (EPSErrorType) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (EPSErrorType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(EPSErrorType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(EPSErrorType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSErrorType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSErrorType) >= 2 * PyLong_SHIFT) {
+                            return (EPSErrorType) (((((EPSErrorType)digits[1]) << PyLong_SHIFT) | (EPSErrorType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(EPSErrorType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSErrorType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSErrorType) >= 3 * PyLong_SHIFT) {
+                            return (EPSErrorType) (((((((EPSErrorType)digits[2]) << PyLong_SHIFT) | (EPSErrorType)digits[1]) << PyLong_SHIFT) | (EPSErrorType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(EPSErrorType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSErrorType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSErrorType) >= 4 * PyLong_SHIFT) {
+                            return (EPSErrorType) (((((((((EPSErrorType)digits[3]) << PyLong_SHIFT) | (EPSErrorType)digits[2]) << PyLong_SHIFT) | (EPSErrorType)digits[1]) << PyLong_SHIFT) | (EPSErrorType)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
 #if CYTHON_COMPILING_IN_CPYTHON
-static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) {
-    PyObject *result;
-    PyObject *args = PyTuple_New(1);
-    if (unlikely(!args)) return NULL;
-    Py_INCREF(arg);
-    PyTuple_SET_ITEM(args, 0, arg);
-    result = __Pyx_PyObject_Call(func, args, NULL);
-    Py_DECREF(args);
-    return result;
-}
-static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
-#ifdef __Pyx_CyFunction_USED
-    if (likely(PyCFunction_Check(func) || PyObject_TypeCheck(func, __pyx_CyFunctionType))) {
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (EPSErrorType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(EPSErrorType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSErrorType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(EPSErrorType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSErrorType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (EPSErrorType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(EPSErrorType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(EPSErrorType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(EPSErrorType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSErrorType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSErrorType) - 1 > 2 * PyLong_SHIFT) {
+                            return (EPSErrorType) (((EPSErrorType)-1)*(((((EPSErrorType)digits[1]) << PyLong_SHIFT) | (EPSErrorType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(EPSErrorType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSErrorType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSErrorType) - 1 > 2 * PyLong_SHIFT) {
+                            return (EPSErrorType) ((((((EPSErrorType)digits[1]) << PyLong_SHIFT) | (EPSErrorType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(EPSErrorType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSErrorType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSErrorType) - 1 > 3 * PyLong_SHIFT) {
+                            return (EPSErrorType) (((EPSErrorType)-1)*(((((((EPSErrorType)digits[2]) << PyLong_SHIFT) | (EPSErrorType)digits[1]) << PyLong_SHIFT) | (EPSErrorType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(EPSErrorType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSErrorType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSErrorType) - 1 > 3 * PyLong_SHIFT) {
+                            return (EPSErrorType) ((((((((EPSErrorType)digits[2]) << PyLong_SHIFT) | (EPSErrorType)digits[1]) << PyLong_SHIFT) | (EPSErrorType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(EPSErrorType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSErrorType, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSErrorType) - 1 > 4 * PyLong_SHIFT) {
+                            return (EPSErrorType) (((EPSErrorType)-1)*(((((((((EPSErrorType)digits[3]) << PyLong_SHIFT) | (EPSErrorType)digits[2]) << PyLong_SHIFT) | (EPSErrorType)digits[1]) << PyLong_SHIFT) | (EPSErrorType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(EPSErrorType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSErrorType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSErrorType) - 1 > 4 * PyLong_SHIFT) {
+                            return (EPSErrorType) ((((((((((EPSErrorType)digits[3]) << PyLong_SHIFT) | (EPSErrorType)digits[2]) << PyLong_SHIFT) | (EPSErrorType)digits[1]) << PyLong_SHIFT) | (EPSErrorType)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(EPSErrorType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSErrorType, long, PyLong_AsLong(x))
+            } else if (sizeof(EPSErrorType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSErrorType, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
 #else
-    if (likely(PyCFunction_Check(func))) {
+            EPSErrorType val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
 #endif
-        if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) {
-            return __Pyx_PyObject_CallMethO(func, arg);
+            return (EPSErrorType) -1;
         }
+    } else {
+        EPSErrorType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (EPSErrorType) -1;
+        val = __Pyx_PyInt_As_EPSErrorType(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-    return __Pyx__PyObject_CallOneArg(func, arg);
-}
-#else
-static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
-    PyObject* args = PyTuple_Pack(1, arg);
-    return (likely(args)) ? __Pyx_PyObject_Call(func, args, NULL) : NULL;
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to EPSErrorType");
+    return (EPSErrorType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to EPSErrorType");
+    return (EPSErrorType) -1;
 }
-#endif
 
+/* CIntFromPy */
+          static CYTHON_INLINE EPSPowerShiftType __Pyx_PyInt_As_EPSPowerShiftType(PyObject *x) {
+    const EPSPowerShiftType neg_one = (EPSPowerShiftType) -1, const_zero = (EPSPowerShiftType) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(EPSPowerShiftType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(EPSPowerShiftType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (EPSPowerShiftType) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (EPSPowerShiftType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(EPSPowerShiftType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(EPSPowerShiftType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSPowerShiftType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSPowerShiftType) >= 2 * PyLong_SHIFT) {
+                            return (EPSPowerShiftType) (((((EPSPowerShiftType)digits[1]) << PyLong_SHIFT) | (EPSPowerShiftType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(EPSPowerShiftType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSPowerShiftType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSPowerShiftType) >= 3 * PyLong_SHIFT) {
+                            return (EPSPowerShiftType) (((((((EPSPowerShiftType)digits[2]) << PyLong_SHIFT) | (EPSPowerShiftType)digits[1]) << PyLong_SHIFT) | (EPSPowerShiftType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(EPSPowerShiftType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSPowerShiftType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSPowerShiftType) >= 4 * PyLong_SHIFT) {
+                            return (EPSPowerShiftType) (((((((((EPSPowerShiftType)digits[3]) << PyLong_SHIFT) | (EPSPowerShiftType)digits[2]) << PyLong_SHIFT) | (EPSPowerShiftType)digits[1]) << PyLong_SHIFT) | (EPSPowerShiftType)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
 #if CYTHON_COMPILING_IN_CPYTHON
-static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
-#ifdef __Pyx_CyFunction_USED
-    if (likely(PyCFunction_Check(func) || PyObject_TypeCheck(func, __pyx_CyFunctionType))) {
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
 #else
-    if (likely(PyCFunction_Check(func))) {
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (EPSPowerShiftType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
 #endif
-        if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) {
-            return __Pyx_PyObject_CallMethO(func, NULL);
+            if (sizeof(EPSPowerShiftType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSPowerShiftType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(EPSPowerShiftType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSPowerShiftType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (EPSPowerShiftType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(EPSPowerShiftType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(EPSPowerShiftType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(EPSPowerShiftType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSPowerShiftType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSPowerShiftType) - 1 > 2 * PyLong_SHIFT) {
+                            return (EPSPowerShiftType) (((EPSPowerShiftType)-1)*(((((EPSPowerShiftType)digits[1]) << PyLong_SHIFT) | (EPSPowerShiftType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(EPSPowerShiftType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSPowerShiftType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSPowerShiftType) - 1 > 2 * PyLong_SHIFT) {
+                            return (EPSPowerShiftType) ((((((EPSPowerShiftType)digits[1]) << PyLong_SHIFT) | (EPSPowerShiftType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(EPSPowerShiftType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSPowerShiftType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSPowerShiftType) - 1 > 3 * PyLong_SHIFT) {
+                            return (EPSPowerShiftType) (((EPSPowerShiftType)-1)*(((((((EPSPowerShiftType)digits[2]) << PyLong_SHIFT) | (EPSPowerShiftType)digits[1]) << PyLong_SHIFT) | (EPSPowerShiftType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(EPSPowerShiftType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSPowerShiftType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSPowerShiftType) - 1 > 3 * PyLong_SHIFT) {
+                            return (EPSPowerShiftType) ((((((((EPSPowerShiftType)digits[2]) << PyLong_SHIFT) | (EPSPowerShiftType)digits[1]) << PyLong_SHIFT) | (EPSPowerShiftType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(EPSPowerShiftType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSPowerShiftType, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSPowerShiftType) - 1 > 4 * PyLong_SHIFT) {
+                            return (EPSPowerShiftType) (((EPSPowerShiftType)-1)*(((((((((EPSPowerShiftType)digits[3]) << PyLong_SHIFT) | (EPSPowerShiftType)digits[2]) << PyLong_SHIFT) | (EPSPowerShiftType)digits[1]) << PyLong_SHIFT) | (EPSPowerShiftType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(EPSPowerShiftType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSPowerShiftType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSPowerShiftType) - 1 > 4 * PyLong_SHIFT) {
+                            return (EPSPowerShiftType) ((((((((((EPSPowerShiftType)digits[3]) << PyLong_SHIFT) | (EPSPowerShiftType)digits[2]) << PyLong_SHIFT) | (EPSPowerShiftType)digits[1]) << PyLong_SHIFT) | (EPSPowerShiftType)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(EPSPowerShiftType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSPowerShiftType, long, PyLong_AsLong(x))
+            } else if (sizeof(EPSPowerShiftType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSPowerShiftType, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
         }
-    }
-    return __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL);
-}
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            EPSPowerShiftType val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
 #endif
-
-static void __Pyx_RaiseArgtupleInvalid(
-    const char* func_name,
-    int exact,
-    Py_ssize_t num_min,
-    Py_ssize_t num_max,
-    Py_ssize_t num_found)
-{
-    Py_ssize_t num_expected;
-    const char *more_or_less;
-    if (num_found < num_min) {
-        num_expected = num_min;
-        more_or_less = "at least";
+            return (EPSPowerShiftType) -1;
+        }
     } else {
-        num_expected = num_max;
-        more_or_less = "at most";
-    }
-    if (exact) {
-        more_or_less = "exactly";
+        EPSPowerShiftType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (EPSPowerShiftType) -1;
+        val = __Pyx_PyInt_As_EPSPowerShiftType(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-    PyErr_Format(PyExc_TypeError,
-                 "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)",
-                 func_name, more_or_less, num_expected,
-                 (num_expected == 1) ? "" : "s", num_found);
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to EPSPowerShiftType");
+    return (EPSPowerShiftType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to EPSPowerShiftType");
+    return (EPSPowerShiftType) -1;
 }
 
-static CYTHON_INLINE int __Pyx_CheckKeywordStrings(
-    PyObject *kwdict,
-    const char* function_name,
-    int kw_allowed)
-{
-    PyObject* key = 0;
-    Py_ssize_t pos = 0;
-#if CYTHON_COMPILING_IN_PYPY
-    if (!kw_allowed && PyDict_Next(kwdict, &pos, &key, 0))
-        goto invalid_keyword;
-    return 1;
-#else
-    while (PyDict_Next(kwdict, &pos, &key, 0)) {
-        #if PY_MAJOR_VERSION < 3
-        if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key)))
-        #endif
-            if (unlikely(!PyUnicode_Check(key)))
-                goto invalid_keyword_type;
-    }
-    if ((!kw_allowed) && unlikely(key))
-        goto invalid_keyword;
-    return 1;
-invalid_keyword_type:
-    PyErr_Format(PyExc_TypeError,
-        "%.200s() keywords must be strings", function_name);
-    return 0;
+/* CIntFromPy */
+          static CYTHON_INLINE EPSLanczosReorthogType __Pyx_PyInt_As_EPSLanczosReorthogType(PyObject *x) {
+    const EPSLanczosReorthogType neg_one = (EPSLanczosReorthogType) -1, const_zero = (EPSLanczosReorthogType) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(EPSLanczosReorthogType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(EPSLanczosReorthogType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (EPSLanczosReorthogType) val;
+        }
+    } else
 #endif
-invalid_keyword:
-    PyErr_Format(PyExc_TypeError,
-    #if PY_MAJOR_VERSION < 3
-        "%.200s() got an unexpected keyword argument '%.200s'",
-        function_name, PyString_AsString(key));
-    #else
-        "%s() got an unexpected keyword argument '%U'",
-        function_name, key);
-    #endif
-    return 0;
-}
-
-static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    PyObject *tmp_type, *tmp_value, *tmp_tb;
-    PyThreadState *tstate = PyThreadState_GET();
-    tmp_type = tstate->curexc_type;
-    tmp_value = tstate->curexc_value;
-    tmp_tb = tstate->curexc_traceback;
-    tstate->curexc_type = type;
-    tstate->curexc_value = value;
-    tstate->curexc_traceback = tb;
-    Py_XDECREF(tmp_type);
-    Py_XDECREF(tmp_value);
-    Py_XDECREF(tmp_tb);
-#else
-    PyErr_Restore(type, value, tb);
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (EPSLanczosReorthogType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(EPSLanczosReorthogType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(EPSLanczosReorthogType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSLanczosReorthogType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSLanczosReorthogType) >= 2 * PyLong_SHIFT) {
+                            return (EPSLanczosReorthogType) (((((EPSLanczosReorthogType)digits[1]) << PyLong_SHIFT) | (EPSLanczosReorthogType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(EPSLanczosReorthogType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSLanczosReorthogType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSLanczosReorthogType) >= 3 * PyLong_SHIFT) {
+                            return (EPSLanczosReorthogType) (((((((EPSLanczosReorthogType)digits[2]) << PyLong_SHIFT) | (EPSLanczosReorthogType)digits[1]) << PyLong_SHIFT) | (EPSLanczosReorthogType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(EPSLanczosReorthogType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSLanczosReorthogType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSLanczosReorthogType) >= 4 * PyLong_SHIFT) {
+                            return (EPSLanczosReorthogType) (((((((((EPSLanczosReorthogType)digits[3]) << PyLong_SHIFT) | (EPSLanczosReorthogType)digits[2]) << PyLong_SHIFT) | (EPSLanczosReorthogType)digits[1]) << PyLong_SHIFT) | (EPSLanczosReorthogType)digits[0]));
+                        }
+                    }
+                    break;
+            }
 #endif
-}
-static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
 #if CYTHON_COMPILING_IN_CPYTHON
-    PyThreadState *tstate = PyThreadState_GET();
-    *type = tstate->curexc_type;
-    *value = tstate->curexc_value;
-    *tb = tstate->curexc_traceback;
-    tstate->curexc_type = 0;
-    tstate->curexc_value = 0;
-    tstate->curexc_traceback = 0;
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
 #else
-    PyErr_Fetch(type, value, tb);
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (EPSLanczosReorthogType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
 #endif
-}
-
-static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
-                                  CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename,
-                                  int full_traceback, CYTHON_UNUSED int nogil) {
-    PyObject *old_exc, *old_val, *old_tb;
-    PyObject *ctx;
-#ifdef WITH_THREAD
-    PyGILState_STATE state;
-    if (nogil)
-        state = PyGILState_Ensure();
+            if (sizeof(EPSLanczosReorthogType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSLanczosReorthogType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(EPSLanczosReorthogType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSLanczosReorthogType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (EPSLanczosReorthogType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(EPSLanczosReorthogType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(EPSLanczosReorthogType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(EPSLanczosReorthogType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSLanczosReorthogType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSLanczosReorthogType) - 1 > 2 * PyLong_SHIFT) {
+                            return (EPSLanczosReorthogType) (((EPSLanczosReorthogType)-1)*(((((EPSLanczosReorthogType)digits[1]) << PyLong_SHIFT) | (EPSLanczosReorthogType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(EPSLanczosReorthogType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSLanczosReorthogType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSLanczosReorthogType) - 1 > 2 * PyLong_SHIFT) {
+                            return (EPSLanczosReorthogType) ((((((EPSLanczosReorthogType)digits[1]) << PyLong_SHIFT) | (EPSLanczosReorthogType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(EPSLanczosReorthogType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSLanczosReorthogType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSLanczosReorthogType) - 1 > 3 * PyLong_SHIFT) {
+                            return (EPSLanczosReorthogType) (((EPSLanczosReorthogType)-1)*(((((((EPSLanczosReorthogType)digits[2]) << PyLong_SHIFT) | (EPSLanczosReorthogType)digits[1]) << PyLong_SHIFT) | (EPSLanczosReorthogType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(EPSLanczosReorthogType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSLanczosReorthogType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSLanczosReorthogType) - 1 > 3 * PyLong_SHIFT) {
+                            return (EPSLanczosReorthogType) ((((((((EPSLanczosReorthogType)digits[2]) << PyLong_SHIFT) | (EPSLanczosReorthogType)digits[1]) << PyLong_SHIFT) | (EPSLanczosReorthogType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(EPSLanczosReorthogType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSLanczosReorthogType, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSLanczosReorthogType) - 1 > 4 * PyLong_SHIFT) {
+                            return (EPSLanczosReorthogType) (((EPSLanczosReorthogType)-1)*(((((((((EPSLanczosReorthogType)digits[3]) << PyLong_SHIFT) | (EPSLanczosReorthogType)digits[2]) << PyLong_SHIFT) | (EPSLanczosReorthogType)digits[1]) << PyLong_SHIFT) | (EPSLanczosReorthogType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(EPSLanczosReorthogType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(EPSLanczosReorthogType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(EPSLanczosReorthogType) - 1 > 4 * PyLong_SHIFT) {
+                            return (EPSLanczosReorthogType) ((((((((((EPSLanczosReorthogType)digits[3]) << PyLong_SHIFT) | (EPSLanczosReorthogType)digits[2]) << PyLong_SHIFT) | (EPSLanczosReorthogType)digits[1]) << PyLong_SHIFT) | (EPSLanczosReorthogType)digits[0])));
+                        }
+                    }
+                    break;
+            }
 #endif
-    __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
-    if (full_traceback) {
-        Py_XINCREF(old_exc);
-        Py_XINCREF(old_val);
-        Py_XINCREF(old_tb);
-        __Pyx_ErrRestore(old_exc, old_val, old_tb);
-        PyErr_PrintEx(1);
-    }
-    #if PY_MAJOR_VERSION < 3
-    ctx = PyString_FromString(name);
-    #else
-    ctx = PyUnicode_FromString(name);
-    #endif
-    __Pyx_ErrRestore(old_exc, old_val, old_tb);
-    if (!ctx) {
-        PyErr_WriteUnraisable(Py_None);
+            if (sizeof(EPSLanczosReorthogType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSLanczosReorthogType, long, PyLong_AsLong(x))
+            } else if (sizeof(EPSLanczosReorthogType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(EPSLanczosReorthogType, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            EPSLanczosReorthogType val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (EPSLanczosReorthogType) -1;
+        }
     } else {
-        PyErr_WriteUnraisable(ctx);
-        Py_DECREF(ctx);
+        EPSLanczosReorthogType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (EPSLanczosReorthogType) -1;
+        val = __Pyx_PyInt_As_EPSLanczosReorthogType(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-#ifdef WITH_THREAD
-    if (nogil)
-        PyGILState_Release(state);
-#endif
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to EPSLanczosReorthogType");
+    return (EPSLanczosReorthogType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to EPSLanczosReorthogType");
+    return (EPSLanczosReorthogType) -1;
 }
 
-static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
-    PyObject *r;
-    if (!j) return NULL;
-    r = PyObject_GetItem(o, j);
-    Py_DECREF(j);
-    return r;
-}
-static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
-                                                              CYTHON_NCP_UNUSED int wraparound,
-                                                              CYTHON_NCP_UNUSED int boundscheck) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    if (wraparound & unlikely(i < 0)) i += PyList_GET_SIZE(o);
-    if ((!boundscheck) || likely((0 <= i) & (i < PyList_GET_SIZE(o)))) {
-        PyObject *r = PyList_GET_ITEM(o, i);
-        Py_INCREF(r);
-        return r;
-    }
-    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
-#else
-    return PySequence_GetItem(o, i);
+/* CIntFromPy */
+          static CYTHON_INLINE SVDWhich __Pyx_PyInt_As_SVDWhich(PyObject *x) {
+    const SVDWhich neg_one = (SVDWhich) -1, const_zero = (SVDWhich) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(SVDWhich) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(SVDWhich, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (SVDWhich) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (SVDWhich) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(SVDWhich, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(SVDWhich) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SVDWhich, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SVDWhich) >= 2 * PyLong_SHIFT) {
+                            return (SVDWhich) (((((SVDWhich)digits[1]) << PyLong_SHIFT) | (SVDWhich)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(SVDWhich) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SVDWhich, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SVDWhich) >= 3 * PyLong_SHIFT) {
+                            return (SVDWhich) (((((((SVDWhich)digits[2]) << PyLong_SHIFT) | (SVDWhich)digits[1]) << PyLong_SHIFT) | (SVDWhich)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(SVDWhich) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SVDWhich, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SVDWhich) >= 4 * PyLong_SHIFT) {
+                            return (SVDWhich) (((((((((SVDWhich)digits[3]) << PyLong_SHIFT) | (SVDWhich)digits[2]) << PyLong_SHIFT) | (SVDWhich)digits[1]) << PyLong_SHIFT) | (SVDWhich)digits[0]));
+                        }
+                    }
+                    break;
+            }
 #endif
-}
-static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
-                                                              CYTHON_NCP_UNUSED int wraparound,
-                                                              CYTHON_NCP_UNUSED int boundscheck) {
 #if CYTHON_COMPILING_IN_CPYTHON
-    if (wraparound & unlikely(i < 0)) i += PyTuple_GET_SIZE(o);
-    if ((!boundscheck) || likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
-        PyObject *r = PyTuple_GET_ITEM(o, i);
-        Py_INCREF(r);
-        return r;
-    }
-    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
 #else
-    return PySequence_GetItem(o, i);
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (SVDWhich) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
 #endif
-}
-static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list,
-                                                     CYTHON_NCP_UNUSED int wraparound,
-                                                     CYTHON_NCP_UNUSED int boundscheck) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    if (is_list || PyList_CheckExact(o)) {
-        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
-        if ((!boundscheck) || (likely((n >= 0) & (n < PyList_GET_SIZE(o))))) {
-            PyObject *r = PyList_GET_ITEM(o, n);
-            Py_INCREF(r);
-            return r;
-        }
-    }
-    else if (PyTuple_CheckExact(o)) {
-        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o);
-        if ((!boundscheck) || likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) {
-            PyObject *r = PyTuple_GET_ITEM(o, n);
-            Py_INCREF(r);
-            return r;
-        }
-    } else {
-        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
-        if (likely(m && m->sq_item)) {
-            if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
-                Py_ssize_t l = m->sq_length(o);
-                if (likely(l >= 0)) {
-                    i += l;
-                } else {
-                    if (PyErr_ExceptionMatches(PyExc_OverflowError))
-                        PyErr_Clear();
-                    else
-                        return NULL;
-                }
+            if (sizeof(SVDWhich) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(SVDWhich, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(SVDWhich) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(SVDWhich, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (SVDWhich) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(SVDWhich, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(SVDWhich,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(SVDWhich) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SVDWhich, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SVDWhich) - 1 > 2 * PyLong_SHIFT) {
+                            return (SVDWhich) (((SVDWhich)-1)*(((((SVDWhich)digits[1]) << PyLong_SHIFT) | (SVDWhich)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(SVDWhich) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SVDWhich, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SVDWhich) - 1 > 2 * PyLong_SHIFT) {
+                            return (SVDWhich) ((((((SVDWhich)digits[1]) << PyLong_SHIFT) | (SVDWhich)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(SVDWhich) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SVDWhich, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SVDWhich) - 1 > 3 * PyLong_SHIFT) {
+                            return (SVDWhich) (((SVDWhich)-1)*(((((((SVDWhich)digits[2]) << PyLong_SHIFT) | (SVDWhich)digits[1]) << PyLong_SHIFT) | (SVDWhich)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(SVDWhich) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SVDWhich, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SVDWhich) - 1 > 3 * PyLong_SHIFT) {
+                            return (SVDWhich) ((((((((SVDWhich)digits[2]) << PyLong_SHIFT) | (SVDWhich)digits[1]) << PyLong_SHIFT) | (SVDWhich)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(SVDWhich) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SVDWhich, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SVDWhich) - 1 > 4 * PyLong_SHIFT) {
+                            return (SVDWhich) (((SVDWhich)-1)*(((((((((SVDWhich)digits[3]) << PyLong_SHIFT) | (SVDWhich)digits[2]) << PyLong_SHIFT) | (SVDWhich)digits[1]) << PyLong_SHIFT) | (SVDWhich)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(SVDWhich) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SVDWhich, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SVDWhich) - 1 > 4 * PyLong_SHIFT) {
+                            return (SVDWhich) ((((((((((SVDWhich)digits[3]) << PyLong_SHIFT) | (SVDWhich)digits[2]) << PyLong_SHIFT) | (SVDWhich)digits[1]) << PyLong_SHIFT) | (SVDWhich)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(SVDWhich) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(SVDWhich, long, PyLong_AsLong(x))
+            } else if (sizeof(SVDWhich) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(SVDWhich, PY_LONG_LONG, PyLong_AsLongLong(x))
             }
-            return m->sq_item(o, i);
         }
-    }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
 #else
-    if (is_list || PySequence_Check(o)) {
-        return PySequence_GetItem(o, i);
-    }
+            SVDWhich val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
 #endif
-    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
-}
-
-static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
-    PyErr_Format(PyExc_ValueError,
-                 "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
-}
-
-static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
-    PyErr_Format(PyExc_ValueError,
-                 "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack",
-                 index, (index == 1) ? "" : "s");
+            return (SVDWhich) -1;
+        }
+    } else {
+        SVDWhich val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (SVDWhich) -1;
+        val = __Pyx_PyInt_As_SVDWhich(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to SVDWhich");
+    return (SVDWhich) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to SVDWhich");
+    return (SVDWhich) -1;
 }
 
-static CYTHON_INLINE int __Pyx_IterFinish(void) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    PyThreadState *tstate = PyThreadState_GET();
-    PyObject* exc_type = tstate->curexc_type;
-    if (unlikely(exc_type)) {
-        if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) {
-            PyObject *exc_value, *exc_tb;
-            exc_value = tstate->curexc_value;
-            exc_tb = tstate->curexc_traceback;
-            tstate->curexc_type = 0;
-            tstate->curexc_value = 0;
-            tstate->curexc_traceback = 0;
-            Py_DECREF(exc_type);
-            Py_XDECREF(exc_value);
-            Py_XDECREF(exc_tb);
-            return 0;
+/* CIntFromPy */
+          static CYTHON_INLINE SVDErrorType __Pyx_PyInt_As_SVDErrorType(PyObject *x) {
+    const SVDErrorType neg_one = (SVDErrorType) -1, const_zero = (SVDErrorType) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(SVDErrorType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(SVDErrorType, long, PyInt_AS_LONG(x))
         } else {
-            return -1;
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (SVDErrorType) val;
         }
-    }
-    return 0;
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (SVDErrorType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(SVDErrorType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(SVDErrorType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SVDErrorType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SVDErrorType) >= 2 * PyLong_SHIFT) {
+                            return (SVDErrorType) (((((SVDErrorType)digits[1]) << PyLong_SHIFT) | (SVDErrorType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(SVDErrorType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SVDErrorType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SVDErrorType) >= 3 * PyLong_SHIFT) {
+                            return (SVDErrorType) (((((((SVDErrorType)digits[2]) << PyLong_SHIFT) | (SVDErrorType)digits[1]) << PyLong_SHIFT) | (SVDErrorType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(SVDErrorType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SVDErrorType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SVDErrorType) >= 4 * PyLong_SHIFT) {
+                            return (SVDErrorType) (((((((((SVDErrorType)digits[3]) << PyLong_SHIFT) | (SVDErrorType)digits[2]) << PyLong_SHIFT) | (SVDErrorType)digits[1]) << PyLong_SHIFT) | (SVDErrorType)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
 #else
-    if (unlikely(PyErr_Occurred())) {
-        if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) {
-            PyErr_Clear();
-            return 0;
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (SVDErrorType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(SVDErrorType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(SVDErrorType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(SVDErrorType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(SVDErrorType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
         } else {
-            return -1;
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (SVDErrorType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(SVDErrorType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(SVDErrorType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(SVDErrorType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SVDErrorType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SVDErrorType) - 1 > 2 * PyLong_SHIFT) {
+                            return (SVDErrorType) (((SVDErrorType)-1)*(((((SVDErrorType)digits[1]) << PyLong_SHIFT) | (SVDErrorType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(SVDErrorType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SVDErrorType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SVDErrorType) - 1 > 2 * PyLong_SHIFT) {
+                            return (SVDErrorType) ((((((SVDErrorType)digits[1]) << PyLong_SHIFT) | (SVDErrorType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(SVDErrorType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SVDErrorType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SVDErrorType) - 1 > 3 * PyLong_SHIFT) {
+                            return (SVDErrorType) (((SVDErrorType)-1)*(((((((SVDErrorType)digits[2]) << PyLong_SHIFT) | (SVDErrorType)digits[1]) << PyLong_SHIFT) | (SVDErrorType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(SVDErrorType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SVDErrorType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SVDErrorType) - 1 > 3 * PyLong_SHIFT) {
+                            return (SVDErrorType) ((((((((SVDErrorType)digits[2]) << PyLong_SHIFT) | (SVDErrorType)digits[1]) << PyLong_SHIFT) | (SVDErrorType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(SVDErrorType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SVDErrorType, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SVDErrorType) - 1 > 4 * PyLong_SHIFT) {
+                            return (SVDErrorType) (((SVDErrorType)-1)*(((((((((SVDErrorType)digits[3]) << PyLong_SHIFT) | (SVDErrorType)digits[2]) << PyLong_SHIFT) | (SVDErrorType)digits[1]) << PyLong_SHIFT) | (SVDErrorType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(SVDErrorType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(SVDErrorType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(SVDErrorType) - 1 > 4 * PyLong_SHIFT) {
+                            return (SVDErrorType) ((((((((((SVDErrorType)digits[3]) << PyLong_SHIFT) | (SVDErrorType)digits[2]) << PyLong_SHIFT) | (SVDErrorType)digits[1]) << PyLong_SHIFT) | (SVDErrorType)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(SVDErrorType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(SVDErrorType, long, PyLong_AsLong(x))
+            } else if (sizeof(SVDErrorType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(SVDErrorType, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
         }
-    }
-    return 0;
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            SVDErrorType val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
 #endif
-}
-
-static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
-    if (unlikely(retval)) {
-        Py_DECREF(retval);
-        __Pyx_RaiseTooManyValuesError(expected);
-        return -1;
+            return (SVDErrorType) -1;
+        }
     } else {
-        return __Pyx_IterFinish();
+        SVDErrorType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (SVDErrorType) -1;
+        val = __Pyx_PyInt_As_SVDErrorType(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-    return 0;
-}
-
-static void __Pyx_RaiseDoubleKeywordsError(
-    const char* func_name,
-    PyObject* kw_name)
-{
-    PyErr_Format(PyExc_TypeError,
-        #if PY_MAJOR_VERSION >= 3
-        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
-        #else
-        "%s() got multiple values for keyword argument '%s'", func_name,
-        PyString_AsString(kw_name));
-        #endif
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to SVDErrorType");
+    return (SVDErrorType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to SVDErrorType");
+    return (SVDErrorType) -1;
 }
 
-static int __Pyx_ParseOptionalKeywords(
-    PyObject *kwds,
-    PyObject **argnames[],
-    PyObject *kwds2,
-    PyObject *values[],
-    Py_ssize_t num_pos_args,
-    const char* function_name)
-{
-    PyObject *key = 0, *value = 0;
-    Py_ssize_t pos = 0;
-    PyObject*** name;
-    PyObject*** first_kw_arg = argnames + num_pos_args;
-    while (PyDict_Next(kwds, &pos, &key, &value)) {
-        name = first_kw_arg;
-        while (*name && (**name != key)) name++;
-        if (*name) {
-            values[name-argnames] = value;
-            continue;
+/* CIntFromPy */
+          static CYTHON_INLINE PEPBasis __Pyx_PyInt_As_PEPBasis(PyObject *x) {
+    const PEPBasis neg_one = (PEPBasis) -1, const_zero = (PEPBasis) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(PEPBasis) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(PEPBasis, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (PEPBasis) val;
         }
-        name = first_kw_arg;
-        #if PY_MAJOR_VERSION < 3
-        if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) {
-            while (*name) {
-                if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
-                        && _PyString_Eq(**name, key)) {
-                    values[name-argnames] = value;
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PEPBasis) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(PEPBasis, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(PEPBasis) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPBasis, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPBasis) >= 2 * PyLong_SHIFT) {
+                            return (PEPBasis) (((((PEPBasis)digits[1]) << PyLong_SHIFT) | (PEPBasis)digits[0]));
+                        }
+                    }
                     break;
-                }
-                name++;
-            }
-            if (*name) continue;
-            else {
-                PyObject*** argname = argnames;
-                while (argname != first_kw_arg) {
-                    if ((**argname == key) || (
-                            (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
-                             && _PyString_Eq(**argname, key))) {
-                        goto arg_passed_twice;
+                case 3:
+                    if (8 * sizeof(PEPBasis) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPBasis, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPBasis) >= 3 * PyLong_SHIFT) {
+                            return (PEPBasis) (((((((PEPBasis)digits[2]) << PyLong_SHIFT) | (PEPBasis)digits[1]) << PyLong_SHIFT) | (PEPBasis)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PEPBasis) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPBasis, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPBasis) >= 4 * PyLong_SHIFT) {
+                            return (PEPBasis) (((((((((PEPBasis)digits[3]) << PyLong_SHIFT) | (PEPBasis)digits[2]) << PyLong_SHIFT) | (PEPBasis)digits[1]) << PyLong_SHIFT) | (PEPBasis)digits[0]));
+                        }
                     }
-                    argname++;
-                }
-            }
-        } else
-        #endif
-        if (likely(PyUnicode_Check(key))) {
-            while (*name) {
-                int cmp = (**name == key) ? 0 :
-                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
-                    (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :
-                #endif
-                    PyUnicode_Compare(**name, key);
-                if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
-                if (cmp == 0) {
-                    values[name-argnames] = value;
                     break;
-                }
-                name++;
             }
-            if (*name) continue;
-            else {
-                PyObject*** argname = argnames;
-                while (argname != first_kw_arg) {
-                    int cmp = (**argname == key) ? 0 :
-                    #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
-                        (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :
-                    #endif
-                        PyUnicode_Compare(**argname, key);
-                    if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
-                    if (cmp == 0) goto arg_passed_twice;
-                    argname++;
-                }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (PEPBasis) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(PEPBasis) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPBasis, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(PEPBasis) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPBasis, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
             }
-        } else
-            goto invalid_keyword_type;
-        if (kwds2) {
-            if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
         } else {
-            goto invalid_keyword;
-        }
-    }
-    return 0;
-arg_passed_twice:
-    __Pyx_RaiseDoubleKeywordsError(function_name, key);
-    goto bad;
-invalid_keyword_type:
-    PyErr_Format(PyExc_TypeError,
-        "%.200s() keywords must be strings", function_name);
-    goto bad;
-invalid_keyword:
-    PyErr_Format(PyExc_TypeError,
-    #if PY_MAJOR_VERSION < 3
-        "%.200s() got an unexpected keyword argument '%.200s'",
-        function_name, PyString_AsString(key));
-    #else
-        "%s() got an unexpected keyword argument '%U'",
-        function_name, key);
-    #endif
-bad:
-    return -1;
-}
-
-static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) {
-    PyObject *method, *result = NULL;
-    method = __Pyx_PyObject_GetAttrStr(obj, method_name);
-    if (unlikely(!method)) goto bad;
-#if CYTHON_COMPILING_IN_CPYTHON
-    if (likely(PyMethod_Check(method))) {
-        PyObject *self = PyMethod_GET_SELF(method);
-        if (likely(self)) {
-            PyObject *args;
-            PyObject *function = PyMethod_GET_FUNCTION(method);
-            args = PyTuple_New(2);
-            if (unlikely(!args)) goto bad;
-            Py_INCREF(self);
-            PyTuple_SET_ITEM(args, 0, self);
-            Py_INCREF(arg);
-            PyTuple_SET_ITEM(args, 1, arg);
-            Py_INCREF(function);
-            Py_DECREF(method); method = NULL;
-            result = __Pyx_PyObject_Call(function, args, NULL);
-            Py_DECREF(args);
-            Py_DECREF(function);
-            return result;
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PEPBasis) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(PEPBasis, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(PEPBasis,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(PEPBasis) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPBasis, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPBasis) - 1 > 2 * PyLong_SHIFT) {
+                            return (PEPBasis) (((PEPBasis)-1)*(((((PEPBasis)digits[1]) << PyLong_SHIFT) | (PEPBasis)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(PEPBasis) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPBasis, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPBasis) - 1 > 2 * PyLong_SHIFT) {
+                            return (PEPBasis) ((((((PEPBasis)digits[1]) << PyLong_SHIFT) | (PEPBasis)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(PEPBasis) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPBasis, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPBasis) - 1 > 3 * PyLong_SHIFT) {
+                            return (PEPBasis) (((PEPBasis)-1)*(((((((PEPBasis)digits[2]) << PyLong_SHIFT) | (PEPBasis)digits[1]) << PyLong_SHIFT) | (PEPBasis)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PEPBasis) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPBasis, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPBasis) - 1 > 3 * PyLong_SHIFT) {
+                            return (PEPBasis) ((((((((PEPBasis)digits[2]) << PyLong_SHIFT) | (PEPBasis)digits[1]) << PyLong_SHIFT) | (PEPBasis)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(PEPBasis) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPBasis, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPBasis) - 1 > 4 * PyLong_SHIFT) {
+                            return (PEPBasis) (((PEPBasis)-1)*(((((((((PEPBasis)digits[3]) << PyLong_SHIFT) | (PEPBasis)digits[2]) << PyLong_SHIFT) | (PEPBasis)digits[1]) << PyLong_SHIFT) | (PEPBasis)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PEPBasis) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPBasis, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPBasis) - 1 > 4 * PyLong_SHIFT) {
+                            return (PEPBasis) ((((((((((PEPBasis)digits[3]) << PyLong_SHIFT) | (PEPBasis)digits[2]) << PyLong_SHIFT) | (PEPBasis)digits[1]) << PyLong_SHIFT) | (PEPBasis)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(PEPBasis) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPBasis, long, PyLong_AsLong(x))
+            } else if (sizeof(PEPBasis) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPBasis, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
         }
-    }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            PEPBasis val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
 #endif
-    result = __Pyx_PyObject_CallOneArg(method, arg);
-bad:
-    Py_XDECREF(method);
-    return result;
-}
-
-static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x) {
-    if (likely(PyList_CheckExact(L))) {
-        if (unlikely(__Pyx_PyList_Append(L, x) < 0)) return -1;
+            return (PEPBasis) -1;
+        }
     } else {
-        PyObject* retval = __Pyx_PyObject_CallMethod1(L, __pyx_n_s_append, x);
-        if (unlikely(!retval))
-            return -1;
-        Py_DECREF(retval);
-    }
-    return 0;
-}
-
-static void __Pyx_RaiseArgumentTypeInvalid(const char* name, PyObject *obj, PyTypeObject *type) {
-    PyErr_Format(PyExc_TypeError,
-        "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)",
-        name, type->tp_name, Py_TYPE(obj)->tp_name);
-}
-static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
-    const char *name, int exact)
-{
-    if (unlikely(!type)) {
-        PyErr_SetString(PyExc_SystemError, "Missing type object");
-        return 0;
-    }
-    if (none_allowed && obj == Py_None) return 1;
-    else if (exact) {
-        if (likely(Py_TYPE(obj) == type)) return 1;
-        #if PY_MAJOR_VERSION == 2
-        else if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1;
-        #endif
-    }
-    else {
-        if (likely(PyObject_TypeCheck(obj, type))) return 1;
-    }
-    __Pyx_RaiseArgumentTypeInvalid(name, obj, type);
-    return 0;
-}
-
-static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
-    if (unlikely(!type)) {
-        PyErr_SetString(PyExc_SystemError, "Missing type object");
-        return 0;
+        PEPBasis val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (PEPBasis) -1;
+        val = __Pyx_PyInt_As_PEPBasis(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-    if (likely(PyObject_TypeCheck(obj, type)))
-        return 1;
-    PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
-                 Py_TYPE(obj)->tp_name, type->tp_name);
-    return 0;
-}
-
-static void __Pyx_call_next_tp_dealloc(PyObject* obj, destructor current_tp_dealloc) {
-    PyTypeObject* type = Py_TYPE(obj);
-    while (type && type->tp_dealloc != current_tp_dealloc)
-        type = type->tp_base;
-    while (type && type->tp_dealloc == current_tp_dealloc)
-        type = type->tp_base;
-    if (type)
-        type->tp_dealloc(obj);
-}
-
-static int __Pyx_call_next_tp_traverse(PyObject* obj, visitproc v, void *a, traverseproc current_tp_traverse) {
-    PyTypeObject* type = Py_TYPE(obj);
-    while (type && type->tp_traverse != current_tp_traverse)
-        type = type->tp_base;
-    while (type && type->tp_traverse == current_tp_traverse)
-        type = type->tp_base;
-    if (type && type->tp_traverse)
-        return type->tp_traverse(obj, v, a);
-    return 0;
-}
-
-static void __Pyx_call_next_tp_clear(PyObject* obj, inquiry current_tp_clear) {
-    PyTypeObject* type = Py_TYPE(obj);
-    while (type && type->tp_clear != current_tp_clear)
-        type = type->tp_base;
-    while (type && type->tp_clear == current_tp_clear)
-        type = type->tp_base;
-    if (type && type->tp_clear)
-        type->tp_clear(obj);
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to PEPBasis");
+    return (PEPBasis) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to PEPBasis");
+    return (PEPBasis) -1;
 }
 
-static void* __Pyx_GetVtable(PyObject *dict) {
-    void* ptr;
-    PyObject *ob = PyObject_GetItem(dict, __pyx_n_s_pyx_vtable);
-    if (!ob)
-        goto bad;
-#if PY_VERSION_HEX >= 0x02070000
-    ptr = PyCapsule_GetPointer(ob, 0);
-#else
-    ptr = PyCObject_AsVoidPtr(ob);
+/* CIntFromPy */
+          static CYTHON_INLINE PEPProblemType __Pyx_PyInt_As_PEPProblemType(PyObject *x) {
+    const PEPProblemType neg_one = (PEPProblemType) -1, const_zero = (PEPProblemType) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(PEPProblemType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(PEPProblemType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (PEPProblemType) val;
+        }
+    } else
 #endif
-    if (!ptr && !PyErr_Occurred())
-        PyErr_SetString(PyExc_RuntimeError, "invalid vtable found for imported type");
-    Py_DECREF(ob);
-    return ptr;
-bad:
-    Py_XDECREF(ob);
-    return NULL;
-}
-
-static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
-#if PY_VERSION_HEX >= 0x02070000
-    PyObject *ob = PyCapsule_New(vtable, 0, 0);
-#else
-    PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PEPProblemType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(PEPProblemType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(PEPProblemType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPProblemType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPProblemType) >= 2 * PyLong_SHIFT) {
+                            return (PEPProblemType) (((((PEPProblemType)digits[1]) << PyLong_SHIFT) | (PEPProblemType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PEPProblemType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPProblemType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPProblemType) >= 3 * PyLong_SHIFT) {
+                            return (PEPProblemType) (((((((PEPProblemType)digits[2]) << PyLong_SHIFT) | (PEPProblemType)digits[1]) << PyLong_SHIFT) | (PEPProblemType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PEPProblemType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPProblemType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPProblemType) >= 4 * PyLong_SHIFT) {
+                            return (PEPProblemType) (((((((((PEPProblemType)digits[3]) << PyLong_SHIFT) | (PEPProblemType)digits[2]) << PyLong_SHIFT) | (PEPProblemType)digits[1]) << PyLong_SHIFT) | (PEPProblemType)digits[0]));
+                        }
+                    }
+                    break;
+            }
 #endif
-    if (!ob)
-        goto bad;
-    if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0)
-        goto bad;
-    Py_DECREF(ob);
-    return 0;
-bad:
-    Py_XDECREF(ob);
-    return -1;
-}
-
-static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
-    PyObject* value = __Pyx_PyObject_GetAttrStr(module, name);
-    if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) {
-        PyErr_Format(PyExc_ImportError,
-        #if PY_MAJOR_VERSION < 3
-            "cannot import name %.230s", PyString_AS_STRING(name));
-        #else
-            "cannot import name %S", name);
-        #endif
-    }
-    return value;
-}
-
-static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) {
-    PyObject *result;
 #if CYTHON_COMPILING_IN_CPYTHON
-    result = PyDict_GetItem(__pyx_d, name);
-    if (likely(result)) {
-        Py_INCREF(result);
-    } else {
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
 #else
-    result = PyObject_GetItem(__pyx_d, name);
-    if (!result) {
-        PyErr_Clear();
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (PEPProblemType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
 #endif
-        result = __Pyx_GetBuiltinName(name);
-    }
-    return result;
-}
-
-static PyObject *__Pyx_GetNameInClass(PyObject *nmspace, PyObject *name) {
-    PyObject *result;
-    result = __Pyx_PyObject_GetAttrStr(nmspace, name);
-    if (!result)
-        result = __Pyx_GetModuleGlobalName(name);
-    return result;
-}
-
-static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) {
-    Py_ssize_t i, nbases = PyTuple_GET_SIZE(bases);
-    for (i=0; i < nbases; i++) {
-        PyTypeObject *tmptype;
-        PyObject *tmp = PyTuple_GET_ITEM(bases, i);
-        tmptype = Py_TYPE(tmp);
-#if PY_MAJOR_VERSION < 3
-        if (tmptype == &PyClass_Type)
-            continue;
+            if (sizeof(PEPProblemType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPProblemType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(PEPProblemType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPProblemType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PEPProblemType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(PEPProblemType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(PEPProblemType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(PEPProblemType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPProblemType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPProblemType) - 1 > 2 * PyLong_SHIFT) {
+                            return (PEPProblemType) (((PEPProblemType)-1)*(((((PEPProblemType)digits[1]) << PyLong_SHIFT) | (PEPProblemType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(PEPProblemType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPProblemType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPProblemType) - 1 > 2 * PyLong_SHIFT) {
+                            return (PEPProblemType) ((((((PEPProblemType)digits[1]) << PyLong_SHIFT) | (PEPProblemType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(PEPProblemType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPProblemType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPProblemType) - 1 > 3 * PyLong_SHIFT) {
+                            return (PEPProblemType) (((PEPProblemType)-1)*(((((((PEPProblemType)digits[2]) << PyLong_SHIFT) | (PEPProblemType)digits[1]) << PyLong_SHIFT) | (PEPProblemType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PEPProblemType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPProblemType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPProblemType) - 1 > 3 * PyLong_SHIFT) {
+                            return (PEPProblemType) ((((((((PEPProblemType)digits[2]) << PyLong_SHIFT) | (PEPProblemType)digits[1]) << PyLong_SHIFT) | (PEPProblemType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(PEPProblemType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPProblemType, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPProblemType) - 1 > 4 * PyLong_SHIFT) {
+                            return (PEPProblemType) (((PEPProblemType)-1)*(((((((((PEPProblemType)digits[3]) << PyLong_SHIFT) | (PEPProblemType)digits[2]) << PyLong_SHIFT) | (PEPProblemType)digits[1]) << PyLong_SHIFT) | (PEPProblemType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PEPProblemType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPProblemType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPProblemType) - 1 > 4 * PyLong_SHIFT) {
+                            return (PEPProblemType) ((((((((((PEPProblemType)digits[3]) << PyLong_SHIFT) | (PEPProblemType)digits[2]) << PyLong_SHIFT) | (PEPProblemType)digits[1]) << PyLong_SHIFT) | (PEPProblemType)digits[0])));
+                        }
+                    }
+                    break;
+            }
 #endif
-        if (!metaclass) {
-            metaclass = tmptype;
-            continue;
-        }
-        if (PyType_IsSubtype(metaclass, tmptype))
-            continue;
-        if (PyType_IsSubtype(tmptype, metaclass)) {
-            metaclass = tmptype;
-            continue;
+            if (sizeof(PEPProblemType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPProblemType, long, PyLong_AsLong(x))
+            } else if (sizeof(PEPProblemType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPProblemType, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
         }
-        PyErr_SetString(PyExc_TypeError,
-                        "metaclass conflict: "
-                        "the metaclass of a derived class "
-                        "must be a (non-strict) subclass "
-                        "of the metaclasses of all its bases");
-        return NULL;
-    }
-    if (!metaclass) {
-#if PY_MAJOR_VERSION < 3
-        metaclass = &PyClass_Type;
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
 #else
-        metaclass = &PyType_Type;
-#endif
-    }
-    Py_INCREF((PyObject*) metaclass);
-    return (PyObject*) metaclass;
-}
-
-static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name,
-                                           PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) {
-    PyObject *ns;
-    if (metaclass) {
-        PyObject *prep = __Pyx_PyObject_GetAttrStr(metaclass, __pyx_n_s_prepare);
-        if (prep) {
-            PyObject *pargs = PyTuple_Pack(2, name, bases);
-            if (unlikely(!pargs)) {
-                Py_DECREF(prep);
-                return NULL;
+            PEPProblemType val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
             }
-            ns = PyObject_Call(prep, pargs, mkw);
-            Py_DECREF(prep);
-            Py_DECREF(pargs);
-        } else {
-            if (unlikely(!PyErr_ExceptionMatches(PyExc_AttributeError)))
-                return NULL;
-            PyErr_Clear();
-            ns = PyDict_New();
+#endif
+            return (PEPProblemType) -1;
         }
     } else {
-        ns = PyDict_New();
+        PEPProblemType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (PEPProblemType) -1;
+        val = __Pyx_PyInt_As_PEPProblemType(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-    if (unlikely(!ns))
-        return NULL;
-    if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad;
-    if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad;
-    if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad;
-    return ns;
-bad:
-    Py_DECREF(ns);
-    return NULL;
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to PEPProblemType");
+    return (PEPProblemType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to PEPProblemType");
+    return (PEPProblemType) -1;
 }
-static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases,
-                                      PyObject *dict, PyObject *mkw,
-                                      int calculate_metaclass, int allow_py2_metaclass) {
-    PyObject *result, *margs;
-    PyObject *owned_metaclass = NULL;
-    if (allow_py2_metaclass) {
-        owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass);
-        if (owned_metaclass) {
-            metaclass = owned_metaclass;
-        } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) {
-            PyErr_Clear();
+
+/* CIntFromPy */
+          static CYTHON_INLINE PEPWhich __Pyx_PyInt_As_PEPWhich(PyObject *x) {
+    const PEPWhich neg_one = (PEPWhich) -1, const_zero = (PEPWhich) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(PEPWhich) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(PEPWhich, long, PyInt_AS_LONG(x))
         } else {
-            return NULL;
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (PEPWhich) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PEPWhich) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(PEPWhich, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(PEPWhich) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPWhich, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPWhich) >= 2 * PyLong_SHIFT) {
+                            return (PEPWhich) (((((PEPWhich)digits[1]) << PyLong_SHIFT) | (PEPWhich)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PEPWhich) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPWhich, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPWhich) >= 3 * PyLong_SHIFT) {
+                            return (PEPWhich) (((((((PEPWhich)digits[2]) << PyLong_SHIFT) | (PEPWhich)digits[1]) << PyLong_SHIFT) | (PEPWhich)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PEPWhich) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPWhich, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPWhich) >= 4 * PyLong_SHIFT) {
+                            return (PEPWhich) (((((((((PEPWhich)digits[3]) << PyLong_SHIFT) | (PEPWhich)digits[2]) << PyLong_SHIFT) | (PEPWhich)digits[1]) << PyLong_SHIFT) | (PEPWhich)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (PEPWhich) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(PEPWhich) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPWhich, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(PEPWhich) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPWhich, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PEPWhich) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(PEPWhich, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(PEPWhich,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(PEPWhich) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPWhich, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPWhich) - 1 > 2 * PyLong_SHIFT) {
+                            return (PEPWhich) (((PEPWhich)-1)*(((((PEPWhich)digits[1]) << PyLong_SHIFT) | (PEPWhich)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(PEPWhich) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPWhich, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPWhich) - 1 > 2 * PyLong_SHIFT) {
+                            return (PEPWhich) ((((((PEPWhich)digits[1]) << PyLong_SHIFT) | (PEPWhich)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(PEPWhich) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPWhich, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPWhich) - 1 > 3 * PyLong_SHIFT) {
+                            return (PEPWhich) (((PEPWhich)-1)*(((((((PEPWhich)digits[2]) << PyLong_SHIFT) | (PEPWhich)digits[1]) << PyLong_SHIFT) | (PEPWhich)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PEPWhich) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPWhich, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPWhich) - 1 > 3 * PyLong_SHIFT) {
+                            return (PEPWhich) ((((((((PEPWhich)digits[2]) << PyLong_SHIFT) | (PEPWhich)digits[1]) << PyLong_SHIFT) | (PEPWhich)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(PEPWhich) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPWhich, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPWhich) - 1 > 4 * PyLong_SHIFT) {
+                            return (PEPWhich) (((PEPWhich)-1)*(((((((((PEPWhich)digits[3]) << PyLong_SHIFT) | (PEPWhich)digits[2]) << PyLong_SHIFT) | (PEPWhich)digits[1]) << PyLong_SHIFT) | (PEPWhich)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PEPWhich) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPWhich, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPWhich) - 1 > 4 * PyLong_SHIFT) {
+                            return (PEPWhich) ((((((((((PEPWhich)digits[3]) << PyLong_SHIFT) | (PEPWhich)digits[2]) << PyLong_SHIFT) | (PEPWhich)digits[1]) << PyLong_SHIFT) | (PEPWhich)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(PEPWhich) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPWhich, long, PyLong_AsLong(x))
+            } else if (sizeof(PEPWhich) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPWhich, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            PEPWhich val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (PEPWhich) -1;
         }
-    }
-    if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) {
-        metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases);
-        Py_XDECREF(owned_metaclass);
-        if (unlikely(!metaclass))
-            return NULL;
-        owned_metaclass = metaclass;
-    }
-    margs = PyTuple_Pack(3, name, bases, dict);
-    if (unlikely(!margs)) {
-        result = NULL;
     } else {
-        result = PyObject_Call(metaclass, margs, mkw);
-        Py_DECREF(margs);
+        PEPWhich val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (PEPWhich) -1;
+        val = __Pyx_PyInt_As_PEPWhich(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-    Py_XDECREF(owned_metaclass);
-    return result;
-}
-
-#ifndef __PYX_HAVE_RT_ImportModule
-#define __PYX_HAVE_RT_ImportModule
-static PyObject *__Pyx_ImportModule(const char *name) {
-    PyObject *py_name = 0;
-    PyObject *py_module = 0;
-    py_name = __Pyx_PyIdentifier_FromString(name);
-    if (!py_name)
-        goto bad;
-    py_module = PyImport_Import(py_name);
-    Py_DECREF(py_name);
-    return py_module;
-bad:
-    Py_XDECREF(py_name);
-    return 0;
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to PEPWhich");
+    return (PEPWhich) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to PEPWhich");
+    return (PEPWhich) -1;
 }
-#endif
 
+/* CIntFromPy */
+          static CYTHON_INLINE PEPConv __Pyx_PyInt_As_PEPConv(PyObject *x) {
+    const PEPConv neg_one = (PEPConv) -1, const_zero = (PEPConv) 0;
+    const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
-static PyObject* __pyx_module_cleanup_atexit(PyObject *module, CYTHON_UNUSED PyObject *unused) {
-    __pyx_module_cleanup(module);
-    Py_INCREF(Py_None); return Py_None;
-}
-static int __Pyx_RegisterCleanup(void) {
-    static PyMethodDef cleanup_def = {
-        "__cleanup", (PyCFunction)__pyx_module_cleanup_atexit, METH_NOARGS, 0};
-    PyObject *cleanup_func = 0;
-    PyObject *atexit = 0;
-    PyObject *reg = 0;
-    PyObject *args = 0;
-    PyObject *res = 0;
-    int ret = -1;
-    cleanup_func = PyCFunction_New(&cleanup_def, 0);
-    if (!cleanup_func)
-        goto bad;
-    atexit = __Pyx_ImportModule("atexit");
-    if (!atexit)
-        goto bad;
-    reg = PyObject_GetAttrString(atexit, "_exithandlers");
-    if (reg && PyList_Check(reg)) {
-        PyObject *a, *kw;
-        a = PyTuple_New(0);
-        kw = PyDict_New();
-        if (!a || !kw) {
-            Py_XDECREF(a);
-            Py_XDECREF(kw);
-            goto bad;
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(PEPConv) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(PEPConv, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (PEPConv) val;
         }
-        args = PyTuple_Pack(3, cleanup_func, a, kw);
-        Py_DECREF(a);
-        Py_DECREF(kw);
-        if (!args)
-            goto bad;
-        ret = PyList_Insert(reg, 0, args);
-    } else {
-        if (!reg)
-            PyErr_Clear();
-        Py_XDECREF(reg);
-        reg = PyObject_GetAttrString(atexit, "register");
-        if (!reg)
-            goto bad;
-        args = PyTuple_Pack(1, cleanup_func);
-        if (!args)
-            goto bad;
-        res = PyObject_CallObject(reg, args);
-        if (!res)
-            goto bad;
-        ret = 0;
-    }
-bad:
-    Py_XDECREF(cleanup_func);
-    Py_XDECREF(atexit);
-    Py_XDECREF(reg);
-    Py_XDECREF(args);
-    Py_XDECREF(res);
-    return ret;
-}
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PEPConv) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(PEPConv, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(PEPConv) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPConv, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPConv) >= 2 * PyLong_SHIFT) {
+                            return (PEPConv) (((((PEPConv)digits[1]) << PyLong_SHIFT) | (PEPConv)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PEPConv) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPConv, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPConv) >= 3 * PyLong_SHIFT) {
+                            return (PEPConv) (((((((PEPConv)digits[2]) << PyLong_SHIFT) | (PEPConv)digits[1]) << PyLong_SHIFT) | (PEPConv)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PEPConv) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPConv, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPConv) >= 4 * PyLong_SHIFT) {
+                            return (PEPConv) (((((((((PEPConv)digits[3]) << PyLong_SHIFT) | (PEPConv)digits[2]) << PyLong_SHIFT) | (PEPConv)digits[1]) << PyLong_SHIFT) | (PEPConv)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
 #else
-static int __Pyx_RegisterCleanup(void) {
-    if (0) __Pyx_ImportModule(NULL);
-    return 0;
-}
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (PEPConv) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
 #endif
-
-static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
-    int start = 0, mid = 0, end = count - 1;
-    if (end >= 0 && code_line > entries[end].code_line) {
-        return count;
-    }
-    while (start < end) {
-        mid = (start + end) / 2;
-        if (code_line < entries[mid].code_line) {
-            end = mid;
-        } else if (code_line > entries[mid].code_line) {
-             start = mid + 1;
+            if (sizeof(PEPConv) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPConv, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(PEPConv) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPConv, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
         } else {
-            return mid;
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PEPConv) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(PEPConv, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(PEPConv,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(PEPConv) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPConv, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPConv) - 1 > 2 * PyLong_SHIFT) {
+                            return (PEPConv) (((PEPConv)-1)*(((((PEPConv)digits[1]) << PyLong_SHIFT) | (PEPConv)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(PEPConv) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPConv, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPConv) - 1 > 2 * PyLong_SHIFT) {
+                            return (PEPConv) ((((((PEPConv)digits[1]) << PyLong_SHIFT) | (PEPConv)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(PEPConv) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPConv, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPConv) - 1 > 3 * PyLong_SHIFT) {
+                            return (PEPConv) (((PEPConv)-1)*(((((((PEPConv)digits[2]) << PyLong_SHIFT) | (PEPConv)digits[1]) << PyLong_SHIFT) | (PEPConv)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PEPConv) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPConv, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPConv) - 1 > 3 * PyLong_SHIFT) {
+                            return (PEPConv) ((((((((PEPConv)digits[2]) << PyLong_SHIFT) | (PEPConv)digits[1]) << PyLong_SHIFT) | (PEPConv)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(PEPConv) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPConv, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPConv) - 1 > 4 * PyLong_SHIFT) {
+                            return (PEPConv) (((PEPConv)-1)*(((((((((PEPConv)digits[3]) << PyLong_SHIFT) | (PEPConv)digits[2]) << PyLong_SHIFT) | (PEPConv)digits[1]) << PyLong_SHIFT) | (PEPConv)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PEPConv) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPConv, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPConv) - 1 > 4 * PyLong_SHIFT) {
+                            return (PEPConv) ((((((((((PEPConv)digits[3]) << PyLong_SHIFT) | (PEPConv)digits[2]) << PyLong_SHIFT) | (PEPConv)digits[1]) << PyLong_SHIFT) | (PEPConv)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(PEPConv) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPConv, long, PyLong_AsLong(x))
+            } else if (sizeof(PEPConv) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPConv, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
         }
-    }
-    if (code_line <= entries[mid].code_line) {
-        return mid;
-    } else {
-        return mid + 1;
-    }
-}
-static PyCodeObject *__pyx_find_code_object(int code_line) {
-    PyCodeObject* code_object;
-    int pos;
-    if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) {
-        return NULL;
-    }
-    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
-    if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) {
-        return NULL;
-    }
-    code_object = __pyx_code_cache.entries[pos].code_object;
-    Py_INCREF(code_object);
-    return code_object;
-}
-static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
-    int pos, i;
-    __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
-    if (unlikely(!code_line)) {
-        return;
-    }
-    if (unlikely(!entries)) {
-        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
-        if (likely(entries)) {
-            __pyx_code_cache.entries = entries;
-            __pyx_code_cache.max_count = 64;
-            __pyx_code_cache.count = 1;
-            entries[0].code_line = code_line;
-            entries[0].code_object = code_object;
-            Py_INCREF(code_object);
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            PEPConv val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (PEPConv) -1;
         }
-        return;
-    }
-    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
-    if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) {
-        PyCodeObject* tmp = entries[pos].code_object;
-        entries[pos].code_object = code_object;
+    } else {
+        PEPConv val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (PEPConv) -1;
+        val = __Pyx_PyInt_As_PEPConv(tmp);
         Py_DECREF(tmp);
-        return;
-    }
-    if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
-        int new_max = __pyx_code_cache.max_count + 64;
-        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
-            __pyx_code_cache.entries, (size_t)new_max*sizeof(__Pyx_CodeObjectCacheEntry));
-        if (unlikely(!entries)) {
-            return;
-        }
-        __pyx_code_cache.entries = entries;
-        __pyx_code_cache.max_count = new_max;
-    }
-    for (i=__pyx_code_cache.count; i>pos; i--) {
-        entries[i] = entries[i-1];
-    }
-    entries[pos].code_line = code_line;
-    entries[pos].code_object = code_object;
-    __pyx_code_cache.count++;
-    Py_INCREF(code_object);
-}
-
-#include "compile.h"
-#include "frameobject.h"
-#include "traceback.h"
-static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
-            const char *funcname, int c_line,
-            int py_line, const char *filename) {
-    PyCodeObject *py_code = 0;
-    PyObject *py_srcfile = 0;
-    PyObject *py_funcname = 0;
-    #if PY_MAJOR_VERSION < 3
-    py_srcfile = PyString_FromString(filename);
-    #else
-    py_srcfile = PyUnicode_FromString(filename);
-    #endif
-    if (!py_srcfile) goto bad;
-    if (c_line) {
-        #if PY_MAJOR_VERSION < 3
-        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
-        #else
-        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
-        #endif
-    }
-    else {
-        #if PY_MAJOR_VERSION < 3
-        py_funcname = PyString_FromString(funcname);
-        #else
-        py_funcname = PyUnicode_FromString(funcname);
-        #endif
-    }
-    if (!py_funcname) goto bad;
-    py_code = __Pyx_PyCode_New(
-        0,
-        0,
-        0,
-        0,
-        0,
-        __pyx_empty_bytes, /*PyObject *code,*/
-        __pyx_empty_tuple, /*PyObject *consts,*/
-        __pyx_empty_tuple, /*PyObject *names,*/
-        __pyx_empty_tuple, /*PyObject *varnames,*/
-        __pyx_empty_tuple, /*PyObject *freevars,*/
-        __pyx_empty_tuple, /*PyObject *cellvars,*/
-        py_srcfile,   /*PyObject *filename,*/
-        py_funcname,  /*PyObject *name,*/
-        py_line,
-        __pyx_empty_bytes  /*PyObject *lnotab*/
-    );
-    Py_DECREF(py_srcfile);
-    Py_DECREF(py_funcname);
-    return py_code;
-bad:
-    Py_XDECREF(py_srcfile);
-    Py_XDECREF(py_funcname);
-    return NULL;
-}
-static void __Pyx_AddTraceback(const char *funcname, int c_line,
-                               int py_line, const char *filename) {
-    PyCodeObject *py_code = 0;
-    PyFrameObject *py_frame = 0;
-    py_code = __pyx_find_code_object(c_line ? c_line : py_line);
-    if (!py_code) {
-        py_code = __Pyx_CreateCodeObjectForTraceback(
-            funcname, c_line, py_line, filename);
-        if (!py_code) goto bad;
-        __pyx_insert_code_object(c_line ? c_line : py_line, py_code);
+        return val;
     }
-    py_frame = PyFrame_New(
-        PyThreadState_GET(), /*PyThreadState *tstate,*/
-        py_code,             /*PyCodeObject *code,*/
-        __pyx_d,      /*PyObject *globals,*/
-        0                    /*PyObject *locals*/
-    );
-    if (!py_frame) goto bad;
-    py_frame->f_lineno = py_line;
-    PyTraceBack_Here(py_frame);
-bad:
-    Py_XDECREF(py_code);
-    Py_XDECREF(py_frame);
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to PEPConv");
+    return (PEPConv) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to PEPConv");
+    return (PEPConv) -1;
 }
 
-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
-    PyObject *empty_list = 0;
-    PyObject *module = 0;
-    PyObject *global_dict = 0;
-    PyObject *empty_dict = 0;
-    PyObject *list;
-    #if PY_VERSION_HEX < 0x03030000
-    PyObject *py_import;
-    py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import);
-    if (!py_import)
-        goto bad;
-    #endif
-    if (from_list)
-        list = from_list;
-    else {
-        empty_list = PyList_New(0);
-        if (!empty_list)
-            goto bad;
-        list = empty_list;
-    }
-    global_dict = PyModule_GetDict(__pyx_m);
-    if (!global_dict)
-        goto bad;
-    empty_dict = PyDict_New();
-    if (!empty_dict)
-        goto bad;
-    {
-        #if PY_MAJOR_VERSION >= 3
-        if (level == -1) {
-            if (strchr(__Pyx_MODULE_NAME, '.')) {
-                #if PY_VERSION_HEX < 0x03030000
-                PyObject *py_level = PyInt_FromLong(1);
-                if (!py_level)
-                    goto bad;
-                module = PyObject_CallFunctionObjArgs(py_import,
-                    name, global_dict, empty_dict, list, py_level, NULL);
-                Py_DECREF(py_level);
-                #else
-                module = PyImport_ImportModuleLevelObject(
-                    name, global_dict, empty_dict, list, 1);
-                #endif
-                if (!module) {
-                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
-                        goto bad;
-                    PyErr_Clear();
-                }
+/* CIntFromPy */
+          static CYTHON_INLINE PEPRefine __Pyx_PyInt_As_PEPRefine(PyObject *x) {
+    const PEPRefine neg_one = (PEPRefine) -1, const_zero = (PEPRefine) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(PEPRefine) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(PEPRefine, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (PEPRefine) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PEPRefine) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(PEPRefine, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(PEPRefine) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPRefine, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPRefine) >= 2 * PyLong_SHIFT) {
+                            return (PEPRefine) (((((PEPRefine)digits[1]) << PyLong_SHIFT) | (PEPRefine)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PEPRefine) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPRefine, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPRefine) >= 3 * PyLong_SHIFT) {
+                            return (PEPRefine) (((((((PEPRefine)digits[2]) << PyLong_SHIFT) | (PEPRefine)digits[1]) << PyLong_SHIFT) | (PEPRefine)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PEPRefine) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPRefine, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPRefine) >= 4 * PyLong_SHIFT) {
+                            return (PEPRefine) (((((((((PEPRefine)digits[3]) << PyLong_SHIFT) | (PEPRefine)digits[2]) << PyLong_SHIFT) | (PEPRefine)digits[1]) << PyLong_SHIFT) | (PEPRefine)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (PEPRefine) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(PEPRefine) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPRefine, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(PEPRefine) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPRefine, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PEPRefine) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(PEPRefine, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(PEPRefine,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(PEPRefine) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPRefine, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPRefine) - 1 > 2 * PyLong_SHIFT) {
+                            return (PEPRefine) (((PEPRefine)-1)*(((((PEPRefine)digits[1]) << PyLong_SHIFT) | (PEPRefine)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(PEPRefine) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPRefine, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPRefine) - 1 > 2 * PyLong_SHIFT) {
+                            return (PEPRefine) ((((((PEPRefine)digits[1]) << PyLong_SHIFT) | (PEPRefine)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(PEPRefine) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPRefine, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPRefine) - 1 > 3 * PyLong_SHIFT) {
+                            return (PEPRefine) (((PEPRefine)-1)*(((((((PEPRefine)digits[2]) << PyLong_SHIFT) | (PEPRefine)digits[1]) << PyLong_SHIFT) | (PEPRefine)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PEPRefine) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPRefine, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPRefine) - 1 > 3 * PyLong_SHIFT) {
+                            return (PEPRefine) ((((((((PEPRefine)digits[2]) << PyLong_SHIFT) | (PEPRefine)digits[1]) << PyLong_SHIFT) | (PEPRefine)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(PEPRefine) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPRefine, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPRefine) - 1 > 4 * PyLong_SHIFT) {
+                            return (PEPRefine) (((PEPRefine)-1)*(((((((((PEPRefine)digits[3]) << PyLong_SHIFT) | (PEPRefine)digits[2]) << PyLong_SHIFT) | (PEPRefine)digits[1]) << PyLong_SHIFT) | (PEPRefine)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PEPRefine) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPRefine, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPRefine) - 1 > 4 * PyLong_SHIFT) {
+                            return (PEPRefine) ((((((((((PEPRefine)digits[3]) << PyLong_SHIFT) | (PEPRefine)digits[2]) << PyLong_SHIFT) | (PEPRefine)digits[1]) << PyLong_SHIFT) | (PEPRefine)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(PEPRefine) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPRefine, long, PyLong_AsLong(x))
+            } else if (sizeof(PEPRefine) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPRefine, PY_LONG_LONG, PyLong_AsLongLong(x))
             }
-            level = 0;
         }
-        #endif
-        if (!module) {
-            #if PY_VERSION_HEX < 0x03030000
-            PyObject *py_level = PyInt_FromLong(level);
-            if (!py_level)
-                goto bad;
-            module = PyObject_CallFunctionObjArgs(py_import,
-                name, global_dict, empty_dict, list, py_level, NULL);
-            Py_DECREF(py_level);
-            #else
-            module = PyImport_ImportModuleLevelObject(
-                name, global_dict, empty_dict, list, level);
-            #endif
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            PEPRefine val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (PEPRefine) -1;
         }
+    } else {
+        PEPRefine val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (PEPRefine) -1;
+        val = __Pyx_PyInt_As_PEPRefine(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
-bad:
-    #if PY_VERSION_HEX < 0x03030000
-    Py_XDECREF(py_import);
-    #endif
-    Py_XDECREF(empty_list);
-    Py_XDECREF(empty_dict);
-    return module;
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to PEPRefine");
+    return (PEPRefine) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to PEPRefine");
+    return (PEPRefine) -1;
 }
 
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
-    const int neg_one = (int) -1, const_zero = 0;
+/* CIntFromPy */
+          static CYTHON_INLINE PEPRefineScheme __Pyx_PyInt_As_PEPRefineScheme(PyObject *x) {
+    const PEPRefineScheme neg_one = (PEPRefineScheme) -1, const_zero = (PEPRefineScheme) 0;
     const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(int) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(int) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-        } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(PEPRefineScheme) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(PEPRefineScheme, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (PEPRefineScheme) val;
         }
-    } else {
-        if (sizeof(int) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PEPRefineScheme) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(PEPRefineScheme, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(PEPRefineScheme) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPRefineScheme, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPRefineScheme) >= 2 * PyLong_SHIFT) {
+                            return (PEPRefineScheme) (((((PEPRefineScheme)digits[1]) << PyLong_SHIFT) | (PEPRefineScheme)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PEPRefineScheme) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPRefineScheme, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPRefineScheme) >= 3 * PyLong_SHIFT) {
+                            return (PEPRefineScheme) (((((((PEPRefineScheme)digits[2]) << PyLong_SHIFT) | (PEPRefineScheme)digits[1]) << PyLong_SHIFT) | (PEPRefineScheme)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PEPRefineScheme) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPRefineScheme, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPRefineScheme) >= 4 * PyLong_SHIFT) {
+                            return (PEPRefineScheme) (((((((((PEPRefineScheme)digits[3]) << PyLong_SHIFT) | (PEPRefineScheme)digits[2]) << PyLong_SHIFT) | (PEPRefineScheme)digits[1]) << PyLong_SHIFT) | (PEPRefineScheme)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (PEPRefineScheme) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(PEPRefineScheme) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPRefineScheme, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(PEPRefineScheme) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPRefineScheme, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PEPRefineScheme) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(PEPRefineScheme, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(PEPRefineScheme,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(PEPRefineScheme) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPRefineScheme, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPRefineScheme) - 1 > 2 * PyLong_SHIFT) {
+                            return (PEPRefineScheme) (((PEPRefineScheme)-1)*(((((PEPRefineScheme)digits[1]) << PyLong_SHIFT) | (PEPRefineScheme)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(PEPRefineScheme) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPRefineScheme, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPRefineScheme) - 1 > 2 * PyLong_SHIFT) {
+                            return (PEPRefineScheme) ((((((PEPRefineScheme)digits[1]) << PyLong_SHIFT) | (PEPRefineScheme)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(PEPRefineScheme) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPRefineScheme, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPRefineScheme) - 1 > 3 * PyLong_SHIFT) {
+                            return (PEPRefineScheme) (((PEPRefineScheme)-1)*(((((((PEPRefineScheme)digits[2]) << PyLong_SHIFT) | (PEPRefineScheme)digits[1]) << PyLong_SHIFT) | (PEPRefineScheme)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PEPRefineScheme) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPRefineScheme, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPRefineScheme) - 1 > 3 * PyLong_SHIFT) {
+                            return (PEPRefineScheme) ((((((((PEPRefineScheme)digits[2]) << PyLong_SHIFT) | (PEPRefineScheme)digits[1]) << PyLong_SHIFT) | (PEPRefineScheme)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(PEPRefineScheme) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPRefineScheme, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPRefineScheme) - 1 > 4 * PyLong_SHIFT) {
+                            return (PEPRefineScheme) (((PEPRefineScheme)-1)*(((((((((PEPRefineScheme)digits[3]) << PyLong_SHIFT) | (PEPRefineScheme)digits[2]) << PyLong_SHIFT) | (PEPRefineScheme)digits[1]) << PyLong_SHIFT) | (PEPRefineScheme)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PEPRefineScheme) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPRefineScheme, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPRefineScheme) - 1 > 4 * PyLong_SHIFT) {
+                            return (PEPRefineScheme) ((((((((((PEPRefineScheme)digits[3]) << PyLong_SHIFT) | (PEPRefineScheme)digits[2]) << PyLong_SHIFT) | (PEPRefineScheme)digits[1]) << PyLong_SHIFT) | (PEPRefineScheme)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(PEPRefineScheme) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPRefineScheme, long, PyLong_AsLong(x))
+            } else if (sizeof(PEPRefineScheme) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPRefineScheme, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
         }
-    }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(int),
-                                     little, !is_unsigned);
-    }
-}
-
-#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)       \
-    {                                                                     \
-        func_type value = func_value;                                     \
-        if (sizeof(target_type) < sizeof(func_type)) {                    \
-            if (unlikely(value != (func_type) (target_type) value)) {     \
-                func_type zero = 0;                                       \
-                if (is_unsigned && unlikely(value < zero))                \
-                    goto raise_neg_overflow;                              \
-                else                                                      \
-                    goto raise_overflow;                                  \
-            }                                                             \
-        }                                                                 \
-        return (target_type) value;                                       \
-    }
-
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
- #if CYTHON_USE_PYLONG_INTERNALS
-  #include "longintrepr.h"
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            PEPRefineScheme val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
  #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
 #endif
+            return (PEPRefineScheme) -1;
+        }
+    } else {
+        PEPRefineScheme val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (PEPRefineScheme) -1;
+        val = __Pyx_PyInt_As_PEPRefineScheme(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to PEPRefineScheme");
+    return (PEPRefineScheme) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to PEPRefineScheme");
+    return (PEPRefineScheme) -1;
+}
 
-static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
-    const int neg_one = (int) -1, const_zero = 0;
+/* CIntFromPy */
+          static CYTHON_INLINE PEPScale __Pyx_PyInt_As_PEPScale(PyObject *x) {
+    const PEPScale neg_one = (PEPScale) -1, const_zero = (PEPScale) 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
-        if (sizeof(int) < sizeof(long)) {
-            __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x))
+        if (sizeof(PEPScale) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(PEPScale, long, PyInt_AS_LONG(x))
         } else {
             long val = PyInt_AS_LONG(x);
             if (is_unsigned && unlikely(val < 0)) {
                 goto raise_neg_overflow;
             }
-            return (int) val;
+            return (PEPScale) val;
         }
     } else
 #endif
     if (likely(PyLong_Check(x))) {
         if (is_unsigned) {
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
- #if CYTHON_USE_PYLONG_INTERNALS
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
             switch (Py_SIZE(x)) {
-                case  0: return 0;
-                case  1: __PYX_VERIFY_RETURN_INT(int, digit, ((PyLongObject*)x)->ob_digit[0]);
+                case  0: return (PEPScale) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(PEPScale, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(PEPScale) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPScale, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPScale) >= 2 * PyLong_SHIFT) {
+                            return (PEPScale) (((((PEPScale)digits[1]) << PyLong_SHIFT) | (PEPScale)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PEPScale) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPScale, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPScale) >= 3 * PyLong_SHIFT) {
+                            return (PEPScale) (((((((PEPScale)digits[2]) << PyLong_SHIFT) | (PEPScale)digits[1]) << PyLong_SHIFT) | (PEPScale)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PEPScale) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPScale, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPScale) >= 4 * PyLong_SHIFT) {
+                            return (PEPScale) (((((((((PEPScale)digits[3]) << PyLong_SHIFT) | (PEPScale)digits[2]) << PyLong_SHIFT) | (PEPScale)digits[1]) << PyLong_SHIFT) | (PEPScale)digits[0]));
+                        }
+                    }
+                    break;
             }
- #endif
 #endif
 #if CYTHON_COMPILING_IN_CPYTHON
             if (unlikely(Py_SIZE(x) < 0)) {
@@ -57737,30 +69305,83 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
             {
                 int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
                 if (unlikely(result < 0))
-                    return (int) -1;
+                    return (PEPScale) -1;
                 if (unlikely(result == 1))
                     goto raise_neg_overflow;
             }
 #endif
-            if (sizeof(int) <= sizeof(unsigned long)) {
-                __PYX_VERIFY_RETURN_INT(int, unsigned long, PyLong_AsUnsignedLong(x))
-            } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
-                __PYX_VERIFY_RETURN_INT(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            if (sizeof(PEPScale) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPScale, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(PEPScale) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPScale, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
             }
         } else {
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
- #if CYTHON_USE_PYLONG_INTERNALS
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
             switch (Py_SIZE(x)) {
-                case  0: return 0;
-                case  1: __PYX_VERIFY_RETURN_INT(int,  digit, +(((PyLongObject*)x)->ob_digit[0]));
-                case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, -(sdigit) ((PyLongObject*)x)->ob_digit[0]);
+                case  0: return (PEPScale) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(PEPScale, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(PEPScale,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(PEPScale) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPScale, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPScale) - 1 > 2 * PyLong_SHIFT) {
+                            return (PEPScale) (((PEPScale)-1)*(((((PEPScale)digits[1]) << PyLong_SHIFT) | (PEPScale)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(PEPScale) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPScale, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPScale) - 1 > 2 * PyLong_SHIFT) {
+                            return (PEPScale) ((((((PEPScale)digits[1]) << PyLong_SHIFT) | (PEPScale)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(PEPScale) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPScale, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPScale) - 1 > 3 * PyLong_SHIFT) {
+                            return (PEPScale) (((PEPScale)-1)*(((((((PEPScale)digits[2]) << PyLong_SHIFT) | (PEPScale)digits[1]) << PyLong_SHIFT) | (PEPScale)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PEPScale) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPScale, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPScale) - 1 > 3 * PyLong_SHIFT) {
+                            return (PEPScale) ((((((((PEPScale)digits[2]) << PyLong_SHIFT) | (PEPScale)digits[1]) << PyLong_SHIFT) | (PEPScale)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(PEPScale) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPScale, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPScale) - 1 > 4 * PyLong_SHIFT) {
+                            return (PEPScale) (((PEPScale)-1)*(((((((((PEPScale)digits[3]) << PyLong_SHIFT) | (PEPScale)digits[2]) << PyLong_SHIFT) | (PEPScale)digits[1]) << PyLong_SHIFT) | (PEPScale)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PEPScale) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPScale, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPScale) - 1 > 4 * PyLong_SHIFT) {
+                            return (PEPScale) ((((((((((PEPScale)digits[3]) << PyLong_SHIFT) | (PEPScale)digits[2]) << PyLong_SHIFT) | (PEPScale)digits[1]) << PyLong_SHIFT) | (PEPScale)digits[0])));
+                        }
+                    }
+                    break;
             }
- #endif
 #endif
-            if (sizeof(int) <= sizeof(long)) {
-                __PYX_VERIFY_RETURN_INT(int, long, PyLong_AsLong(x))
-            } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
-                __PYX_VERIFY_RETURN_INT(int, PY_LONG_LONG, PyLong_AsLongLong(x))
+            if (sizeof(PEPScale) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPScale, long, PyLong_AsLong(x))
+            } else if (sizeof(PEPScale) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPScale, PY_LONG_LONG, PyLong_AsLongLong(x))
             }
         }
         {
@@ -57768,8 +69389,8 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
             PyErr_SetString(PyExc_RuntimeError,
                             "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
 #else
-            int val;
-            PyObject *v = __Pyx_PyNumber_Int(x);
+            PEPScale val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
  #if PY_MAJOR_VERSION < 3
             if (likely(v) && !PyLong_Check(v)) {
                 PyObject *tmp = v;
@@ -57788,103 +69409,263 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
                     return val;
             }
 #endif
-            return (int) -1;
+            return (PEPScale) -1;
         }
     } else {
-        int val;
-        PyObject *tmp = __Pyx_PyNumber_Int(x);
-        if (!tmp) return (int) -1;
-        val = __Pyx_PyInt_As_int(tmp);
+        PEPScale val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (PEPScale) -1;
+        val = __Pyx_PyInt_As_PEPScale(tmp);
         Py_DECREF(tmp);
         return val;
     }
 raise_overflow:
     PyErr_SetString(PyExc_OverflowError,
-        "value too large to convert to int");
-    return (int) -1;
+        "value too large to convert to PEPScale");
+    return (PEPScale) -1;
 raise_neg_overflow:
     PyErr_SetString(PyExc_OverflowError,
-        "can't convert negative value to int");
-    return (int) -1;
+        "can't convert negative value to PEPScale");
+    return (PEPScale) -1;
 }
 
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
-    const long neg_one = (long) -1, const_zero = 0;
+/* CIntFromPy */
+          static CYTHON_INLINE PEPErrorType __Pyx_PyInt_As_PEPErrorType(PyObject *x) {
+    const PEPErrorType neg_one = (PEPErrorType) -1, const_zero = (PEPErrorType) 0;
     const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(long) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(long) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-        } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(PEPErrorType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(PEPErrorType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (PEPErrorType) val;
         }
-    } else {
-        if (sizeof(long) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PEPErrorType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(PEPErrorType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(PEPErrorType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPErrorType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPErrorType) >= 2 * PyLong_SHIFT) {
+                            return (PEPErrorType) (((((PEPErrorType)digits[1]) << PyLong_SHIFT) | (PEPErrorType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PEPErrorType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPErrorType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPErrorType) >= 3 * PyLong_SHIFT) {
+                            return (PEPErrorType) (((((((PEPErrorType)digits[2]) << PyLong_SHIFT) | (PEPErrorType)digits[1]) << PyLong_SHIFT) | (PEPErrorType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PEPErrorType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPErrorType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPErrorType) >= 4 * PyLong_SHIFT) {
+                            return (PEPErrorType) (((((((((PEPErrorType)digits[3]) << PyLong_SHIFT) | (PEPErrorType)digits[2]) << PyLong_SHIFT) | (PEPErrorType)digits[1]) << PyLong_SHIFT) | (PEPErrorType)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (PEPErrorType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(PEPErrorType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPErrorType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(PEPErrorType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPErrorType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PEPErrorType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(PEPErrorType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(PEPErrorType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(PEPErrorType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPErrorType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPErrorType) - 1 > 2 * PyLong_SHIFT) {
+                            return (PEPErrorType) (((PEPErrorType)-1)*(((((PEPErrorType)digits[1]) << PyLong_SHIFT) | (PEPErrorType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(PEPErrorType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPErrorType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPErrorType) - 1 > 2 * PyLong_SHIFT) {
+                            return (PEPErrorType) ((((((PEPErrorType)digits[1]) << PyLong_SHIFT) | (PEPErrorType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(PEPErrorType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPErrorType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPErrorType) - 1 > 3 * PyLong_SHIFT) {
+                            return (PEPErrorType) (((PEPErrorType)-1)*(((((((PEPErrorType)digits[2]) << PyLong_SHIFT) | (PEPErrorType)digits[1]) << PyLong_SHIFT) | (PEPErrorType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PEPErrorType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPErrorType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPErrorType) - 1 > 3 * PyLong_SHIFT) {
+                            return (PEPErrorType) ((((((((PEPErrorType)digits[2]) << PyLong_SHIFT) | (PEPErrorType)digits[1]) << PyLong_SHIFT) | (PEPErrorType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(PEPErrorType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPErrorType, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPErrorType) - 1 > 4 * PyLong_SHIFT) {
+                            return (PEPErrorType) (((PEPErrorType)-1)*(((((((((PEPErrorType)digits[3]) << PyLong_SHIFT) | (PEPErrorType)digits[2]) << PyLong_SHIFT) | (PEPErrorType)digits[1]) << PyLong_SHIFT) | (PEPErrorType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PEPErrorType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PEPErrorType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PEPErrorType) - 1 > 4 * PyLong_SHIFT) {
+                            return (PEPErrorType) ((((((((((PEPErrorType)digits[3]) << PyLong_SHIFT) | (PEPErrorType)digits[2]) << PyLong_SHIFT) | (PEPErrorType)digits[1]) << PyLong_SHIFT) | (PEPErrorType)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(PEPErrorType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPErrorType, long, PyLong_AsLong(x))
+            } else if (sizeof(PEPErrorType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PEPErrorType, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
         }
-    }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(long),
-                                     little, !is_unsigned);
-    }
-}
-
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscInt(PetscInt value) {
-    const PetscInt neg_one = (PetscInt) -1, const_zero = 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(PetscInt) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(PetscInt) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-        } else if (sizeof(PetscInt) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            PEPErrorType val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (PEPErrorType) -1;
         }
     } else {
-        if (sizeof(PetscInt) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(PetscInt) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
-        }
-    }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(PetscInt),
-                                     little, !is_unsigned);
+        PEPErrorType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (PEPErrorType) -1;
+        val = __Pyx_PyInt_As_PEPErrorType(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to PEPErrorType");
+    return (PEPErrorType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to PEPErrorType");
+    return (PEPErrorType) -1;
 }
 
-static CYTHON_INLINE PetscInt __Pyx_PyInt_As_PetscInt(PyObject *x) {
-    const PetscInt neg_one = (PetscInt) -1, const_zero = 0;
+/* CIntFromPy */
+          static CYTHON_INLINE NEPWhich __Pyx_PyInt_As_NEPWhich(PyObject *x) {
+    const NEPWhich neg_one = (NEPWhich) -1, const_zero = (NEPWhich) 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
-        if (sizeof(PetscInt) < sizeof(long)) {
-            __PYX_VERIFY_RETURN_INT(PetscInt, long, PyInt_AS_LONG(x))
+        if (sizeof(NEPWhich) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(NEPWhich, long, PyInt_AS_LONG(x))
         } else {
             long val = PyInt_AS_LONG(x);
             if (is_unsigned && unlikely(val < 0)) {
                 goto raise_neg_overflow;
             }
-            return (PetscInt) val;
+            return (NEPWhich) val;
         }
     } else
 #endif
     if (likely(PyLong_Check(x))) {
         if (is_unsigned) {
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
- #if CYTHON_USE_PYLONG_INTERNALS
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
             switch (Py_SIZE(x)) {
-                case  0: return 0;
-                case  1: __PYX_VERIFY_RETURN_INT(PetscInt, digit, ((PyLongObject*)x)->ob_digit[0]);
+                case  0: return (NEPWhich) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(NEPWhich, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(NEPWhich) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NEPWhich, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NEPWhich) >= 2 * PyLong_SHIFT) {
+                            return (NEPWhich) (((((NEPWhich)digits[1]) << PyLong_SHIFT) | (NEPWhich)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(NEPWhich) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NEPWhich, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NEPWhich) >= 3 * PyLong_SHIFT) {
+                            return (NEPWhich) (((((((NEPWhich)digits[2]) << PyLong_SHIFT) | (NEPWhich)digits[1]) << PyLong_SHIFT) | (NEPWhich)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(NEPWhich) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NEPWhich, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NEPWhich) >= 4 * PyLong_SHIFT) {
+                            return (NEPWhich) (((((((((NEPWhich)digits[3]) << PyLong_SHIFT) | (NEPWhich)digits[2]) << PyLong_SHIFT) | (NEPWhich)digits[1]) << PyLong_SHIFT) | (NEPWhich)digits[0]));
+                        }
+                    }
+                    break;
             }
- #endif
 #endif
 #if CYTHON_COMPILING_IN_CPYTHON
             if (unlikely(Py_SIZE(x) < 0)) {
@@ -57894,30 +69675,83 @@ static CYTHON_INLINE PetscInt __Pyx_PyInt_As_PetscInt(PyObject *x) {
             {
                 int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
                 if (unlikely(result < 0))
-                    return (PetscInt) -1;
+                    return (NEPWhich) -1;
                 if (unlikely(result == 1))
                     goto raise_neg_overflow;
             }
 #endif
-            if (sizeof(PetscInt) <= sizeof(unsigned long)) {
-                __PYX_VERIFY_RETURN_INT(PetscInt, unsigned long, PyLong_AsUnsignedLong(x))
-            } else if (sizeof(PetscInt) <= sizeof(unsigned PY_LONG_LONG)) {
-                __PYX_VERIFY_RETURN_INT(PetscInt, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            if (sizeof(NEPWhich) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(NEPWhich, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(NEPWhich) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(NEPWhich, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
             }
         } else {
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
- #if CYTHON_USE_PYLONG_INTERNALS
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
             switch (Py_SIZE(x)) {
-                case  0: return 0;
-                case  1: __PYX_VERIFY_RETURN_INT(PetscInt,  digit, +(((PyLongObject*)x)->ob_digit[0]));
-                case -1: __PYX_VERIFY_RETURN_INT(PetscInt, sdigit, -(sdigit) ((PyLongObject*)x)->ob_digit[0]);
+                case  0: return (NEPWhich) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(NEPWhich, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(NEPWhich,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(NEPWhich) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NEPWhich, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NEPWhich) - 1 > 2 * PyLong_SHIFT) {
+                            return (NEPWhich) (((NEPWhich)-1)*(((((NEPWhich)digits[1]) << PyLong_SHIFT) | (NEPWhich)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(NEPWhich) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NEPWhich, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NEPWhich) - 1 > 2 * PyLong_SHIFT) {
+                            return (NEPWhich) ((((((NEPWhich)digits[1]) << PyLong_SHIFT) | (NEPWhich)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(NEPWhich) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NEPWhich, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NEPWhich) - 1 > 3 * PyLong_SHIFT) {
+                            return (NEPWhich) (((NEPWhich)-1)*(((((((NEPWhich)digits[2]) << PyLong_SHIFT) | (NEPWhich)digits[1]) << PyLong_SHIFT) | (NEPWhich)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(NEPWhich) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NEPWhich, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NEPWhich) - 1 > 3 * PyLong_SHIFT) {
+                            return (NEPWhich) ((((((((NEPWhich)digits[2]) << PyLong_SHIFT) | (NEPWhich)digits[1]) << PyLong_SHIFT) | (NEPWhich)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(NEPWhich) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NEPWhich, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NEPWhich) - 1 > 4 * PyLong_SHIFT) {
+                            return (NEPWhich) (((NEPWhich)-1)*(((((((((NEPWhich)digits[3]) << PyLong_SHIFT) | (NEPWhich)digits[2]) << PyLong_SHIFT) | (NEPWhich)digits[1]) << PyLong_SHIFT) | (NEPWhich)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(NEPWhich) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NEPWhich, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NEPWhich) - 1 > 4 * PyLong_SHIFT) {
+                            return (NEPWhich) ((((((((((NEPWhich)digits[3]) << PyLong_SHIFT) | (NEPWhich)digits[2]) << PyLong_SHIFT) | (NEPWhich)digits[1]) << PyLong_SHIFT) | (NEPWhich)digits[0])));
+                        }
+                    }
+                    break;
             }
- #endif
 #endif
-            if (sizeof(PetscInt) <= sizeof(long)) {
-                __PYX_VERIFY_RETURN_INT(PetscInt, long, PyLong_AsLong(x))
-            } else if (sizeof(PetscInt) <= sizeof(PY_LONG_LONG)) {
-                __PYX_VERIFY_RETURN_INT(PetscInt, PY_LONG_LONG, PyLong_AsLongLong(x))
+            if (sizeof(NEPWhich) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(NEPWhich, long, PyLong_AsLong(x))
+            } else if (sizeof(NEPWhich) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(NEPWhich, PY_LONG_LONG, PyLong_AsLongLong(x))
             }
         }
         {
@@ -57925,8 +69759,8 @@ static CYTHON_INLINE PetscInt __Pyx_PyInt_As_PetscInt(PyObject *x) {
             PyErr_SetString(PyExc_RuntimeError,
                             "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
 #else
-            PetscInt val;
-            PyObject *v = __Pyx_PyNumber_Int(x);
+            NEPWhich val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
  #if PY_MAJOR_VERSION < 3
             if (likely(v) && !PyLong_Check(v)) {
                 PyObject *tmp = v;
@@ -57945,68 +69779,214 @@ static CYTHON_INLINE PetscInt __Pyx_PyInt_As_PetscInt(PyObject *x) {
                     return val;
             }
 #endif
-            return (PetscInt) -1;
+            return (NEPWhich) -1;
         }
     } else {
-        PetscInt val;
-        PyObject *tmp = __Pyx_PyNumber_Int(x);
-        if (!tmp) return (PetscInt) -1;
-        val = __Pyx_PyInt_As_PetscInt(tmp);
+        NEPWhich val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (NEPWhich) -1;
+        val = __Pyx_PyInt_As_NEPWhich(tmp);
         Py_DECREF(tmp);
         return val;
     }
 raise_overflow:
     PyErr_SetString(PyExc_OverflowError,
-        "value too large to convert to PetscInt");
-    return (PetscInt) -1;
+        "value too large to convert to NEPWhich");
+    return (NEPWhich) -1;
 raise_neg_overflow:
     PyErr_SetString(PyExc_OverflowError,
-        "can't convert negative value to PetscInt");
-    return (PetscInt) -1;
+        "can't convert negative value to NEPWhich");
+    return (NEPWhich) -1;
 }
 
-static PyObject* __Pyx_Method_ClassMethod(PyObject *method) {
-#if CYTHON_COMPILING_IN_PYPY
-    if (PyObject_TypeCheck(method, &PyWrapperDescr_Type)) {
-        return PyClassMethod_New(method);
-    }
+/* CIntFromPy */
+          static CYTHON_INLINE NEPErrorType __Pyx_PyInt_As_NEPErrorType(PyObject *x) {
+    const NEPErrorType neg_one = (NEPErrorType) -1, const_zero = (NEPErrorType) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(NEPErrorType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(NEPErrorType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (NEPErrorType) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (NEPErrorType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(NEPErrorType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(NEPErrorType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NEPErrorType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NEPErrorType) >= 2 * PyLong_SHIFT) {
+                            return (NEPErrorType) (((((NEPErrorType)digits[1]) << PyLong_SHIFT) | (NEPErrorType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(NEPErrorType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NEPErrorType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NEPErrorType) >= 3 * PyLong_SHIFT) {
+                            return (NEPErrorType) (((((((NEPErrorType)digits[2]) << PyLong_SHIFT) | (NEPErrorType)digits[1]) << PyLong_SHIFT) | (NEPErrorType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(NEPErrorType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NEPErrorType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NEPErrorType) >= 4 * PyLong_SHIFT) {
+                            return (NEPErrorType) (((((((((NEPErrorType)digits[3]) << PyLong_SHIFT) | (NEPErrorType)digits[2]) << PyLong_SHIFT) | (NEPErrorType)digits[1]) << PyLong_SHIFT) | (NEPErrorType)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
 #else
-    static PyTypeObject *methoddescr_type = NULL;
-    if (methoddescr_type == NULL) {
-       PyObject *meth = PyObject_GetAttrString((PyObject*)&PyList_Type, "append");
-       if (!meth) return NULL;
-       methoddescr_type = Py_TYPE(meth);
-       Py_DECREF(meth);
-    }
-    if (PyObject_TypeCheck(method, methoddescr_type)) {
-        PyMethodDescrObject *descr = (PyMethodDescrObject *)method;
-        #if PY_VERSION_HEX < 0x03020000
-        PyTypeObject *d_type = descr->d_type;
-        #else
-        PyTypeObject *d_type = descr->d_common.d_type;
-        #endif
-        return PyDescr_NewClassMethod(d_type, descr->d_method);
-    }
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (NEPErrorType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
 #endif
-    else if (PyMethod_Check(method)) {
-        return PyClassMethod_New(PyMethod_GET_FUNCTION(method));
-    }
-    else if (PyCFunction_Check(method)) {
-        return PyClassMethod_New(method);
-    }
-#ifdef __Pyx_CyFunction_USED
-    else if (PyObject_TypeCheck(method, __pyx_CyFunctionType)) {
-        return PyClassMethod_New(method);
-    }
+            if (sizeof(NEPErrorType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(NEPErrorType, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(NEPErrorType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(NEPErrorType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (NEPErrorType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(NEPErrorType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(NEPErrorType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(NEPErrorType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NEPErrorType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NEPErrorType) - 1 > 2 * PyLong_SHIFT) {
+                            return (NEPErrorType) (((NEPErrorType)-1)*(((((NEPErrorType)digits[1]) << PyLong_SHIFT) | (NEPErrorType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(NEPErrorType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NEPErrorType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NEPErrorType) - 1 > 2 * PyLong_SHIFT) {
+                            return (NEPErrorType) ((((((NEPErrorType)digits[1]) << PyLong_SHIFT) | (NEPErrorType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(NEPErrorType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NEPErrorType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NEPErrorType) - 1 > 3 * PyLong_SHIFT) {
+                            return (NEPErrorType) (((NEPErrorType)-1)*(((((((NEPErrorType)digits[2]) << PyLong_SHIFT) | (NEPErrorType)digits[1]) << PyLong_SHIFT) | (NEPErrorType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(NEPErrorType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NEPErrorType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NEPErrorType) - 1 > 3 * PyLong_SHIFT) {
+                            return (NEPErrorType) ((((((((NEPErrorType)digits[2]) << PyLong_SHIFT) | (NEPErrorType)digits[1]) << PyLong_SHIFT) | (NEPErrorType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(NEPErrorType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NEPErrorType, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NEPErrorType) - 1 > 4 * PyLong_SHIFT) {
+                            return (NEPErrorType) (((NEPErrorType)-1)*(((((((((NEPErrorType)digits[3]) << PyLong_SHIFT) | (NEPErrorType)digits[2]) << PyLong_SHIFT) | (NEPErrorType)digits[1]) << PyLong_SHIFT) | (NEPErrorType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(NEPErrorType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(NEPErrorType, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(NEPErrorType) - 1 > 4 * PyLong_SHIFT) {
+                            return (NEPErrorType) ((((((((((NEPErrorType)digits[3]) << PyLong_SHIFT) | (NEPErrorType)digits[2]) << PyLong_SHIFT) | (NEPErrorType)digits[1]) << PyLong_SHIFT) | (NEPErrorType)digits[0])));
+                        }
+                    }
+                    break;
+            }
 #endif
-    PyErr_SetString(PyExc_TypeError,
-                   "Class-level classmethod() can only be called on "
-                   "a method_descriptor or instance method.");
-    return NULL;
+            if (sizeof(NEPErrorType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(NEPErrorType, long, PyLong_AsLong(x))
+            } else if (sizeof(NEPErrorType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(NEPErrorType, PY_LONG_LONG, PyLong_AsLongLong(x))
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            NEPErrorType val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (NEPErrorType) -1;
+        }
+    } else {
+        NEPErrorType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (NEPErrorType) -1;
+        val = __Pyx_PyInt_As_NEPErrorType(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to NEPErrorType");
+    return (NEPErrorType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to NEPErrorType");
+    return (NEPErrorType) -1;
 }
 
-static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
-    const long neg_one = (long) -1, const_zero = 0;
+/* CIntFromPy */
+          static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
+    const long neg_one = (long) -1, const_zero = (long) 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
@@ -58023,13 +70003,39 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
 #endif
     if (likely(PyLong_Check(x))) {
         if (is_unsigned) {
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
- #if CYTHON_USE_PYLONG_INTERNALS
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
             switch (Py_SIZE(x)) {
-                case  0: return 0;
-                case  1: __PYX_VERIFY_RETURN_INT(long, digit, ((PyLongObject*)x)->ob_digit[0]);
+                case  0: return (long) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(long) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) {
+                            return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(long) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) {
+                            return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(long) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) {
+                            return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
+                        }
+                    }
+                    break;
             }
- #endif
 #endif
 #if CYTHON_COMPILING_IN_CPYTHON
             if (unlikely(Py_SIZE(x) < 0)) {
@@ -58045,24 +70051,77 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
             }
 #endif
             if (sizeof(long) <= sizeof(unsigned long)) {
-                __PYX_VERIFY_RETURN_INT(long, unsigned long, PyLong_AsUnsignedLong(x))
+                __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x))
             } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
-                __PYX_VERIFY_RETURN_INT(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+                __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
             }
         } else {
-#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
- #if CYTHON_USE_PYLONG_INTERNALS
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
             switch (Py_SIZE(x)) {
-                case  0: return 0;
-                case  1: __PYX_VERIFY_RETURN_INT(long,  digit, +(((PyLongObject*)x)->ob_digit[0]));
-                case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, -(sdigit) ((PyLongObject*)x)->ob_digit[0]);
+                case  0: return (long) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(long,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
+                            return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(long) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
+                            return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
+                            return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(long) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
+                            return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
+                            return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(long) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
+                            return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
+                        }
+                    }
+                    break;
             }
- #endif
 #endif
             if (sizeof(long) <= sizeof(long)) {
-                __PYX_VERIFY_RETURN_INT(long, long, PyLong_AsLong(x))
+                __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x))
             } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
-                __PYX_VERIFY_RETURN_INT(long, PY_LONG_LONG, PyLong_AsLongLong(x))
+                __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x))
             }
         }
         {
@@ -58071,7 +70130,7 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
                             "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
 #else
             long val;
-            PyObject *v = __Pyx_PyNumber_Int(x);
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
  #if PY_MAJOR_VERSION < 3
             if (likely(v) && !PyLong_Check(v)) {
                 PyObject *tmp = v;
@@ -58094,7 +70153,7 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
         }
     } else {
         long val;
-        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
         if (!tmp) return (long) -1;
         val = __Pyx_PyInt_As_long(tmp);
         Py_DECREF(tmp);
@@ -58110,7 +70169,8 @@ raise_neg_overflow:
     return (long) -1;
 }
 
-static int __Pyx_check_binary_version(void) {
+/* CheckBinaryVersion */
+          static int __Pyx_check_binary_version(void) {
     char ctversion[4], rtversion[4];
     PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
     PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
@@ -58125,7 +70185,8 @@ static int __Pyx_check_binary_version(void) {
     return 0;
 }
 
-static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig) {
+/* FunctionExport */
+          static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig) {
     PyObject *d = 0;
     PyObject *cobj = 0;
     union {
@@ -58161,7 +70222,8 @@ bad:
     return -1;
 }
 
-#ifndef __PYX_HAVE_RT_ImportType
+/* TypeImport */
+          #ifndef __PYX_HAVE_RT_ImportType
 #define __PYX_HAVE_RT_ImportType
 static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name,
     size_t size, int strict)
@@ -58207,14 +70269,14 @@ static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class
 #endif
     if (!strict && (size_t)basicsize > size) {
         PyOS_snprintf(warning, sizeof(warning),
-            "%s.%s size changed, may indicate binary incompatibility",
-            module_name, class_name);
+            "%s.%s size changed, may indicate binary incompatibility. Expected %zd, got %zd",
+            module_name, class_name, basicsize, size);
         if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad;
     }
     else if ((size_t)basicsize != size) {
         PyErr_Format(PyExc_ValueError,
-            "%.200s.%.200s has the wrong size, try recompiling",
-            module_name, class_name);
+            "%.200s.%.200s has the wrong size, try recompiling. Expected %zd, got %zd",
+            module_name, class_name, basicsize, size);
         goto bad;
     }
     return (PyTypeObject *)result;
@@ -58225,7 +70287,8 @@ bad:
 }
 #endif
 
-#ifndef __PYX_HAVE_RT_ImportFunction
+/* FunctionImport */
+          #ifndef __PYX_HAVE_RT_ImportFunction
 #define __PYX_HAVE_RT_ImportFunction
 static int __Pyx_ImportFunction(PyObject *module, const char *funcname, void (**f)(void), const char *sig) {
     PyObject *d = 0;
@@ -58278,7 +70341,8 @@ bad:
 }
 #endif
 
-static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
+/* InitStrings */
+          static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
     while (t->p) {
         #if PY_MAJOR_VERSION < 3
         if (t->is_unicode) {
@@ -58316,7 +70380,7 @@ static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) {
     return __Pyx_PyObject_AsStringAndSize(o, &ignore);
 }
 static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
-#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
+#if CYTHON_COMPILING_IN_CPYTHON && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
     if (
 #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
             __Pyx_sys_getdefaultencoding_not_ascii &&
@@ -58357,7 +70421,7 @@ static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_
 #endif
     } else
 #endif
-#if !CYTHON_COMPILING_IN_PYPY
+#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE))
     if (PyByteArray_Check(o)) {
         *length = PyByteArray_GET_SIZE(o);
         return PyByteArray_AS_STRING(o);
@@ -58378,7 +70442,7 @@ static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
    if (is_true | (x == Py_False) | (x == Py_None)) return is_true;
    else return PyObject_IsTrue(x);
 }
-static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) {
+static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) {
   PyNumberMethods *m;
   const char *name = NULL;
   PyObject *res = NULL;
@@ -58387,7 +70451,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) {
 #else
   if (PyLong_Check(x))
 #endif
-    return Py_INCREF(x), x;
+    return __Pyx_NewRef(x);
   m = Py_TYPE(x)->tp_as_number;
 #if PY_MAJOR_VERSION < 3
   if (m && m->nb_int) {
@@ -58427,18 +70491,55 @@ static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
   Py_ssize_t ival;
   PyObject *x;
 #if PY_MAJOR_VERSION < 3
-  if (likely(PyInt_CheckExact(b)))
-      return PyInt_AS_LONG(b);
+  if (likely(PyInt_CheckExact(b))) {
+    if (sizeof(Py_ssize_t) >= sizeof(long))
+        return PyInt_AS_LONG(b);
+    else
+        return PyInt_AsSsize_t(x);
+  }
 #endif
   if (likely(PyLong_CheckExact(b))) {
-    #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-     #if CYTHON_USE_PYLONG_INTERNALS
-       switch (Py_SIZE(b)) {
-       case -1: return -(sdigit)((PyLongObject*)b)->ob_digit[0];
-       case  0: return 0;
-       case  1: return ((PyLongObject*)b)->ob_digit[0];
-       }
-     #endif
+    #if CYTHON_USE_PYLONG_INTERNALS
+    const digit* digits = ((PyLongObject*)b)->ob_digit;
+    const Py_ssize_t size = Py_SIZE(b);
+    if (likely(__Pyx_sst_abs(size) <= 1)) {
+        ival = likely(size) ? digits[0] : 0;
+        if (size == -1) ival = -ival;
+        return ival;
+    } else {
+      switch (size) {
+         case 2:
+           if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {
+             return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+           }
+           break;
+         case -2:
+           if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {
+             return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+           }
+           break;
+         case 3:
+           if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {
+             return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+           }
+           break;
+         case -3:
+           if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {
+             return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+           }
+           break;
+         case 4:
+           if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {
+             return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+           }
+           break;
+         case -4:
+           if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {
+             return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+           }
+           break;
+      }
+    }
     #endif
     return PyLong_AsSsize_t(b);
   }
diff --git a/test/test_object.py b/test/test_object.py
index 49c9f74..71637e2 100644
--- a/test/test_object.py
+++ b/test/test_object.py
@@ -127,6 +127,7 @@ class BaseTestObject(object):
         self.assertEqual(self.obj.getRefCount(), rc)
 
     def testDeepCopy(self):
+        self.obj.setFromOptions()
         import copy
         rc = self.obj.getRefCount()
         try:
@@ -147,6 +148,7 @@ class TestObjectST(BaseTestObject, unittest.TestCase):
 
 class TestObjectBV(BaseTestObject, unittest.TestCase):
     CLASS = SLEPc.BV
+    def testDeepCopy(self): pass
 
 class TestObjectEPS(BaseTestObject, unittest.TestCase):
     CLASS = SLEPc.EPS

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/slepc4py.git



More information about the debian-science-commits mailing list